patch-2.4.25 linux-2.4.25/drivers/pcmcia/cs.c
Next file: linux-2.4.25/drivers/pcmcia/rsrc_mgr.c
Previous file: linux-2.4.25/drivers/pcmcia/cistpl.c
Back to the patch index
Back to the overall index
- Lines: 48
- Date:
2004-02-18 05:36:31.000000000 -0800
- Orig file:
linux-2.4.24/drivers/pcmcia/cs.c
- Orig date:
2003-06-13 07:51:35.000000000 -0700
diff -urN linux-2.4.24/drivers/pcmcia/cs.c linux-2.4.25/drivers/pcmcia/cs.c
@@ -1862,7 +1862,7 @@
{
socket_info_t *s;
config_t *c;
- int ret = 0, irq = 0;
+ int ret = CS_IN_USE, irq = 0;
if (CHECK_HANDLE(handle))
return CS_BAD_HANDLE;
@@ -1874,13 +1874,9 @@
return CS_CONFIGURATION_LOCKED;
if (c->state & CONFIG_IRQ_REQ)
return CS_IN_USE;
-
- /* Short cut: if there are no ISA interrupts, then it is PCI */
- if (!s->cap.irq_mask) {
- irq = s->cap.pci_irq;
- ret = (irq) ? 0 : CS_IN_USE;
+
#ifdef CONFIG_ISA
- } else if (s->irq.AssignedIRQ != 0) {
+ if (s->irq.AssignedIRQ != 0) {
/* If the interrupt is already assigned, it must match */
irq = s->irq.AssignedIRQ;
if (req->IRQInfo1 & IRQ_INFO2_VALID) {
@@ -1889,7 +1885,6 @@
} else
ret = ((req->IRQInfo1&IRQ_MASK) == irq) ? 0 : CS_BAD_ARGS;
} else {
- ret = CS_IN_USE;
if (req->IRQInfo1 & IRQ_INFO2_VALID) {
u_int try, mask = req->IRQInfo2 & s->cap.irq_mask;
for (try = 0; try < 2; try++) {
@@ -1904,9 +1899,13 @@
irq = req->IRQInfo1 & IRQ_MASK;
ret = try_irq(req->Attributes, irq, 1);
}
+ }
#endif
+ if (ret != 0) {
+ if (!s->cap.pci_irq)
+ return ret;
+ irq = s->cap.pci_irq;
}
- if (ret != 0) return ret;
if (req->Attributes & IRQ_HANDLE_PRESENT) {
if (bus_request_irq(s->cap.bus, irq, req->Handler,
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)