From owner-freebsd-mobile Thu Aug 23 19:19:33 2001 Delivered-To: freebsd-mobile@freebsd.org Received: from quack.kfu.com (quack.kfu.com [205.178.90.194]) by hub.freebsd.org (Postfix) with ESMTP id 97BDD37B410 for ; Thu, 23 Aug 2001 19:19:27 -0700 (PDT) (envelope-from nsayer@quack.kfu.com) Received: from morpheus.kfu.com (morpheus.kfu.com [3ffe:1200:301b:1:2d0:b7ff:fe3f:bdd0]) by quack.kfu.com (8.11.3/8.11.3) with ESMTP id f7O2JLt87998 (using TLSv1/SSLv3 with cipher EDH-RSA-DES-CBC3-SHA (168 bits) verified OK); Thu, 23 Aug 2001 19:19:27 -0700 (PDT) (envelope-from nsayer@quack.kfu.com) Received: from quack.kfu.com (nospam@localhost [127.0.0.1]) by morpheus.kfu.com (8.11.5/8.11.5) with ESMTP id f7O2JLS26736; Thu, 23 Aug 2001 19:19:21 -0700 (PDT) (envelope-from nsayer@quack.kfu.com) Message-ID: <3B85B9A9.2010809@quack.kfu.com> Date: Thu, 23 Aug 2001 19:19:21 -0700 From: Nick Sayer User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:0.9.3) Gecko/20010804 X-Accept-Language: en, en-US, en-GB MIME-Version: 1.0 To: Warner Losh , freebsd-mobile@freebsd.org Subject: Re: Netgear MA301 and other PIX based PrismII PCI adapters 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> Content-Type: multipart/mixed; boundary="------------030209020904090207020500" Sender: owner-freebsd-mobile@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org This is a multi-part message in MIME format. --------------030209020904090207020500 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit 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. --------------030209020904090207020500 Content-Type: text/plain; name="ma301.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="ma301.patch" 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 --------------030209020904090207020500-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-mobile" in the body of the message