- Disable cards when doing a suspend by emulating that they have been
removed. Add a new state 'suspend' so we 'fake' insertion events at resume time for the cards that have been suspended. [ The code still works if you remove the card during suspend, switch the card during suspend, or combinations of both. ] Reviewed by: frf@xocolatl.com
This commit is contained in:
parent
2c7ba54db5
commit
2e553bc250
@ -54,7 +54,7 @@
|
||||
/*
|
||||
* Slot states for PIOCGSTATE
|
||||
*/
|
||||
enum cardstate { noslot, empty, filled };
|
||||
enum cardstate { noslot, empty, suspend, filled };
|
||||
|
||||
/*
|
||||
* Descriptor structure for memory map.
|
||||
|
@ -54,7 +54,7 @@
|
||||
/*
|
||||
* Slot states for PIOCGSTATE
|
||||
*/
|
||||
enum cardstate { noslot, empty, filled };
|
||||
enum cardstate { noslot, empty, suspend, filled };
|
||||
|
||||
/*
|
||||
* Descriptor structure for memory map.
|
||||
|
@ -372,6 +372,14 @@ slot_suspend(void *arg)
|
||||
{
|
||||
struct slot *slt = arg;
|
||||
|
||||
/* This code stolen from pccard_event:card_removed */
|
||||
if (slt->state == filled) {
|
||||
int s = splhigh();
|
||||
disable_slot(slt);
|
||||
slt->state = suspend;
|
||||
splx(s);
|
||||
printf("Card disabled, slot %d\n", slt->slotnum);
|
||||
}
|
||||
slt->ctrl->disable(slt);
|
||||
return (0);
|
||||
}
|
||||
@ -383,16 +391,11 @@ slot_resume(void *arg)
|
||||
|
||||
if (pcic_resume_reset)
|
||||
slt->ctrl->resume(slt);
|
||||
/* Fake card removal/insertion events */
|
||||
if (slt->state == filled) {
|
||||
int s;
|
||||
|
||||
s = splhigh();
|
||||
disable_slot(slt);
|
||||
/* This code stolen from pccard_event:card_inserted */
|
||||
if (slt->state == suspend) {
|
||||
slt->state = empty;
|
||||
splx(s);
|
||||
slt->insert_seq = 1;
|
||||
slt->insert_ch = timeout(inserted, (void *)slt, hz);
|
||||
slt->insert_ch = timeout(inserted, (void *)slt, hz/4);
|
||||
selwakeup(&slt->selp);
|
||||
}
|
||||
return (0);
|
||||
|
@ -26,7 +26,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] =
|
||||
"$Id: cardd.c,v 1.18 1997/10/06 11:36:06 charnier Exp $";
|
||||
"$Id: cardd.c,v 1.19 1997/10/26 04:36:24 nate Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <fcntl.h>
|
||||
@ -227,6 +227,9 @@ slot_change(struct slot *sp)
|
||||
case filled:
|
||||
card_inserted(sp);
|
||||
break;
|
||||
case suspend:
|
||||
/* ignored */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user