]> Zhao Yanbai Git Server - minix.git/commitdiff
backport some fixes from the trunk to the 3.1.3 branch, to be 3.1.3b.
authorBen Gras <ben@minix3.org>
Tue, 6 Nov 2007 14:06:10 +0000 (14:06 +0000)
committerBen Gras <ben@minix3.org>
Tue, 6 Nov 2007 14:06:10 +0000 (14:06 +0000)
most notably unbreaks floppy driver.

14 files changed:
commands/reboot/halt.c
drivers/dpeth/3c509.c
drivers/dpeth/dp.c
drivers/pci/main.c
drivers/printer/Makefile
drivers/printer/printer.c
etc/drivers.conf
include/minix/com.h
include/minix/config.h
servers/is/main.c
test/test17.c
tools/chrootmake.sh
tools/mkboot
tools/release.sh

index 962e83b6610b1d7dc419f3166a18c5d4a3e396a9..8cc385d81008b95156695d9a1bdb1a779678f186 100755 (executable)
@@ -128,6 +128,6 @@ char **argv;
   sync();
 
   reboot(flag, monitor_code, strlen(monitor_code));
-  fprintf(stderr, "%s: reboot(): %s\n", strerror(errno));
+  fprintf(stderr, "%s: reboot(): %s\n", prog, strerror(errno));
   return 1;
 }
index 14c89a526f17ef074e57ccf9e6b3ee7c579e4aa1..ffa89ff081260c663b586beb50ccce00fdbd9de9 100644 (file)
@@ -130,10 +130,10 @@ static void el3_write_fifo(dpeth_t * dep, int pktsize)
        bytes = iovp->iod_iovec[ix].iov_size;   /* Size of buffer */
        if (bytes > pktsize) bytes = pktsize;
        /* Writes from user buffer to Tx FIFO */
-       r= sys_safe_insb(dep->de_data_port, iovp->iod_proc_nr,
+       r= sys_safe_outsb(dep->de_data_port, iovp->iod_proc_nr,
                iovp->iod_iovec[ix].iov_grant, 0, bytes);
        if (r != OK)
-               panic(__FILE__, "el3_write_fifo: sys_safe_insb failed", r);
+               panic(__FILE__, "el3_write_fifo: sys_safe_outsb failed", r);
                
        if (++ix >= IOVEC_NR) { /* Next buffer of IO vector */
                dp_next_iovec(iovp);
index 73f6fa9a667d31701f24069e9320f532a6acb201..e569fd17a6e21ea22c09401046ad15c14bc9801b 100644 (file)
@@ -1,6 +1,7 @@
 #include <assert.h>
 /*
-**  File:      eth.c   Version 1.00,   Jan. 14, 1997
+**  File:      dp.c    Version 1.01,   Oct. 17, 2007
+**  Original:  eth.c   Version 1.00,   Jan. 14, 1997
 **
 **  Author:    Giovanni Falzoni <gfalzoni@inwind.it>
 **
 **  +------------+---------+---------+---------------+
 **
 **  $Id$
+**
+**  2007-10-17: modified by jfdsmit@gmail.com
+**   added a third argument to the reply() function because not
+**   every reply should be of DL_TASK_REPLY (one should be
+**   DL_STAT_REPLY)
 */
 
 #include "drivers.h"
@@ -92,10 +98,10 @@ static char DevName[] = "eth#?";
 static void do_getname(message *mp);
 
 /*
-**  Name:      void reply(dpeth_t *dep, int err)
-**  Function:  Fills a DL_TASK_REPLY reply message and sends it.
+**  Name:      void reply(dpeth_t *dep, int err, int m_type)
+**  Function:  Fills a reply message and sends it.
 */
-static void reply(dpeth_t * dep, int err)
+static void reply(dpeth_t * dep, int err, int m_type)
 {
   message reply;
   int status = FALSE;
@@ -103,7 +109,7 @@ static void reply(dpeth_t * dep, int err)
   if (dep->de_flags & DEF_ACK_SEND) status |= DL_PACK_SEND;
   if (dep->de_flags & DEF_ACK_RECV) status |= DL_PACK_RECV;
 
-  reply.m_type = DL_TASK_REPLY;
+  reply.m_type = m_type;
   reply.DL_PORT = dep - de_table;
   reply.DL_PROC = dep->de_client;
   reply.DL_STAT = status /* | ((u32_t) err << 16) */;
@@ -423,7 +429,7 @@ static void do_vwrite_s(message * mp)
   } else if (dep->de_mode == DEM_SINK)
        dep->de_flags |= DEF_ACK_SEND;
 
-  reply(dep, OK);
+  reply(dep, OK, DL_TASK_REPLY);
   return;
 }
 
@@ -466,7 +472,7 @@ static void do_vread_s(message * mp)
        dep->de_flags &= NOT(DEF_STOPPED);
 #endif
   }
