From: Jorrit Herder Date: Tue, 26 Jul 2005 12:50:25 +0000 (+0000) Subject: Small update to shared driver code: SYS_EVENT (signal) is now known. X-Git-Tag: v3.1.0~543 X-Git-Url: http://zhaoyanbai.com/repos/Bv9ARM.ch02.html?a=commitdiff_plain;h=a63d324caa97ee8ccf411b10d71d272a1de20f40;p=minix.git Small update to shared driver code: SYS_EVENT (signal) is now known. Fixed drivers. HARD_STOP message no longer exists. --- diff --git a/drivers/at_wini/at_wini.c b/drivers/at_wini/at_wini.c index 0af648bad..bcce7aa44 100644 --- a/drivers/at_wini/at_wini.c +++ b/drivers/at_wini/at_wini.c @@ -236,11 +236,10 @@ PRIVATE struct driver w_dtab = { w_transfer, /* do the I/O */ nop_cleanup, /* nothing to clean up */ w_geometry, /* tell the geometry of the disk */ - nop_stop, /* no cleanup needed on shutdown */ - nop_alarm, /* ignore leftover alarms, function key presses, CANCELs, SELECTs */ - nop_fkey, - nop_cancel, - nop_select, + nop_signal, /* no cleanup needed on shutdown */ + nop_alarm, /* ignore leftover alarms */ + nop_cancel, /* ignore CANCELs */ + nop_select, /* ignore selects */ w_other /* catch-all for unrecognized commands and ioctls */ }; diff --git a/drivers/floppy/floppy.c b/drivers/floppy/floppy.c index 8bf01098c..cf101807c 100644 --- a/drivers/floppy/floppy.c +++ b/drivers/floppy/floppy.c @@ -234,7 +234,7 @@ PRIVATE u8_t f_results[MAX_RESULTS];/* the controller can give lots of output */ PRIVATE timer_t f_tmr_timeout; /* timer for various timeouts */ PRIVATE timer_t *f_timers; /* queue of floppy timers */ PRIVATE clock_t f_next_timeout; /* the next timeout time */ -FORWARD _PROTOTYPE( void f_expire_tmrs, (struct driver *dp) ); +FORWARD _PROTOTYPE( void f_expire_tmrs, (struct driver *dp, message *m_ptr) ); FORWARD _PROTOTYPE( void f_set_timer, (timer_t *tp, clock_t delta, tmr_func_t watchdog) ); FORWARD _PROTOTYPE( void stop_motor, (timer_t *tp) ); @@ -257,7 +257,7 @@ FORWARD _PROTOTYPE( void f_reset, (void) ); FORWARD _PROTOTYPE( int f_intr_wait, (void) ); FORWARD _PROTOTYPE( int read_id, (void) ); FORWARD _PROTOTYPE( int f_do_open, (struct driver *dp, message *m_ptr) ); -FORWARD _PROTOTYPE( void floppy_stop, (struct driver *dp) ); +FORWARD _PROTOTYPE( void floppy_stop, (struct driver *dp, message *m_ptr) ); FORWARD _PROTOTYPE( int test_read, (int density) ); FORWARD _PROTOTYPE( void f_geometry, (struct partition *entry)); @@ -274,7 +274,6 @@ PRIVATE struct driver f_dtab = { f_geometry, /* tell the geometry of the diskette */ floppy_stop, /* floppy cleanup on shutdown */ f_expire_tmrs,/* expire all alarm timers */ - nop_fkey, /* ignore function keys and CANCELs */ nop_cancel, nop_select, NULL @@ -315,7 +314,7 @@ PUBLIC void main() /*===========================================================================* * f_expire_tmrs * *===========================================================================*/ -PRIVATE void f_expire_tmrs(struct driver *dp) +PRIVATE void f_expire_tmrs(struct driver *dp, message *m_ptr) { /* A synchronous alarm message was received. Check if there are any expired * timers. Possibly reschedule the next alarm. @@ -694,7 +693,7 @@ PRIVATE void start_motor() do { receive(ANY, &mess); if (mess.m_type == SYN_ALARM) { - f_expire_tmrs(NULL); + f_expire_tmrs(NULL, NULL); } else { f_busy = BSY_IDLE; } @@ -722,13 +721,16 @@ timer_t *tp; /*===========================================================================* * floppy_stop * *===========================================================================*/ -PRIVATE void floppy_stop(struct driver *dp) +PRIVATE void floppy_stop(struct driver *dp, message *m_ptr) { /* Stop all activity and cleanly exit with the system. */ int s; - if ((s=sys_outb(DOR, ENABLE_INT)) != OK) - panic("FLOPPY","Sys_outb in floppy_stop() failed", s); - sys_exit(0); + sigset_t sigset = m_ptr->NOTIFY_ARG; + if (sigismember(&sigset, SIGTERM) || sigismember(&sigset, SIGKSTOP)) { + if ((s=sys_outb(DOR, ENABLE_INT)) != OK) + panic("FLOPPY","Sys_outb in floppy_stop() failed", s); + exit(0); + } } @@ -776,7 +778,7 @@ PRIVATE int seek() do { receive(ANY, &mess); if (mess.m_type == SYN_ALARM) { - f_expire_tmrs(NULL); + f_expire_tmrs(NULL, NULL); } else { f_busy = BSY_IDLE; } @@ -1051,7 +1053,7 @@ PRIVATE void f_reset() do { receive(ANY, &mess); if (mess.m_type == SYN_ALARM) { - f_expire_tmrs(NULL); + f_expire_tmrs(NULL, NULL); } else { /* expect HARD_INT */ f_busy = BSY_IDLE; } @@ -1097,7 +1099,7 @@ PRIVATE int f_intr_wait() do { receive(ANY, &mess); if (mess.m_type == SYN_ALARM) { - f_expire_tmrs(NULL); + f_expire_tmrs(NULL, NULL); } else { f_busy = BSY_IDLE; } diff --git a/drivers/libdriver/driver.c b/drivers/libdriver/driver.c index 78c4ebbaa..e61cbf949 100644 --- a/drivers/libdriver/driver.c +++ b/drivers/libdriver/driver.c @@ -1,9 +1,10 @@ /* This file contains device independent device driver interface. - * Author: Kees J. Bot. + * * Changes: + * Jul 25, 2005 added SYS_EVENT type for signals (Jorrit N. Herder) * Sep 15, 2004 added SYN_ALARM type for timeouts (Jorrit N. Herder) - * Aug 18, 2004 added HARD_STOP type for shutdown (Jorrit N. Herder) * Jul 23, 2004 removed kernel dependencies (Jorrit N. Herder) + * Apr 02, 1992 constructed from AT wini and floppy driver (Kees J. Bot) * * * The drivers support the following operations (using message format m2): @@ -32,9 +33,6 @@ * The file contains one entry point: * * driver_task: called by the device dependent task entry - * - * - * Constructed 92/04/02 by Kees J. Bot from the old AT wini and floppy driver. */ #include "../drivers.h" @@ -110,11 +108,9 @@ struct driver *dp; /* Device dependent entry points. */ case HARD_INT: /* leftover interrupt or expired timer. */ continue; - case HARD_STOP: (*dp->dr_stop)(dp); - continue; /* don't reply */ - case SYN_ALARM: (*dp->dr_alarm)(dp); + case SYS_EVENT: (*dp->dr_signal)(dp, &mess); continue; /* don't reply */ - case FKEY_PRESSED: (*dp->dr_fkey)(dp, &mess); + case SYN_ALARM: (*dp->dr_alarm)(dp, &mess); continue; /* don't reply */ default: if(dp->dr_other) @@ -282,20 +278,21 @@ message *mp; } /*============================================================================* - * nop_stop * + * nop_signal * *============================================================================*/ -PUBLIC void nop_stop(dp) +PUBLIC void nop_signal(dp, mp) struct driver *dp; +message *mp; { -/* No cleanup needed on shutdown. */ - sys_exit(0); +/* Default action for signal is to ignore. */ } /*============================================================================* * nop_alarm * *============================================================================*/ -PUBLIC void nop_alarm(dp) +PUBLIC void nop_alarm(dp, mp) struct driver *dp; +message *mp; { /* Ignore the leftover alarm. */ } @@ -317,13 +314,6 @@ PUBLIC void nop_cleanup() /* Nothing to clean up. */ } -/*===========================================================================* - * nop_fkey * - *===========================================================================*/ -PUBLIC void nop_fkey(struct driver *dr, message *m) -{ -/* Nothing to do for fkey. */ -} /*===========================================================================* * nop_cancel * @@ -342,26 +332,6 @@ PUBLIC int nop_select(struct driver *dr, message *m) } -/*===========================================================================* - * nop_task * - *===========================================================================*/ -PUBLIC void nop_task() -{ -/* Unused controllers are "serviced" by this task. */ - struct driver nop_tab = { - no_name, - do_nop, - do_nop, - do_nop, - nop_prepare, - NULL, - nop_cleanup, - NULL, - nop_stop, - nop_alarm, - }; - driver_task(&nop_tab); -} /*============================================================================* diff --git a/drivers/libdriver/driver.h b/drivers/libdriver/driver.h index 9bb1ff816..884a5bd6e 100644 --- a/drivers/libdriver/driver.h +++ b/drivers/libdriver/driver.h @@ -10,6 +10,7 @@ #include /* MUST be first */ #include /* MUST be second */ #include +#include #include #include #include @@ -36,9 +37,8 @@ struct driver { iovec_t *iov, unsigned nr_req) ); _PROTOTYPE( void (*dr_cleanup), (void) ); _PROTOTYPE( void (*dr_geometry), (struct partition *entry) ); - _PROTOTYPE( void (*dr_stop), (struct driver *dp) ); - _PROTOTYPE( void (*dr_alarm), (struct driver *dp) ); - _PROTOTYPE( void (*dr_fkey), (struct driver *dp, message *m_ptr) ); + _PROTOTYPE( void (*dr_signal), (struct driver *dp, message *m_ptr) ); + _PROTOTYPE( void (*dr_alarm), (struct driver *dp, message *m_ptr) ); _PROTOTYPE( int (*dr_cancel), (struct driver *dp, message *m_ptr) ); _PROTOTYPE( int (*dr_select), (struct driver *dp, message *m_ptr) ); _PROTOTYPE( int (*dr_other), (struct driver *dp, message *m_ptr) ); @@ -67,9 +67,8 @@ _PROTOTYPE( int do_nop, (struct driver *dp, message *m_ptr) ); _PROTOTYPE( struct device *nop_prepare, (int device) ); _PROTOTYPE( void nop_cleanup, (void) ); _PROTOTYPE( void nop_task, (void) ); -_PROTOTYPE( void nop_stop, (struct driver *dp) ); -_PROTOTYPE( void nop_alarm, (struct driver *dp) ); -_PROTOTYPE( void nop_fkey, (struct driver *dp, message *m_ptr) ); +_PROTOTYPE( void nop_signal, (struct driver *dp, message *m_ptr) ); +_PROTOTYPE( void nop_alarm, (struct driver *dp, message *m_ptr) ); _PROTOTYPE( int nop_cancel, (struct driver *dp, message *m_ptr) ); _PROTOTYPE( int nop_select, (struct driver *dp, message *m_ptr) ); _PROTOTYPE( int do_diocntl, (struct driver *dp, message *m_ptr) ); diff --git a/drivers/log/log.c b/drivers/log/log.c index da2054873..52e043d49 100644 --- a/drivers/log/log.c +++ b/drivers/log/log.c @@ -46,9 +46,8 @@ PRIVATE struct driver log_dtab = { log_transfer, /* do the I/O */ nop_cleanup, /* no need to clean up */ log_geometry, /* geometry */ - nop_stop, /* no need to clean up on shutdown */ + nop_signal, /* no need to clean up on shutdown */ nop_alarm, /* no alarm */ - nop_fkey, /* no fkey registered */ log_cancel, /* CANCEL request */ log_select, /* DEV_SELECT request */ log_other /* Unrecognized messages */ diff --git a/drivers/memory/memory.c b/drivers/memory/memory.c index c7ca64cea..98f1b1317 100644 --- a/drivers/memory/memory.c +++ b/drivers/memory/memory.c @@ -46,7 +46,7 @@ FORWARD _PROTOTYPE( int m_do_open, (struct driver *dp, message *m_ptr) ); FORWARD _PROTOTYPE( void m_init, (void) ); FORWARD _PROTOTYPE( int m_ioctl, (struct driver *dp, message *m_ptr) ); FORWARD _PROTOTYPE( void m_geometry, (struct partition *entry) ); -FORWARD _PROTOTYPE( void m_random, (struct driver *dp) ); +FORWARD _PROTOTYPE( void m_random, (struct driver *dp, message *m_ptr) ); /* Entry points to this driver. */ PRIVATE struct driver m_dtab = { @@ -58,9 +58,8 @@ PRIVATE struct driver m_dtab = { m_transfer, /* do the I/O */ nop_cleanup, /* no need to clean up */ m_geometry, /* memory device "geometry" */ - nop_stop, /* no need to clean up on shutdown */ + nop_signal, /* system signals */ m_random, /* get randomness from kernel (alarm) */ - nop_fkey, /* ignore function key presses and CANCELs */ nop_cancel, nop_select, NULL @@ -285,7 +284,7 @@ PRIVATE void m_init() } random_init(); - m_random(NULL); /* also set periodic timer */ + m_random(NULL, NULL); /* also set periodic timer */ /* Set up memory ranges for /dev/mem. */ #if (CHIP == INTEL) @@ -366,8 +365,9 @@ message *m_ptr; /* pointer to control message */ /*============================================================================* * m_random * *============================================================================*/ -PRIVATE void m_random(dp) +PRIVATE void m_random(dp, m_ptr) struct driver *dp; /* pointer to driver structure */ +message *m_ptr; /* pointer to alarm message */ { /* Fetch random information from the kernel to update /dev/random. */ int i, s, r_next, r_size, r_high; diff --git a/drivers/printer/printer.c b/drivers/printer/printer.c index 699f0c72e..415da8462 100644 --- a/drivers/printer/printer.c +++ b/drivers/printer/printer.c @@ -22,7 +22,7 @@ * ------------------------------------------------------- * | HARD_INT | | | | | * |-------------+---------+---------+---------+---------| - * | HARD_STOP | | | | | + * | SYS_EVENT | | | | | * |-------------+---------+---------+---------+---------| * | DEV_WRITE |minor dev| proc nr | count | buf ptr | * |-------------+---------+---------+---------+---------| @@ -34,8 +34,6 @@ #include "../drivers.h" -#if ENABLE_PRINTER - /* Control bits (in port_base + 2). "+" means positive logic and "-" means * negative logic. Most of the signals are negative logic on the pins but * many are converted to positive logic in the ports. Some manuals are @@ -160,9 +158,6 @@ PUBLIC void main(void) case DEV_WRITE: do_write(&pr_mess); break; case CANCEL : do_cancel(&pr_mess); break; case HARD_INT : do_printer_output(); break; - case HARD_STOP: sys_exit(0); - /* never reached */ - break; default: reply(TASK_REPLY, pr_mess.m_source, pr_mess.PROC_NR, EINVAL); } @@ -408,5 +403,4 @@ PRIVATE void do_printer_output() } -#endif /* ENABLE_PRINTER */ diff --git a/drivers/tty/keyboard.c b/drivers/tty/keyboard.c index 6d65507e5..d18e6ea5d 100644 --- a/drivers/tty/keyboard.c +++ b/drivers/tty/keyboard.c @@ -542,6 +542,7 @@ int scode; /* scan code for a function key */ #if DEAD_CODE notify(proc_nr, &m); #else + printf("alerted %d \n", proc_nr); alert(proc_nr); #endif } @@ -614,7 +615,6 @@ PUBLIC void do_panic_dumps(m) message *m; /* request message to TTY */ { /* Wait for keystrokes for printing debugging info and reboot. */ - int quiet, code; /* A panic! Allow debug dumps until user wants to shutdown. */ @@ -629,6 +629,7 @@ message *m; /* request message to TTY */ */ while (nb_receive(ANY, m) == OK) { switch(m->m_type) { + case FKEY_CONTROL: do_fkey_ctl(m); break; case SYS_EVENT: do_new_kmess(m); break; case DIAGNOSTICS: do_diagnostics(m); break; default: ; /* do nothing */