Make the rtl8139 and orinoco drivers handle the system shutdown case

like other drivers. Also, some minor cleanups.
This commit is contained in:
Arun Thomas 2009-04-22 12:42:37 +00:00
parent 2dd02cc560
commit 3b37103fa3
3 changed files with 19 additions and 43 deletions

View File

@ -190,7 +190,6 @@ struct {
#define BITRATE_TABLE_SIZE (sizeof(bitrate_table) / sizeof(bitrate_table[0])) #define BITRATE_TABLE_SIZE (sizeof(bitrate_table) / sizeof(bitrate_table[0]))
_PROTOTYPE (static void sig_handler, (void));
_PROTOTYPE (static void or_writev, (message * mp, int from_int, int vectored)); _PROTOTYPE (static void or_writev, (message * mp, int from_int, int vectored));
_PROTOTYPE (static void or_readv, (message * mp, int from_int, int vectored)); _PROTOTYPE (static void or_readv, (message * mp, int from_int, int vectored));
_PROTOTYPE (static void or_writev_s, (message * mp, int from_int)); _PROTOTYPE (static void or_writev_s, (message * mp, int from_int));
@ -268,7 +267,7 @@ int main(int argc, char *argv[]) {
else if (r != ESRCH) else if (r != ESRCH)
printf("orinoco: ds_retrieve_u32 failed for 'inet': %d\n", r); printf("orinoco: ds_retrieve_u32 failed for 'inet': %d\n", r);
while (42) { while (TRUE) {
if ((r = receive (ANY, &m)) != OK) if ((r = receive (ANY, &m)) != OK)
panic(__FILE__, "orinoco: receive failed", NO_NUM); panic(__FILE__, "orinoco: receive failed", NO_NUM);
@ -309,6 +308,13 @@ int main(int argc, char *argv[]) {
case SYN_ALARM: case SYN_ALARM:
or_watchdog_f(NULL); or_watchdog_f(NULL);
break; break;
case SYS_SIG:
{
sigset_t sigset = m.NOTIFY_ARG;
if ( sigismember( &sigset, SIGKSTOP ) )
orinoco_stop();
}
break;
case HARD_INT: case HARD_INT:
do_hard_int(); do_hard_int();
if (int_event_check) if (int_event_check)
@ -318,7 +324,6 @@ int main(int argc, char *argv[]) {
or_dump(&m); or_dump(&m);
break; break;
case PROC_EVENT: case PROC_EVENT:
sig_handler();
break; break;
default: default:
panic(__FILE__,"orinoco: illegal message:", m.m_type); panic(__FILE__,"orinoco: illegal message:", m.m_type);
@ -326,23 +331,6 @@ int main(int argc, char *argv[]) {
} }
} }
/*****************************************************************************
* sig_handler *
* *
* Handles signals to the driver. *
*****************************************************************************/
PRIVATE void sig_handler() {
sigset_t sigset;
int sig;
if(getsigset(&sigset) != 0) return;
if(sigismember(&sigset, SIGTERM)) {
orinoco_stop();
}
}
/***************************************************************************** /*****************************************************************************
* check_int_events * * check_int_events *
* * * *
@ -675,7 +663,7 @@ static int or_probe (t_or * orp) {
just_one = FALSE; just_one = FALSE;
} }
while (42) { while (TRUE) {
/* loop through the pcitab to find a maching entry. The match /* loop through the pcitab to find a maching entry. The match
* being between one of the values in pcitab and the * being between one of the values in pcitab and the
* information provided by the pci bus */ * information provided by the pci bus */
@ -712,7 +700,7 @@ static int or_probe (t_or * orp) {
/* Get the name as advertised by pci */ /* Get the name as advertised by pci */
dname = pci_dev_name (vid, did); dname = pci_dev_name (vid, did);
if (!dname) if (!dname)
dname = "unknow device"; dname = "unknown device";
printf ("%s: %s (%04x/%04x) at %s\n", printf ("%s: %s (%04x/%04x) at %s\n",
orp->or_name, dname, vid, did, pci_slot_name (devind)); orp->or_name, dname, vid, did, pci_slot_name (devind));
@ -1032,7 +1020,7 @@ static void or_writerids (hermes_t * hw, t_or * orp) {
setup_wepkey(orp, wepkey0); setup_wepkey(orp, wepkey0);
break; break;
default: default:
printf("unvalid key provided. Has to be 13 chars\n"); printf("Invalid key provided. Has to be 13 chars\n");
break; break;
} }
} }

View File

@ -253,7 +253,6 @@ static void my_outl(U16_t port, U32_t value) {
#define rl_outw(port, offset, value) (my_outw((port) + (offset), (value))) #define rl_outw(port, offset, value) (my_outw((port) + (offset), (value)))
#define rl_outl(port, offset, value) (my_outl((port) + (offset), (value))) #define rl_outl(port, offset, value) (my_outl((port) + (offset), (value)))
_PROTOTYPE( static void sig_handler, (void) );
_PROTOTYPE( static void rl_init, (message *mp) ); _PROTOTYPE( static void rl_init, (message *mp) );
_PROTOTYPE( static void rl_pci_conf, (void) ); _PROTOTYPE( static void rl_pci_conf, (void) );
_PROTOTYPE( static int rl_probe, (re_t *rep) ); _PROTOTYPE( static int rl_probe, (re_t *rep) );
@ -376,6 +375,13 @@ int main(int argc, char *argv[])
*/ */
rl_watchdog_f(NULL); rl_watchdog_f(NULL);
break; break;
case SYS_SIG:
{
sigset_t sigset = m.NOTIFY_ARG;
if ( sigismember( &sigset, SIGKSTOP ) )
rtl8139_stop();
}
break;
case HARD_INT: case HARD_INT:
do_hard_int(); do_hard_int();
if (int_event_check) if (int_event_check)
@ -383,7 +389,6 @@ int main(int argc, char *argv[])
break ; break ;
case FKEY_PRESSED: rtl8139_dump(&m); break; case FKEY_PRESSED: rtl8139_dump(&m); break;
case PROC_EVENT: case PROC_EVENT:
sig_handler();
break; break;
default: default:
panic("rtl8139","illegal message", m.m_type); panic("rtl8139","illegal message", m.m_type);
@ -391,23 +396,6 @@ int main(int argc, char *argv[])
} }
} }
/*===========================================================================*
* sig_handler *
*===========================================================================*/
PRIVATE void sig_handler()
{
sigset_t sigset;
int sig;
/* Try to obtain signal set from PM. */
if (getsigset(&sigset) != 0) return;
/* Check for known signals. */
if (sigismember(&sigset, SIGTERM)) {
rtl8139_stop();
}
}
/*===========================================================================* /*===========================================================================*
* check_int_events * * check_int_events *
*===========================================================================*/ *===========================================================================*/

View File

@ -314,7 +314,7 @@ PUBLIC int do_getprocnr()
/* This call should be moved to DS. */ /* This call should be moved to DS. */
if (mp->mp_effuid != 0) if (mp->mp_effuid != 0)
{ {
printf("PM: unauthorized call of do_procstat by proc %d\n", printf("PM: unauthorized call of do_getprocnr by proc %d\n",
mp->mp_endpoint); mp->mp_endpoint);
sys_sysctl_stacktrace(mp->mp_endpoint); sys_sysctl_stacktrace(mp->mp_endpoint);
return EPERM; return EPERM;