most notably unbreaks floppy driver.
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;
}
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);
#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"
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;
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) */;
} else if (dep->de_mode == DEM_SINK)
dep->de_flags |= DEF_ACK_SEND;
- reply(dep, OK);
+ reply(dep, OK, DL_TASK_REPLY);
return;
}
dep->de_flags &= NOT(DEF_STOPPED);
#endif
}
- reply(dep, OK);
+ reply(dep, OK, DL_TASK_REPLY);
return;
}
(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;
}
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);
}
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);
all build: $(DRIVER)
$(DRIVER): $(OBJ)
$(CC) -o $@ $(LDFLAGS) $(OBJ) $(LIBS)
- install -S 8k $(DRIVER)
+ install $(DRIVER)
# install with other drivers
install: /usr/sbin/$(DRIVER)
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 */
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;
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);
+ }
}
/*==========================================================================*
* 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;
}
/* 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
* 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--;
/* 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;
}
}
/* 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);
+ }
}
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;
+};
+
+
#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
/* 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
}
continue;
case PROC_EVENT:
- sig_handler();
- continue;
+ result = EDONTREPLY;
+ break;
case FKEY_PRESSED:
result = do_fkey_pressed(&m_in);
break;
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);
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
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
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
esac
done
-USRMB=400
+USRMB=500
USRBLOCKS="`expr $USRMB \* 1024 \* 1024 / $BS`"
USRSECTS="`expr $USRMB \* 1024 \* 2`"
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
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 )
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
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