-  reply(dep, OK);
+  reply(dep, OK, DL_TASK_REPLY);
   return;
 }
 
@@ -491,7 +497,7 @@ static void do_getstat_s(message * mp)
                        (vir_bytes)&dep->de_stat,
                        (vir_bytes) sizeof(dep->de_stat), 0)) != OK)
         panic(DevName, CopyErrMsg, rc);
-  reply(dep, OK);
+  reply(dep, OK, DL_STAT_REPLY);
   return;
 }
 
@@ -623,7 +629,7 @@ PUBLIC int main(int argc, char **argv)
                                dep->de_int_pending = TRUE;
                                (*dep->de_interruptf) (dep);
                                if (dep->de_flags & (DEF_ACK_SEND | DEF_ACK_RECV))
-                                       reply(dep, !OK);
+                                       reply(dep, !OK, DL_TASK_REPLY);
                                dep->de_int_pending = FALSE;
                                sys_irqenable(&dep->de_hook);
                        }
index 6fa300d562f82efb491a06c209d61a60c5990487..0e00a70ee194ef818b1f4294c525cd7025897ad6 100644 (file)
@@ -85,7 +85,7 @@ int main(void)
                case BUSC_PCI_DEV_NAME_S: do_dev_name_s(&m); break;
                case BUSC_PCI_SLOT_NAME_S: do_slot_name_s(&m); break;
                case BUSC_PCI_ACL: do_acl(&m); break;
-               case PROC_EVENT: do_sig_handler(); break;
+               case PROC_EVENT: break;
                default:
                        printf("PCI: got message from %d, type %d\n",
                                m.m_source, m.m_type);
index e216724ec6ab2ea01d30a585180b4a92cd879fd2..243bd0dec95d023c1884318ab7033ee5ad35cf66 100644 (file)
@@ -21,7 +21,7 @@ OBJ = printer.o
 all build:     $(DRIVER)
 $(DRIVER):     $(OBJ)
        $(CC) -o $@ $(LDFLAGS) $(OBJ) $(LIBS)
-       install -S 8k $(DRIVER)
+       install $(DRIVER)
 
 # install with other drivers
 install:       /usr/sbin/$(DRIVER)
index 61ab831fb1f9d36eb859181aacddc02ca9286044..037268b41c5dd040acea526a7ba17c8f651a9037 100644 (file)
@@ -90,7 +90,7 @@ PRIVATE int revive_status;    /* revive status */
 PRIVATE int done_status;       /* status of last output completion */
 PRIVATE int oleft;             /* bytes of output left in obuf */
 PRIVATE char obuf[128];                /* output buffer */
-PRIVATE char *optr;            /* ptr to next char in obuf to print */
+PRIVATE unsigned char *optr;           /* ptr to next char in obuf to print */
 PRIVATE int orig_count;                /* original byte count */
 PRIVATE int port_base;         /* I/O port for printer */
 PRIVATE int proc_nr;           /* user requesting the printing */
