MODULE_DESCRIPTION("The Prism54 802.11 Wireless LAN adapter");
MODULE_LICENSE("GPL");
-static int init_pcitm = 0;
-module_param(init_pcitm, int, 0);
-
/* In this order: vendor, device, subvendor, subdevice, class, class_mask,
* driver_data
* If you have an update for this please contact prism54-devel@prism54.org
* The latest list can be found at http://prism54.org/supported_cards.php */
static const struct pci_device_id prism54_id_tbl[] = {
- /* Intersil PRISM Duette/Prism GT Wireless LAN adapter */
+ /* 3COM 3CRWE154G72 Wireless LAN adapter */
{
- 0x1260, 0x3890,
- PCI_ANY_ID, PCI_ANY_ID,
+ PCIVENDOR_3COM, PCIDEVICE_3COM6001,
+ PCIVENDOR_3COM, PCIDEVICE_3COM6001,
0, 0, 0
},
- /* 3COM 3CRWE154G72 Wireless LAN adapter */
+ /* D-Link Air Plus Xtreme G A1 - DWL-g650 A1 */
{
- 0x10b7, 0x6001,
- PCI_ANY_ID, PCI_ANY_ID,
+ PCIVENDOR_INTERSIL, PCIDEVICE_ISL3890,
+ PCIVENDOR_DLINK, 0x3202UL,
+ 0, 0, 0
+ },
+
+ /* I-O Data WN-G54/CB - WN-G54/CB */
+ {
+ PCIVENDOR_INTERSIL, PCIDEVICE_ISL3890,
+ PCIVENDOR_IODATA, 0xd019UL,
+ 0, 0, 0
+ },
+
+ /* Netgear WG511 */
+ {
+ PCIVENDOR_INTERSIL, PCIDEVICE_ISL3890,
+ PCIVENDOR_NETGEAR, 0x4800UL,
+ 0, 0, 0
+ },
+
+ /* Tekram Technology clones, Allnet, Netcomm, Zyxel */
+ {
+ PCIVENDOR_INTERSIL, PCIDEVICE_ISL3890,
+ PCIVENDOR_TTL, 0x1605UL,
+ 0, 0, 0
+ },
+
+ /* SMC2802W */
+ {
+ PCIVENDOR_INTERSIL, PCIDEVICE_ISL3890,
+ PCIVENDOR_SMC, 0x2802UL,
+ 0, 0, 0
+ },
+
+ /* SMC2835W */
+ {
+ PCIVENDOR_INTERSIL, PCIDEVICE_ISL3890,
+ PCIVENDOR_SMC, 0x2835UL,
+ 0, 0, 0
+ },
+
+ /* Corega CG-WLCB54GT */
+ {
+ PCIVENDOR_INTERSIL, PCIDEVICE_ISL3890,
+ PCIVENDOR_ATI, 0xc104UL,
+ 0, 0, 0
+ },
+
+ /* I4 Z-Com XG-600 */
+ {
+ PCIVENDOR_INTERSIL, PCIDEVICE_ISL3890,
+ PCIVENDOR_I4, 0x0014UL,
+ 0, 0, 0
+ },
+
+ /* I4 Z-Com XG-900 and clones Macer, Ovislink, Planex, Peabird, */
+ /* Sitecom, Xterasys */
+ {
+ PCIVENDOR_INTERSIL, PCIDEVICE_ISL3890,
+ PCIVENDOR_I4, 0x0020UL,
+ 0, 0, 0
+ },
+
+ /* SMC 2802W V2 */
+ {
+ PCIVENDOR_INTERSIL, PCIDEVICE_ISL3890,
+ PCIVENDOR_ACCTON, 0xee03UL,
+ 0, 0, 0
+ },
+
+ /* SMC 2835W V2 */
+ {
+ PCIVENDOR_INTERSIL, PCIDEVICE_ISL3890,
+ PCIVENDOR_SMC, 0xa835UL,
0, 0, 0
},
/* Intersil PRISM Indigo Wireless LAN adapter */
{
- 0x1260, 0x3877,
+ PCIVENDOR_INTERSIL, PCIDEVICE_ISL3877,
PCI_ANY_ID, PCI_ANY_ID,
0, 0, 0
},
- /* Intersil PRISM Javelin/Xbow Wireless LAN adapter */
+ /* Intersil PRISM Duette/Prism GT Wireless LAN adapter */
+ /* Default */
{
- 0x1260, 0x3886,
+ PCIVENDOR_INTERSIL, PCIDEVICE_ISL3890,
PCI_ANY_ID, PCI_ANY_ID,
0, 0, 0
},
/* .enable_wake ; we don't support this yet */
};
+static void
+prism54_get_card_model(struct net_device *ndev)
+{
+ islpci_private *priv;
+ char *modelp;
+ int notwork = 0;
+
+ priv = netdev_priv(ndev);
+ switch (priv->pdev->subsystem_device) {
+ case PCIDEVICE_ISL3877:
+ modelp = "PRISM Indigo";
+ break;
+ case PCIDEVICE_ISL3886:
+ modelp = "PRISM Javelin / Xbow";
+ break;
+ case PCIDEVICE_3COM6001:
+ modelp = "3COM 3CRWE154G72";
+ break;
+ case 0x3202UL:
+ modelp = "D-Link DWL-g650 A1";
+ break;
+ case 0xd019UL:
+ modelp = "WN-G54/CB";
+ break;
+ case 0x4800UL:
+ modelp = "Netgear WG511";
+ break;
+ case 0x2802UL:
+ modelp = "SMC2802W";
+ break;
+ case 0xee03UL:
+ modelp = "SMC2802W V2";
+ notwork = 1;
+ break;
+ case 0x2835UL:
+ modelp = "SMC2835W";
+ break;
+ case 0xa835UL:
+ modelp = "SMC2835W V2";
+ notwork = 1;
+ break;
+ case 0xc104UL:
+ modelp = "CG-WLCB54GT";
+ break;
+ case 0x1605UL:
+ modelp = "Tekram Technology clone";
+ break;
+ /* Let's leave this one out for now since it seems bogus/wrong
+ * Even if the manufacturer did use 0x0000UL it may not be correct
+ * by their part, therefore deserving no name ;) */
+ /* case 0x0000UL:
+ * modelp = "SparkLAN WL-850F";
+ * break;*/
+
+ /* We have two reported for the one below :( */
+ case 0x0014UL:
+ modelp = "I4 Z-Com XG-600 and clones";
+ break;
+ case 0x0020UL:
+ modelp = "I4 Z-Com XG-900 and clones";
+ break;
+/* Default it */
+/*
+ case PCIDEVICE_ISL3890:
+ modelp = "PRISM Duette/GT";
+ break;
+*/
+ default:
+ modelp = "PRISM Duette/GT";
+ }
+ printk(KERN_DEBUG "%s: %s driver detected card model: %s\n",
+ ndev->name, DRV_NAME, modelp);
+ if ( notwork ) {
+ printk(KERN_DEBUG "%s: %s Warning - This may not work\n",
+ ndev->name, DRV_NAME);
+ }
+ return;
+}
+
/******************************************************************************
Module initialization functions
******************************************************************************/
*
* Writing zero to both these two registers will disable both timeouts and
* *can* solve problems caused by devices that are slow to respond.
- * Make this configurable - MSW
*/
- if ( init_pcitm >= 0 ) {
- pci_write_config_byte(pdev, 0x40, (u8)init_pcitm);
- pci_write_config_byte(pdev, 0x41, (u8)init_pcitm);
- } else {
- printk(KERN_INFO "PCI TRDY/RETRY unchanged\n");
- }
+ /* I am taking these out, we should not be poking around in the
+ * programmable timers - MSW
+ */
+/* Do not zero the programmable timers
+ pci_write_config_byte(pdev, 0x40, 0);
+ pci_write_config_byte(pdev, 0x41, 0);
+*/
/* request the pci device I/O regions */
rvalue = pci_request_regions(pdev, DRV_NAME);
/* firmware upload is triggered in islpci_open */
+ /* Pretty card model discovery output */
+ prism54_get_card_model(ndev);
+
return 0;
do_unregister_netdev:
unregister_netdev(ndev);
islpci_free_memory(priv);
- pci_set_drvdata(pdev, NULL);
+ pci_set_drvdata(pdev, 0);
free_netdev(ndev);
- priv = NULL;
+ priv = 0;
do_pci_release_regions:
pci_release_regions(pdev);
do_pci_disable_device:
prism54_remove(struct pci_dev *pdev)
{
struct net_device *ndev = pci_get_drvdata(pdev);
- islpci_private *priv = ndev ? netdev_priv(ndev) : NULL;
+ islpci_private *priv = ndev ? netdev_priv(ndev) : 0;
BUG_ON(!priv);
if (!__in_cleanup_module) {
/* free the PCI memory and unmap the remapped page */
islpci_free_memory(priv);
- pci_set_drvdata(pdev, NULL);
+ pci_set_drvdata(pdev, 0);
free_netdev(ndev);
- priv = NULL;
+ priv = 0;
pci_release_regions(pdev);
prism54_suspend(struct pci_dev *pdev, u32 state)
{
struct net_device *ndev = pci_get_drvdata(pdev);
- islpci_private *priv = ndev ? netdev_priv(ndev) : NULL;
+ islpci_private *priv = ndev ? netdev_priv(ndev) : 0;
BUG_ON(!priv);
printk(KERN_NOTICE "%s: got suspend request (state %d)\n",
prism54_resume(struct pci_dev *pdev)
{
struct net_device *ndev = pci_get_drvdata(pdev);
- islpci_private *priv = ndev ? netdev_priv(ndev) : NULL;
+ islpci_private *priv = ndev ? netdev_priv(ndev) : 0;
BUG_ON(!priv);
printk(KERN_NOTICE "%s: got resume request\n", ndev->name);