Date: Thu, 23 Aug 2001 19:19:21 -0700 From: Nick Sayer <nsayer@quack.kfu.com> To: Warner Losh <imp@harmony.village.org>, freebsd-mobile@freebsd.org Subject: Re: Netgear MA301 and other PIX based PrismII PCI adapters Message-ID: <3B85B9A9.2010809@quack.kfu.com> References: <3B857C01.10003@quack.kfu.com> <3220.216.101.175.66.998594555.squirrel@medusa.kfu.com> <200108230750.f7N7o9W82174@harmony.village.org> <200108232045.f7NKjWW88031@harmony.village.org> <200108232158.f7NLwIW88829@harmony.village.org>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
Will anyone in a position to do so please test this patch against
RELENG_4 (or alternatively the driver now in -current) with an MA301 or
any other Prism II based PCCard in a PLX based PCI adapter? I have tried
it with an MA301, but more testing would be best.
[-- Attachment #2 --]
Index: if_wi.c
===================================================================
RCS file: /home/ncvs/src/sys/i386/isa/Attic/if_wi.c,v
retrieving revision 1.18.2.10
diff -u -r1.18.2.10 if_wi.c
--- if_wi.c 2001/07/04 00:12:37 1.18.2.10
+++ if_wi.c 2001/08/24 02:16:36
@@ -197,6 +197,15 @@
sizeof(struct wi_softc)
};
+static struct {
+ unsigned int vendor,device;
+ char *desc;
+} pci_ids[] = {
+ {0x1638, 0x1100, "PRISM2STA PCI WaveLAN/IEEE 802.11"},
+ {0x1385, 0x4100, "Netgear MA301 PCI IEEE 802.11b"},
+ {0, 0, NULL}
+};
+
static devclass_t wi_pccard_devclass;
static devclass_t wi_pci_devclass;
@@ -233,14 +242,16 @@
device_t dev;
{
struct wi_softc *sc;
+ int i;
sc = device_get_softc(dev);
- if ((pci_get_vendor(dev) == WI_PCI_VENDOR_EUMITCOM) &&
- (pci_get_device(dev) == WI_PCI_DEVICE_PRISM2STA)) {
+ for(i=0; pci_ids[i].vendor != 0; i++) {
+ if ((pci_get_vendor(dev) == pci_ids[i].vendor) &&
+ (pci_get_device(dev) == pci_ids[i].device)) {
sc->wi_prism2 = 1;
- device_set_desc(dev,
- "PRISM2STA PCI WaveLAN/IEEE 802.11");
+ device_set_desc(dev, pci_ids[i].desc);
return (0);
+ }
}
return(ENXIO);
}
@@ -346,6 +357,20 @@
CSR_WRITE_2(sc, WI_INT_EN, 0);
CSR_WRITE_2(sc, WI_EVENT_ACK, 0xFFFF);
+ /* We have to do a magic PLX poke to enable interrupts */
+ sc->local_rid = WI_PCI_LOCALRES;
+ sc->local = bus_alloc_resource(dev, SYS_RES_IOPORT, &sc->local_rid,
+ 0, ~0, 1, RF_ACTIVE);
+ sc->wi_localtag = rman_get_bustag(sc->local);
+ sc->wi_localhandle = rman_get_bushandle(sc->local);
+ command = bus_space_read_4(sc->wi_localtag, sc->wi_localhandle,
+ WI_LOCAL_INTCSR);
+ command |= WI_LOCAL_INTEN;
+ bus_space_write_4(sc->wi_localtag, sc->wi_localhandle,
+ WI_LOCAL_INTCSR, command);
+ bus_release_resource(dev, SYS_RES_IOPORT, sc->local_rid, sc->local);
+ sc->local = NULL;
+
sc->mem_rid = WI_PCI_MEMRES;
sc->mem = bus_alloc_resource(dev, SYS_RES_MEMORY, &sc->mem_rid,
0, ~0, 1, RF_ACTIVE);
@@ -365,6 +390,13 @@
*/
CSM_WRITE_1(sc, WI_COR_OFFSET, WI_COR_VALUE);
reg = CSM_READ_1(sc, WI_COR_OFFSET);
+ if (reg != WI_COR_VALUE) {
+ device_printf(dev,
+ "CSM_READ_1(WI_COR_OFFSET) "
+ "wanted %d, got %d\n", WI_COR_VALUE, reg);
+ wi_free(dev);
+ return (ENXIO);
+ }
CSR_WRITE_2(sc, WI_HFA384X_SWSUPPORT0_OFF, WI_PRISM2STA_MAGIC);
reg = CSR_READ_2(sc, WI_HFA384X_SWSUPPORT0_OFF);
Index: if_wireg.h
===================================================================
RCS file: /home/ncvs/src/sys/i386/isa/Attic/if_wireg.h,v
retrieving revision 1.8.2.1
diff -u -r1.8.2.1 if_wireg.h
--- if_wireg.h 2001/04/22 00:50:49 1.8.2.1
+++ if_wireg.h 2001/08/24 02:16:36
@@ -90,12 +90,16 @@
struct ifmedia ifmedia;
device_t dev;
int wi_unit;
+ struct resource * local;
+ int local_rid;
struct resource * iobase;
int iobase_rid;
struct resource * irq;
int irq_rid;
struct resource * mem;
int mem_rid;
+ bus_space_handle_t wi_localhandle;
+ bus_space_tag_t wi_localtag;
bus_space_handle_t wi_bhandle;
bus_space_tag_t wi_btag;
bus_space_handle_t wi_bmemhandle;
@@ -143,11 +147,12 @@
#define WI_PORT4 4
#define WI_PORT5 5
-#define WI_PCI_MEMRES 0x18
-#define WI_PCI_IORES 0x1C
+#define WI_PCI_LOCALRES 0x14 /* The PLX chip's local registers */
+#define WI_PCI_MEMRES 0x18 /* The PCCard's attribute memory */
+#define WI_PCI_IORES 0x1C /* The PCCard's I/O space */
-#define WI_PCI_VENDOR_EUMITCOM 0x1638
-#define WI_PCI_DEVICE_PRISM2STA 0x1100
+#define WI_LOCAL_INTCSR 0x4c
+#define WI_LOCAL_INTEN 0x40 /* poke this into INTCSR */
#define WI_HFA384X_SWSUPPORT0_OFF 0x28
#define WI_PRISM2STA_MAGIC 0x4A2D
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3B85B9A9.2010809>
