Patch from Russell King Remove the dependence of the PCMCIA layer on CONFIG_ISA - introduce CONFIG_PCMCIA_PROBE to determine whether we need the resource handling code. This prevents oopsen on SA11x0 and similar platforms which use statically mapped, non-windowed sockets. 25-akpm/drivers/pcmcia/Kconfig | 4 ++++ 25-akpm/drivers/pcmcia/cs.c | 4 ++-- 25-akpm/drivers/pcmcia/rsrc_mgr.c | 20 ++++++++++---------- 3 files changed, 16 insertions(+), 12 deletions(-) diff -puN drivers/pcmcia/cs.c~pcmcia-5-add-CONFIG_PCMCIA_PROBE drivers/pcmcia/cs.c --- 25/drivers/pcmcia/cs.c~pcmcia-5-add-CONFIG_PCMCIA_PROBE Wed Mar 12 13:34:50 2003 +++ 25-akpm/drivers/pcmcia/cs.c Wed Mar 12 13:34:50 2003 @@ -1621,7 +1621,7 @@ int pcmcia_release_irq(client_handle_t h free_irq(req->AssignedIRQ, req->Instance); } -#ifdef CONFIG_ISA +#ifdef CONFIG_PCMCIA_PROBE if (req->AssignedIRQ != s->cap.pci_irq) undo_irq(req->Attributes, req->AssignedIRQ); #endif @@ -1883,7 +1883,7 @@ int pcmcia_request_irq(client_handle_t h if (!s->cap.irq_mask) { irq = s->cap.pci_irq; ret = (irq) ? 0 : CS_IN_USE; -#ifdef CONFIG_ISA +#ifdef CONFIG_PCMCIA_PROBE } else if (s->irq.AssignedIRQ != 0) { /* If the interrupt is already assigned, it must match */ irq = s->irq.AssignedIRQ; diff -puN drivers/pcmcia/Kconfig~pcmcia-5-add-CONFIG_PCMCIA_PROBE drivers/pcmcia/Kconfig --- 25/drivers/pcmcia/Kconfig~pcmcia-5-add-CONFIG_PCMCIA_PROBE Wed Mar 12 13:34:50 2003 +++ 25-akpm/drivers/pcmcia/Kconfig Wed Mar 12 13:34:50 2003 @@ -87,5 +87,9 @@ config PCMCIA_SA1111 tristate "SA1111 support" depends on PCMCIA_SA1100 && SA1111 +config PCMCIA_PROBE + bool + default y if ISA && !ARCH_SA1100 && !ARCH_CLPS711X + endmenu diff -puN drivers/pcmcia/rsrc_mgr.c~pcmcia-5-add-CONFIG_PCMCIA_PROBE drivers/pcmcia/rsrc_mgr.c --- 25/drivers/pcmcia/rsrc_mgr.c~pcmcia-5-add-CONFIG_PCMCIA_PROBE Wed Mar 12 13:34:50 2003 +++ 25-akpm/drivers/pcmcia/rsrc_mgr.c Wed Mar 12 13:34:50 2003 @@ -62,7 +62,7 @@ #define INT_MODULE_PARM(n, v) static int n = v; MODULE_PARM(n, "i") INT_MODULE_PARM(probe_mem, 1); /* memory probe? */ -#ifdef CONFIG_ISA +#ifdef CONFIG_PCMCIA_PROBE INT_MODULE_PARM(probe_io, 1); /* IO port probe? */ INT_MODULE_PARM(mem_limit, 0x10000); #endif @@ -87,7 +87,7 @@ static resource_map_t io_db = { 0, 0, &i static DECLARE_MUTEX(rsrc_sem); -#ifdef CONFIG_ISA +#ifdef CONFIG_PCMCIA_PROBE typedef struct irq_info_t { u_int Attributes; @@ -273,7 +273,7 @@ static int sub_interval(resource_map_t * ======================================================================*/ -#ifdef CONFIG_ISA +#ifdef CONFIG_PCMCIA_PROBE static void do_io_probe(ioaddr_t base, ioaddr_t num) { @@ -378,7 +378,7 @@ static int do_mem_probe(u_long base, u_l return (num - bad); } -#ifdef CONFIG_ISA +#ifdef CONFIG_PCMCIA_PROBE static u_long inv_probe(int (*is_valid)(u_long), int (*do_cksum)(u_long), @@ -442,7 +442,7 @@ void validate_mem(int (*is_valid)(u_long up(&rsrc_sem); } -#else /* CONFIG_ISA */ +#else /* CONFIG_PCMCIA_PROBE */ void validate_mem(int (*is_valid)(u_long), int (*do_cksum)(u_long), int force_low, socket_info_t *s) @@ -459,7 +459,7 @@ void validate_mem(int (*is_valid)(u_long } } -#endif /* CONFIG_ISA */ +#endif /* CONFIG_PCMCIA_PROBE */ /*====================================================================== @@ -545,7 +545,7 @@ int find_mem_region(u_long *base, u_long ======================================================================*/ -#ifdef CONFIG_ISA +#ifdef CONFIG_PCMCIA_PROBE static void fake_irq(int i, void *d, struct pt_regs *r) { } static inline int check_irq(int irq) @@ -634,7 +634,7 @@ int try_irq(u_int Attributes, int irq, i /*====================================================================*/ -#ifdef CONFIG_ISA +#ifdef CONFIG_PCMCIA_PROBE void undo_irq(u_int Attributes, int irq) { @@ -725,7 +725,7 @@ static int adjust_io(adjust_t *adj) ret = CS_IN_USE; break; } -#ifdef CONFIG_ISA +#ifdef CONFIG_PCMCIA_PROBE if (probe_io) do_io_probe(base, num); #endif @@ -747,7 +747,7 @@ static int adjust_io(adjust_t *adj) static int adjust_irq(adjust_t *adj) { int ret = CS_SUCCESS; -#ifdef CONFIG_ISA +#ifdef CONFIG_PCMCIA_PROBE int irq; irq_info_t *info; _