Date: Tue, 24 Oct 2000 23:38:12 +0900 From: Takanori Watanabe <takawata@shidahara1.planet.sci.kobe-u.ac.jp> To: imp@freebsd.org, arch@freebsd.org Subject: NEWCARD/OLDCARD compatibility layer Message-ID: <200010241438.XAA58776@shidahara1.planet.sci.kobe-u.ac.jp>
next in thread | raw e-mail | index | archive | help
Hi, I looked card_if.m and I think there is a problem:If there is a system that have neither OLDCARD or NEWCARD layer, module-ifyed driver that uses NEWCARD/OLDCARD compatibility layer mechanism cannot load because pccard_compat_probe/pccard_compat_attach is not exist. How about this change? And ,in child driver side, PCCARD_COMPAT_LAYER should be defined to use pccard_compat_* function before including "card_if.h". With this change kernel can be compiled.(I don't know wherther it collectly work or not.) Takanori Watanabe <a href="http://www.planet.sci.kobe-u.ac.jp/~takawata/key.html"> Public Key</a> Key fingerprint = 2C 51 E2 78 2C E1 C5 2D 0F F1 20 A3 11 3A 62 2A --- card_if.m.org Wed Sep 20 14:24:23 2000 +++ card_if.m Tue Oct 24 23:21:01 2000 @@ -143,6 +143,34 @@ # # Drivers wishing to not retain OLDCARD compatibility needn't do this. # + +#These Function is defined in bus code + +METHOD int compatsubr_probe{ + device_t parent; + device_t dev; +}; + +METHOD int compatsubr_attach{ + device_t parent; + device_t dev; +}; + +HEADER{ + #ifdef PCCARD_COMPAT_LAYER + static int pccard_compat_probe(device_t); + static int pccard_compat_attach(device_t); + static int pccard_compat_probe(device_t dev) + { + return CARD_COMPATSUBR_PROBE(device_get_parent(dev), dev); + } + static int pccard_compat_attach(device_t dev) + { + return CARD_COMPATSUBR_ATTACH(device_get_parent(dev), dev); + } + #endif +}; + METHOD int compat_probe { device_t dev; } --- pccard.c~ Mon Oct 9 22:08:33 2000 +++ pccard.c Tue Oct 24 22:40:54 2000 @@ -563,14 +563,14 @@ * needs to grab devices while in the old they were assigned to the device by * the pccardd process. These symbols are exported to the upper layers. */ -int -pccard_compat_probe(device_t dev) +static int +pccard_compat_probe(device_t parent, device_t dev) { return (CARD_COMPAT_MATCH(dev)); } -int -pccard_compat_attach(device_t dev) +static int +pccard_compat_attach(device_t parent, device_t dev) { int err; @@ -811,7 +811,8 @@ DEVMETHOD(card_get_type, pccard_card_gettype), DEVMETHOD(card_attach_card, pccard_attach_card), DEVMETHOD(card_detach_card, pccard_detach_card), - + DEVMETHOD(card_compatsubr_probe, pccard_compat_probe), + DEVMETHOD(card_compatsubr_attach, pccard_compat_attach), { 0, 0 } }; --- pccardvar.h~ Mon Oct 9 22:08:33 2000 +++ pccardvar.h Tue Oct 24 22:59:07 2000 @@ -287,9 +287,12 @@ #define pccard_mem_unmap(pf, window) \ (pccard_chip_mem_unmap((pf)->sc->pct, (pf)->sc->pch, (window))) -/* compat layer */ -int pccard_compat_probe(device_t dev); -int pccard_compat_attach(device_t dev); +/* + * compat layer are defined in card_if.h statically.(A bit ugly.) + * + * int pccard_compat_probe(device_t dev); + * int pccard_compat_attach(device_t dev); + */ /* ivar interface */ enum { To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200010241438.XAA58776>