@@ -208,13 +208,16 @@ int safe;                 /* use virtual addresses or grant id's? */
 
         retries = MAX_ONLINE_RETRIES + 1;  
         while (--retries > 0) {
-            sys_inb(port_base + 1, &status);
+            if(sys_inb(port_base + 1, &status) != OK) {
+               printf("printer: sys_inb of %x failed\n", port_base+1);
+               panic(__FILE__,"sys_inb failed", NO_NUM);
+           }
             if ((status & ON_LINE)) {          /* printer online! */
                prepare_output();
                do_printer_output();
                return;
             }
-            tickdelay(30);             /* wait before retry */
+            tickdelay(HZ/2);           /* wait before retry */
         }
         /* If we reach this point, the printer was not online in time. */
         done_status = status;
@@ -331,16 +334,24 @@ PRIVATE void do_initialize()
   initialized = TRUE;
   
   /* Get the base port for first printer.  */
-  sys_vircopy(SELF, BIOS_SEG, LPT1_IO_PORT_ADDR, 
-       SELF, D, (vir_bytes) &port_base, LPT1_IO_PORT_SIZE);
-  sys_outb(port_base + 2, INIT_PRINTER);
-  tickdelay(1);                        /* easily satisfies Centronics minimum */
-                               /* was 2 millisecs; now is ~17 millisecs */
-  sys_outb(port_base + 2, PR_SELECT);
+  if(sys_vircopy(SELF, BIOS_SEG, LPT1_IO_PORT_ADDR, 
+       SELF, D, (vir_bytes) &port_base, LPT1_IO_PORT_SIZE) != OK) {
+       panic(__FILE__, "do_initialize: sys_vircopy failed", NO_NUM);
+  }
+  if(sys_outb(port_base + 2, INIT_PRINTER) != OK) {
+       printf("printer: sys_outb of %x failed\n", port_base+2);
+       panic(__FILE__, "do_initialize: sys_outb init failed", NO_NUM);
+  }
+  tickdelay(HZ/20);            /* easily satisfies Centronics minimum */
+  if(sys_outb(port_base + 2, PR_SELECT) != OK) {
+       printf("printer: sys_outb of %x failed\n", port_base+2);
+       panic(__FILE__, "do_initialize: sys_outb select failed", NO_NUM);
+  }
   irq_hook_id = 0;
-  sys_irqsetpolicy(PRINTER_IRQ, 0, &irq_hook_id);
-  sys_irqenable(&irq_hook_id);
-
+  if(sys_irqsetpolicy(PRINTER_IRQ, 0, &irq_hook_id) != OK ||
+     sys_irqenable(&irq_hook_id) != OK) {
+       panic(__FILE__, "do_initialize: irq enabling failed", NO_NUM);
+  }
 }
 
 /*==========================================================================*
@@ -389,8 +400,13 @@ PRIVATE void do_printer_output()
         * when the printer is busy with a previous character, because the
         * interrupt status does not affect the printer.
         */
-       sys_outb(port_base + 2, PR_SELECT);
-       sys_irqenable(&irq_hook_id);
+       if(sys_outb(port_base + 2, PR_SELECT) != OK) {
+               printf("printer: sys_outb of %x failed\n", port_base+2);
+               panic(__FILE__,"sys_outb failed", NO_NUM);
+       }
+       if(sys_irqenable(&irq_hook_id) != OK) {
+               panic(__FILE__,"sys_irqenable failed", NO_NUM);
+       }
        return;
   }
 
@@ -398,7 +414,10 @@ PRIVATE void do_printer_output()
        /* Loop to handle fast (buffered) printers.  It is important that
         * processor interrupts are not disabled here, just printer interrupts.
         */
