Make the rtl8139 and orinoco drivers handle the system shutdown case
like other drivers. Also, some minor cleanups.
This commit is contained in:
parent
2dd02cc560
commit
3b37103fa3
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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 *
|
||||||
*===========================================================================*/
|
*===========================================================================*/
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user