mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-22 01:10:28 +00:00
pcmcia: dev_node removal (drivers with unregister_netdev check)
As a third step, remove any usage of dev_node_t from drivers which only wrote to this typedef/struct, except to determine whether register_netdev() succeeded previously. However, the function calling unregister_netdev() was only ever called by the PCMCIA core if register_netdev() succeeded previously. The lonely exception was easily fixed. CC: netdev@vger.kernel.org CC: linux-wireless@vger.kernel.org Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
This commit is contained in:
parent
ded6a1a341
commit
c7c2fa0790
@ -200,7 +200,6 @@ enum Window4 { /* Window 4: Xcvr/media bits. */
|
|||||||
|
|
||||||
struct el3_private {
|
struct el3_private {
|
||||||
struct pcmcia_device *p_dev;
|
struct pcmcia_device *p_dev;
|
||||||
dev_node_t node;
|
|
||||||
u16 advertising, partner; /* NWay media advertisement */
|
u16 advertising, partner; /* NWay media advertisement */
|
||||||
unsigned char phys; /* MII device address */
|
unsigned char phys; /* MII device address */
|
||||||
unsigned int autoselect:1, default_media:3; /* Read from the EEPROM/Wn3_Config. */
|
unsigned int autoselect:1, default_media:3; /* Read from the EEPROM/Wn3_Config. */
|
||||||
@ -309,8 +308,7 @@ static void tc574_detach(struct pcmcia_device *link)
|
|||||||
|
|
||||||
dev_dbg(&link->dev, "3c574_detach()\n");
|
dev_dbg(&link->dev, "3c574_detach()\n");
|
||||||
|
|
||||||
if (link->dev_node)
|
unregister_netdev(dev);
|
||||||
unregister_netdev(dev);
|
|
||||||
|
|
||||||
tc574_release(link);
|
tc574_release(link);
|
||||||
|
|
||||||
@ -444,17 +442,13 @@ static int tc574_config(struct pcmcia_device *link)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
link->dev_node = &lp->node;
|
|
||||||
SET_NETDEV_DEV(dev, &link->dev);
|
SET_NETDEV_DEV(dev, &link->dev);
|
||||||
|
|
||||||
if (register_netdev(dev) != 0) {
|
if (register_netdev(dev) != 0) {
|
||||||
printk(KERN_NOTICE "3c574_cs: register_netdev() failed\n");
|
printk(KERN_NOTICE "3c574_cs: register_netdev() failed\n");
|
||||||
link->dev_node = NULL;
|
|
||||||
goto failed;
|
goto failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(lp->node.dev_name, dev->name);
|
|
||||||
|
|
||||||
printk(KERN_INFO "%s: %s at io %#3lx, irq %d, "
|
printk(KERN_INFO "%s: %s at io %#3lx, irq %d, "
|
||||||
"hw_addr %pM.\n",
|
"hw_addr %pM.\n",
|
||||||
dev->name, cardname, dev->base_addr, dev->irq,
|
dev->name, cardname, dev->base_addr, dev->irq,
|
||||||
|
@ -106,7 +106,6 @@ enum RxFilter {
|
|||||||
|
|
||||||
struct el3_private {
|
struct el3_private {
|
||||||
struct pcmcia_device *p_dev;
|
struct pcmcia_device *p_dev;
|
||||||
dev_node_t node;
|
|
||||||
/* For transceiver monitoring */
|
/* For transceiver monitoring */
|
||||||
struct timer_list media;
|
struct timer_list media;
|
||||||
u16 media_status;
|
u16 media_status;
|
||||||
@ -222,8 +221,7 @@ static void tc589_detach(struct pcmcia_device *link)
|
|||||||
|
|
||||||
dev_dbg(&link->dev, "3c589_detach\n");
|
dev_dbg(&link->dev, "3c589_detach\n");
|
||||||
|
|
||||||
if (link->dev_node)
|
unregister_netdev(dev);
|
||||||
unregister_netdev(dev);
|
|
||||||
|
|
||||||
tc589_release(link);
|
tc589_release(link);
|
||||||
|
|
||||||
@ -241,7 +239,6 @@ static void tc589_detach(struct pcmcia_device *link)
|
|||||||
static int tc589_config(struct pcmcia_device *link)
|
static int tc589_config(struct pcmcia_device *link)
|
||||||
{
|
{
|
||||||
struct net_device *dev = link->priv;
|
struct net_device *dev = link->priv;
|
||||||
struct el3_private *lp = netdev_priv(dev);
|
|
||||||
__be16 *phys_addr;
|
__be16 *phys_addr;
|
||||||
int ret, i, j, multi = 0, fifo;
|
int ret, i, j, multi = 0, fifo;
|
||||||
unsigned int ioaddr;
|
unsigned int ioaddr;
|
||||||
@ -312,17 +309,13 @@ static int tc589_config(struct pcmcia_device *link)
|
|||||||
else
|
else
|
||||||
printk(KERN_ERR "3c589_cs: invalid if_port requested\n");
|
printk(KERN_ERR "3c589_cs: invalid if_port requested\n");
|
||||||
|
|
||||||
link->dev_node = &lp->node;
|
|
||||||
SET_NETDEV_DEV(dev, &link->dev);
|
SET_NETDEV_DEV(dev, &link->dev);
|
||||||
|
|
||||||
if (register_netdev(dev) != 0) {
|
if (register_netdev(dev) != 0) {
|
||||||
printk(KERN_ERR "3c589_cs: register_netdev() failed\n");
|
printk(KERN_ERR "3c589_cs: register_netdev() failed\n");
|
||||||
link->dev_node = NULL;
|
|
||||||
goto failed;
|
goto failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(lp->node.dev_name, dev->name);
|
|
||||||
|
|
||||||
printk(KERN_INFO "%s: 3Com 3c%s, io %#3lx, irq %d, "
|
printk(KERN_INFO "%s: 3Com 3c%s, io %#3lx, irq %d, "
|
||||||
"hw_addr %pM\n",
|
"hw_addr %pM\n",
|
||||||
dev->name, (multi ? "562" : "589"), dev->base_addr, dev->irq,
|
dev->name, (multi ? "562" : "589"), dev->base_addr, dev->irq,
|
||||||
|
@ -113,7 +113,6 @@ static irqreturn_t ax_interrupt(int irq, void *dev_id);
|
|||||||
|
|
||||||
typedef struct axnet_dev_t {
|
typedef struct axnet_dev_t {
|
||||||
struct pcmcia_device *p_dev;
|
struct pcmcia_device *p_dev;
|
||||||
dev_node_t node;
|
|
||||||
caddr_t base;
|
caddr_t base;
|
||||||
struct timer_list watchdog;
|
struct timer_list watchdog;
|
||||||
int stale, fast_poll;
|
int stale, fast_poll;
|
||||||
@ -194,8 +193,7 @@ static void axnet_detach(struct pcmcia_device *link)
|
|||||||
|
|
||||||
dev_dbg(&link->dev, "axnet_detach(0x%p)\n", link);
|
dev_dbg(&link->dev, "axnet_detach(0x%p)\n", link);
|
||||||
|
|
||||||
if (link->dev_node)
|
unregister_netdev(dev);
|
||||||
unregister_netdev(dev);
|
|
||||||
|
|
||||||
axnet_release(link);
|
axnet_release(link);
|
||||||
|
|
||||||
@ -392,17 +390,13 @@ static int axnet_config(struct pcmcia_device *link)
|
|||||||
}
|
}
|
||||||
|
|
||||||
info->phy_id = (i < 32) ? i : -1;
|
info->phy_id = (i < 32) ? i : -1;
|
||||||
link->dev_node = &info->node;
|
|
||||||
SET_NETDEV_DEV(dev, &link->dev);
|
SET_NETDEV_DEV(dev, &link->dev);
|
||||||
|
|
||||||
if (register_netdev(dev) != 0) {
|
if (register_netdev(dev) != 0) {
|
||||||
printk(KERN_NOTICE "axnet_cs: register_netdev() failed\n");
|
printk(KERN_NOTICE "axnet_cs: register_netdev() failed\n");
|
||||||
link->dev_node = NULL;
|
|
||||||
goto failed;
|
goto failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(info->node.dev_name, dev->name);
|
|
||||||
|
|
||||||
printk(KERN_INFO "%s: Asix AX88%d90: io %#3lx, irq %d, "
|
printk(KERN_INFO "%s: Asix AX88%d90: io %#3lx, irq %d, "
|
||||||
"hw_addr %pM\n",
|
"hw_addr %pM\n",
|
||||||
dev->name, ((info->flags & IS_AX88790) ? 7 : 1),
|
dev->name, ((info->flags & IS_AX88790) ? 7 : 1),
|
||||||
|
@ -122,7 +122,6 @@ static void com20020_detach(struct pcmcia_device *p_dev);
|
|||||||
|
|
||||||
typedef struct com20020_dev_t {
|
typedef struct com20020_dev_t {
|
||||||
struct net_device *dev;
|
struct net_device *dev;
|
||||||
dev_node_t node;
|
|
||||||
} com20020_dev_t;
|
} com20020_dev_t;
|
||||||
|
|
||||||
/*======================================================================
|
/*======================================================================
|
||||||
@ -195,18 +194,16 @@ static void com20020_detach(struct pcmcia_device *link)
|
|||||||
|
|
||||||
dev_dbg(&link->dev, "com20020_detach\n");
|
dev_dbg(&link->dev, "com20020_detach\n");
|
||||||
|
|
||||||
if (link->dev_node) {
|
dev_dbg(&link->dev, "unregister...\n");
|
||||||
dev_dbg(&link->dev, "unregister...\n");
|
|
||||||
|
|
||||||
unregister_netdev(dev);
|
unregister_netdev(dev);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* this is necessary because we register our IRQ separately
|
* this is necessary because we register our IRQ separately
|
||||||
* from card services.
|
* from card services.
|
||||||
*/
|
*/
|
||||||
if (dev->irq)
|
if (dev->irq)
|
||||||
free_irq(dev->irq, dev);
|
free_irq(dev->irq, dev);
|
||||||
}
|
|
||||||
|
|
||||||
com20020_release(link);
|
com20020_release(link);
|
||||||
|
|
||||||
@ -297,7 +294,6 @@ static int com20020_config(struct pcmcia_device *link)
|
|||||||
lp->card_name = "PCMCIA COM20020";
|
lp->card_name = "PCMCIA COM20020";
|
||||||
lp->card_flags = ARC_CAN_10MBIT; /* pretend all of them can 10Mbit */
|
lp->card_flags = ARC_CAN_10MBIT; /* pretend all of them can 10Mbit */
|
||||||
|
|
||||||
link->dev_node = &info->node;
|
|
||||||
SET_NETDEV_DEV(dev, &link->dev);
|
SET_NETDEV_DEV(dev, &link->dev);
|
||||||
|
|
||||||
i = com20020_found(dev, 0); /* calls register_netdev */
|
i = com20020_found(dev, 0); /* calls register_netdev */
|
||||||
@ -305,12 +301,9 @@ static int com20020_config(struct pcmcia_device *link)
|
|||||||
if (i != 0) {
|
if (i != 0) {
|
||||||
dev_printk(KERN_NOTICE, &link->dev,
|
dev_printk(KERN_NOTICE, &link->dev,
|
||||||
"com20020_cs: com20020_found() failed\n");
|
"com20020_cs: com20020_found() failed\n");
|
||||||
link->dev_node = NULL;
|
|
||||||
goto failed;
|
goto failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(info->node.dev_name, dev->name);
|
|
||||||
|
|
||||||
dev_dbg(&link->dev,KERN_INFO "%s: port %#3lx, irq %d\n",
|
dev_dbg(&link->dev,KERN_INFO "%s: port %#3lx, irq %d\n",
|
||||||
dev->name, dev->base_addr, dev->irq);
|
dev->name, dev->base_addr, dev->irq);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -110,7 +110,6 @@ typedef enum { MBH10302, MBH10304, TDK, CONTEC, LA501, UNGERMANN,
|
|||||||
*/
|
*/
|
||||||
typedef struct local_info_t {
|
typedef struct local_info_t {
|
||||||
struct pcmcia_device *p_dev;
|
struct pcmcia_device *p_dev;
|
||||||
dev_node_t node;
|
|
||||||
long open_time;
|
long open_time;
|
||||||
uint tx_started:1;
|
uint tx_started:1;
|
||||||
uint tx_queue;
|
uint tx_queue;
|
||||||
@ -274,8 +273,7 @@ static void fmvj18x_detach(struct pcmcia_device *link)
|
|||||||
|
|
||||||
dev_dbg(&link->dev, "fmvj18x_detach\n");
|
dev_dbg(&link->dev, "fmvj18x_detach\n");
|
||||||
|
|
||||||
if (link->dev_node)
|
unregister_netdev(dev);
|
||||||
unregister_netdev(dev);
|
|
||||||
|
|
||||||
fmvj18x_release(link);
|
fmvj18x_release(link);
|
||||||
|
|
||||||
@ -523,17 +521,13 @@ static int fmvj18x_config(struct pcmcia_device *link)
|
|||||||
}
|
}
|
||||||
|
|
||||||
lp->cardtype = cardtype;
|
lp->cardtype = cardtype;
|
||||||
link->dev_node = &lp->node;
|
|
||||||
SET_NETDEV_DEV(dev, &link->dev);
|
SET_NETDEV_DEV(dev, &link->dev);
|
||||||
|
|
||||||
if (register_netdev(dev) != 0) {
|
if (register_netdev(dev) != 0) {
|
||||||
printk(KERN_NOTICE "fmvj18x_cs: register_netdev() failed\n");
|
printk(KERN_NOTICE "fmvj18x_cs: register_netdev() failed\n");
|
||||||
link->dev_node = NULL;
|
|
||||||
goto failed;
|
goto failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(lp->node.dev_name, dev->name);
|
|
||||||
|
|
||||||
/* print current configuration */
|
/* print current configuration */
|
||||||
printk(KERN_INFO "%s: %s, sram %s, port %#3lx, irq %d, "
|
printk(KERN_INFO "%s: %s, sram %s, port %#3lx, irq %d, "
|
||||||
"hw_addr %pM\n",
|
"hw_addr %pM\n",
|
||||||
|
@ -104,7 +104,6 @@ static void ibmtr_detach(struct pcmcia_device *p_dev);
|
|||||||
typedef struct ibmtr_dev_t {
|
typedef struct ibmtr_dev_t {
|
||||||
struct pcmcia_device *p_dev;
|
struct pcmcia_device *p_dev;
|
||||||
struct net_device *dev;
|
struct net_device *dev;
|
||||||
dev_node_t node;
|
|
||||||
window_handle_t sram_win_handle;
|
window_handle_t sram_win_handle;
|
||||||
struct tok_info *ti;
|
struct tok_info *ti;
|
||||||
} ibmtr_dev_t;
|
} ibmtr_dev_t;
|
||||||
@ -190,8 +189,7 @@ static void ibmtr_detach(struct pcmcia_device *link)
|
|||||||
*/
|
*/
|
||||||
ti->sram_phys |= 1;
|
ti->sram_phys |= 1;
|
||||||
|
|
||||||
if (link->dev_node)
|
unregister_netdev(dev);
|
||||||
unregister_netdev(dev);
|
|
||||||
|
|
||||||
del_timer_sync(&(ti->tr_timer));
|
del_timer_sync(&(ti->tr_timer));
|
||||||
|
|
||||||
@ -289,18 +287,14 @@ static int __devinit ibmtr_config(struct pcmcia_device *link)
|
|||||||
Adapters Technical Reference" SC30-3585 for this info. */
|
Adapters Technical Reference" SC30-3585 for this info. */
|
||||||
ibmtr_hw_setup(dev, mmiobase);
|
ibmtr_hw_setup(dev, mmiobase);
|
||||||
|
|
||||||
link->dev_node = &info->node;
|
|
||||||
SET_NETDEV_DEV(dev, &link->dev);
|
SET_NETDEV_DEV(dev, &link->dev);
|
||||||
|
|
||||||
i = ibmtr_probe_card(dev);
|
i = ibmtr_probe_card(dev);
|
||||||
if (i != 0) {
|
if (i != 0) {
|
||||||
printk(KERN_NOTICE "ibmtr_cs: register_netdev() failed\n");
|
printk(KERN_NOTICE "ibmtr_cs: register_netdev() failed\n");
|
||||||
link->dev_node = NULL;
|
|
||||||
goto failed;
|
goto failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(info->node.dev_name, dev->name);
|
|
||||||
|
|
||||||
printk(KERN_INFO
|
printk(KERN_INFO
|
||||||
"%s: port %#3lx, irq %d, mmio %#5lx, sram %#5lx, hwaddr=%pM\n",
|
"%s: port %#3lx, irq %d, mmio %#5lx, sram %#5lx, hwaddr=%pM\n",
|
||||||
dev->name, dev->base_addr, dev->irq,
|
dev->name, dev->base_addr, dev->irq,
|
||||||
|
@ -363,7 +363,6 @@ typedef struct _mace_statistics {
|
|||||||
|
|
||||||
typedef struct _mace_private {
|
typedef struct _mace_private {
|
||||||
struct pcmcia_device *p_dev;
|
struct pcmcia_device *p_dev;
|
||||||
dev_node_t node;
|
|
||||||
struct net_device_stats linux_stats; /* Linux statistics counters */
|
struct net_device_stats linux_stats; /* Linux statistics counters */
|
||||||
mace_statistics mace_stats; /* MACE chip statistics counters */
|
mace_statistics mace_stats; /* MACE chip statistics counters */
|
||||||
|
|
||||||
@ -491,8 +490,7 @@ static void nmclan_detach(struct pcmcia_device *link)
|
|||||||
|
|
||||||
dev_dbg(&link->dev, "nmclan_detach\n");
|
dev_dbg(&link->dev, "nmclan_detach\n");
|
||||||
|
|
||||||
if (link->dev_node)
|
unregister_netdev(dev);
|
||||||
unregister_netdev(dev);
|
|
||||||
|
|
||||||
nmclan_release(link);
|
nmclan_release(link);
|
||||||
|
|
||||||
@ -696,18 +694,14 @@ static int nmclan_config(struct pcmcia_device *link)
|
|||||||
else
|
else
|
||||||
printk(KERN_NOTICE "nmclan_cs: invalid if_port requested\n");
|
printk(KERN_NOTICE "nmclan_cs: invalid if_port requested\n");
|
||||||
|
|
||||||
link->dev_node = &lp->node;
|
|
||||||
SET_NETDEV_DEV(dev, &link->dev);
|
SET_NETDEV_DEV(dev, &link->dev);
|
||||||
|
|
||||||
i = register_netdev(dev);
|
i = register_netdev(dev);
|
||||||
if (i != 0) {
|
if (i != 0) {
|
||||||
printk(KERN_NOTICE "nmclan_cs: register_netdev() failed\n");
|
printk(KERN_NOTICE "nmclan_cs: register_netdev() failed\n");
|
||||||
link->dev_node = NULL;
|
|
||||||
goto failed;
|
goto failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(lp->node.dev_name, dev->name);
|
|
||||||
|
|
||||||
printk(KERN_INFO "%s: nmclan: port %#3lx, irq %d, %s port,"
|
printk(KERN_INFO "%s: nmclan: port %#3lx, irq %d, %s port,"
|
||||||
" hw_addr %pM\n",
|
" hw_addr %pM\n",
|
||||||
dev->name, dev->base_addr, dev->irq, if_names[dev->if_port],
|
dev->name, dev->base_addr, dev->irq, if_names[dev->if_port],
|
||||||
|
@ -208,7 +208,6 @@ static hw_info_t dl10022_info = { 0, 0, 0, 0, IS_DL10022|HAS_MII };
|
|||||||
|
|
||||||
typedef struct pcnet_dev_t {
|
typedef struct pcnet_dev_t {
|
||||||
struct pcmcia_device *p_dev;
|
struct pcmcia_device *p_dev;
|
||||||
dev_node_t node;
|
|
||||||
u_int flags;
|
u_int flags;
|
||||||
void __iomem *base;
|
void __iomem *base;
|
||||||
struct timer_list watchdog;
|
struct timer_list watchdog;
|
||||||
@ -287,8 +286,7 @@ static void pcnet_detach(struct pcmcia_device *link)
|
|||||||
|
|
||||||
dev_dbg(&link->dev, "pcnet_detach\n");
|
dev_dbg(&link->dev, "pcnet_detach\n");
|
||||||
|
|
||||||
if (link->dev_node)
|
unregister_netdev(dev);
|
||||||
unregister_netdev(dev);
|
|
||||||
|
|
||||||
pcnet_release(link);
|
pcnet_release(link);
|
||||||
|
|
||||||
@ -639,17 +637,13 @@ static int pcnet_config(struct pcmcia_device *link)
|
|||||||
if (info->flags & (IS_DL10019|IS_DL10022))
|
if (info->flags & (IS_DL10019|IS_DL10022))
|
||||||
mii_phy_probe(dev);
|
mii_phy_probe(dev);
|
||||||
|
|
||||||
link->dev_node = &info->node;
|
|
||||||
SET_NETDEV_DEV(dev, &link->dev);
|
SET_NETDEV_DEV(dev, &link->dev);
|
||||||
|
|
||||||
if (register_netdev(dev) != 0) {
|
if (register_netdev(dev) != 0) {
|
||||||
printk(KERN_NOTICE "pcnet_cs: register_netdev() failed\n");
|
printk(KERN_NOTICE "pcnet_cs: register_netdev() failed\n");
|
||||||
link->dev_node = NULL;
|
|
||||||
goto failed;
|
goto failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(info->node.dev_name, dev->name);
|
|
||||||
|
|
||||||
if (info->flags & (IS_DL10019|IS_DL10022)) {
|
if (info->flags & (IS_DL10019|IS_DL10022)) {
|
||||||
u_char id = inb(dev->base_addr + 0x1a);
|
u_char id = inb(dev->base_addr + 0x1a);
|
||||||
printk(KERN_INFO "%s: NE2000 (DL100%d rev %02x): ",
|
printk(KERN_INFO "%s: NE2000 (DL100%d rev %02x): ",
|
||||||
|
@ -103,7 +103,6 @@ struct smc_private {
|
|||||||
u_short manfid;
|
u_short manfid;
|
||||||
u_short cardid;
|
u_short cardid;
|
||||||
|
|
||||||
dev_node_t node;
|
|
||||||
struct sk_buff *saved_skb;
|
struct sk_buff *saved_skb;
|
||||||
int packets_waiting;
|
int packets_waiting;
|
||||||
void __iomem *base;
|
void __iomem *base;
|
||||||
@ -323,7 +322,6 @@ static int smc91c92_probe(struct pcmcia_device *link)
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
smc = netdev_priv(dev);
|
smc = netdev_priv(dev);
|
||||||
smc->p_dev = link;
|
smc->p_dev = link;
|
||||||
link->priv = dev;
|
|
||||||
|
|
||||||
spin_lock_init(&smc->lock);
|
spin_lock_init(&smc->lock);
|
||||||
link->io.NumPorts1 = 16;
|
link->io.NumPorts1 = 16;
|
||||||
@ -361,8 +359,7 @@ static void smc91c92_detach(struct pcmcia_device *link)
|
|||||||
|
|
||||||
dev_dbg(&link->dev, "smc91c92_detach\n");
|
dev_dbg(&link->dev, "smc91c92_detach\n");
|
||||||
|
|
||||||
if (link->dev_node)
|
unregister_netdev(dev);
|
||||||
unregister_netdev(dev);
|
|
||||||
|
|
||||||
smc91c92_release(link);
|
smc91c92_release(link);
|
||||||
|
|
||||||
@ -956,17 +953,13 @@ static int smc91c92_config(struct pcmcia_device *link)
|
|||||||
SMC_SELECT_BANK(0);
|
SMC_SELECT_BANK(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
link->dev_node = &smc->node;
|
|
||||||
SET_NETDEV_DEV(dev, &link->dev);
|
SET_NETDEV_DEV(dev, &link->dev);
|
||||||
|
|
||||||
if (register_netdev(dev) != 0) {
|
if (register_netdev(dev) != 0) {
|
||||||
printk(KERN_ERR "smc91c92_cs: register_netdev() failed\n");
|
printk(KERN_ERR "smc91c92_cs: register_netdev() failed\n");
|
||||||
link->dev_node = NULL;
|
|
||||||
goto config_undo;
|
goto config_undo;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(smc->node.dev_name, dev->name);
|
|
||||||
|
|
||||||
printk(KERN_INFO "%s: smc91c%s rev %d: io %#3lx, irq %d, "
|
printk(KERN_INFO "%s: smc91c%s rev %d: io %#3lx, irq %d, "
|
||||||
"hw_addr %pM\n",
|
"hw_addr %pM\n",
|
||||||
dev->name, name, (rev & 0x0f), dev->base_addr, dev->irq,
|
dev->name, name, (rev & 0x0f), dev->base_addr, dev->irq,
|
||||||
|
@ -297,31 +297,9 @@ static void xirc2ps_detach(struct pcmcia_device *p_dev);
|
|||||||
|
|
||||||
static irqreturn_t xirc2ps_interrupt(int irq, void *dev_id);
|
static irqreturn_t xirc2ps_interrupt(int irq, void *dev_id);
|
||||||
|
|
||||||
/****************
|
|
||||||
* A linked list of "instances" of the device. Each actual
|
|
||||||
* PCMCIA card corresponds to one device instance, and is described
|
|
||||||
* by one struct pcmcia_device structure (defined in ds.h).
|
|
||||||
*
|
|
||||||
* You may not want to use a linked list for this -- for example, the
|
|
||||||
* memory card driver uses an array of struct pcmcia_device pointers, where minor
|
|
||||||
* device numbers are used to derive the corresponding array index.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/****************
|
|
||||||
* A driver needs to provide a dev_node_t structure for each device
|
|
||||||
* on a card. In some cases, there is only one device per card (for
|
|
||||||
* example, ethernet cards, modems). In other cases, there may be
|
|
||||||
* many actual or logical devices (SCSI adapters, memory cards with
|
|
||||||
* multiple partitions). The dev_node_t structures need to be kept
|
|
||||||
* in a linked list starting at the 'dev' field of a struct pcmcia_device
|
|
||||||
* structure. We allocate them in the card's private data structure,
|
|
||||||
* because they generally can't be allocated dynamically.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef struct local_info_t {
|
typedef struct local_info_t {
|
||||||
struct net_device *dev;
|
struct net_device *dev;
|
||||||
struct pcmcia_device *p_dev;
|
struct pcmcia_device *p_dev;
|
||||||
dev_node_t node;
|
|
||||||
|
|
||||||
int card_type;
|
int card_type;
|
||||||
int probe_port;
|
int probe_port;
|
||||||
@ -579,8 +557,7 @@ xirc2ps_detach(struct pcmcia_device *link)
|
|||||||
|
|
||||||
dev_dbg(&link->dev, "detach\n");
|
dev_dbg(&link->dev, "detach\n");
|
||||||
|
|
||||||
if (link->dev_node)
|
unregister_netdev(dev);
|
||||||
unregister_netdev(dev);
|
|
||||||
|
|
||||||
xirc2ps_release(link);
|
xirc2ps_release(link);
|
||||||
|
|
||||||
@ -985,17 +962,13 @@ xirc2ps_config(struct pcmcia_device * link)
|
|||||||
if (local->dingo)
|
if (local->dingo)
|
||||||
do_reset(dev, 1); /* a kludge to make the cem56 work */
|
do_reset(dev, 1); /* a kludge to make the cem56 work */
|
||||||
|
|
||||||
link->dev_node = &local->node;
|
|
||||||
SET_NETDEV_DEV(dev, &link->dev);
|
SET_NETDEV_DEV(dev, &link->dev);
|
||||||
|
|
||||||
if ((err=register_netdev(dev))) {
|
if ((err=register_netdev(dev))) {
|
||||||
printk(KNOT_XIRC "register_netdev() failed\n");
|
printk(KNOT_XIRC "register_netdev() failed\n");
|
||||||
link->dev_node = NULL;
|
|
||||||
goto config_error;
|
goto config_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(local->node.dev_name, dev->name);
|
|
||||||
|
|
||||||
/* give some infos about the hardware */
|
/* give some infos about the hardware */
|
||||||
printk(KERN_INFO "%s: %s: port %#3lx, irq %d, hwaddr %pM\n",
|
printk(KERN_INFO "%s: %s: port %#3lx, irq %d, hwaddr %pM\n",
|
||||||
dev->name, local->manf_str,(u_long)dev->base_addr, (int)dev->irq,
|
dev->name, local->manf_str,(u_long)dev->base_addr, (int)dev->irq,
|
||||||
|
@ -50,7 +50,6 @@ MODULE_PARM_DESC(ignore_cis_vcc, "Allow voltage mismatch between card and socket
|
|||||||
* struct orinoco_private */
|
* struct orinoco_private */
|
||||||
struct orinoco_pccard {
|
struct orinoco_pccard {
|
||||||
struct pcmcia_device *p_dev;
|
struct pcmcia_device *p_dev;
|
||||||
dev_node_t node;
|
|
||||||
|
|
||||||
/* Used to handle hard reset */
|
/* Used to handle hard reset */
|
||||||
/* yuck, we need this hack to work around the insanity of the
|
/* yuck, we need this hack to work around the insanity of the
|
||||||
@ -140,8 +139,7 @@ static void orinoco_cs_detach(struct pcmcia_device *link)
|
|||||||
{
|
{
|
||||||
struct orinoco_private *priv = link->priv;
|
struct orinoco_private *priv = link->priv;
|
||||||
|
|
||||||
if (link->dev_node)
|
orinoco_if_del(priv);
|
||||||
orinoco_if_del(priv);
|
|
||||||
|
|
||||||
orinoco_cs_release(link);
|
orinoco_cs_release(link);
|
||||||
|
|
||||||
@ -226,7 +224,6 @@ static int
|
|||||||
orinoco_cs_config(struct pcmcia_device *link)
|
orinoco_cs_config(struct pcmcia_device *link)
|
||||||
{
|
{
|
||||||
struct orinoco_private *priv = link->priv;
|
struct orinoco_private *priv = link->priv;
|
||||||
struct orinoco_pccard *card = priv->card;
|
|
||||||
hermes_t *hw = &priv->hw;
|
hermes_t *hw = &priv->hw;
|
||||||
int ret;
|
int ret;
|
||||||
void __iomem *mem;
|
void __iomem *mem;
|
||||||
@ -276,9 +273,6 @@ orinoco_cs_config(struct pcmcia_device *link)
|
|||||||
if (ret)
|
if (ret)
|
||||||
goto failed;
|
goto failed;
|
||||||
|
|
||||||
/* Ok, we have the configuration, prepare to register the netdev */
|
|
||||||
card->node.major = card->node.minor = 0;
|
|
||||||
|
|
||||||
/* Initialise the main driver */
|
/* Initialise the main driver */
|
||||||
if (orinoco_init(priv) != 0) {
|
if (orinoco_init(priv) != 0) {
|
||||||
printk(KERN_ERR PFX "orinoco_init() failed\n");
|
printk(KERN_ERR PFX "orinoco_init() failed\n");
|
||||||
@ -292,12 +286,6 @@ orinoco_cs_config(struct pcmcia_device *link)
|
|||||||
goto failed;
|
goto failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* At this point, the dev_node_t structure(s) needs to be
|
|
||||||
* initialized and arranged in a linked list at link->dev_node. */
|
|
||||||
strcpy(card->node.dev_name, priv->ndev->name);
|
|
||||||
link->dev_node = &card->node; /* link->dev_node being non-NULL is also
|
|
||||||
* used to indicate that the
|
|
||||||
* net_device has been registered */
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
failed:
|
failed:
|
||||||
|
@ -57,7 +57,6 @@ MODULE_PARM_DESC(ignore_cis_vcc, "Allow voltage mismatch between card and socket
|
|||||||
* struct orinoco_private */
|
* struct orinoco_private */
|
||||||
struct orinoco_pccard {
|
struct orinoco_pccard {
|
||||||
struct pcmcia_device *p_dev;
|
struct pcmcia_device *p_dev;
|
||||||
dev_node_t node;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/********************************************************************/
|
/********************************************************************/
|
||||||
@ -214,8 +213,7 @@ static void spectrum_cs_detach(struct pcmcia_device *link)
|
|||||||
{
|
{
|
||||||
struct orinoco_private *priv = link->priv;
|
struct orinoco_private *priv = link->priv;
|
||||||
|
|
||||||
if (link->dev_node)
|
orinoco_if_del(priv);
|
||||||
orinoco_if_del(priv);
|
|
||||||
|
|
||||||
spectrum_cs_release(link);
|
spectrum_cs_release(link);
|
||||||
|
|
||||||
@ -300,7 +298,6 @@ static int
|
|||||||
spectrum_cs_config(struct pcmcia_device *link)
|
spectrum_cs_config(struct pcmcia_device *link)
|
||||||
{
|
{
|
||||||
struct orinoco_private *priv = link->priv;
|
struct orinoco_private *priv = link->priv;
|
||||||
struct orinoco_pccard *card = priv->card;
|
|
||||||
hermes_t *hw = &priv->hw;
|
hermes_t *hw = &priv->hw;
|
||||||
int ret;
|
int ret;
|
||||||
void __iomem *mem;
|
void __iomem *mem;
|
||||||
@ -350,9 +347,6 @@ spectrum_cs_config(struct pcmcia_device *link)
|
|||||||
if (ret)
|
if (ret)
|
||||||
goto failed;
|
goto failed;
|
||||||
|
|
||||||
/* Ok, we have the configuration, prepare to register the netdev */
|
|
||||||
card->node.major = card->node.minor = 0;
|
|
||||||
|
|
||||||
/* Reset card */
|
/* Reset card */
|
||||||
if (spectrum_cs_hard_reset(priv) != 0)
|
if (spectrum_cs_hard_reset(priv) != 0)
|
||||||
goto failed;
|
goto failed;
|
||||||
@ -370,12 +364,6 @@ spectrum_cs_config(struct pcmcia_device *link)
|
|||||||
goto failed;
|
goto failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* At this point, the dev_node_t structure(s) needs to be
|
|
||||||
* initialized and arranged in a linked list at link->dev_node. */
|
|
||||||
strcpy(card->node.dev_name, priv->ndev->name);
|
|
||||||
link->dev_node = &card->node; /* link->dev_node being non-NULL is also
|
|
||||||
* used to indicate that the
|
|
||||||
* net_device has been registered */
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
failed:
|
failed:
|
||||||
|
@ -379,8 +379,7 @@ static void ray_detach(struct pcmcia_device *link)
|
|||||||
del_timer(&local->timer);
|
del_timer(&local->timer);
|
||||||
|
|
||||||
if (link->priv) {
|
if (link->priv) {
|
||||||
if (link->dev_node)
|
unregister_netdev(dev);
|
||||||
unregister_netdev(dev);
|
|
||||||
free_netdev(dev);
|
free_netdev(dev);
|
||||||
}
|
}
|
||||||
dev_dbg(&link->dev, "ray_cs ray_detach ending\n");
|
dev_dbg(&link->dev, "ray_cs ray_detach ending\n");
|
||||||
@ -489,9 +488,6 @@ static int ray_config(struct pcmcia_device *link)
|
|||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(local->node.dev_name, dev->name);
|
|
||||||
link->dev_node = &local->node;
|
|
||||||
|
|
||||||
printk(KERN_INFO "%s: RayLink, irq %d, hw_addr %pM\n",
|
printk(KERN_INFO "%s: RayLink, irq %d, hw_addr %pM\n",
|
||||||
dev->name, dev->irq, dev->dev_addr);
|
dev->name, dev->irq, dev->dev_addr);
|
||||||
|
|
||||||
|
@ -25,7 +25,6 @@ struct beacon_rx {
|
|||||||
typedef struct ray_dev_t {
|
typedef struct ray_dev_t {
|
||||||
int card_status;
|
int card_status;
|
||||||
int authentication_state;
|
int authentication_state;
|
||||||
dev_node_t node;
|
|
||||||
window_handle_t amem_handle; /* handle to window for attribute memory */
|
window_handle_t amem_handle; /* handle to window for attribute memory */
|
||||||
window_handle_t rmem_handle; /* handle to window for rx buffer on card */
|
window_handle_t rmem_handle; /* handle to window for rx buffer on card */
|
||||||
void __iomem *sram; /* pointer to beginning of shared RAM */
|
void __iomem *sram; /* pointer to beginning of shared RAM */
|
||||||
|
@ -610,7 +610,6 @@ struct wl3501_card {
|
|||||||
struct iw_statistics wstats;
|
struct iw_statistics wstats;
|
||||||
struct iw_spy_data spy_data;
|
struct iw_spy_data spy_data;
|
||||||
struct iw_public_data wireless_data;
|
struct iw_public_data wireless_data;
|
||||||
struct dev_node_t node;
|
|
||||||
struct pcmcia_device *p_dev;
|
struct pcmcia_device *p_dev;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
@ -1451,6 +1451,8 @@ static void wl3501_detach(struct pcmcia_device *link)
|
|||||||
netif_device_detach(dev);
|
netif_device_detach(dev);
|
||||||
wl3501_release(link);
|
wl3501_release(link);
|
||||||
|
|
||||||
|
unregister_netdev(dev);
|
||||||
|
|
||||||
if (link->priv)
|
if (link->priv)
|
||||||
free_netdev(link->priv);
|
free_netdev(link->priv);
|
||||||
|
|
||||||
@ -1977,20 +1979,15 @@ static int wl3501_config(struct pcmcia_device *link)
|
|||||||
}
|
}
|
||||||
|
|
||||||
this = netdev_priv(dev);
|
this = netdev_priv(dev);
|
||||||
/*
|
|
||||||
* At this point, the dev_node_t structure(s) should be initialized and
|
|
||||||
* arranged in a linked list at link->dev_node.
|
|
||||||
*/
|
|
||||||
link->dev_node = &this->node;
|
|
||||||
|
|
||||||
this->base_addr = dev->base_addr;
|
this->base_addr = dev->base_addr;
|
||||||
|
|
||||||
if (!wl3501_get_flash_mac_addr(this)) {
|
if (!wl3501_get_flash_mac_addr(this)) {
|
||||||
printk(KERN_WARNING "%s: Cant read MAC addr in flash ROM?\n",
|
printk(KERN_WARNING "%s: Cant read MAC addr in flash ROM?\n",
|
||||||
dev->name);
|
dev->name);
|
||||||
|
unregister_netdev(dev);
|
||||||
goto failed;
|
goto failed;
|
||||||
}
|
}
|
||||||
strcpy(this->node.dev_name, dev->name);
|
|
||||||
|
|
||||||
for (i = 0; i < 6; i++)
|
for (i = 0; i < 6; i++)
|
||||||
dev->dev_addr[i] = ((char *)&this->mac_addr)[i];
|
dev->dev_addr[i] = ((char *)&this->mac_addr)[i];
|
||||||
@ -2034,12 +2031,6 @@ failed:
|
|||||||
*/
|
*/
|
||||||
static void wl3501_release(struct pcmcia_device *link)
|
static void wl3501_release(struct pcmcia_device *link)
|
||||||
{
|
{
|
||||||
struct net_device *dev = link->priv;
|
|
||||||
|
|
||||||
/* Unlink the device chain */
|
|
||||||
if (link->dev_node)
|
|
||||||
unregister_netdev(dev);
|
|
||||||
|
|
||||||
pcmcia_disable_device(link);
|
pcmcia_disable_device(link);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user