Source-Changes archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: CVS commit: src/sys/dev/pcmcia
Allen Briggs <briggs%NetBSD.org@localhost> writes:
> Module Name: src
> Committed By: briggs
> Date: Wed Oct 22 07:48:25 UTC 2003
>
> Modified Files:
> src/sys/dev/pcmcia: wdc_pcmcia.c
>
> Log Message:
> Since we enable the pcmcia function on attach, disable it on the detach.
No. Your change is wrong. The reason why enable/disable become
unbalance is because now real wd probe/attach jobs is done via atabus
kernel thread and wdcattach itself returns after creating the kernel
thread. So, the correct fix is to disable the device when exiting
wdc_pcmcia_attach().
enami.
Index: wdc_pcmcia.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pcmcia/wdc_pcmcia.c,v
retrieving revision 1.61
diff -c -r1.61 wdc_pcmcia.c
*** wdc_pcmcia.c 22 Oct 2003 07:48:25 -0000 1.61
--- wdc_pcmcia.c 22 Oct 2003 08:27:08 -0000
***************
*** 74,80 ****
void *sc_ih;
struct pcmcia_function *sc_pf;
int sc_flags;
- #define WDC_PCMCIA_ATTACH 0x0001
#define WDC_PCMCIA_MEMMODE 0x0002
};
--- 74,79 ----
***************
*** 376,384 ****
sc->sc_wdcdev.sc_atapi_adapter._generic.adapt_enable =
wdc_pcmcia_enable;
- sc->sc_flags |= WDC_PCMCIA_ATTACH;
wdcattach(&sc->wdc_channel);
! sc->sc_flags &= ~WDC_PCMCIA_ATTACH;
return;
mapaux_failed:
--- 375,385 ----
sc->sc_wdcdev.sc_atapi_adapter._generic.adapt_enable =
wdc_pcmcia_enable;
wdcattach(&sc->wdc_channel);
!
! /* Disable the function */
! pcmcia_function_disable(sc->sc_pf);
!
return;
mapaux_failed:
***************
*** 433,441 ****
}
}
- /* Disable the function */
- pcmcia_function_disable(sc->sc_pf);
-
return (0);
}
--- 434,439 ----
***************
*** 456,472 ****
return (EIO);
}
! /*
! * If attach is in progress, we know that card power is
! * enabled.
! */
! if ((sc->sc_flags & WDC_PCMCIA_ATTACH) == 0) {
! if (pcmcia_function_enable(sc->sc_pf)) {
! printf("%s: couldn't enable PCMCIA function\n",
! sc->sc_wdcdev.sc_dev.dv_xname);
! pcmcia_intr_disestablish(sc->sc_pf, sc->sc_ih);
! return (EIO);
! }
}
} else {
pcmcia_function_disable(sc->sc_pf);
--- 454,464 ----
return (EIO);
}
! if (pcmcia_function_enable(sc->sc_pf)) {
! printf("%s: couldn't enable PCMCIA function\n",
! sc->sc_wdcdev.sc_dev.dv_xname);
! pcmcia_intr_disestablish(sc->sc_pf, sc->sc_ih);
! return (EIO);
}
} else {
pcmcia_function_disable(sc->sc_pf);
Home |
Main Index |
Thread Index |
Old Index