-       (void) sys_inb(port_base + 1, &status);
+       if(sys_inb(port_base + 1, &status) != OK) {
+               printf("printer: sys_inb of %x failed\n", port_base+1);
+               panic(__FILE__,"sys_inb failed", NO_NUM);
+       }
        if ((status & STATUS_MASK) == BUSY_STATUS) {
                /* Still busy with last output.  This normally happens
                 * immediately after doing output to an unbuffered or slow
@@ -406,15 +425,21 @@ PRIVATE void do_printer_output()
                 * pr_restart, since they are not synchronized with printer
                 * interrupts.  It may happen after a spurious interrupt.
                 */
-               sys_irqenable(&irq_hook_id);
+               if(sys_irqenable(&irq_hook_id) != OK) {
+                       panic(__FILE__, "sys_irqenable failed\n", NO_NUM);
+               }
                return;
        }
        if ((status & STATUS_MASK) == NORMAL_STATUS) {
                /* Everything is all right.  Output another character. */
-               pv_set(char_out[0], port_base, *optr++);        
+               pv_set(char_out[0], port_base, *optr);  
+               optr++;
                pv_set(char_out[1], port_base+2, ASSERT_STROBE);
                pv_set(char_out[2], port_base+2, NEGATE_STROBE);
-               sys_voutb(char_out, 3); /* request series of port outb */
+               if(sys_voutb(char_out, 3) != OK) {
+                       /* request series of port outb */
+                       panic(__FILE__, "sys_voutb failed\n", NO_NUM);
+               }
 
                user_vir_d++;
                user_left--;
@@ -422,7 +447,9 @@ PRIVATE void do_printer_output()
                /* Error.  This would be better ignored (treat as busy). */
                done_status = status;
                output_done();
-               sys_irqenable(&irq_hook_id);
+               if(sys_irqenable(&irq_hook_id) != OK) {
+                       panic(__FILE__, "sys_irqenable failed\n", NO_NUM);
+               }
                return;
        }
   }
@@ -431,6 +458,8 @@ PRIVATE void do_printer_output()
   /* Finished printing chunk OK. */
   done_status = OK;
   output_done();
-  sys_irqenable(&irq_hook_id);
+  if(sys_irqenable(&irq_hook_id) != OK) {
+       panic(__FILE__, "sys_irqenable failed\n", NO_NUM);
+  }
 }
 
index 2d3e01de0e544bd3647ecf2573acc92230b0470a..33b1a7f17c835c7767da773e374fdba66166bf3c 100644 (file)
@@ -159,24 +159,38 @@ driver mfs
 
 driver printer
 {
-       io      408:2           # LPT1
-               40a:2           # LPT2
-               40c:2           # LPT3
-               40e:2           # LPT4
+       io      378:4           # LPT1
+               278:4           # LPT2
        ;
        irq
-               7               # PRINTER_IRQ
+               7               # PRINTER_IRQ
        ;
        system
-               KILL            #  6
-               SETGRANT        # 34
-               UMAP            # 14
-               VIRCOPY         # 15
-               IRQCTL          # 19
-               DEVIO           # 21
-               VDEVIO          # 23
-               SAFECOPYFROM    # 31
-               SAFECOPYTO      # 32
+               KILL            #  6
+               SETGRANT        # 34
+               UMAP            # 14
+               VIRCOPY         # 15
+                       IRQCTL          # 19
+               DEVIO           # 21
+               VDEVIO          # 23
+               SAFECOPYFROM    # 31
+               SAFECOPYTO      # 32
        ;
 };
 
+driver dpeth
+{
+       system
+               IRQCTL          # 19
+               DEVIO           # 21
+               SDEVIO          # 22
+               SETALARM        # 24
+               GETINFO         # 26
+               SAFECOPYFROM    # 31
+               SAFECOPYTO      # 32
+               SETGRANT        # 34
+       ;
+       uid     0;
+};
+
+
index dd34f353494551c6e1984c0b9c28e9f99e9d9130..0ca2695ad6cf2428db52ae7065bcae948e4bda21 100755 (executable)
 #define DL_CONF_REPLY  (DL_RS_BASE + 20)
 #define DL_TASK_REPLY  (DL_RS_BASE + 21)
 #define DL_NAME_REPLY  (DL_RS_BASE + 22)
