mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
pcmcia: re-work pcmcia_request_irq()
Instead of the old pcmcia_request_irq() interface, drivers may now choose between: - calling request_irq/free_irq directly. Use the IRQ from *p_dev->irq. - use pcmcia_request_irq(p_dev, handler_t); the PCMCIA core will clean up automatically on calls to pcmcia_disable_device() or device ejection. - drivers still not capable of IRQF_SHARED (or not telling us so) may use the deprecated pcmcia_request_exclusive_irq() for the time being; they might receive a shared IRQ nonetheless. CC: linux-bluetooth@vger.kernel.org CC: netdev@vger.kernel.org CC: linux-wireless@vger.kernel.org CC: linux-serial@vger.kernel.org CC: alsa-devel@alsa-project.org CC: linux-usb@vger.kernel.org CC: linux-ide@vger.kernel.org Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
This commit is contained in:
@@ -1,4 +1,14 @@
|
||||
This file details changes in 2.6 which affect PCMCIA card driver authors:
|
||||
* New IRQ request rules (as of 2.6.35)
|
||||
Instead of the old pcmcia_request_irq() interface, drivers may now
|
||||
choose between:
|
||||
- calling request_irq/free_irq directly. Use the IRQ from *p_dev->irq.
|
||||
- use pcmcia_request_irq(p_dev, handler_t); the PCMCIA core will
|
||||
clean up automatically on calls to pcmcia_disable_device() or
|
||||
device ejection.
|
||||
- drivers still not capable of IRQF_SHARED (or not telling us so) may
|
||||
use the deprecated pcmcia_request_exclusive_irq() for the time
|
||||
being; they might receive a shared IRQ nonetheless.
|
||||
|
||||
* no cs_error / CS_CHECK / CONFIG_PCMCIA_DEBUG (as of 2.6.33)
|
||||
Instead of the cs_error() callback or the CS_CHECK() macro, please use
|
||||
|
||||
@@ -268,7 +268,6 @@ static int pcmcia_init_one(struct pcmcia_device *pdev)
|
||||
pdev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
|
||||
pdev->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
|
||||
pdev->io.IOAddrLines = 3;
|
||||
pdev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
pdev->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
pdev->conf.IntType = INT_MEMORY_AND_IO;
|
||||
|
||||
@@ -293,8 +292,7 @@ static int pcmcia_init_one(struct pcmcia_device *pdev)
|
||||
}
|
||||
io_base = pdev->io.BasePort1;
|
||||
ctl_base = stk->ctl_base;
|
||||
ret = pcmcia_request_irq(pdev, &pdev->irq);
|
||||
if (ret)
|
||||
if (!pdev->irq)
|
||||
goto failed;
|
||||
|
||||
ret = pcmcia_request_configuration(pdev, &pdev->conf);
|
||||
@@ -344,7 +342,7 @@ static int pcmcia_init_one(struct pcmcia_device *pdev)
|
||||
}
|
||||
|
||||
/* activate */
|
||||
ret = ata_host_activate(host, pdev->irq.AssignedIRQ, ata_sff_interrupt,
|
||||
ret = ata_host_activate(host, pdev->irq, ata_sff_interrupt,
|
||||
IRQF_SHARED, &pcmcia_sht);
|
||||
if (ret)
|
||||
goto failed;
|
||||
|
||||
@@ -869,9 +869,6 @@ static int bluecard_probe(struct pcmcia_device *link)
|
||||
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
link->io.NumPorts1 = 8;
|
||||
link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
|
||||
link->irq.Handler = bluecard_interrupt;
|
||||
|
||||
link->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
@@ -908,9 +905,9 @@ static int bluecard_config(struct pcmcia_device *link)
|
||||
if (i != 0)
|
||||
goto failed;
|
||||
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
i = pcmcia_request_irq(link, bluecard_interrupt);
|
||||
if (i != 0)
|
||||
link->irq.AssignedIRQ = 0;
|
||||
goto failed;
|
||||
|
||||
i = pcmcia_request_configuration(link, &link->conf);
|
||||
if (i != 0)
|
||||
|
||||
@@ -661,9 +661,6 @@ static int bt3c_probe(struct pcmcia_device *link)
|
||||
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
link->io.NumPorts1 = 8;
|
||||
link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
|
||||
link->irq.Handler = bt3c_interrupt;
|
||||
|
||||
link->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
@@ -743,9 +740,9 @@ static int bt3c_config(struct pcmcia_device *link)
|
||||
goto failed;
|
||||
|
||||
found_port:
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
i = pcmcia_request_irq(link, &bt3c_interrupt);
|
||||
if (i != 0)
|
||||
link->irq.AssignedIRQ = 0;
|
||||
goto failed;
|
||||
|
||||
i = pcmcia_request_configuration(link, &link->conf);
|
||||
if (i != 0)
|
||||
|
||||
@@ -590,9 +590,6 @@ static int btuart_probe(struct pcmcia_device *link)
|
||||
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
link->io.NumPorts1 = 8;
|
||||
link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
|
||||
link->irq.Handler = btuart_interrupt;
|
||||
|
||||
link->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
@@ -672,9 +669,9 @@ static int btuart_config(struct pcmcia_device *link)
|
||||
goto failed;
|
||||
|
||||
found_port:
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
i = pcmcia_request_irq(link, btuart_interrupt);
|
||||
if (i != 0)
|
||||
link->irq.AssignedIRQ = 0;
|
||||
goto failed;
|
||||
|
||||
i = pcmcia_request_configuration(link, &link->conf);
|
||||
if (i != 0)
|
||||
|
||||
@@ -575,9 +575,6 @@ static int dtl1_probe(struct pcmcia_device *link)
|
||||
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
link->io.NumPorts1 = 8;
|
||||
link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
|
||||
link->irq.Handler = dtl1_interrupt;
|
||||
|
||||
link->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
@@ -621,9 +618,9 @@ static int dtl1_config(struct pcmcia_device *link)
|
||||
if (pcmcia_loop_config(link, dtl1_confcheck, NULL) < 0)
|
||||
goto failed;
|
||||
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
i = pcmcia_request_irq(link, dtl1_interrupt);
|
||||
if (i != 0)
|
||||
link->irq.AssignedIRQ = 0;
|
||||
goto failed;
|
||||
|
||||
i = pcmcia_request_configuration(link, &link->conf);
|
||||
if (i != 0)
|
||||
|
||||
@@ -195,9 +195,6 @@ static int config_ipwireless(struct ipw_dev *ipw)
|
||||
link->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
|
||||
link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
link->irq.Handler = ipwireless_interrupt;
|
||||
|
||||
INIT_WORK(&ipw->work_reboot, signalled_reboot_work);
|
||||
|
||||
ipwireless_init_hardware_v1(ipw->hardware, link->io.BasePort1,
|
||||
@@ -205,8 +202,7 @@ static int config_ipwireless(struct ipw_dev *ipw)
|
||||
ipw->is_v2_card, signalled_reboot_callback,
|
||||
ipw);
|
||||
|
||||
ret = pcmcia_request_irq(link, &link->irq);
|
||||
|
||||
ret = pcmcia_request_irq(link, ipwireless_interrupt);
|
||||
if (ret != 0)
|
||||
goto exit;
|
||||
|
||||
@@ -217,7 +213,7 @@ static int config_ipwireless(struct ipw_dev *ipw)
|
||||
(unsigned int) link->io.BasePort1,
|
||||
(unsigned int) (link->io.BasePort1 +
|
||||
link->io.NumPorts1 - 1),
|
||||
(unsigned int) link->irq.AssignedIRQ);
|
||||
(unsigned int) link->irq);
|
||||
if (ipw->attr_memory && ipw->common_memory)
|
||||
printk(KERN_INFO IPWIRELESS_PCCARD_NAME
|
||||
": attr memory 0x%08lx-0x%08lx, common memory 0x%08lx-0x%08lx\n",
|
||||
@@ -271,8 +267,6 @@ exit:
|
||||
|
||||
static void release_ipwireless(struct ipw_dev *ipw)
|
||||
{
|
||||
pcmcia_disable_device(ipw->link);
|
||||
|
||||
if (ipw->common_memory) {
|
||||
release_mem_region(ipw->request_common_memory.Base,
|
||||
ipw->request_common_memory.Size);
|
||||
@@ -288,7 +282,6 @@ static void release_ipwireless(struct ipw_dev *ipw)
|
||||
if (ipw->attr_memory)
|
||||
pcmcia_release_window(ipw->link, ipw->handle_attr_memory);
|
||||
|
||||
/* Break the link with Card Services */
|
||||
pcmcia_disable_device(ipw->link);
|
||||
}
|
||||
|
||||
|
||||
@@ -552,10 +552,6 @@ static int mgslpc_probe(struct pcmcia_device *link)
|
||||
|
||||
/* Initialize the struct pcmcia_device structure */
|
||||
|
||||
/* Interrupt setup */
|
||||
link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
link->irq.Handler = NULL;
|
||||
|
||||
link->conf.Attributes = 0;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
|
||||
@@ -608,9 +604,7 @@ static int mgslpc_config(struct pcmcia_device *link)
|
||||
link->conf.ConfigIndex = 8;
|
||||
link->conf.Present = PRESENT_OPTION;
|
||||
|
||||
link->irq.Handler = mgslpc_isr;
|
||||
|
||||
ret = pcmcia_request_irq(link, &link->irq);
|
||||
ret = pcmcia_request_irq(link, mgslpc_isr);
|
||||
if (ret)
|
||||
goto failed;
|
||||
ret = pcmcia_request_configuration(link, &link->conf);
|
||||
@@ -618,7 +612,7 @@ static int mgslpc_config(struct pcmcia_device *link)
|
||||
goto failed;
|
||||
|
||||
info->io_base = link->io.BasePort1;
|
||||
info->irq_level = link->irq.AssignedIRQ;
|
||||
info->irq_level = link->irq;
|
||||
|
||||
/* add to linked list of devices */
|
||||
sprintf(info->node.dev_name, "mgslpc0");
|
||||
@@ -628,7 +622,7 @@ static int mgslpc_config(struct pcmcia_device *link)
|
||||
printk(KERN_INFO "%s: index 0x%02x:",
|
||||
info->node.dev_name, link->conf.ConfigIndex);
|
||||
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);
|
||||
|
||||
@@ -102,7 +102,6 @@ static int ide_probe(struct pcmcia_device *link)
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
|
||||
link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
|
||||
link->io.IOAddrLines = 3;
|
||||
link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
link->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
|
||||
@@ -285,8 +284,7 @@ static int ide_config(struct pcmcia_device *link)
|
||||
io_base = link->io.BasePort1;
|
||||
ctl_base = stk->ctl_base;
|
||||
|
||||
ret = pcmcia_request_irq(link, &link->irq);
|
||||
if (ret)
|
||||
if (!link->irq)
|
||||
goto failed;
|
||||
ret = pcmcia_request_configuration(link, &link->conf);
|
||||
if (ret)
|
||||
@@ -299,11 +297,11 @@ static int ide_config(struct pcmcia_device *link)
|
||||
if (is_kme)
|
||||
outb(0x81, ctl_base+1);
|
||||
|
||||
host = idecs_register(io_base, ctl_base, link->irq.AssignedIRQ, link);
|
||||
host = idecs_register(io_base, ctl_base, link->irq, link);
|
||||
if (host == NULL && link->io.NumPorts1 == 0x20) {
|
||||
outb(0x02, ctl_base + 0x10);
|
||||
host = idecs_register(io_base + 0x10, ctl_base + 0x10,
|
||||
link->irq.AssignedIRQ, link);
|
||||
link->irq, link);
|
||||
}
|
||||
|
||||
if (host == NULL)
|
||||
|
||||
@@ -107,9 +107,6 @@ static int avmcs_probe(struct pcmcia_device *p_dev)
|
||||
p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
p_dev->io.NumPorts2 = 0;
|
||||
|
||||
/* Interrupt setup */
|
||||
p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
|
||||
/* General socket configuration */
|
||||
p_dev->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
p_dev->conf.IntType = INT_MEMORY_AND_IO;
|
||||
@@ -172,7 +169,7 @@ static int avmcs_configcheck(struct pcmcia_device *p_dev,
|
||||
static int avmcs_config(struct pcmcia_device *link)
|
||||
{
|
||||
local_info_t *dev;
|
||||
int i;
|
||||
int i = -1;
|
||||
char devname[128];
|
||||
int cardtype;
|
||||
int (*addcard)(unsigned int port, unsigned irq);
|
||||
@@ -190,11 +187,7 @@ static int avmcs_config(struct pcmcia_device *link)
|
||||
return -ENODEV;
|
||||
|
||||
do {
|
||||
/*
|
||||
* allocate an interrupt line
|
||||
*/
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
if (i != 0) {
|
||||
if (!link->irq) {
|
||||
/* undo */
|
||||
pcmcia_disable_device(link);
|
||||
break;
|
||||
@@ -249,9 +242,9 @@ static int avmcs_config(struct pcmcia_device *link)
|
||||
default:
|
||||
case AVM_CARDTYPE_B1: addcard = b1pcmcia_addcard_b1; break;
|
||||
}
|
||||
if ((i = (*addcard)(link->io.BasePort1, link->irq.AssignedIRQ)) < 0) {
|
||||
if ((i = (*addcard)(link->io.BasePort1, link->irq)) < 0) {
|
||||
printk(KERN_ERR "avm_cs: failed to add AVM-%s-Controller at i/o %#x, irq %d\n",
|
||||
dev->node.dev_name, link->io.BasePort1, link->irq.AssignedIRQ);
|
||||
dev->node.dev_name, link->io.BasePort1, link->irq);
|
||||
avmcs_release(link);
|
||||
return -ENODEV;
|
||||
}
|
||||
@@ -270,7 +263,7 @@ static int avmcs_config(struct pcmcia_device *link)
|
||||
|
||||
static void avmcs_release(struct pcmcia_device *link)
|
||||
{
|
||||
b1pcmcia_delcard(link->io.BasePort1, link->irq.AssignedIRQ);
|
||||
b1pcmcia_delcard(link->io.BasePort1, link->irq);
|
||||
pcmcia_disable_device(link);
|
||||
} /* avmcs_release */
|
||||
|
||||
|
||||
@@ -119,9 +119,6 @@ static int __devinit avma1cs_probe(struct pcmcia_device *p_dev)
|
||||
p_dev->io.Attributes2 = IO_DATA_PATH_WIDTH_16;
|
||||
p_dev->io.IOAddrLines = 5;
|
||||
|
||||
/* Interrupt setup */
|
||||
p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
|
||||
/* General socket configuration */
|
||||
p_dev->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
p_dev->conf.IntType = INT_MEMORY_AND_IO;
|
||||
@@ -177,7 +174,7 @@ static int avma1cs_configcheck(struct pcmcia_device *p_dev,
|
||||
static int __devinit avma1cs_config(struct pcmcia_device *link)
|
||||
{
|
||||
local_info_t *dev;
|
||||
int i;
|
||||
int i = -1;
|
||||
char devname[128];
|
||||
IsdnCard_t icard;
|
||||
int busy = 0;
|
||||
@@ -197,8 +194,7 @@ static int __devinit avma1cs_config(struct pcmcia_device *link)
|
||||
/*
|
||||
* allocate an interrupt line
|
||||
*/
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
if (i != 0) {
|
||||
if (!link->irq) {
|
||||
/* undo */
|
||||
pcmcia_disable_device(link);
|
||||
break;
|
||||
@@ -230,9 +226,9 @@ static int __devinit avma1cs_config(struct pcmcia_device *link)
|
||||
}
|
||||
|
||||
printk(KERN_NOTICE "avma1_cs: checking at i/o %#x, irq %d\n",
|
||||
link->io.BasePort1, link->irq.AssignedIRQ);
|
||||
link->io.BasePort1, link->irq);
|
||||
|
||||
icard.para[0] = link->irq.AssignedIRQ;
|
||||
icard.para[0] = link->irq;
|
||||
icard.para[1] = link->io.BasePort1;
|
||||
icard.protocol = isdnprot;
|
||||
icard.typ = ISDN_CTYPE_A1_PCMCIA;
|
||||
|
||||
@@ -136,10 +136,6 @@ static int __devinit elsa_cs_probe(struct pcmcia_device *link)
|
||||
|
||||
local->cardnr = -1;
|
||||
|
||||
/* Interrupt setup */
|
||||
link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
link->irq.Handler = NULL;
|
||||
|
||||
/*
|
||||
General socket configuration defaults can go here. In this
|
||||
client, we assume very little, and rely on the CIS for almost
|
||||
@@ -223,11 +219,8 @@ static int __devinit elsa_cs_config(struct pcmcia_device *link)
|
||||
if (i != 0)
|
||||
goto failed;
|
||||
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
if (i != 0) {
|
||||
link->irq.AssignedIRQ = 0;
|
||||
if (!link->irq)
|
||||
goto failed;
|
||||
}
|
||||
|
||||
i = pcmcia_request_configuration(link, &link->conf);
|
||||
if (i != 0)
|
||||
@@ -244,7 +237,7 @@ static int __devinit elsa_cs_config(struct pcmcia_device *link)
|
||||
printk(KERN_INFO "%s: index 0x%02x: ",
|
||||
dev->node.dev_name, link->conf.ConfigIndex);
|
||||
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);
|
||||
@@ -253,7 +246,7 @@ static int __devinit elsa_cs_config(struct pcmcia_device *link)
|
||||
link->io.BasePort2+link->io.NumPorts2-1);
|
||||
printk("\n");
|
||||
|
||||
icard.para[0] = link->irq.AssignedIRQ;
|
||||
icard.para[0] = link->irq;
|
||||
icard.para[1] = link->io.BasePort1;
|
||||
icard.protocol = protocol;
|
||||
icard.typ = ISDN_CTYPE_ELSA_PCMCIA;
|
||||
|
||||
@@ -143,10 +143,6 @@ static int __devinit sedlbauer_probe(struct pcmcia_device *link)
|
||||
local->p_dev = link;
|
||||
link->priv = local;
|
||||
|
||||
/* Interrupt setup */
|
||||
link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
link->irq.Handler = NULL;
|
||||
|
||||
/*
|
||||
General socket configuration defaults can go here. In this
|
||||
client, we assume very little, and rely on the CIS for almost
|
||||
@@ -227,9 +223,7 @@ static int sedlbauer_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;
|
||||
@@ -312,17 +306,6 @@ static int __devinit sedlbauer_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;
|
||||
}
|
||||
|
||||
/*
|
||||
This actually configures the PCMCIA socket -- setting up
|
||||
the I/O windows and the interrupt mapping, and putting the
|
||||
@@ -346,7 +329,7 @@ static int __devinit sedlbauer_config(struct pcmcia_device *link)
|
||||
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);
|
||||
@@ -358,7 +341,7 @@ static int __devinit sedlbauer_config(struct pcmcia_device *link)
|
||||
req->Base+req->Size-1);
|
||||
printk("\n");
|
||||
|
||||
icard.para[0] = link->irq.AssignedIRQ;
|
||||
icard.para[0] = link->irq;
|
||||
icard.para[1] = link->io.BasePort1;
|
||||
icard.protocol = protocol;
|
||||
icard.typ = ISDN_CTYPE_SEDLBAUER_PCMCIA;
|
||||
|
||||
@@ -126,10 +126,6 @@ static int __devinit teles_probe(struct pcmcia_device *link)
|
||||
local->p_dev = link;
|
||||
link->priv = local;
|
||||
|
||||
/* Interrupt setup */
|
||||
link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
|
||||
link->irq.Handler = NULL;
|
||||
|
||||
/*
|
||||
General socket configuration defaults can go here. In this
|
||||
client, we assume very little, and rely on the CIS for almost
|
||||
@@ -213,11 +209,8 @@ static int __devinit teles_cs_config(struct pcmcia_device *link)
|
||||
if (i != 0)
|
||||
goto cs_failed;
|
||||
|
||||
i = pcmcia_request_irq(link, &link->irq);
|
||||
if (i != 0) {
|
||||
link->irq.AssignedIRQ = 0;
|
||||
if (!link->irq)
|
||||
goto cs_failed;
|
||||
}
|
||||
|
||||
i = pcmcia_request_configuration(link, &link->conf);
|
||||
if (i != 0)
|
||||
@@ -234,7 +227,7 @@ static int __devinit teles_cs_config(struct pcmcia_device *link)
|
||||
printk(KERN_INFO "%s: index 0x%02x:",
|
||||
dev->node.dev_name, link->conf.ConfigIndex);
|
||||
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);
|
||||
@@ -243,7 +236,7 @@ static int __devinit teles_cs_config(struct pcmcia_device *link)
|
||||
link->io.BasePort2+link->io.NumPorts2-1);
|
||||
printk("\n");
|
||||
|
||||
icard.para[0] = link->irq.AssignedIRQ;
|
||||
icard.para[0] = link->irq;
|
||||
icard.para[1] = link->io.BasePort1;
|
||||
icard.protocol = protocol;
|
||||
icard.typ = ISDN_CTYPE_TELESPCMCIA;
|
||||
|
||||
@@ -283,8 +283,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;
|
||||
@@ -353,7 +351,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 +359,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;
|
||||
|
||||
@@ -194,8 +194,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;
|
||||
@@ -271,7 +270,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 +278,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);
|
||||
|
||||
@@ -168,7 +168,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;
|
||||
|
||||
@@ -265,12 +264,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 +332,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 +344,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)) {
|
||||
|
||||
@@ -163,7 +163,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;
|
||||
|
||||
@@ -275,15 +274,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)
|
||||
|
||||
@@ -254,10 +254,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;
|
||||
@@ -425,8 +421,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 +431,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) {
|
||||
|
||||
@@ -156,8 +156,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;
|
||||
@@ -238,11 +236,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 */
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user