提交 a39727f2 编写于 作者: L Linus Torvalds

Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6

* 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6:
  [netdrvr] Remove long-unused bits from Becker template drivers
  [netdrvr] natsemi: minor cleanups
  [netdrvr] natsemi: Separate out media initialization code
  [PATCH] WAN: update info page for a bunch of my drivers
  [PATCH] drivers/net/hamradio/dmascc.c: fix section mismatch
  [PATCH] Fix phy id for LXT971A/LXT972A
  [PATCH] DM9000 - minor code cleanups
  [PATCH] DM9000 - do no re-init spin lock
  [PATCH] DM9000 - check for MAC left in by bootloader
  [PATCH] DM9000 - better checks for platform resources
...@@ -375,8 +375,7 @@ limit of 4K. ...@@ -375,8 +375,7 @@ limit of 4K.
of the drivers, and will likely be provided by some future kernel. of the drivers, and will likely be provided by some future kernel.
*/ */
enum pci_flags_bit { enum pci_flags_bit {
PCI_USES_IO=1, PCI_USES_MEM=2, PCI_USES_MASTER=4, PCI_USES_MASTER=4,
PCI_ADDR0=0x10<<0, PCI_ADDR1=0x10<<1, PCI_ADDR2=0x10<<2, PCI_ADDR3=0x10<<3,
}; };
enum { IS_VORTEX=1, IS_BOOMERANG=2, IS_CYCLONE=4, IS_TORNADO=8, enum { IS_VORTEX=1, IS_BOOMERANG=2, IS_CYCLONE=4, IS_TORNADO=8,
...@@ -446,95 +445,95 @@ static struct vortex_chip_info { ...@@ -446,95 +445,95 @@ static struct vortex_chip_info {
int io_size; int io_size;
} vortex_info_tbl[] __devinitdata = { } vortex_info_tbl[] __devinitdata = {
{"3c590 Vortex 10Mbps", {"3c590 Vortex 10Mbps",
PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, }, PCI_USES_MASTER, IS_VORTEX, 32, },
{"3c592 EISA 10Mbps Demon/Vortex", /* AKPM: from Don's 3c59x_cb.c 0.49H */ {"3c592 EISA 10Mbps Demon/Vortex", /* AKPM: from Don's 3c59x_cb.c 0.49H */
PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, }, PCI_USES_MASTER, IS_VORTEX, 32, },
{"3c597 EISA Fast Demon/Vortex", /* AKPM: from Don's 3c59x_cb.c 0.49H */ {"3c597 EISA Fast Demon/Vortex", /* AKPM: from Don's 3c59x_cb.c 0.49H */
PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, }, PCI_USES_MASTER, IS_VORTEX, 32, },
{"3c595 Vortex 100baseTx", {"3c595 Vortex 100baseTx",
PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, }, PCI_USES_MASTER, IS_VORTEX, 32, },
{"3c595 Vortex 100baseT4", {"3c595 Vortex 100baseT4",
PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, }, PCI_USES_MASTER, IS_VORTEX, 32, },
{"3c595 Vortex 100base-MII", {"3c595 Vortex 100base-MII",
PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, }, PCI_USES_MASTER, IS_VORTEX, 32, },
{"3c900 Boomerang 10baseT", {"3c900 Boomerang 10baseT",
PCI_USES_IO|PCI_USES_MASTER, IS_BOOMERANG|EEPROM_RESET, 64, }, PCI_USES_MASTER, IS_BOOMERANG|EEPROM_RESET, 64, },
{"3c900 Boomerang 10Mbps Combo", {"3c900 Boomerang 10Mbps Combo",
PCI_USES_IO|PCI_USES_MASTER, IS_BOOMERANG|EEPROM_RESET, 64, }, PCI_USES_MASTER, IS_BOOMERANG|EEPROM_RESET, 64, },
{"3c900 Cyclone 10Mbps TPO", /* AKPM: from Don's 0.99M */ {"3c900 Cyclone 10Mbps TPO", /* AKPM: from Don's 0.99M */
PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_HWCKSM, 128, }, PCI_USES_MASTER, IS_CYCLONE|HAS_HWCKSM, 128, },
{"3c900 Cyclone 10Mbps Combo", {"3c900 Cyclone 10Mbps Combo",
PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_HWCKSM, 128, }, PCI_USES_MASTER, IS_CYCLONE|HAS_HWCKSM, 128, },
{"3c900 Cyclone 10Mbps TPC", /* AKPM: from Don's 0.99M */ {"3c900 Cyclone 10Mbps TPC", /* AKPM: from Don's 0.99M */
PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_HWCKSM, 128, }, PCI_USES_MASTER, IS_CYCLONE|HAS_HWCKSM, 128, },
{"3c900B-FL Cyclone 10base-FL", {"3c900B-FL Cyclone 10base-FL",
PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_HWCKSM, 128, }, PCI_USES_MASTER, IS_CYCLONE|HAS_HWCKSM, 128, },
{"3c905 Boomerang 100baseTx", {"3c905 Boomerang 100baseTx",
PCI_USES_IO|PCI_USES_MASTER, IS_BOOMERANG|HAS_MII|EEPROM_RESET, 64, }, PCI_USES_MASTER, IS_BOOMERANG|HAS_MII|EEPROM_RESET, 64, },
{"3c905 Boomerang 100baseT4", {"3c905 Boomerang 100baseT4",
PCI_USES_IO|PCI_USES_MASTER, IS_BOOMERANG|HAS_MII|EEPROM_RESET, 64, }, PCI_USES_MASTER, IS_BOOMERANG|HAS_MII|EEPROM_RESET, 64, },
{"3c905B Cyclone 100baseTx", {"3c905B Cyclone 100baseTx",
PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_NWAY|HAS_HWCKSM|EXTRA_PREAMBLE, 128, }, PCI_USES_MASTER, IS_CYCLONE|HAS_NWAY|HAS_HWCKSM|EXTRA_PREAMBLE, 128, },
{"3c905B Cyclone 10/100/BNC", {"3c905B Cyclone 10/100/BNC",
PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_NWAY|HAS_HWCKSM, 128, }, PCI_USES_MASTER, IS_CYCLONE|HAS_NWAY|HAS_HWCKSM, 128, },
{"3c905B-FX Cyclone 100baseFx", {"3c905B-FX Cyclone 100baseFx",
PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_HWCKSM, 128, }, PCI_USES_MASTER, IS_CYCLONE|HAS_HWCKSM, 128, },
{"3c905C Tornado", {"3c905C Tornado",
PCI_USES_IO|PCI_USES_MASTER, IS_TORNADO|HAS_NWAY|HAS_HWCKSM|EXTRA_PREAMBLE, 128, }, PCI_USES_MASTER, IS_TORNADO|HAS_NWAY|HAS_HWCKSM|EXTRA_PREAMBLE, 128, },
{"3c920B-EMB-WNM (ATI Radeon 9100 IGP)", {"3c920B-EMB-WNM (ATI Radeon 9100 IGP)",
PCI_USES_IO|PCI_USES_MASTER, IS_TORNADO|HAS_MII|HAS_HWCKSM, 128, }, PCI_USES_MASTER, IS_TORNADO|HAS_MII|HAS_HWCKSM, 128, },
{"3c980 Cyclone", {"3c980 Cyclone",
PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_HWCKSM, 128, }, PCI_USES_MASTER, IS_CYCLONE|HAS_HWCKSM, 128, },
{"3c980C Python-T", {"3c980C Python-T",
PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_NWAY|HAS_HWCKSM, 128, }, PCI_USES_MASTER, IS_CYCLONE|HAS_NWAY|HAS_HWCKSM, 128, },
{"3cSOHO100-TX Hurricane", {"3cSOHO100-TX Hurricane",
PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_NWAY|HAS_HWCKSM, 128, }, PCI_USES_MASTER, IS_CYCLONE|HAS_NWAY|HAS_HWCKSM, 128, },
{"3c555 Laptop Hurricane", {"3c555 Laptop Hurricane",
PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|EEPROM_8BIT|HAS_HWCKSM, 128, }, PCI_USES_MASTER, IS_CYCLONE|EEPROM_8BIT|HAS_HWCKSM, 128, },
{"3c556 Laptop Tornado", {"3c556 Laptop Tornado",
PCI_USES_IO|PCI_USES_MASTER, IS_TORNADO|HAS_NWAY|EEPROM_8BIT|HAS_CB_FNS|INVERT_MII_PWR| PCI_USES_MASTER, IS_TORNADO|HAS_NWAY|EEPROM_8BIT|HAS_CB_FNS|INVERT_MII_PWR|
HAS_HWCKSM, 128, }, HAS_HWCKSM, 128, },
{"3c556B Laptop Hurricane", {"3c556B Laptop Hurricane",
PCI_USES_IO|PCI_USES_MASTER, IS_TORNADO|HAS_NWAY|EEPROM_OFFSET|HAS_CB_FNS|INVERT_MII_PWR| PCI_USES_MASTER, IS_TORNADO|HAS_NWAY|EEPROM_OFFSET|HAS_CB_FNS|INVERT_MII_PWR|
WNO_XCVR_PWR|HAS_HWCKSM, 128, }, WNO_XCVR_PWR|HAS_HWCKSM, 128, },
{"3c575 [Megahertz] 10/100 LAN CardBus", {"3c575 [Megahertz] 10/100 LAN CardBus",
PCI_USES_IO|PCI_USES_MASTER, IS_BOOMERANG|HAS_MII|EEPROM_8BIT, 128, }, PCI_USES_MASTER, IS_BOOMERANG|HAS_MII|EEPROM_8BIT, 128, },
{"3c575 Boomerang CardBus", {"3c575 Boomerang CardBus",
PCI_USES_IO|PCI_USES_MASTER, IS_BOOMERANG|HAS_MII|EEPROM_8BIT, 128, }, PCI_USES_MASTER, IS_BOOMERANG|HAS_MII|EEPROM_8BIT, 128, },
{"3CCFE575BT Cyclone CardBus", {"3CCFE575BT Cyclone CardBus",
PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_NWAY|HAS_CB_FNS|EEPROM_8BIT| PCI_USES_MASTER, IS_CYCLONE|HAS_NWAY|HAS_CB_FNS|EEPROM_8BIT|
INVERT_LED_PWR|HAS_HWCKSM, 128, }, INVERT_LED_PWR|HAS_HWCKSM, 128, },
{"3CCFE575CT Tornado CardBus", {"3CCFE575CT Tornado CardBus",
PCI_USES_IO|PCI_USES_MASTER, IS_TORNADO|HAS_NWAY|HAS_CB_FNS|EEPROM_8BIT|INVERT_MII_PWR| PCI_USES_MASTER, IS_TORNADO|HAS_NWAY|HAS_CB_FNS|EEPROM_8BIT|INVERT_MII_PWR|
MAX_COLLISION_RESET|HAS_HWCKSM, 128, }, MAX_COLLISION_RESET|HAS_HWCKSM, 128, },
{"3CCFE656 Cyclone CardBus", {"3CCFE656 Cyclone CardBus",
PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_NWAY|HAS_CB_FNS|EEPROM_8BIT|INVERT_MII_PWR| PCI_USES_MASTER, IS_CYCLONE|HAS_NWAY|HAS_CB_FNS|EEPROM_8BIT|INVERT_MII_PWR|
INVERT_LED_PWR|HAS_HWCKSM, 128, }, INVERT_LED_PWR|HAS_HWCKSM, 128, },
{"3CCFEM656B Cyclone+Winmodem CardBus", {"3CCFEM656B Cyclone+Winmodem CardBus",
PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_NWAY|HAS_CB_FNS|EEPROM_8BIT|INVERT_MII_PWR| PCI_USES_MASTER, IS_CYCLONE|HAS_NWAY|HAS_CB_FNS|EEPROM_8BIT|INVERT_MII_PWR|
INVERT_LED_PWR|HAS_HWCKSM, 128, }, INVERT_LED_PWR|HAS_HWCKSM, 128, },
{"3CXFEM656C Tornado+Winmodem CardBus", /* From pcmcia-cs-3.1.5 */ {"3CXFEM656C Tornado+Winmodem CardBus", /* From pcmcia-cs-3.1.5 */
PCI_USES_IO|PCI_USES_MASTER, IS_TORNADO|HAS_NWAY|HAS_CB_FNS|EEPROM_8BIT|INVERT_MII_PWR| PCI_USES_MASTER, IS_TORNADO|HAS_NWAY|HAS_CB_FNS|EEPROM_8BIT|INVERT_MII_PWR|
MAX_COLLISION_RESET|HAS_HWCKSM, 128, }, MAX_COLLISION_RESET|HAS_HWCKSM, 128, },
{"3c450 HomePNA Tornado", /* AKPM: from Don's 0.99Q */ {"3c450 HomePNA Tornado", /* AKPM: from Don's 0.99Q */
PCI_USES_IO|PCI_USES_MASTER, IS_TORNADO|HAS_NWAY|HAS_HWCKSM, 128, }, PCI_USES_MASTER, IS_TORNADO|HAS_NWAY|HAS_HWCKSM, 128, },
{"3c920 Tornado", {"3c920 Tornado",
PCI_USES_IO|PCI_USES_MASTER, IS_TORNADO|HAS_NWAY|HAS_HWCKSM, 128, }, PCI_USES_MASTER, IS_TORNADO|HAS_NWAY|HAS_HWCKSM, 128, },
{"3c982 Hydra Dual Port A", {"3c982 Hydra Dual Port A",
PCI_USES_IO|PCI_USES_MASTER, IS_TORNADO|HAS_HWCKSM|HAS_NWAY, 128, }, PCI_USES_MASTER, IS_TORNADO|HAS_HWCKSM|HAS_NWAY, 128, },
{"3c982 Hydra Dual Port B", {"3c982 Hydra Dual Port B",
PCI_USES_IO|PCI_USES_MASTER, IS_TORNADO|HAS_HWCKSM|HAS_NWAY, 128, }, PCI_USES_MASTER, IS_TORNADO|HAS_HWCKSM|HAS_NWAY, 128, },
{"3c905B-T4", {"3c905B-T4",
PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_NWAY|HAS_HWCKSM|EXTRA_PREAMBLE, 128, }, PCI_USES_MASTER, IS_CYCLONE|HAS_NWAY|HAS_HWCKSM|EXTRA_PREAMBLE, 128, },
{"3c920B-EMB-WNM Tornado", {"3c920B-EMB-WNM Tornado",
PCI_USES_IO|PCI_USES_MASTER, IS_TORNADO|HAS_NWAY|HAS_HWCKSM, 128, }, PCI_USES_MASTER, IS_TORNADO|HAS_NWAY|HAS_HWCKSM, 128, },
{NULL,}, /* NULL terminated list. */ {NULL,}, /* NULL terminated list. */
}; };
......
...@@ -683,11 +683,6 @@ struct netdev_private { ...@@ -683,11 +683,6 @@ struct netdev_private {
}; };
/* The station address location in the EEPROM. */ /* The station address location in the EEPROM. */
#ifdef MEM_MAPPING
#define PCI_IOTYPE (PCI_USES_MASTER | PCI_USES_MEM | PCI_ADDR1)
#else
#define PCI_IOTYPE (PCI_USES_MASTER | PCI_USES_IO | PCI_ADDR0)
#endif
/* The struct pci_device_id consist of: /* The struct pci_device_id consist of:
vendor, device Vendor and device ID to match (or PCI_ANY_ID) vendor, device Vendor and device ID to match (or PCI_ANY_ID)
subvendor, subdevice Subsystem vendor and device ID to match (or PCI_ANY_ID) subvendor, subdevice Subsystem vendor and device ID to match (or PCI_ANY_ID)
...@@ -695,9 +690,10 @@ struct netdev_private { ...@@ -695,9 +690,10 @@ struct netdev_private {
class_mask of the class are honored during the comparison. class_mask of the class are honored during the comparison.
driver_data Data private to the driver. driver_data Data private to the driver.
*/ */
static struct pci_device_id rio_pci_tbl[] = {
{0x1186, 0x4000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, static const struct pci_device_id rio_pci_tbl[] = {
{0,} {0x1186, 0x4000, PCI_ANY_ID, PCI_ANY_ID, },
{ }
}; };
MODULE_DEVICE_TABLE (pci, rio_pci_tbl); MODULE_DEVICE_TABLE (pci, rio_pci_tbl);
#define TX_TIMEOUT (4*HZ) #define TX_TIMEOUT (4*HZ)
......
...@@ -410,10 +410,7 @@ dm9000_probe(struct platform_device *pdev) ...@@ -410,10 +410,7 @@ dm9000_probe(struct platform_device *pdev)
if (pdev->num_resources < 2) { if (pdev->num_resources < 2) {
ret = -ENODEV; ret = -ENODEV;
goto out; goto out;
} } else if (pdev->num_resources == 2) {
switch (pdev->num_resources) {
case 2:
base = pdev->resource[0].start; base = pdev->resource[0].start;
if (!request_mem_region(base, 4, ndev->name)) { if (!request_mem_region(base, 4, ndev->name)) {
...@@ -423,17 +420,16 @@ dm9000_probe(struct platform_device *pdev) ...@@ -423,17 +420,16 @@ dm9000_probe(struct platform_device *pdev)
ndev->base_addr = base; ndev->base_addr = base;
ndev->irq = pdev->resource[1].start; ndev->irq = pdev->resource[1].start;
db->io_addr = (void *)base; db->io_addr = (void __iomem *)base;
db->io_data = (void *)(base + 4); db->io_data = (void __iomem *)(base + 4);
break;
case 3: } else {
db->addr_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); db->addr_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
db->data_res = platform_get_resource(pdev, IORESOURCE_MEM, 1); db->data_res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
db->irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); db->irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
if (db->addr_res == NULL || db->data_res == NULL) { if (db->addr_res == NULL || db->data_res == NULL ||
db->irq_res == NULL) {
printk(KERN_ERR PFX "insufficient resources\n"); printk(KERN_ERR PFX "insufficient resources\n");
ret = -ENOENT; ret = -ENOENT;
goto out; goto out;
...@@ -482,7 +478,6 @@ dm9000_probe(struct platform_device *pdev) ...@@ -482,7 +478,6 @@ dm9000_probe(struct platform_device *pdev)
/* ensure at least we have a default set of IO routines */ /* ensure at least we have a default set of IO routines */
dm9000_set_io(db, iosize); dm9000_set_io(db, iosize);
} }
/* check to see if anything is being over-ridden */ /* check to see if anything is being over-ridden */
...@@ -564,6 +559,13 @@ dm9000_probe(struct platform_device *pdev) ...@@ -564,6 +559,13 @@ dm9000_probe(struct platform_device *pdev)
for (i = 0; i < 6; i++) for (i = 0; i < 6; i++)
ndev->dev_addr[i] = db->srom[i]; ndev->dev_addr[i] = db->srom[i];
if (!is_valid_ether_addr(ndev->dev_addr)) {
/* try reading from mac */
for (i = 0; i < 6; i++)
ndev->dev_addr[i] = ior(db, i+DM9000_PAR);
}
if (!is_valid_ether_addr(ndev->dev_addr)) if (!is_valid_ether_addr(ndev->dev_addr))
printk("%s: Invalid ethernet MAC address. Please " printk("%s: Invalid ethernet MAC address. Please "
"set using ifconfig\n", ndev->name); "set using ifconfig\n", ndev->name);
...@@ -663,7 +665,6 @@ dm9000_init_dm9000(struct net_device *dev) ...@@ -663,7 +665,6 @@ dm9000_init_dm9000(struct net_device *dev)
db->tx_pkt_cnt = 0; db->tx_pkt_cnt = 0;
db->queue_pkt_len = 0; db->queue_pkt_len = 0;
dev->trans_start = 0; dev->trans_start = 0;
spin_lock_init(&db->lock);
} }
/* /*
...@@ -767,7 +768,7 @@ dm9000_stop(struct net_device *ndev) ...@@ -767,7 +768,7 @@ dm9000_stop(struct net_device *ndev)
* receive the packet to upper layer, free the transmitted packet * receive the packet to upper layer, free the transmitted packet
*/ */
void static void
dm9000_tx_done(struct net_device *dev, board_info_t * db) dm9000_tx_done(struct net_device *dev, board_info_t * db)
{ {
int tx_status = ior(db, DM9000_NSR); /* Got TX status */ int tx_status = ior(db, DM9000_NSR); /* Got TX status */
...@@ -1187,13 +1188,14 @@ dm9000_drv_remove(struct platform_device *pdev) ...@@ -1187,13 +1188,14 @@ dm9000_drv_remove(struct platform_device *pdev)
} }
static struct platform_driver dm9000_driver = { static struct platform_driver dm9000_driver = {
.driver = {
.name = "dm9000",
.owner = THIS_MODULE,
},
.probe = dm9000_probe, .probe = dm9000_probe,
.remove = dm9000_drv_remove, .remove = dm9000_drv_remove,
.suspend = dm9000_drv_suspend, .suspend = dm9000_drv_suspend,
.resume = dm9000_drv_resume, .resume = dm9000_drv_resume,
.driver = {
.name = "dm9000",
},
}; };
static int __init static int __init
......
...@@ -278,11 +278,6 @@ having to sign an Intel NDA when I'm helping Intel sell their own product! ...@@ -278,11 +278,6 @@ having to sign an Intel NDA when I'm helping Intel sell their own product!
static int speedo_found1(struct pci_dev *pdev, void __iomem *ioaddr, int fnd_cnt, int acpi_idle_state); static int speedo_found1(struct pci_dev *pdev, void __iomem *ioaddr, int fnd_cnt, int acpi_idle_state);
enum pci_flags_bit {
PCI_USES_IO=1, PCI_USES_MEM=2, PCI_USES_MASTER=4,
PCI_ADDR0=0x10<<0, PCI_ADDR1=0x10<<1, PCI_ADDR2=0x10<<2, PCI_ADDR3=0x10<<3,
};
/* Offsets to the various registers. /* Offsets to the various registers.
All accesses need not be longword aligned. */ All accesses need not be longword aligned. */
enum speedo_offsets { enum speedo_offsets {
......
...@@ -191,23 +191,10 @@ IVc. Errata ...@@ -191,23 +191,10 @@ IVc. Errata
*/ */
enum pci_id_flags_bits {
/* Set PCI command register bits before calling probe1(). */
PCI_USES_IO=1, PCI_USES_MEM=2, PCI_USES_MASTER=4,
/* Read and map the single following PCI BAR. */
PCI_ADDR0=0<<4, PCI_ADDR1=1<<4, PCI_ADDR2=2<<4, PCI_ADDR3=3<<4,
PCI_ADDR_64BITS=0x100, PCI_NO_ACPI_WAKE=0x200, PCI_NO_MIN_LATENCY=0x400,
};
enum chip_capability_flags { MII_PWRDWN=1, TYPE2_INTR=2, NO_MII=4 }; enum chip_capability_flags { MII_PWRDWN=1, TYPE2_INTR=2, NO_MII=4 };
#define EPIC_TOTAL_SIZE 0x100 #define EPIC_TOTAL_SIZE 0x100
#define USE_IO_OPS 1 #define USE_IO_OPS 1
#ifdef USE_IO_OPS
#define EPIC_IOTYPE PCI_USES_MASTER|PCI_USES_IO|PCI_ADDR0
#else
#define EPIC_IOTYPE PCI_USES_MASTER|PCI_USES_MEM|PCI_ADDR1
#endif
typedef enum { typedef enum {
SMSC_83C170_0, SMSC_83C170_0,
...@@ -218,7 +205,6 @@ typedef enum { ...@@ -218,7 +205,6 @@ typedef enum {
struct epic_chip_info { struct epic_chip_info {
const char *name; const char *name;
enum pci_id_flags_bits pci_flags;
int io_size; /* Needed for I/O region check or ioremap(). */ int io_size; /* Needed for I/O region check or ioremap(). */
int drv_flags; /* Driver use, intended as capability flags. */ int drv_flags; /* Driver use, intended as capability flags. */
}; };
...@@ -227,11 +213,11 @@ struct epic_chip_info { ...@@ -227,11 +213,11 @@ struct epic_chip_info {
/* indexed by chip_t */ /* indexed by chip_t */
static const struct epic_chip_info pci_id_tbl[] = { static const struct epic_chip_info pci_id_tbl[] = {
{ "SMSC EPIC/100 83c170", { "SMSC EPIC/100 83c170",
EPIC_IOTYPE, EPIC_TOTAL_SIZE, TYPE2_INTR | NO_MII | MII_PWRDWN }, EPIC_TOTAL_SIZE, TYPE2_INTR | NO_MII | MII_PWRDWN },
{ "SMSC EPIC/100 83c170", { "SMSC EPIC/100 83c170",
EPIC_IOTYPE, EPIC_TOTAL_SIZE, TYPE2_INTR }, EPIC_TOTAL_SIZE, TYPE2_INTR },
{ "SMSC EPIC/C 83c175", { "SMSC EPIC/C 83c175",
EPIC_IOTYPE, EPIC_TOTAL_SIZE, TYPE2_INTR | MII_PWRDWN }, EPIC_TOTAL_SIZE, TYPE2_INTR | MII_PWRDWN },
}; };
......
...@@ -126,16 +126,6 @@ MODULE_PARM_DESC(full_duplex, "fealnx full duplex setting(s) (1)"); ...@@ -126,16 +126,6 @@ MODULE_PARM_DESC(full_duplex, "fealnx full duplex setting(s) (1)");
#define MIN_REGION_SIZE 136 #define MIN_REGION_SIZE 136
enum pci_flags_bit {
PCI_USES_IO = 1,
PCI_USES_MEM = 2,
PCI_USES_MASTER = 4,
PCI_ADDR0 = 0x10 << 0,
PCI_ADDR1 = 0x10 << 1,
PCI_ADDR2 = 0x10 << 2,
PCI_ADDR3 = 0x10 << 3,
};
/* A chip capabilities table, matching the entries in pci_tbl[] above. */ /* A chip capabilities table, matching the entries in pci_tbl[] above. */
enum chip_capability_flags { enum chip_capability_flags {
HAS_MII_XCVR, HAS_MII_XCVR,
......
...@@ -436,7 +436,7 @@ static int __init dmascc_init(void) ...@@ -436,7 +436,7 @@ static int __init dmascc_init(void)
module_init(dmascc_init); module_init(dmascc_init);
module_exit(dmascc_exit); module_exit(dmascc_exit);
static void dev_setup(struct net_device *dev) static void __init dev_setup(struct net_device *dev)
{ {
dev->type = ARPHRD_AX25; dev->type = ARPHRD_AX25;
dev->hard_header_len = AX25_MAX_HEADER_LEN; dev->hard_header_len = AX25_MAX_HEADER_LEN;
......
...@@ -226,7 +226,6 @@ static int full_duplex[MAX_UNITS]; ...@@ -226,7 +226,6 @@ static int full_duplex[MAX_UNITS];
NATSEMI_PG1_NREGS) NATSEMI_PG1_NREGS)
#define NATSEMI_REGS_VER 1 /* v1 added RFDR registers */ #define NATSEMI_REGS_VER 1 /* v1 added RFDR registers */
#define NATSEMI_REGS_SIZE (NATSEMI_NREGS * sizeof(u32)) #define NATSEMI_REGS_SIZE (NATSEMI_NREGS * sizeof(u32))
#define NATSEMI_DEF_EEPROM_SIZE 24 /* 12 16-bit values */
/* Buffer sizes: /* Buffer sizes:
* The nic writes 32-bit values, even if the upper bytes of * The nic writes 32-bit values, even if the upper bytes of
...@@ -344,18 +343,6 @@ None characterised. ...@@ -344,18 +343,6 @@ None characterised.
enum pcistuff {
PCI_USES_IO = 0x01,
PCI_USES_MEM = 0x02,
PCI_USES_MASTER = 0x04,
PCI_ADDR0 = 0x08,
PCI_ADDR1 = 0x10,
};
/* MMIO operations required */
#define PCI_IOTYPE (PCI_USES_MASTER | PCI_USES_MEM | PCI_ADDR1)
/* /*
* Support for fibre connections on Am79C874: * Support for fibre connections on Am79C874:
* This phy needs a special setup when connected to a fibre cable. * This phy needs a special setup when connected to a fibre cable.
...@@ -363,22 +350,25 @@ enum pcistuff { ...@@ -363,22 +350,25 @@ enum pcistuff {
*/ */
#define PHYID_AM79C874 0x0022561b #define PHYID_AM79C874 0x0022561b
#define MII_MCTRL 0x15 /* mode control register */ enum {
#define MII_FX_SEL 0x0001 /* 100BASE-FX (fiber) */ MII_MCTRL = 0x15, /* mode control register */
#define MII_EN_SCRM 0x0004 /* enable scrambler (tp) */ MII_FX_SEL = 0x0001, /* 100BASE-FX (fiber) */
MII_EN_SCRM = 0x0004, /* enable scrambler (tp) */
};
/* array of board data directly indexed by pci_tbl[x].driver_data */ /* array of board data directly indexed by pci_tbl[x].driver_data */
static const struct { static const struct {
const char *name; const char *name;
unsigned long flags; unsigned long flags;
unsigned int eeprom_size;
} natsemi_pci_info[] __devinitdata = { } natsemi_pci_info[] __devinitdata = {
{ "NatSemi DP8381[56]", PCI_IOTYPE }, { "NatSemi DP8381[56]", 0, 24 },
}; };
static struct pci_device_id natsemi_pci_tbl[] = { static const struct pci_device_id natsemi_pci_tbl[] __devinitdata = {
{ PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_83815, PCI_ANY_ID, PCI_ANY_ID, }, { PCI_VENDOR_ID_NS, 0x0020, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
{ 0, }, { } /* terminate list */
}; };
MODULE_DEVICE_TABLE(pci, natsemi_pci_tbl); MODULE_DEVICE_TABLE(pci, natsemi_pci_tbl);
...@@ -813,6 +803,42 @@ static void move_int_phy(struct net_device *dev, int addr) ...@@ -813,6 +803,42 @@ static void move_int_phy(struct net_device *dev, int addr)
udelay(1); udelay(1);
} }
static void __devinit natsemi_init_media (struct net_device *dev)
{
struct netdev_private *np = netdev_priv(dev);
u32 tmp;
netif_carrier_off(dev);
/* get the initial settings from hardware */
tmp = mdio_read(dev, MII_BMCR);
np->speed = (tmp & BMCR_SPEED100)? SPEED_100 : SPEED_10;
np->duplex = (tmp & BMCR_FULLDPLX)? DUPLEX_FULL : DUPLEX_HALF;
np->autoneg = (tmp & BMCR_ANENABLE)? AUTONEG_ENABLE: AUTONEG_DISABLE;
np->advertising= mdio_read(dev, MII_ADVERTISE);
if ((np->advertising & ADVERTISE_ALL) != ADVERTISE_ALL
&& netif_msg_probe(np)) {
printk(KERN_INFO "natsemi %s: Transceiver default autonegotiation %s "
"10%s %s duplex.\n",
pci_name(np->pci_dev),
(mdio_read(dev, MII_BMCR) & BMCR_ANENABLE)?
"enabled, advertise" : "disabled, force",
(np->advertising &
(ADVERTISE_100FULL|ADVERTISE_100HALF))?
"0" : "",
(np->advertising &
(ADVERTISE_100FULL|ADVERTISE_10FULL))?
"full" : "half");
}
if (netif_msg_probe(np))
printk(KERN_INFO
"natsemi %s: Transceiver status %#04x advertising %#04x.\n",
pci_name(np->pci_dev), mdio_read(dev, MII_BMSR),
np->advertising);
}
static int __devinit natsemi_probe1 (struct pci_dev *pdev, static int __devinit natsemi_probe1 (struct pci_dev *pdev,
const struct pci_device_id *ent) const struct pci_device_id *ent)
{ {
...@@ -852,8 +878,7 @@ static int __devinit natsemi_probe1 (struct pci_dev *pdev, ...@@ -852,8 +878,7 @@ static int __devinit natsemi_probe1 (struct pci_dev *pdev,
iosize = pci_resource_len(pdev, pcibar); iosize = pci_resource_len(pdev, pcibar);
irq = pdev->irq; irq = pdev->irq;
if (natsemi_pci_info[chip_idx].flags & PCI_USES_MASTER) pci_set_master(pdev);
pci_set_master(pdev);
dev = alloc_etherdev(sizeof (struct netdev_private)); dev = alloc_etherdev(sizeof (struct netdev_private));
if (!dev) if (!dev)
...@@ -892,7 +917,7 @@ static int __devinit natsemi_probe1 (struct pci_dev *pdev, ...@@ -892,7 +917,7 @@ static int __devinit natsemi_probe1 (struct pci_dev *pdev,
np->msg_enable = (debug >= 0) ? (1<<debug)-1 : NATSEMI_DEF_MSG; np->msg_enable = (debug >= 0) ? (1<<debug)-1 : NATSEMI_DEF_MSG;
np->hands_off = 0; np->hands_off = 0;
np->intr_status = 0; np->intr_status = 0;
np->eeprom_size = NATSEMI_DEF_EEPROM_SIZE; np->eeprom_size = natsemi_pci_info[chip_idx].eeprom_size;
/* Initial port: /* Initial port:
* - If the nic was configured to use an external phy and if find_mii * - If the nic was configured to use an external phy and if find_mii
...@@ -957,34 +982,7 @@ static int __devinit natsemi_probe1 (struct pci_dev *pdev, ...@@ -957,34 +982,7 @@ static int __devinit natsemi_probe1 (struct pci_dev *pdev,
if (mtu) if (mtu)
dev->mtu = mtu; dev->mtu = mtu;
netif_carrier_off(dev); natsemi_init_media(dev);
/* get the initial settings from hardware */
tmp = mdio_read(dev, MII_BMCR);
np->speed = (tmp & BMCR_SPEED100)? SPEED_100 : SPEED_10;
np->duplex = (tmp & BMCR_FULLDPLX)? DUPLEX_FULL : DUPLEX_HALF;
np->autoneg = (tmp & BMCR_ANENABLE)? AUTONEG_ENABLE: AUTONEG_DISABLE;
np->advertising= mdio_read(dev, MII_ADVERTISE);
if ((np->advertising & ADVERTISE_ALL) != ADVERTISE_ALL
&& netif_msg_probe(np)) {
printk(KERN_INFO "natsemi %s: Transceiver default autonegotiation %s "
"10%s %s duplex.\n",
pci_name(np->pci_dev),
(mdio_read(dev, MII_BMCR) & BMCR_ANENABLE)?
"enabled, advertise" : "disabled, force",
(np->advertising &
(ADVERTISE_100FULL|ADVERTISE_100HALF))?
"0" : "",
(np->advertising &
(ADVERTISE_100FULL|ADVERTISE_10FULL))?
"full" : "half");
}
if (netif_msg_probe(np))
printk(KERN_INFO
"natsemi %s: Transceiver status %#04x advertising %#04x.\n",
pci_name(np->pci_dev), mdio_read(dev, MII_BMSR),
np->advertising);
/* save the silicon revision for later querying */ /* save the silicon revision for later querying */
np->srr = readl(ioaddr + SiliconRev); np->srr = readl(ioaddr + SiliconRev);
......
...@@ -309,12 +309,6 @@ static int pcnet32_alloc_ring(struct net_device *dev, char *name); ...@@ -309,12 +309,6 @@ static int pcnet32_alloc_ring(struct net_device *dev, char *name);
static void pcnet32_free_ring(struct net_device *dev); static void pcnet32_free_ring(struct net_device *dev);
static void pcnet32_check_media(struct net_device *dev, int verbose); static void pcnet32_check_media(struct net_device *dev, int verbose);
enum pci_flags_bit {
PCI_USES_IO = 1, PCI_USES_MEM = 2, PCI_USES_MASTER = 4,
PCI_ADDR0 = 0x10 << 0, PCI_ADDR1 = 0x10 << 1, PCI_ADDR2 =
0x10 << 2, PCI_ADDR3 = 0x10 << 3,
};
static u16 pcnet32_wio_read_csr(unsigned long addr, int index) static u16 pcnet32_wio_read_csr(unsigned long addr, int index)
{ {
outw(index, addr + PCNET32_WIO_RAP); outw(index, addr + PCNET32_WIO_RAP);
......
...@@ -123,9 +123,9 @@ static int lxt971_config_intr(struct phy_device *phydev) ...@@ -123,9 +123,9 @@ static int lxt971_config_intr(struct phy_device *phydev)
} }
static struct phy_driver lxt970_driver = { static struct phy_driver lxt970_driver = {
.phy_id = 0x07810000, .phy_id = 0x78100000,
.name = "LXT970", .name = "LXT970",
.phy_id_mask = 0x0fffffff, .phy_id_mask = 0xfffffff0,
.features = PHY_BASIC_FEATURES, .features = PHY_BASIC_FEATURES,
.flags = PHY_HAS_INTERRUPT, .flags = PHY_HAS_INTERRUPT,
.config_init = lxt970_config_init, .config_init = lxt970_config_init,
...@@ -137,9 +137,9 @@ static struct phy_driver lxt970_driver = { ...@@ -137,9 +137,9 @@ static struct phy_driver lxt970_driver = {
}; };
static struct phy_driver lxt971_driver = { static struct phy_driver lxt971_driver = {
.phy_id = 0x0001378e, .phy_id = 0x001378e0,
.name = "LXT971", .name = "LXT971",
.phy_id_mask = 0x0fffffff, .phy_id_mask = 0xfffffff0,
.features = PHY_BASIC_FEATURES, .features = PHY_BASIC_FEATURES,
.flags = PHY_HAS_INTERRUPT, .flags = PHY_HAS_INTERRUPT,
.config_aneg = genphy_config_aneg, .config_aneg = genphy_config_aneg,
......
...@@ -212,26 +212,15 @@ Test with 'ping -s 10000' on a fast computer. ...@@ -212,26 +212,15 @@ Test with 'ping -s 10000' on a fast computer.
/* /*
PCI probe table. PCI probe table.
*/ */
enum pci_id_flags_bits {
/* Set PCI command register bits before calling probe1(). */
PCI_USES_IO=1, PCI_USES_MEM=2, PCI_USES_MASTER=4,
/* Read and map the single following PCI BAR. */
PCI_ADDR0=0<<4, PCI_ADDR1=1<<4, PCI_ADDR2=2<<4, PCI_ADDR3=3<<4,
PCI_ADDR_64BITS=0x100, PCI_NO_ACPI_WAKE=0x200, PCI_NO_MIN_LATENCY=0x400,
};
enum chip_capability_flags { enum chip_capability_flags {
CanHaveMII=1, HasBrokenTx=2, AlwaysFDX=4, FDXOnNoMII=8,}; CanHaveMII=1, HasBrokenTx=2, AlwaysFDX=4, FDXOnNoMII=8,
#ifdef USE_IO_OPS };
#define W840_FLAGS (PCI_USES_IO | PCI_ADDR0 | PCI_USES_MASTER)
#else
#define W840_FLAGS (PCI_USES_MEM | PCI_ADDR1 | PCI_USES_MASTER)
#endif
static struct pci_device_id w840_pci_tbl[] = { static const struct pci_device_id w840_pci_tbl[] = {
{ 0x1050, 0x0840, PCI_ANY_ID, 0x8153, 0, 0, 0 }, { 0x1050, 0x0840, PCI_ANY_ID, 0x8153, 0, 0, 0 },
{ 0x1050, 0x0840, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 }, { 0x1050, 0x0840, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 },
{ 0x11f6, 0x2011, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2 }, { 0x11f6, 0x2011, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2 },
{ 0, } { }
}; };
MODULE_DEVICE_TABLE(pci, w840_pci_tbl); MODULE_DEVICE_TABLE(pci, w840_pci_tbl);
...@@ -241,18 +230,17 @@ struct pci_id_info { ...@@ -241,18 +230,17 @@ struct pci_id_info {
int pci, pci_mask, subsystem, subsystem_mask; int pci, pci_mask, subsystem, subsystem_mask;
int revision, revision_mask; /* Only 8 bits. */ int revision, revision_mask; /* Only 8 bits. */
} id; } id;
enum pci_id_flags_bits pci_flags;
int io_size; /* Needed for I/O region check or ioremap(). */ int io_size; /* Needed for I/O region check or ioremap(). */
int drv_flags; /* Driver use, intended as capability flags. */ int drv_flags; /* Driver use, intended as capability flags. */
}; };
static struct pci_id_info pci_id_tbl[] = { static struct pci_id_info pci_id_tbl[] = {
{"Winbond W89c840", /* Sometime a Level-One switch card. */ {"Winbond W89c840", /* Sometime a Level-One switch card. */
{ 0x08401050, 0xffffffff, 0x81530000, 0xffff0000 }, { 0x08401050, 0xffffffff, 0x81530000, 0xffff0000 },
W840_FLAGS, 128, CanHaveMII | HasBrokenTx | FDXOnNoMII}, 128, CanHaveMII | HasBrokenTx | FDXOnNoMII},
{"Winbond W89c840", { 0x08401050, 0xffffffff, }, {"Winbond W89c840", { 0x08401050, 0xffffffff, },
W840_FLAGS, 128, CanHaveMII | HasBrokenTx}, 128, CanHaveMII | HasBrokenTx},
{"Compex RL100-ATX", { 0x201111F6, 0xffffffff,}, {"Compex RL100-ATX", { 0x201111F6, 0xffffffff,},
W840_FLAGS, 128, CanHaveMII | HasBrokenTx}, 128, CanHaveMII | HasBrokenTx},
{NULL,}, /* 0 terminated list. */ {NULL,}, /* 0 terminated list. */
}; };
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* under the terms of version 2 of the GNU General Public License * under the terms of version 2 of the GNU General Public License
* as published by the Free Software Foundation. * as published by the Free Software Foundation.
* *
* For information see http://hq.pm.waw.pl/hdlc/ * For information see <http://www.kernel.org/pub/linux/utils/net/hdlc/>
* *
* Sources of information: * Sources of information:
* Hitachi HD64570 SCA User's Manual * Hitachi HD64570 SCA User's Manual
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* under the terms of version 2 of the GNU General Public License * under the terms of version 2 of the GNU General Public License
* as published by the Free Software Foundation. * as published by the Free Software Foundation.
* *
* For information see http://hq.pm.waw.pl/hdlc/ * For information see <http://www.kernel.org/pub/linux/utils/net/hdlc/>
* *
* Note: integrated CSU/DSU/DDS are not supported by this driver * Note: integrated CSU/DSU/DDS are not supported by this driver
* *
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* under the terms of version 2 of the GNU General Public License * under the terms of version 2 of the GNU General Public License
* as published by the Free Software Foundation. * as published by the Free Software Foundation.
* *
* For information see http://hq.pm.waw.pl/hdlc/ * For information see <http://www.kernel.org/pub/linux/utils/net/hdlc/>
* *
* Sources of information: * Sources of information:
* Hitachi HD64572 SCA-II User's Manual * Hitachi HD64572 SCA-II User's Manual
......
...@@ -234,14 +234,6 @@ See Packet Engines confidential appendix (prototype chips only). ...@@ -234,14 +234,6 @@ See Packet Engines confidential appendix (prototype chips only).
enum pci_id_flags_bits {
/* Set PCI command register bits before calling probe1(). */
PCI_USES_IO=1, PCI_USES_MEM=2, PCI_USES_MASTER=4,
/* Read and map the single following PCI BAR. */
PCI_ADDR0=0<<4, PCI_ADDR1=1<<4, PCI_ADDR2=2<<4, PCI_ADDR3=3<<4,
PCI_ADDR_64BITS=0x100, PCI_NO_ACPI_WAKE=0x200, PCI_NO_MIN_LATENCY=0x400,
PCI_UNUSED_IRQ=0x800,
};
enum capability_flags { enum capability_flags {
HasMII=1, FullTxStatus=2, IsGigabit=4, HasMulticastBug=8, FullRxStatus=16, HasMII=1, FullTxStatus=2, IsGigabit=4, HasMulticastBug=8, FullRxStatus=16,
HasMACAddrBug=32, /* Only on early revs. */ HasMACAddrBug=32, /* Only on early revs. */
...@@ -249,11 +241,6 @@ enum capability_flags { ...@@ -249,11 +241,6 @@ enum capability_flags {
}; };
/* The PCI I/O space extent. */ /* The PCI I/O space extent. */
#define YELLOWFIN_SIZE 0x100 #define YELLOWFIN_SIZE 0x100
#ifdef USE_IO_OPS
#define PCI_IOTYPE (PCI_USES_MASTER | PCI_USES_IO | PCI_ADDR0)
#else
#define PCI_IOTYPE (PCI_USES_MASTER | PCI_USES_MEM | PCI_ADDR1)
#endif
struct pci_id_info { struct pci_id_info {
const char *name; const char *name;
...@@ -261,24 +248,23 @@ struct pci_id_info { ...@@ -261,24 +248,23 @@ struct pci_id_info {
int pci, pci_mask, subsystem, subsystem_mask; int pci, pci_mask, subsystem, subsystem_mask;
int revision, revision_mask; /* Only 8 bits. */ int revision, revision_mask; /* Only 8 bits. */
} id; } id;
enum pci_id_flags_bits pci_flags;
int io_size; /* Needed for I/O region check or ioremap(). */ int io_size; /* Needed for I/O region check or ioremap(). */
int drv_flags; /* Driver use, intended as capability flags. */ int drv_flags; /* Driver use, intended as capability flags. */
}; };
static const struct pci_id_info pci_id_tbl[] = { static const struct pci_id_info pci_id_tbl[] = {
{"Yellowfin G-NIC Gigabit Ethernet", { 0x07021000, 0xffffffff}, {"Yellowfin G-NIC Gigabit Ethernet", { 0x07021000, 0xffffffff},
PCI_IOTYPE, YELLOWFIN_SIZE, YELLOWFIN_SIZE,
FullTxStatus | IsGigabit | HasMulticastBug | HasMACAddrBug | DontUseEeprom}, FullTxStatus | IsGigabit | HasMulticastBug | HasMACAddrBug | DontUseEeprom},
{"Symbios SYM83C885", { 0x07011000, 0xffffffff}, {"Symbios SYM83C885", { 0x07011000, 0xffffffff},
PCI_IOTYPE, YELLOWFIN_SIZE, HasMII | DontUseEeprom }, YELLOWFIN_SIZE, HasMII | DontUseEeprom },
{NULL,}, { }
}; };
static struct pci_device_id yellowfin_pci_tbl[] = { static const struct pci_device_id yellowfin_pci_tbl[] = {
{ 0x1000, 0x0702, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, { 0x1000, 0x0702, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
{ 0x1000, 0x0701, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 }, { 0x1000, 0x0701, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 },
{ 0, } { }
}; };
MODULE_DEVICE_TABLE (pci, yellowfin_pci_tbl); MODULE_DEVICE_TABLE (pci, yellowfin_pci_tbl);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册