load include_io, include_mem from /etc/modprobe.d/pcmcia.conf instead of running pcmcia-socket-startup. (integration of pcmcia-socket-startup to the kernel)
if /etc/modprobe.d/pcmcia.conf does not exist, rsrc_nonstatic allocates minimum io/mem resource. exclude_io, exclude_mem, include_irq, exclude_irq are not yet implemented. Here is example of pcmcia.conf options rsrc_nonstatic include_io_list=0x100,0x3af,0x3e0,0x4ff,0x800,0x820,0xc00,0xcf7,0xa00,0xaff options rsrc_nonstatic include_mem_list=0xc0000,0xfffff,0xa0000000,0xa0ffffff,0x60000000,0x60ffffff --- linux-2.6.32-rc5-git3/drivers/pcmcia/rsrc_nonstatic.c.orig 2009-11-01 20:51:39.000000000 +0900 +++ linux-2.6.32-rc5-git3/drivers/pcmcia/rsrc_nonstatic.c 2009-11-08 11:00:14.000000000 +0900 @@ -47,6 +47,13 @@ INT_MODULE_PARM(probe_io, 1); /* IO por INT_MODULE_PARM(mem_limit, 0x10000); #endif +static int include_io_list[16]; +static unsigned int include_io_count = 0; +module_param_array(include_io_list, int, &include_io_count, 0444); +static int include_mem_list[16]; +static unsigned int include_mem_count = 0; +module_param_array(include_mem_list, int, &include_mem_count, 0444); + /* for io_db and mem_db */ struct resource_map { u_long base, num; @@ -779,8 +786,49 @@ static int nonstatic_autoadd_resources(s struct resource *res; int i, done = 0; - if (!s->cb_dev || !s->cb_dev->bus) - return -ENODEV; + if (include_io_count) { + for (i = 0; i < include_io_count; i=i+2) { + if (!adjust_io(s, ADD_MANAGED_RESOURCE, + include_io_list[i], include_io_list[i+1])) { + done |= IORESOURCE_IO; + } + } + } +#if defined(CONFIG_X86) + else { + /* allocate minimum io resource */ + if (!adjust_io(s, ADD_MANAGED_RESOURCE, 0x100, 0x03af)) { + done |= IORESOURCE_IO; + } + } +#endif + + if (include_mem_count) { + for (i = 0; i < include_mem_count; i=i+2) { + if (!adjust_memory(s, ADD_MANAGED_RESOURCE, + include_mem_list[i], include_mem_list[i+1])) { + done |= IORESOURCE_MEM; + } + } + } + +#if defined(CONFIG_X86) + else { + /* allocate minimum memory resource */ + if (!adjust_memory(s, ADD_MANAGED_RESOURCE, + 0xa0000000, 0xa0ffffff)) { + done |= IORESOURCE_MEM; + } + } +#endif + + if (!s->cb_dev || !s->cb_dev->bus) { + if (done == (IORESOURCE_MEM | IORESOURCE_IO)) { + s->resource_setup_done = 1; + return 0; + } else + return -ENODEV; + } #if defined(CONFIG_X86) /* If this is the root bus, the risk of hitting @@ -789,8 +837,13 @@ static int nonstatic_autoadd_resources(s * resources is too big. Therefore, don't do auto-adding * of resources at the moment. */ - if (s->cb_dev->bus->number == 0) - return -EINVAL; + if (s->cb_dev->bus->number == 0) { + if (done == (IORESOURCE_MEM | IORESOURCE_IO)) { + s->resource_setup_done = 1; + return 0; + } else + return -EINVAL; + } #endif for (i=0; i < PCI_BUS_NUM_RESOURCES; i++) { _______________________________________________ Linux PCMCIA reimplementation list http://lists.infradead.org/mailman/listinfo/linux-pcmcia