summaryrefslogtreecommitdiffstats
path: root/sys/pccard/pccard.c
diff options
context:
space:
mode:
authornate <nate@FreeBSD.org>1997-10-26 04:54:16 +0000
committernate <nate@FreeBSD.org>1997-10-26 04:54:16 +0000
commit2f55d3018bb2f9d1790a2085125effcbad72ad2e (patch)
tree5bde5383c575d64c76fda2c3aa76c95a74f212e8 /sys/pccard/pccard.c
parentc68183d0b8cb8cb595c0fac05b6d989132543595 (diff)
downloadFreeBSD-src-2f55d3018bb2f9d1790a2085125effcbad72ad2e.zip
FreeBSD-src-2f55d3018bb2f9d1790a2085125effcbad72ad2e.tar.gz
- Functional changes to PCCARD support.
* Kill individual drivers 'suspend' routines, since there's no simple/safe way to suspend/resume a card w/out going through the complete probe at initialization time. * Default to using the apm_pccard_resume sysctl code, which basically pretends the card was removed, and then re-inserted. Suspend/resume is now 'emulated' with a fake insert/removal. (Hence we no longer need the driver-specific suspend routines.)
Diffstat (limited to 'sys/pccard/pccard.c')
-rw-r--r--sys/pccard/pccard.c51
1 files changed, 12 insertions, 39 deletions
diff --git a/sys/pccard/pccard.c b/sys/pccard/pccard.c
index 16fbddb..630fc79 100644
--- a/sys/pccard/pccard.c
+++ b/sys/pccard/pccard.c
@@ -77,16 +77,6 @@ static int pcic_resume_reset =
SYSCTL_INT(_machdep_pccard, OID_AUTO, pcic_resume_reset, CTLFLAG_RW,
&pcic_resume_reset, 0, "");
-static int apm_pccard_resume =
-#ifdef APM_PCCARD_RESUME
- 1;
-#else
- 0;
-#endif
-
-SYSCTL_INT(_machdep_pccard, OID_AUTO, apm_pccard_resume, CTLFLAG_RW,
- &apm_pccard_resume, 0, "");
-
#define PCCARD_MEMSIZE (4*1024)
#define MIN(a,b) ((a)<(b)?(a):(b))
@@ -374,12 +364,7 @@ static int
slot_suspend(void *arg)
{
struct slot *slt = arg;
- struct pccard_devinfo *devi;
- if (slt->state == filled) {
- for (devi = slt->devices; devi; devi = devi->next)
- (void)devi->drv->suspend(devi);
- }
slt->ctrl->disable(slt);
return (0);
}
@@ -391,30 +376,18 @@ slot_resume(void *arg)
if (pcic_resume_reset)
slt->ctrl->resume(slt);
- if (apm_pccard_resume) {
- /* Fake card removal/insertion events */
- if (slt->state == filled) {
- int s;
-
- s = splhigh();
- disable_slot(slt);
- slt->state = empty;
- splx(s);
- slt->insert_seq = 1;
- slt->insert_ch = timeout(inserted, (void *)slt, hz);
- selwakeup(&slt->selp);
- }
- } else {
- struct pccard_devinfo *devi;
+ /* Fake card removal/insertion events */
+ if (slt->state == filled) {
+ int s;
- slt->ctrl->power(slt);
- if (slt->irq)
- slt->ctrl->mapirq(slt, slt->irq);
- if (slt->state == filled) {
- for (devi = slt->devices; devi; devi = devi->next)
- (void)devi->drv->enable(devi, 0);
- }
- }
+ s = splhigh();
+ disable_slot(slt);
+ slt->state = empty;
+ splx(s);
+ slt->insert_seq = 1;
+ slt->insert_ch = timeout(inserted, (void *)slt, hz);
+ selwakeup(&slt->selp);
+ }
return (0);
}
#endif /* NAPM > 0 */
@@ -601,7 +574,7 @@ allocate_driver(struct slot *slt, struct dev_desc *desc)
devi->next = slt->devices;
slt->devices = devi;
s = splhigh();
- err = drv->enable(devi, 1);
+ err = drv->enable(devi);
splx(s);
/*
* If the enable functions returns no error, then the
OpenPOWER on IntegriCloud