+#define DL_STAT_REPLY  (DL_RS_BASE + 23)
 
 /* Field names for data link layer messages. */
 #define DL_PORT                m2_i1
index 5ec003c9ba723cf3f238127299df0f979ac3d5a1..fa9939eba25d2f39ad16092a1ef4fbe65419b840 100755 (executable)
@@ -3,7 +3,7 @@
 
 /* Minix release and version numbers. */
 #define OS_RELEASE "3"
-#define OS_VERSION "1.3a"
+#define OS_VERSION "1.3b"
 
 /* This file sets configuration parameters for the MINIX kernel, FS, and PM.
  * It is divided up into two main sections.  The first section contains
index 37c08a64c1a5ae2ee62fcdce1367fd991ce14752..01c00cacf4c6e67e3e0e9136bbb3dc20249df013 100644 (file)
@@ -59,8 +59,8 @@ PUBLIC int main(int argc, char **argv)
          }
          continue;
       case PROC_EVENT:
-          sig_handler();
-          continue;
+         result = EDONTREPLY;
+          break;
       case FKEY_PRESSED:
           result = do_fkey_pressed(&m_in);
           break;
index bf0310aee74874fc9a2daf58abc62cc54d0cc845..92d5263dd9c4535af4a9281c21ce2e5771f829ab 100644 (file)
@@ -127,8 +127,8 @@ char *argv[];
        exit(1);
   }
 
-  system("rm -rf DIR_18; mkdir DIR_18");
-  chdir("DIR_18");
+  system("rm -rf DIR_17; mkdir DIR_17");
+  chdir("DIR_17");
 
   mask = (argc == 2 ? atoi(argv[1]) : 0xFFFF);
 
index 5243814e6ebb8910dd74ee5d9db0bc2efc25e572..40d4b650e3a4d1dddd97c0c961ffe90b173f54b3 100755 (executable)
@@ -10,9 +10,6 @@ rm /boot/image/*
 make install 
 cp /boot/image/* /boot/image_big  # Make big image accessible by this name
 cp ../boot/boot /boot/boot 
-make clean
-make image_small 
-cp image_small /boot 
 cd /usr/src 
 make clean
 # Let man find the manpages
index 1ad295e122ed6f452aa81c0c03022c84726d64e7..7c6344ea4b9994c86001850ab68805b9f7b0bb3a 100755 (executable)
@@ -183,12 +183,24 @@ cdfdboot)
        mkdir /mnt/boot
        mkdir /mnt/boot/image
        ( cd /mnt/dev && sh /usr/src/commands/scripts/MAKEDEV.sh std )
-       #cp -p image image_* /mnt/boot/image || exit 1
        cp -p image /mnt/boot/image || exit 1
        cp -p ../boot/boot /mnt/boot/boot || exit 1
        umount $dev || exit 1
        installboot -d $dev ../boot/bootblock boot/boot || exit 1
-       edparams $dev 'unset bootopts; unset servers; disable=inet; image=/boot/image/image; bootbig(1, Regular MINIX 3) { image=/boot/image/image ; boot } bootsmall(2, Small MINIX 3 (uses less memory)) { image=/boot/image/image_small ; boot } cdproberoot=1; ata_id_timeout=2; unset rootdev; unset leader; leader() { echo \n--- Welcome to MINIX 3. This is the boot monitor. ---\n\nChoose an option from the menu or press ESC if you need to do anything special.\nOtherwise I will boot with my defaults in 10 seconds.\n\n }; bootcd=1; main(){trap 10000 boot; menu; }; save' || exit
+       edparams $dev '
+unset bootopts;
+unset servers;
+unset rootdev;
+unset leader;
+unset image;
+disable=inet;
+bootcd=1;
+cdproberoot=1;
+ata_id_timeout=2;
+bootbig(1, Regular MINIX 3) { unset image; boot }
+leader() { echo \n--- Welcome to MINIX 3. This is the boot monitor. ---\n\nChoose an option from the menu or press ESC if you need to do anything special.\nOtherwise I will boot with my defaults in 10 seconds.\n\n };
+main(){trap 10000 boot; menu; };
+save' || exit
 
        # copy image
        dd if=$dev of=cdfdimage bs=8192 count=180
index ee6822534c640d982ed189956940aacb947bdfde..2164634401a339cf79dbf9c13e7ad150fe0eb0ba 100755 (executable)
@@ -51,7 +51,6 @@ bios_wini=yes
 bios_remap_first=1
 ramimagedev=c0d7p0s0
 bootbig(1, Regular MINIX 3) { image=/boot/image_big; boot }
-bootsmall(2, Small MINIX 3 (<16MB)) {image=/boot/image_small; boot }
 main() { trap 10000 boot ; menu; }
 save'  | $RELEASEDIR/usr/bin/edparams $TMPDISK3
 
@@ -133,7 +132,7 @@ do
        esac
 done
 
-USRMB=400
+USRMB=500
 
 USRBLOCKS="`expr $USRMB \* 1024 \* 1024 / $BS`"
 USRSECTS="`expr $USRMB \* 1024 \* 2`"
@@ -232,6 +231,7 @@ mkdir -m 755 $RELEASEDIR/usr
 mkdir -m 1777 $RELEASEDIR/tmp
 mount $TMPDISK2 $RELEASEDIR/tmp
 
+echo making /usr
 mkfs -B $BS -b $USRBLOCKS $TMPDISK || exit
 echo " * Mounting $TMPDISK as $RELEASEDIR/usr"
 mount $TMPDISK $RELEASEDIR/usr || exit
@@ -286,7 +286,7 @@ chmod -R u+w $RELEASEDIR/usr/lib
 if [ "$COPY" -ne 1 ]
 then
        echo " * Doing new svn export"
-       REPO=https://gforge.cs.vu.nl/svn/minix/trunk/$SRC
+       REPO=https://gforge.cs.vu.nl/svn/minix/branches/r3.1.3
        REVISION="`svn info $USERNAME $SVNREV $REPO | grep '^Revision: ' | awk '{ print $2 }'`"
        echo "Doing export of revision $REVISION from $REPO."
        ( cd $RELEASEDIR/usr && svn $USERNAME export -r$REVISION $REPO )
@@ -326,7 +326,10 @@ if [ "$USB" -eq 0 ]
 then   date >$RELEASEDIR/CD
 fi
 echo " * Chroot build"
+cp chrootmake.sh $RELEASEDIR/usr/$SRC/tools/chrootmake.sh
 chroot $RELEASEDIR "PATH=/$XBIN sh -x /usr/$SRC/tools/chrootmake.sh" || exit 1
+# Copy built images for cd booting
+cp $RELEASEDIR/boot/image_big image
 echo " * Chroot build done"
 echo " * Removing bootstrap files"
 rm -rf $RELEASEDIR/$XBIN
@@ -359,17 +362,9 @@ rm $RELEASEDIR/.x
 umount $TMPDISK || exit
 umount $TMPDISK2 || exit
 umount $TMPDISK3 || exit
+
 (cd ../boot && make)
-(cd .. && make depend)
-make clean
-SVNVAR=EXTRA_OPTS=-D_SVN_REVISION='\\\"'$REVISION'\\\"'
-make "$SVNVAR" image || exit 1
-mv image image_big
-make clean
-make "$SVNVAR" image_small || exit 1
 dd if=$TMPDISK3 of=$ROOTIMAGE bs=$BS count=$ROOTBLOCKS
-# Prepare image and image_small for cdfdboot
-mv image_big image
 sh mkboot cdfdboot $TMPDISK3
 cp $IMAGE $CDFILES/bootflop.img
 cp release/cd/* $CDFILES || true