mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6: (29 commits)
pcmcia: disable PCMCIA ioctl also for ARM
drivers/staging/comedi: dev_node removal (quatech_daqp_cs)
drivers/staging/comedi: dev_node removal (ni_mio_cs)
drivers/staging/comedi: dev_node removal (ni_labpc_cs)
drivers/staging/comedi: dev_node removal (ni_daq_dio24)
drivers/staging/comedi: dev_node removal (ni_daq_700)
drivers/staging/comedi: dev_node removal (das08_cs)
drivers/staging/comedi: dev_node removal (cb_das16_cs)
pata_pcmcia: get rid of extra indirection
pcmcia: remove suspend-related comment from yenta_socket.c
pcmcia: call pcmcia_{read,write}_cis_mem with ops_mutex held
pcmcia: remove pcmcia_add_device_lock
pcmcia: update gfp/slab.h includes
pcmcia: remove unused mem_op.h
pcmcia: do not autoadd root PCI bus resources
pcmcia: clarify alloc_io_space, move it to resource handlers
pcmcia: move all pcmcia_resource_ops providers into one module
pcmcia: move high level CIS access code to separate file
pcmcia: dev_node removal (core)
pcmcia: dev_node removal (remaining drivers)
...
This commit is contained in:
commit
5429126351
86 changed files with 1179 additions and 2139 deletions
|
|
@ -93,7 +93,6 @@ earlier 3Com products.
|
|||
#include <pcmcia/cisreg.h>
|
||||
#include <pcmcia/ciscode.h>
|
||||
#include <pcmcia/ds.h>
|
||||
#include <pcmcia/mem_op.h>
|
||||
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/io.h>
|
||||
|
|
@ -200,7 +199,6 @@ enum Window4 { /* Window 4: Xcvr/media bits. */
|
|||
|
||||
struct el3_private {
|
||||
struct pcmcia_device *p_dev;
|
||||
dev_node_t node;
|
||||
u16 advertising, partner; /* NWay media advertisement */
|
||||
unsigned char phys; /* MII device address */
|
||||
unsigned int autoselect:1, default_media:3; /* Read from the EEPROM/Wn3_Config. */
|
||||
|
|
@ -283,8 +281,6 @@ static int tc574_probe(struct pcmcia_device *link)
|
|||
spin_lock_init(&lp->window_lock);
|
||||
link->io.NumPorts1 = 32;
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
|
||||
link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
link->irq.Handler = &el3_interrupt;
|
||||
link->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
link->conf.ConfigIndex = 1;
|
||||
|
|
@ -311,8 +307,7 @@ static void tc574_detach(struct pcmcia_device *link)
|
|||
|
||||
dev_dbg(&link->dev, "3c574_detach()\n");
|
||||
|
||||
if (link->dev_node)
|
||||
unregister_netdev(dev);
|
||||
unregister_netdev(dev);
|
||||
|
||||
tc574_release(link);
|
||||
|
||||
|
|
@ -353,7 +348,7 @@ static int tc574_config(struct pcmcia_device *link)
|
|||
if (i != 0)
|
||||
goto failed;
|
||||
|
||||
ret = pcmcia_request_irq(link, &link->irq);
|
||||
ret = pcmcia_request_irq(link, el3_interrupt);
|
||||
if (ret)
|
||||
goto failed;
|
||||
|
||||
|
|
@ -361,7 +356,7 @@ static int tc574_config(struct pcmcia_device *link)
|
|||
if (ret)
|
||||
goto failed;
|
||||
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
dev->irq = link->irq;
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
|
||||
ioaddr = dev->base_addr;
|
||||
|
|
@ -446,17 +441,13 @@ static int tc574_config(struct pcmcia_device *link)
|
|||
}
|
||||
}
|
||||
|
||||
link->dev_node = &lp->node;
|
||||
SET_NETDEV_DEV(dev, &link->dev);
|
||||
|
||||
if (register_netdev(dev) != 0) {
|
||||
printk(KERN_NOTICE "3c574_cs: register_netdev() failed\n");
|
||||
link->dev_node = NULL;
|
||||
goto failed;
|
||||
}
|
||||
|
||||
strcpy(lp->node.dev_name, dev->name);
|
||||
|
||||
printk(KERN_INFO "%s: %s at io %#3lx, irq %d, "
|
||||
"hw_addr %pM.\n",
|
||||
dev->name, cardname, dev->base_addr, dev->irq,
|
||||
|
|
|
|||
|
|
@ -106,7 +106,6 @@ enum RxFilter {
|
|||
|
||||
struct el3_private {
|
||||
struct pcmcia_device *p_dev;
|
||||
dev_node_t node;
|
||||
/* For transceiver monitoring */
|
||||
struct timer_list media;
|
||||
u16 media_status;
|
||||
|
|
@ -194,8 +193,7 @@ static int tc589_probe(struct pcmcia_device *link)
|
|||
spin_lock_init(&lp->lock);
|
||||
link->io.NumPorts1 = 16;
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
|
||||
link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
link->irq.Handler = &el3_interrupt;
|
||||
|
||||
link->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
link->conf.ConfigIndex = 1;
|
||||
|
|
@ -223,8 +221,7 @@ static void tc589_detach(struct pcmcia_device *link)
|
|||
|
||||
dev_dbg(&link->dev, "3c589_detach\n");
|
||||
|
||||
if (link->dev_node)
|
||||
unregister_netdev(dev);
|
||||
unregister_netdev(dev);
|
||||
|
||||
tc589_release(link);
|
||||
|
||||
|
|
@ -242,7 +239,6 @@ static void tc589_detach(struct pcmcia_device *link)
|
|||
static int tc589_config(struct pcmcia_device *link)
|
||||
{
|
||||
struct net_device *dev = link->priv;
|
||||
struct el3_private *lp = netdev_priv(dev);
|
||||
__be16 *phys_addr;
|
||||
int ret, i, j, multi = 0, fifo;
|
||||
unsigned int ioaddr;
|
||||
|
|
@ -271,7 +267,7 @@ static int tc589_config(struct pcmcia_device *link)
|
|||
if (i != 0)
|
||||
goto failed;
|
||||
|
||||
ret = pcmcia_request_irq(link, &link->irq);
|
||||
ret = pcmcia_request_irq(link, el3_interrupt);
|
||||
if (ret)
|
||||
goto failed;
|
||||
|
||||
|
|
@ -279,7 +275,7 @@ static int tc589_config(struct pcmcia_device *link)
|
|||
if (ret)
|
||||
goto failed;
|
||||
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
dev->irq = link->irq;
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
ioaddr = dev->base_addr;
|
||||
EL3WINDOW(0);
|
||||
|
|
@ -313,17 +309,13 @@ static int tc589_config(struct pcmcia_device *link)
|
|||
else
|
||||
printk(KERN_ERR "3c589_cs: invalid if_port requested\n");
|
||||
|
||||
link->dev_node = &lp->node;
|
||||
SET_NETDEV_DEV(dev, &link->dev);
|
||||
|
||||
if (register_netdev(dev) != 0) {
|
||||
printk(KERN_ERR "3c589_cs: register_netdev() failed\n");
|
||||
link->dev_node = NULL;
|
||||
goto failed;
|
||||
}
|
||||
|
||||
strcpy(lp->node.dev_name, dev->name);
|
||||
|
||||
printk(KERN_INFO "%s: 3Com 3c%s, io %#3lx, irq %d, "
|
||||
"hw_addr %pM\n",
|
||||
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 {
|
||||
struct pcmcia_device *p_dev;
|
||||
dev_node_t node;
|
||||
caddr_t base;
|
||||
struct timer_list watchdog;
|
||||
int stale, fast_poll;
|
||||
|
|
@ -168,7 +167,6 @@ static int axnet_probe(struct pcmcia_device *link)
|
|||
info = PRIV(dev);
|
||||
info->p_dev = link;
|
||||
link->priv = dev;
|
||||
link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
link->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
|
||||
|
|
@ -195,8 +193,7 @@ static void axnet_detach(struct pcmcia_device *link)
|
|||
|
||||
dev_dbg(&link->dev, "axnet_detach(0x%p)\n", link);
|
||||
|
||||
if (link->dev_node)
|
||||
unregister_netdev(dev);
|
||||
unregister_netdev(dev);
|
||||
|
||||
axnet_release(link);
|
||||
|
||||
|
|
@ -265,12 +262,9 @@ static int try_io_port(struct pcmcia_device *link)
|
|||
int j, ret;
|
||||
if (link->io.NumPorts1 == 32) {
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
|
||||
if (link->io.NumPorts2 > 0) {
|
||||
/* for master/slave multifunction cards */
|
||||
/* for master/slave multifunction cards */
|
||||
if (link->io.NumPorts2 > 0)
|
||||
link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
|
||||
link->irq.Attributes =
|
||||
IRQ_TYPE_DYNAMIC_SHARING;
|
||||
}
|
||||
} else {
|
||||
/* This should be two 16-port windows */
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
|
|
@ -336,8 +330,7 @@ static int axnet_config(struct pcmcia_device *link)
|
|||
if (ret != 0)
|
||||
goto failed;
|
||||
|
||||
ret = pcmcia_request_irq(link, &link->irq);
|
||||
if (ret)
|
||||
if (!link->irq)
|
||||
goto failed;
|
||||
|
||||
if (link->io.NumPorts2 == 8) {
|
||||
|
|
@ -349,7 +342,7 @@ static int axnet_config(struct pcmcia_device *link)
|
|||
if (ret)
|
||||
goto failed;
|
||||
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
dev->irq = link->irq;
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
|
||||
if (!get_prom(link)) {
|
||||
|
|
@ -397,17 +390,13 @@ static int axnet_config(struct pcmcia_device *link)
|
|||
}
|
||||
|
||||
info->phy_id = (i < 32) ? i : -1;
|
||||
link->dev_node = &info->node;
|
||||
SET_NETDEV_DEV(dev, &link->dev);
|
||||
|
||||
if (register_netdev(dev) != 0) {
|
||||
printk(KERN_NOTICE "axnet_cs: register_netdev() failed\n");
|
||||
link->dev_node = NULL;
|
||||
goto failed;
|
||||
}
|
||||
|
||||
strcpy(info->node.dev_name, dev->name);
|
||||
|
||||
printk(KERN_INFO "%s: Asix AX88%d90: io %#3lx, irq %d, "
|
||||
"hw_addr %pM\n",
|
||||
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 {
|
||||
struct net_device *dev;
|
||||
dev_node_t node;
|
||||
} com20020_dev_t;
|
||||
|
||||
/*======================================================================
|
||||
|
|
@ -163,7 +162,6 @@ static int com20020_probe(struct pcmcia_device *p_dev)
|
|||
p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
p_dev->io.NumPorts1 = 16;
|
||||
p_dev->io.IOAddrLines = 16;
|
||||
p_dev->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
|
||||
p_dev->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
p_dev->conf.IntType = INT_MEMORY_AND_IO;
|
||||
|
||||
|
|
@ -196,18 +194,16 @@ static void com20020_detach(struct pcmcia_device *link)
|
|||
|
||||
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
|
||||
* from card services.
|
||||
*/
|
||||
if (dev->irq)
|
||||
/*
|
||||
* this is necessary because we register our IRQ separately
|
||||
* from card services.
|
||||
*/
|
||||
if (dev->irq)
|
||||
free_irq(dev->irq, dev);
|
||||
}
|
||||
|
||||
com20020_release(link);
|
||||
|
||||
|
|
@ -275,15 +271,14 @@ static int com20020_config(struct pcmcia_device *link)
|
|||
dev_dbg(&link->dev, "got ioaddr %Xh\n", ioaddr);
|
||||
|
||||
dev_dbg(&link->dev, "request IRQ %d\n",
|
||||
link->irq.AssignedIRQ);
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
if (i != 0)
|
||||
link->irq);
|
||||
if (!link->irq)
|
||||
{
|
||||
dev_dbg(&link->dev, "requestIRQ failed totally!\n");
|
||||
goto failed;
|
||||
}
|
||||
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
dev->irq = link->irq;
|
||||
|
||||
ret = pcmcia_request_configuration(link, &link->conf);
|
||||
if (ret)
|
||||
|
|
@ -299,7 +294,6 @@ static int com20020_config(struct pcmcia_device *link)
|
|||
lp->card_name = "PCMCIA COM20020";
|
||||
lp->card_flags = ARC_CAN_10MBIT; /* pretend all of them can 10Mbit */
|
||||
|
||||
link->dev_node = &info->node;
|
||||
SET_NETDEV_DEV(dev, &link->dev);
|
||||
|
||||
i = com20020_found(dev, 0); /* calls register_netdev */
|
||||
|
|
@ -307,12 +301,9 @@ static int com20020_config(struct pcmcia_device *link)
|
|||
if (i != 0) {
|
||||
dev_printk(KERN_NOTICE, &link->dev,
|
||||
"com20020_cs: com20020_found() failed\n");
|
||||
link->dev_node = NULL;
|
||||
goto failed;
|
||||
}
|
||||
|
||||
strcpy(info->node.dev_name, dev->name);
|
||||
|
||||
dev_dbg(&link->dev,KERN_INFO "%s: port %#3lx, irq %d\n",
|
||||
dev->name, dev->base_addr, dev->irq);
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -110,7 +110,6 @@ typedef enum { MBH10302, MBH10304, TDK, CONTEC, LA501, UNGERMANN,
|
|||
*/
|
||||
typedef struct local_info_t {
|
||||
struct pcmcia_device *p_dev;
|
||||
dev_node_t node;
|
||||
long open_time;
|
||||
uint tx_started:1;
|
||||
uint tx_queue;
|
||||
|
|
@ -254,10 +253,6 @@ static int fmvj18x_probe(struct pcmcia_device *link)
|
|||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
|
||||
link->io.IOAddrLines = 5;
|
||||
|
||||
/* Interrupt setup */
|
||||
link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
link->irq.Handler = fjn_interrupt;
|
||||
|
||||
/* General socket configuration */
|
||||
link->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
|
|
@ -278,8 +273,7 @@ static void fmvj18x_detach(struct pcmcia_device *link)
|
|||
|
||||
dev_dbg(&link->dev, "fmvj18x_detach\n");
|
||||
|
||||
if (link->dev_node)
|
||||
unregister_netdev(dev);
|
||||
unregister_netdev(dev);
|
||||
|
||||
fmvj18x_release(link);
|
||||
|
||||
|
|
@ -425,8 +419,6 @@ static int fmvj18x_config(struct pcmcia_device *link)
|
|||
}
|
||||
|
||||
if (link->io.NumPorts2 != 0) {
|
||||
link->irq.Attributes =
|
||||
IRQ_TYPE_DYNAMIC_SHARING;
|
||||
ret = mfc_try_io_port(link);
|
||||
if (ret != 0) goto failed;
|
||||
} else if (cardtype == UNGERMANN) {
|
||||
|
|
@ -437,14 +429,14 @@ static int fmvj18x_config(struct pcmcia_device *link)
|
|||
if (ret)
|
||||
goto failed;
|
||||
}
|
||||
ret = pcmcia_request_irq(link, &link->irq);
|
||||
ret = pcmcia_request_irq(link, fjn_interrupt);
|
||||
if (ret)
|
||||
goto failed;
|
||||
ret = pcmcia_request_configuration(link, &link->conf);
|
||||
if (ret)
|
||||
goto failed;
|
||||
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
dev->irq = link->irq;
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
|
||||
if (link->io.BasePort2 != 0) {
|
||||
|
|
@ -529,17 +521,13 @@ static int fmvj18x_config(struct pcmcia_device *link)
|
|||
}
|
||||
|
||||
lp->cardtype = cardtype;
|
||||
link->dev_node = &lp->node;
|
||||
SET_NETDEV_DEV(dev, &link->dev);
|
||||
|
||||
if (register_netdev(dev) != 0) {
|
||||
printk(KERN_NOTICE "fmvj18x_cs: register_netdev() failed\n");
|
||||
link->dev_node = NULL;
|
||||
goto failed;
|
||||
}
|
||||
|
||||
strcpy(lp->node.dev_name, dev->name);
|
||||
|
||||
/* print current configuration */
|
||||
printk(KERN_INFO "%s: %s, sram %s, port %#3lx, irq %d, "
|
||||
"hw_addr %pM\n",
|
||||
|
|
|
|||
|
|
@ -104,7 +104,6 @@ static void ibmtr_detach(struct pcmcia_device *p_dev);
|
|||
typedef struct ibmtr_dev_t {
|
||||
struct pcmcia_device *p_dev;
|
||||
struct net_device *dev;
|
||||
dev_node_t node;
|
||||
window_handle_t sram_win_handle;
|
||||
struct tok_info *ti;
|
||||
} ibmtr_dev_t;
|
||||
|
|
@ -156,8 +155,6 @@ static int __devinit ibmtr_attach(struct pcmcia_device *link)
|
|||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
link->io.NumPorts1 = 4;
|
||||
link->io.IOAddrLines = 16;
|
||||
link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
|
||||
link->irq.Handler = ibmtr_interrupt;
|
||||
link->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
link->conf.Present = PRESENT_OPTION;
|
||||
|
|
@ -192,8 +189,7 @@ static void ibmtr_detach(struct pcmcia_device *link)
|
|||
*/
|
||||
ti->sram_phys |= 1;
|
||||
|
||||
if (link->dev_node)
|
||||
unregister_netdev(dev);
|
||||
unregister_netdev(dev);
|
||||
|
||||
del_timer_sync(&(ti->tr_timer));
|
||||
|
||||
|
|
@ -238,11 +234,11 @@ static int __devinit ibmtr_config(struct pcmcia_device *link)
|
|||
}
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
|
||||
ret = pcmcia_request_irq(link, &link->irq);
|
||||
ret = pcmcia_request_exclusive_irq(link, ibmtr_interrupt);
|
||||
if (ret)
|
||||
goto failed;
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
ti->irq = link->irq.AssignedIRQ;
|
||||
dev->irq = link->irq;
|
||||
ti->irq = link->irq;
|
||||
ti->global_int_enable=GLOBAL_INT_ENABLE+((dev->irq==9) ? 2 : dev->irq);
|
||||
|
||||
/* Allocate the MMIO memory window */
|
||||
|
|
@ -291,18 +287,14 @@ static int __devinit ibmtr_config(struct pcmcia_device *link)
|
|||
Adapters Technical Reference" SC30-3585 for this info. */
|
||||
ibmtr_hw_setup(dev, mmiobase);
|
||||
|
||||
link->dev_node = &info->node;
|
||||
SET_NETDEV_DEV(dev, &link->dev);
|
||||
|
||||
i = ibmtr_probe_card(dev);
|
||||
if (i != 0) {
|
||||
printk(KERN_NOTICE "ibmtr_cs: register_netdev() failed\n");
|
||||
link->dev_node = NULL;
|
||||
goto failed;
|
||||
}
|
||||
|
||||
strcpy(info->node.dev_name, dev->name);
|
||||
|
||||
printk(KERN_INFO
|
||||
"%s: port %#3lx, irq %d, mmio %#5lx, sram %#5lx, hwaddr=%pM\n",
|
||||
dev->name, dev->base_addr, dev->irq,
|
||||
|
|
|
|||
|
|
@ -363,7 +363,6 @@ typedef struct _mace_statistics {
|
|||
|
||||
typedef struct _mace_private {
|
||||
struct pcmcia_device *p_dev;
|
||||
dev_node_t node;
|
||||
struct net_device_stats linux_stats; /* Linux statistics counters */
|
||||
mace_statistics mace_stats; /* MACE chip statistics counters */
|
||||
|
||||
|
|
@ -463,8 +462,6 @@ static int nmclan_probe(struct pcmcia_device *link)
|
|||
link->io.NumPorts1 = 32;
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
|
||||
link->io.IOAddrLines = 5;
|
||||
link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
|
||||
link->irq.Handler = mace_interrupt;
|
||||
link->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
link->conf.ConfigIndex = 1;
|
||||
|
|
@ -493,8 +490,7 @@ static void nmclan_detach(struct pcmcia_device *link)
|
|||
|
||||
dev_dbg(&link->dev, "nmclan_detach\n");
|
||||
|
||||
if (link->dev_node)
|
||||
unregister_netdev(dev);
|
||||
unregister_netdev(dev);
|
||||
|
||||
nmclan_release(link);
|
||||
|
||||
|
|
@ -652,14 +648,14 @@ static int nmclan_config(struct pcmcia_device *link)
|
|||
ret = pcmcia_request_io(link, &link->io);
|
||||
if (ret)
|
||||
goto failed;
|
||||
ret = pcmcia_request_irq(link, &link->irq);
|
||||
ret = pcmcia_request_exclusive_irq(link, mace_interrupt);
|
||||
if (ret)
|
||||
goto failed;
|
||||
ret = pcmcia_request_configuration(link, &link->conf);
|
||||
if (ret)
|
||||
goto failed;
|
||||
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
dev->irq = link->irq;
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
|
||||
ioaddr = dev->base_addr;
|
||||
|
|
@ -698,18 +694,14 @@ static int nmclan_config(struct pcmcia_device *link)
|
|||
else
|
||||
printk(KERN_NOTICE "nmclan_cs: invalid if_port requested\n");
|
||||
|
||||
link->dev_node = &lp->node;
|
||||
SET_NETDEV_DEV(dev, &link->dev);
|
||||
|
||||
i = register_netdev(dev);
|
||||
if (i != 0) {
|
||||
printk(KERN_NOTICE "nmclan_cs: register_netdev() failed\n");
|
||||
link->dev_node = NULL;
|
||||
goto failed;
|
||||
}
|
||||
|
||||
strcpy(lp->node.dev_name, dev->name);
|
||||
|
||||
printk(KERN_INFO "%s: nmclan: port %#3lx, irq %d, %s port,"
|
||||
" hw_addr %pM\n",
|
||||
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 {
|
||||
struct pcmcia_device *p_dev;
|
||||
dev_node_t node;
|
||||
u_int flags;
|
||||
void __iomem *base;
|
||||
struct timer_list watchdog;
|
||||
|
|
@ -264,7 +263,6 @@ static int pcnet_probe(struct pcmcia_device *link)
|
|||
info->p_dev = link;
|
||||
link->priv = dev;
|
||||
|
||||
link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
link->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
|
||||
|
|
@ -288,8 +286,7 @@ static void pcnet_detach(struct pcmcia_device *link)
|
|||
|
||||
dev_dbg(&link->dev, "pcnet_detach\n");
|
||||
|
||||
if (link->dev_node)
|
||||
unregister_netdev(dev);
|
||||
unregister_netdev(dev);
|
||||
|
||||
pcnet_release(link);
|
||||
|
||||
|
|
@ -488,8 +485,6 @@ static int try_io_port(struct pcmcia_device *link)
|
|||
if (link->io.NumPorts2 > 0) {
|
||||
/* for master/slave multifunction cards */
|
||||
link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
|
||||
link->irq.Attributes =
|
||||
IRQ_TYPE_DYNAMIC_SHARING;
|
||||
}
|
||||
} else {
|
||||
/* This should be two 16-port windows */
|
||||
|
|
@ -559,8 +554,7 @@ static int pcnet_config(struct pcmcia_device *link)
|
|||
if (ret)
|
||||
goto failed;
|
||||
|
||||
ret = pcmcia_request_irq(link, &link->irq);
|
||||
if (ret)
|
||||
if (!link->irq)
|
||||
goto failed;
|
||||
|
||||
if (link->io.NumPorts2 == 8) {
|
||||
|
|
@ -574,7 +568,7 @@ static int pcnet_config(struct pcmcia_device *link)
|
|||
ret = pcmcia_request_configuration(link, &link->conf);
|
||||
if (ret)
|
||||
goto failed;
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
dev->irq = link->irq;
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
if (info->flags & HAS_MISC_REG) {
|
||||
if ((if_port == 1) || (if_port == 2))
|
||||
|
|
@ -643,17 +637,13 @@ static int pcnet_config(struct pcmcia_device *link)
|
|||
if (info->flags & (IS_DL10019|IS_DL10022))
|
||||
mii_phy_probe(dev);
|
||||
|
||||
link->dev_node = &info->node;
|
||||
SET_NETDEV_DEV(dev, &link->dev);
|
||||
|
||||
if (register_netdev(dev) != 0) {
|
||||
printk(KERN_NOTICE "pcnet_cs: register_netdev() failed\n");
|
||||
link->dev_node = NULL;
|
||||
goto failed;
|
||||
}
|
||||
|
||||
strcpy(info->node.dev_name, dev->name);
|
||||
|
||||
if (info->flags & (IS_DL10019|IS_DL10022)) {
|
||||
u_char id = inb(dev->base_addr + 0x1a);
|
||||
printk(KERN_INFO "%s: NE2000 (DL100%d rev %02x): ",
|
||||
|
|
|
|||
|
|
@ -103,7 +103,6 @@ struct smc_private {
|
|||
u_short manfid;
|
||||
u_short cardid;
|
||||
|
||||
dev_node_t node;
|
||||
struct sk_buff *saved_skb;
|
||||
int packets_waiting;
|
||||
void __iomem *base;
|
||||
|
|
@ -323,14 +322,11 @@ static int smc91c92_probe(struct pcmcia_device *link)
|
|||
return -ENOMEM;
|
||||
smc = netdev_priv(dev);
|
||||
smc->p_dev = link;
|
||||
link->priv = dev;
|
||||
|
||||
spin_lock_init(&smc->lock);
|
||||
link->io.NumPorts1 = 16;
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
|
||||
link->io.IOAddrLines = 4;
|
||||
link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
link->irq.Handler = &smc_interrupt;
|
||||
link->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
|
||||
|
|
@ -363,8 +359,7 @@ static void smc91c92_detach(struct pcmcia_device *link)
|
|||
|
||||
dev_dbg(&link->dev, "smc91c92_detach\n");
|
||||
|
||||
if (link->dev_node)
|
||||
unregister_netdev(dev);
|
||||
unregister_netdev(dev);
|
||||
|
||||
smc91c92_release(link);
|
||||
|
||||
|
|
@ -453,7 +448,6 @@ static int mhz_mfc_config(struct pcmcia_device *link)
|
|||
|
||||
link->conf.Attributes |= CONF_ENABLE_SPKR;
|
||||
link->conf.Status = CCSR_AUDIO_ENA;
|
||||
link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
link->io.IOAddrLines = 16;
|
||||
link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
|
||||
link->io.NumPorts2 = 8;
|
||||
|
|
@ -652,7 +646,6 @@ static int osi_config(struct pcmcia_device *link)
|
|||
|
||||
link->conf.Attributes |= CONF_ENABLE_SPKR;
|
||||
link->conf.Status = CCSR_AUDIO_ENA;
|
||||
link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
link->io.NumPorts1 = 64;
|
||||
link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
|
||||
link->io.NumPorts2 = 8;
|
||||
|
|
@ -877,7 +870,7 @@ static int smc91c92_config(struct pcmcia_device *link)
|
|||
if (i)
|
||||
goto config_failed;
|
||||
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
i = pcmcia_request_irq(link, smc_interrupt);
|
||||
if (i)
|
||||
goto config_failed;
|
||||
i = pcmcia_request_configuration(link, &link->conf);
|
||||
|
|
@ -887,7 +880,7 @@ static int smc91c92_config(struct pcmcia_device *link)
|
|||
if (smc->manfid == MANFID_MOTOROLA)
|
||||
mot_config(link);
|
||||
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
dev->irq = link->irq;
|
||||
|
||||
if ((if_port >= 0) && (if_port <= 2))
|
||||
dev->if_port = if_port;
|
||||
|
|
@ -960,17 +953,13 @@ static int smc91c92_config(struct pcmcia_device *link)
|
|||
SMC_SELECT_BANK(0);
|
||||
}
|
||||
|
||||
link->dev_node = &smc->node;
|
||||
SET_NETDEV_DEV(dev, &link->dev);
|
||||
|
||||
if (register_netdev(dev) != 0) {
|
||||
printk(KERN_ERR "smc91c92_cs: register_netdev() failed\n");
|
||||
link->dev_node = NULL;
|
||||
goto config_undo;
|
||||
}
|
||||
|
||||
strcpy(smc->node.dev_name, dev->name);
|
||||
|
||||
printk(KERN_INFO "%s: smc91c%s rev %d: io %#3lx, irq %d, "
|
||||
"hw_addr %pM\n",
|
||||
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);
|
||||
|
||||
/****************
|
||||
* 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 {
|
||||
struct net_device *dev;
|
||||
struct pcmcia_device *p_dev;
|
||||
dev_node_t node;
|
||||
|
||||
int card_type;
|
||||
int probe_port;
|
||||
|
|
@ -555,7 +533,6 @@ xirc2ps_probe(struct pcmcia_device *link)
|
|||
link->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
link->conf.ConfigIndex = 1;
|
||||
link->irq.Handler = xirc2ps_interrupt;
|
||||
|
||||
/* Fill in card specific entries */
|
||||
dev->netdev_ops = &netdev_ops;
|
||||
|
|
@ -580,8 +557,7 @@ xirc2ps_detach(struct pcmcia_device *link)
|
|||
|
||||
dev_dbg(&link->dev, "detach\n");
|
||||
|
||||
if (link->dev_node)
|
||||
unregister_netdev(dev);
|
||||
unregister_netdev(dev);
|
||||
|
||||
xirc2ps_release(link);
|
||||
|
||||
|
|
@ -841,7 +817,6 @@ xirc2ps_config(struct pcmcia_device * link)
|
|||
link->conf.Attributes |= CONF_ENABLE_SPKR;
|
||||
link->conf.Status |= CCSR_AUDIO_ENA;
|
||||
}
|
||||
link->irq.Attributes |= IRQ_TYPE_DYNAMIC_SHARING;
|
||||
link->io.NumPorts2 = 8;
|
||||
link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
|
||||
if (local->dingo) {
|
||||
|
|
@ -866,7 +841,6 @@ xirc2ps_config(struct pcmcia_device * link)
|
|||
}
|
||||
printk(KNOT_XIRC "no ports available\n");
|
||||
} else {
|
||||
link->irq.Attributes |= IRQ_TYPE_DYNAMIC_SHARING;
|
||||
link->io.NumPorts1 = 16;
|
||||
for (ioaddr = 0x300; ioaddr < 0x400; ioaddr += 0x10) {
|
||||
link->io.BasePort1 = ioaddr;
|
||||
|
|
@ -885,7 +859,7 @@ xirc2ps_config(struct pcmcia_device * link)
|
|||
* Now allocate an interrupt line. Note that this does not
|
||||
* actually assign a handler to the interrupt.
|
||||
*/
|
||||
if ((err=pcmcia_request_irq(link, &link->irq)))
|
||||
if ((err=pcmcia_request_irq(link, xirc2ps_interrupt)))
|
||||
goto config_error;
|
||||
|
||||
/****************
|
||||
|
|
@ -982,23 +956,19 @@ xirc2ps_config(struct pcmcia_device * link)
|
|||
printk(KNOT_XIRC "invalid if_port requested\n");
|
||||
|
||||
/* we can now register the device with the net subsystem */
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
dev->irq = link->irq;
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
|
||||
if (local->dingo)
|
||||
do_reset(dev, 1); /* a kludge to make the cem56 work */
|
||||
|
||||
link->dev_node = &local->node;
|
||||
SET_NETDEV_DEV(dev, &link->dev);
|
||||
|
||||
if ((err=register_netdev(dev))) {
|
||||
printk(KNOT_XIRC "register_netdev() failed\n");
|
||||
link->dev_node = NULL;
|
||||
goto config_error;
|
||||
}
|
||||
|
||||
strcpy(local->node.dev_name, dev->name);
|
||||
|
||||
/* give some infos about the hardware */
|
||||
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,
|
||||
|
|
|
|||
|
|
@ -75,42 +75,7 @@ static void airo_release(struct pcmcia_device *link);
|
|||
|
||||
static void airo_detach(struct pcmcia_device *p_dev);
|
||||
|
||||
/*
|
||||
You'll also need to prototype all the functions that will actually
|
||||
be used to talk to your device. See 'pcmem_cs' for a good example
|
||||
of a fully self-sufficient driver; the other drivers rely more or
|
||||
less on other parts of the kernel.
|
||||
*/
|
||||
|
||||
/*
|
||||
A linked list of "instances" of the aironet 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 shouldn't be allocated dynamically.
|
||||
|
||||
In this case, we also provide a flag to indicate if a device is
|
||||
"stopped" due to a power management event, or card ejection. The
|
||||
device IO routines can use a flag like this to throttle IO to a
|
||||
card that is not ready to accept it.
|
||||
*/
|
||||
|
||||
typedef struct local_info_t {
|
||||
dev_node_t node;
|
||||
struct net_device *eth_dev;
|
||||
} local_info_t;
|
||||
|
||||
|
|
@ -132,10 +97,6 @@ static int airo_probe(struct pcmcia_device *p_dev)
|
|||
|
||||
dev_dbg(&p_dev->dev, "airo_attach()\n");
|
||||
|
||||
/* Interrupt setup */
|
||||
p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
p_dev->irq.Handler = NULL;
|
||||
|
||||
/*
|
||||
General socket configuration defaults can go here. In this
|
||||
client, we assume very little, and rely on the CIS for almost
|
||||
|
|
@ -212,9 +173,7 @@ static int airo_cs_config_check(struct pcmcia_device *p_dev,
|
|||
else if (dflt->vpp1.present & (1<<CISTPL_POWER_VNOM))
|
||||
p_dev->conf.Vpp = dflt->vpp1.param[CISTPL_POWER_VNOM]/10000;
|
||||
|
||||
/* Do we need to allocate an interrupt? */
|
||||
if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
|
||||
p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
|
||||
p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
|
||||
|
||||
/* IO window settings */
|
||||
p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
|
||||
|
|
@ -300,16 +259,8 @@ static int airo_config(struct pcmcia_device *link)
|
|||
if (ret)
|
||||
goto failed;
|
||||
|
||||
/*
|
||||
Allocate an interrupt line. Note that this does not assign a
|
||||
handler to the interrupt, unless the 'Handler' member of the
|
||||
irq structure is initialized.
|
||||
*/
|
||||
if (link->conf.Attributes & CONF_ENABLE_IRQ) {
|
||||
ret = pcmcia_request_irq(link, &link->irq);
|
||||
if (ret)
|
||||
goto failed;
|
||||
}
|
||||
if (!link->irq)
|
||||
goto failed;
|
||||
|
||||
/*
|
||||
This actually configures the PCMCIA socket -- setting up
|
||||
|
|
@ -320,26 +271,17 @@ static int airo_config(struct pcmcia_device *link)
|
|||
if (ret)
|
||||
goto failed;
|
||||
((local_info_t *)link->priv)->eth_dev =
|
||||
init_airo_card(link->irq.AssignedIRQ,
|
||||
init_airo_card(link->irq,
|
||||
link->io.BasePort1, 1, &link->dev);
|
||||
if (!((local_info_t *)link->priv)->eth_dev)
|
||||
goto failed;
|
||||
|
||||
/*
|
||||
At this point, the dev_node_t structure(s) need to be
|
||||
initialized and arranged in a linked list at link->dev_node.
|
||||
*/
|
||||
strcpy(dev->node.dev_name, ((local_info_t *)link->priv)->eth_dev->name);
|
||||
dev->node.major = dev->node.minor = 0;
|
||||
link->dev_node = &dev->node;
|
||||
|
||||
/* Finally, report what we've done */
|
||||
printk(KERN_INFO "%s: index 0x%02x: ",
|
||||
dev->node.dev_name, link->conf.ConfigIndex);
|
||||
dev_info(&link->dev, "index 0x%02x: ",
|
||||
link->conf.ConfigIndex);
|
||||
if (link->conf.Vpp)
|
||||
printk(", Vpp %d.%d", link->conf.Vpp/10, link->conf.Vpp%10);
|
||||
if (link->conf.Attributes & CONF_ENABLE_IRQ)
|
||||
printk(", irq %d", link->irq.AssignedIRQ);
|
||||
printk(", irq %d", link->irq);
|
||||
if (link->io.NumPorts1)
|
||||
printk(", io 0x%04x-0x%04x", link->io.BasePort1,
|
||||
link->io.BasePort1+link->io.NumPorts1-1);
|
||||
|
|
|
|||
|
|
@ -85,41 +85,7 @@ static void atmel_release(struct pcmcia_device *link);
|
|||
|
||||
static void atmel_detach(struct pcmcia_device *p_dev);
|
||||
|
||||
/*
|
||||
You'll also need to prototype all the functions that will actually
|
||||
be used to talk to your device. See 'pcmem_cs' for a good example
|
||||
of a fully self-sufficient driver; the other drivers rely more or
|
||||
less on other parts of the kernel.
|
||||
*/
|
||||
|
||||
/*
|
||||
A linked list of "instances" of the atmelnet 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 shouldn't be allocated dynamically.
|
||||
|
||||
In this case, we also provide a flag to indicate if a device is
|
||||
"stopped" due to a power management event, or card ejection. The
|
||||
device IO routines can use a flag like this to throttle IO to a
|
||||
card that is not ready to accept it.
|
||||
*/
|
||||
|
||||
typedef struct local_info_t {
|
||||
dev_node_t node;
|
||||
struct net_device *eth_dev;
|
||||
} local_info_t;
|
||||
|
||||
|
|
@ -141,10 +107,6 @@ static int atmel_probe(struct pcmcia_device *p_dev)
|
|||
|
||||
dev_dbg(&p_dev->dev, "atmel_attach()\n");
|
||||
|
||||
/* Interrupt setup */
|
||||
p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
p_dev->irq.Handler = NULL;
|
||||
|
||||
/*
|
||||
General socket configuration defaults can go here. In this
|
||||
client, we assume very little, and rely on the CIS for almost
|
||||
|
|
@ -226,9 +188,7 @@ static int atmel_config_check(struct pcmcia_device *p_dev,
|
|||
else if (dflt->vpp1.present & (1<<CISTPL_POWER_VNOM))
|
||||
p_dev->conf.Vpp = dflt->vpp1.param[CISTPL_POWER_VNOM]/10000;
|
||||
|
||||
/* Do we need to allocate an interrupt? */
|
||||
if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
|
||||
p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
|
||||
p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
|
||||
|
||||
/* IO window settings */
|
||||
p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
|
||||
|
|
@ -278,15 +238,9 @@ static int atmel_config(struct pcmcia_device *link)
|
|||
if (pcmcia_loop_config(link, atmel_config_check, NULL))
|
||||
goto failed;
|
||||
|
||||
/*
|
||||
Allocate an interrupt line. Note that this does not assign a
|
||||
handler to the interrupt, unless the 'Handler' member of the
|
||||
irq structure is initialized.
|
||||
*/
|
||||
if (link->conf.Attributes & CONF_ENABLE_IRQ) {
|
||||
ret = pcmcia_request_irq(link, &link->irq);
|
||||
if (ret)
|
||||
goto failed;
|
||||
if (!link->irq) {
|
||||
dev_err(&link->dev, "atmel: cannot assign IRQ: check that CONFIG_ISA is set in kernel config.");
|
||||
goto failed;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -298,14 +252,8 @@ static int atmel_config(struct pcmcia_device *link)
|
|||
if (ret)
|
||||
goto failed;
|
||||
|
||||
if (link->irq.AssignedIRQ == 0) {
|
||||
printk(KERN_ALERT
|
||||
"atmel: cannot assign IRQ: check that CONFIG_ISA is set in kernel config.");
|
||||
goto failed;
|
||||
}
|
||||
|
||||
((local_info_t*)link->priv)->eth_dev =
|
||||
init_atmel_card(link->irq.AssignedIRQ,
|
||||
init_atmel_card(link->irq,
|
||||
link->io.BasePort1,
|
||||
did ? did->driver_info : ATMEL_FW_TYPE_NONE,
|
||||
&link->dev,
|
||||
|
|
@ -315,14 +263,6 @@ static int atmel_config(struct pcmcia_device *link)
|
|||
goto failed;
|
||||
|
||||
|
||||
/*
|
||||
At this point, the dev_node_t structure(s) need to be
|
||||
initialized and arranged in a linked list at link->dev_node.
|
||||
*/
|
||||
strcpy(dev->node.dev_name, ((local_info_t*)link->priv)->eth_dev->name );
|
||||
dev->node.major = dev->node.minor = 0;
|
||||
link->dev_node = &dev->node;
|
||||
|
||||
return 0;
|
||||
|
||||
failed:
|
||||
|
|
|
|||
|
|
@ -98,10 +98,7 @@ static int __devinit b43_pcmcia_probe(struct pcmcia_device *dev)
|
|||
if (res != 0)
|
||||
goto err_disable;
|
||||
|
||||
dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
dev->irq.Handler = NULL; /* The handler is registered later. */
|
||||
res = pcmcia_request_irq(dev, &dev->irq);
|
||||
if (res != 0)
|
||||
if (!dev->irq)
|
||||
goto err_disable;
|
||||
|
||||
res = pcmcia_request_configuration(dev, &dev->conf);
|
||||
|
|
|
|||
|
|
@ -39,7 +39,6 @@ MODULE_PARM_DESC(ignore_cis_vcc, "Ignore broken CIS VCC entry");
|
|||
|
||||
/* struct local_info::hw_priv */
|
||||
struct hostap_cs_priv {
|
||||
dev_node_t node;
|
||||
struct pcmcia_device *link;
|
||||
int sandisk_connectplus;
|
||||
};
|
||||
|
|
@ -556,15 +555,7 @@ static int prism2_config_check(struct pcmcia_device *p_dev,
|
|||
p_dev->conf.Vpp = dflt->vpp1.param[CISTPL_POWER_VNOM] / 10000;
|
||||
|
||||
/* Do we need to allocate an interrupt? */
|
||||
if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
|
||||
p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
|
||||
else if (!(p_dev->conf.Attributes & CONF_ENABLE_IRQ)) {
|
||||
/* At least Compaq WL200 does not have IRQInfo1 set,
|
||||
* but it does not work without interrupts.. */
|
||||
printk(KERN_WARNING "Config has no IRQ info, but trying to "
|
||||
"enable IRQ anyway..\n");
|
||||
p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
|
||||
}
|
||||
p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
|
||||
|
||||
/* IO window settings */
|
||||
PDEBUG(DEBUG_EXTRA, "IO window settings: cfg->io.nwin=%d "
|
||||
|
|
@ -633,21 +624,10 @@ static int prism2_config(struct pcmcia_device *link)
|
|||
local = iface->local;
|
||||
local->hw_priv = hw_priv;
|
||||
hw_priv->link = link;
|
||||
strcpy(hw_priv->node.dev_name, dev->name);
|
||||
link->dev_node = &hw_priv->node;
|
||||
|
||||
/*
|
||||
* Allocate an interrupt line. Note that this does not assign a
|
||||
* handler to the interrupt, unless the 'Handler' member of the
|
||||
* irq structure is initialized.
|
||||
*/
|
||||
if (link->conf.Attributes & CONF_ENABLE_IRQ) {
|
||||
link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
link->irq.Handler = prism2_interrupt;
|
||||
ret = pcmcia_request_irq(link, &link->irq);
|
||||
if (ret)
|
||||
goto failed;
|
||||
}
|
||||
ret = pcmcia_request_irq(link, prism2_interrupt);
|
||||
if (ret)
|
||||
goto failed;
|
||||
|
||||
/*
|
||||
* This actually configures the PCMCIA socket -- setting up
|
||||
|
|
@ -658,7 +638,7 @@ static int prism2_config(struct pcmcia_device *link)
|
|||
if (ret)
|
||||
goto failed;
|
||||
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
dev->irq = link->irq;
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
|
||||
/* Finally, report what we've done */
|
||||
|
|
@ -668,7 +648,7 @@ static int prism2_config(struct pcmcia_device *link)
|
|||
printk(", Vpp %d.%d", link->conf.Vpp / 10,
|
||||
link->conf.Vpp % 10);
|
||||
if (link->conf.Attributes & CONF_ENABLE_IRQ)
|
||||
printk(", irq %d", link->irq.AssignedIRQ);
|
||||
printk(", irq %d", link->irq);
|
||||
if (link->io.NumPorts1)
|
||||
printk(", io 0x%04x-0x%04x", link->io.BasePort1,
|
||||
link->io.BasePort1+link->io.NumPorts1-1);
|
||||
|
|
@ -682,11 +662,9 @@ static int prism2_config(struct pcmcia_device *link)
|
|||
sandisk_enable_wireless(dev);
|
||||
|
||||
ret = prism2_hw_config(dev, 1);
|
||||
if (!ret) {
|
||||
if (!ret)
|
||||
ret = hostap_hw_ready(dev);
|
||||
if (ret == 0 && local->ddev)
|
||||
strcpy(hw_priv->node.dev_name, local->ddev->name);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
failed:
|
||||
|
|
|
|||
|
|
@ -777,7 +777,7 @@ static void if_cs_release(struct pcmcia_device *p_dev)
|
|||
|
||||
lbs_deb_enter(LBS_DEB_CS);
|
||||
|
||||
free_irq(p_dev->irq.AssignedIRQ, card);
|
||||
free_irq(p_dev->irq, card);
|
||||
pcmcia_disable_device(p_dev);
|
||||
if (card->iobase)
|
||||
ioport_unmap(card->iobase);
|
||||
|
|
@ -807,8 +807,7 @@ static int if_cs_ioprobe(struct pcmcia_device *p_dev,
|
|||
p_dev->io.NumPorts1 = cfg->io.win[0].len;
|
||||
|
||||
/* Do we need to allocate an interrupt? */
|
||||
if (cfg->irq.IRQInfo1)
|
||||
p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
|
||||
p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
|
||||
|
||||
/* IO window settings */
|
||||
if (cfg->io.nwin != 1) {
|
||||
|
|
@ -837,9 +836,6 @@ static int if_cs_probe(struct pcmcia_device *p_dev)
|
|||
card->p_dev = p_dev;
|
||||
p_dev->priv = card;
|
||||
|
||||
p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
p_dev->irq.Handler = NULL;
|
||||
|
||||
p_dev->conf.Attributes = 0;
|
||||
p_dev->conf.IntType = INT_MEMORY_AND_IO;
|
||||
|
||||
|
|
@ -854,13 +850,8 @@ static int if_cs_probe(struct pcmcia_device *p_dev)
|
|||
* a handler to the interrupt, unless the 'Handler' member of
|
||||
* the irq structure is initialized.
|
||||
*/
|
||||
if (p_dev->conf.Attributes & CONF_ENABLE_IRQ) {
|
||||
ret = pcmcia_request_irq(p_dev, &p_dev->irq);
|
||||
if (ret) {
|
||||
lbs_pr_err("error in pcmcia_request_irq\n");
|
||||
goto out1;
|
||||
}
|
||||
}
|
||||
if (!p_dev->irq)
|
||||
goto out1;
|
||||
|
||||
/* Initialize io access */
|
||||
card->iobase = ioport_map(p_dev->io.BasePort1, p_dev->io.NumPorts1);
|
||||
|
|
@ -883,7 +874,7 @@ static int if_cs_probe(struct pcmcia_device *p_dev)
|
|||
|
||||
/* Finally, report what we've done */
|
||||
lbs_deb_cs("irq %d, io 0x%04x-0x%04x\n",
|
||||
p_dev->irq.AssignedIRQ, p_dev->io.BasePort1,
|
||||
p_dev->irq, p_dev->io.BasePort1,
|
||||
p_dev->io.BasePort1 + p_dev->io.NumPorts1 - 1);
|
||||
|
||||
/*
|
||||
|
|
@ -940,7 +931,7 @@ static int if_cs_probe(struct pcmcia_device *p_dev)
|
|||
priv->fw_ready = 1;
|
||||
|
||||
/* Now actually get the IRQ */
|
||||
ret = request_irq(p_dev->irq.AssignedIRQ, if_cs_interrupt,
|
||||
ret = request_irq(p_dev->irq, if_cs_interrupt,
|
||||
IRQF_SHARED, DRV_NAME, card);
|
||||
if (ret) {
|
||||
lbs_pr_err("error in request_irq\n");
|
||||
|
|
|
|||
|
|
@ -50,7 +50,6 @@ MODULE_PARM_DESC(ignore_cis_vcc, "Allow voltage mismatch between card and socket
|
|||
* struct orinoco_private */
|
||||
struct orinoco_pccard {
|
||||
struct pcmcia_device *p_dev;
|
||||
dev_node_t node;
|
||||
|
||||
/* Used to handle hard reset */
|
||||
/* yuck, we need this hack to work around the insanity of the
|
||||
|
|
@ -119,10 +118,6 @@ orinoco_cs_probe(struct pcmcia_device *link)
|
|||
card->p_dev = link;
|
||||
link->priv = priv;
|
||||
|
||||
/* Interrupt setup */
|
||||
link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
link->irq.Handler = orinoco_interrupt;
|
||||
|
||||
/* General socket configuration defaults can go here. In this
|
||||
* client, we assume very little, and rely on the CIS for
|
||||
* almost everything. In most clients, many details (i.e.,
|
||||
|
|
@ -144,8 +139,7 @@ static void orinoco_cs_detach(struct pcmcia_device *link)
|
|||
{
|
||||
struct orinoco_private *priv = link->priv;
|
||||
|
||||
if (link->dev_node)
|
||||
orinoco_if_del(priv);
|
||||
orinoco_if_del(priv);
|
||||
|
||||
orinoco_cs_release(link);
|
||||
|
||||
|
|
@ -230,7 +224,6 @@ static int
|
|||
orinoco_cs_config(struct pcmcia_device *link)
|
||||
{
|
||||
struct orinoco_private *priv = link->priv;
|
||||
struct orinoco_pccard *card = priv->card;
|
||||
hermes_t *hw = &priv->hw;
|
||||
int ret;
|
||||
void __iomem *mem;
|
||||
|
|
@ -258,12 +251,7 @@ orinoco_cs_config(struct pcmcia_device *link)
|
|||
goto failed;
|
||||
}
|
||||
|
||||
/*
|
||||
* Allocate an interrupt line. Note that this does not assign
|
||||
* a handler to the interrupt, unless the 'Handler' member of
|
||||
* the irq structure is initialized.
|
||||
*/
|
||||
ret = pcmcia_request_irq(link, &link->irq);
|
||||
ret = pcmcia_request_irq(link, orinoco_interrupt);
|
||||
if (ret)
|
||||
goto failed;
|
||||
|
||||
|
|
@ -285,9 +273,6 @@ orinoco_cs_config(struct pcmcia_device *link)
|
|||
if (ret)
|
||||
goto failed;
|
||||
|
||||
/* Ok, we have the configuration, prepare to register the netdev */
|
||||
card->node.major = card->node.minor = 0;
|
||||
|
||||
/* Initialise the main driver */
|
||||
if (orinoco_init(priv) != 0) {
|
||||
printk(KERN_ERR PFX "orinoco_init() failed\n");
|
||||
|
|
@ -296,17 +281,11 @@ orinoco_cs_config(struct pcmcia_device *link)
|
|||
|
||||
/* Register an interface with the stack */
|
||||
if (orinoco_if_add(priv, link->io.BasePort1,
|
||||
link->irq.AssignedIRQ) != 0) {
|
||||
link->irq) != 0) {
|
||||
printk(KERN_ERR PFX "orinoco_if_add() failed\n");
|
||||
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;
|
||||
|
||||
failed:
|
||||
|
|
|
|||
|
|
@ -57,7 +57,6 @@ MODULE_PARM_DESC(ignore_cis_vcc, "Allow voltage mismatch between card and socket
|
|||
* struct orinoco_private */
|
||||
struct orinoco_pccard {
|
||||
struct pcmcia_device *p_dev;
|
||||
dev_node_t node;
|
||||
};
|
||||
|
||||
/********************************************************************/
|
||||
|
|
@ -193,10 +192,6 @@ spectrum_cs_probe(struct pcmcia_device *link)
|
|||
card->p_dev = link;
|
||||
link->priv = priv;
|
||||
|
||||
/* Interrupt setup */
|
||||
link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
link->irq.Handler = orinoco_interrupt;
|
||||
|
||||
/* General socket configuration defaults can go here. In this
|
||||
* client, we assume very little, and rely on the CIS for
|
||||
* almost everything. In most clients, many details (i.e.,
|
||||
|
|
@ -218,8 +213,7 @@ static void spectrum_cs_detach(struct pcmcia_device *link)
|
|||
{
|
||||
struct orinoco_private *priv = link->priv;
|
||||
|
||||
if (link->dev_node)
|
||||
orinoco_if_del(priv);
|
||||
orinoco_if_del(priv);
|
||||
|
||||
spectrum_cs_release(link);
|
||||
|
||||
|
|
@ -304,7 +298,6 @@ static int
|
|||
spectrum_cs_config(struct pcmcia_device *link)
|
||||
{
|
||||
struct orinoco_private *priv = link->priv;
|
||||
struct orinoco_pccard *card = priv->card;
|
||||
hermes_t *hw = &priv->hw;
|
||||
int ret;
|
||||
void __iomem *mem;
|
||||
|
|
@ -332,12 +325,7 @@ spectrum_cs_config(struct pcmcia_device *link)
|
|||
goto failed;
|
||||
}
|
||||
|
||||
/*
|
||||
* Allocate an interrupt line. Note that this does not assign
|
||||
* a handler to the interrupt, unless the 'Handler' member of
|
||||
* the irq structure is initialized.
|
||||
*/
|
||||
ret = pcmcia_request_irq(link, &link->irq);
|
||||
ret = pcmcia_request_irq(link, orinoco_interrupt);
|
||||
if (ret)
|
||||
goto failed;
|
||||
|
||||
|
|
@ -359,9 +347,6 @@ spectrum_cs_config(struct pcmcia_device *link)
|
|||
if (ret)
|
||||
goto failed;
|
||||
|
||||
/* Ok, we have the configuration, prepare to register the netdev */
|
||||
card->node.major = card->node.minor = 0;
|
||||
|
||||
/* Reset card */
|
||||
if (spectrum_cs_hard_reset(priv) != 0)
|
||||
goto failed;
|
||||
|
|
@ -374,17 +359,11 @@ spectrum_cs_config(struct pcmcia_device *link)
|
|||
|
||||
/* Register an interface with the stack */
|
||||
if (orinoco_if_add(priv, link->io.BasePort1,
|
||||
link->irq.AssignedIRQ) != 0) {
|
||||
link->irq) != 0) {
|
||||
printk(KERN_ERR PFX "orinoco_if_add() failed\n");
|
||||
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;
|
||||
|
||||
failed:
|
||||
|
|
|
|||
|
|
@ -51,7 +51,6 @@
|
|||
#include <pcmcia/cistpl.h>
|
||||
#include <pcmcia/cisreg.h>
|
||||
#include <pcmcia/ds.h>
|
||||
#include <pcmcia/mem_op.h>
|
||||
|
||||
#include <linux/wireless.h>
|
||||
#include <net/iw_handler.h>
|
||||
|
|
@ -321,10 +320,6 @@ static int ray_probe(struct pcmcia_device *p_dev)
|
|||
p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
p_dev->io.IOAddrLines = 5;
|
||||
|
||||
/* Interrupt setup. For PCMCIA, driver takes what's given */
|
||||
p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
p_dev->irq.Handler = &ray_interrupt;
|
||||
|
||||
/* General socket configuration */
|
||||
p_dev->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
p_dev->conf.IntType = INT_MEMORY_AND_IO;
|
||||
|
|
@ -383,8 +378,7 @@ static void ray_detach(struct pcmcia_device *link)
|
|||
del_timer(&local->timer);
|
||||
|
||||
if (link->priv) {
|
||||
if (link->dev_node)
|
||||
unregister_netdev(dev);
|
||||
unregister_netdev(dev);
|
||||
free_netdev(dev);
|
||||
}
|
||||
dev_dbg(&link->dev, "ray_cs ray_detach ending\n");
|
||||
|
|
@ -417,10 +411,10 @@ static int ray_config(struct pcmcia_device *link)
|
|||
/* Now allocate an interrupt line. Note that this does not
|
||||
actually assign a handler to the interrupt.
|
||||
*/
|
||||
ret = pcmcia_request_irq(link, &link->irq);
|
||||
ret = pcmcia_request_irq(link, ray_interrupt);
|
||||
if (ret)
|
||||
goto failed;
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
dev->irq = link->irq;
|
||||
|
||||
/* This actually configures the PCMCIA socket -- setting up
|
||||
the I/O windows and the interrupt mapping.
|
||||
|
|
@ -493,9 +487,6 @@ static int ray_config(struct pcmcia_device *link)
|
|||
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",
|
||||
dev->name, dev->irq, dev->dev_addr);
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@ struct beacon_rx {
|
|||
typedef struct ray_dev_t {
|
||||
int card_status;
|
||||
int authentication_state;
|
||||
dev_node_t node;
|
||||
window_handle_t amem_handle; /* handle to window for attribute memory */
|
||||
window_handle_t rmem_handle; /* handle to window for rx buffer on card */
|
||||
void __iomem *sram; /* pointer to beginning of shared RAM */
|
||||
|
|
|
|||
|
|
@ -610,7 +610,6 @@ struct wl3501_card {
|
|||
struct iw_statistics wstats;
|
||||
struct iw_spy_data spy_data;
|
||||
struct iw_public_data wireless_data;
|
||||
struct dev_node_t node;
|
||||
struct pcmcia_device *p_dev;
|
||||
};
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1451,6 +1451,8 @@ static void wl3501_detach(struct pcmcia_device *link)
|
|||
netif_device_detach(dev);
|
||||
wl3501_release(link);
|
||||
|
||||
unregister_netdev(dev);
|
||||
|
||||
if (link->priv)
|
||||
free_netdev(link->priv);
|
||||
|
||||
|
|
@ -1897,10 +1899,6 @@ static int wl3501_probe(struct pcmcia_device *p_dev)
|
|||
p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
p_dev->io.IOAddrLines = 5;
|
||||
|
||||
/* Interrupt setup */
|
||||
p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
p_dev->irq.Handler = wl3501_interrupt;
|
||||
|
||||
/* General socket configuration */
|
||||
p_dev->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
p_dev->conf.IntType = INT_MEMORY_AND_IO;
|
||||
|
|
@ -1961,7 +1959,7 @@ static int wl3501_config(struct pcmcia_device *link)
|
|||
/* Now allocate an interrupt line. Note that this does not actually
|
||||
* assign a handler to the interrupt. */
|
||||
|
||||
ret = pcmcia_request_irq(link, &link->irq);
|
||||
ret = pcmcia_request_irq(link, wl3501_interrupt);
|
||||
if (ret)
|
||||
goto failed;
|
||||
|
||||
|
|
@ -1972,7 +1970,7 @@ static int wl3501_config(struct pcmcia_device *link)
|
|||
if (ret)
|
||||
goto failed;
|
||||
|
||||
dev->irq = link->irq.AssignedIRQ;
|
||||
dev->irq = link->irq;
|
||||
dev->base_addr = link->io.BasePort1;
|
||||
SET_NETDEV_DEV(dev, &link->dev);
|
||||
if (register_netdev(dev)) {
|
||||
|
|
@ -1981,20 +1979,15 @@ static int wl3501_config(struct pcmcia_device *link)
|
|||
}
|
||||
|
||||
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;
|
||||
|
||||
if (!wl3501_get_flash_mac_addr(this)) {
|
||||
printk(KERN_WARNING "%s: Cant read MAC addr in flash ROM?\n",
|
||||
dev->name);
|
||||
unregister_netdev(dev);
|
||||
goto failed;
|
||||
}
|
||||
strcpy(this->node.dev_name, dev->name);
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
dev->dev_addr[i] = ((char *)&this->mac_addr)[i];
|
||||
|
|
@ -2038,12 +2031,6 @@ failed:
|
|||
*/
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue