static int bluecard_config(struct pcmcia_device *link) { bluecard_info_t *info = link->priv; int i, n; #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) link->config_index = 0x20; #else link->conf.ConfigIndex = 0x20; #endif #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) link->resource[0]->flags |= IO_DATA_PATH_WIDTH_8; link->resource[0]->end = 64; link->io_lines = 6; #else link->io.Attributes1 = IO_DATA_PATH_WIDTH_8; link->io.NumPorts1 = 64; link->io.IOAddrLines = 6; #endif for (n = 0; n < 0x400; n += 0x40) { #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) link->resource[0]->start = n ^ 0x300; i = pcmcia_request_io(link); #else link->io.BasePort1 = n ^ 0x300; i = pcmcia_request_io(link, &link->io); #endif if (i == 0) break; } if (i != 0) goto failed; #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) i = pcmcia_request_irq(link, bluecard_interrupt); if (i != 0) goto failed; #else i = pcmcia_request_irq(link, &link->irq); if (i != 0) link->irq.AssignedIRQ = 0; #endif i = pcmcia_enable_device(link); if (i != 0) goto failed; if (bluecard_open(info) != 0) goto failed; return 0; failed: bluecard_release(link); return -ENODEV; }
static int bluecard_config(struct pcmcia_device *link) { bluecard_info_t *info = link->priv; int i, n; link->conf.ConfigIndex = 0x20; link->io.NumPorts1 = 64; link->io.IOAddrLines = 6; for (n = 0; n < 0x400; n += 0x40) { link->io.BasePort1 = n ^ 0x300; i = pcmcia_request_io(link, &link->io); if (i == CS_SUCCESS) break; } if (i != CS_SUCCESS) { cs_error(link, RequestIO, i); goto failed; } i = pcmcia_request_irq(link, &link->irq); if (i != CS_SUCCESS) { cs_error(link, RequestIRQ, i); link->irq.AssignedIRQ = 0; } i = pcmcia_request_configuration(link, &link->conf); if (i != CS_SUCCESS) { cs_error(link, RequestConfiguration, i); goto failed; } if (bluecard_open(info) != 0) goto failed; strcpy(info->node.dev_name, info->hdev->name); link->dev_node = &info->node; return 0; failed: bluecard_release(link); return -ENODEV; }
static int bluecard_config(struct pcmcia_device *link) { struct bluecard_info *info = link->priv; int i, n; link->config_index = 0x20; link->resource[0]->flags |= IO_DATA_PATH_WIDTH_8; link->resource[0]->end = 64; link->io_lines = 6; for (n = 0; n < 0x400; n += 0x40) { link->resource[0]->start = n ^ 0x300; i = pcmcia_request_io(link); if (i == 0) break; } if (i != 0) goto failed; i = pcmcia_request_irq(link, bluecard_interrupt); if (i != 0) goto failed; i = pcmcia_enable_device(link); if (i != 0) goto failed; if (bluecard_open(info) != 0) goto failed; return 0; failed: bluecard_release(link); return -ENODEV; }
static int bluecard_config(struct pcmcia_device *link) { bluecard_info_t *info = link->priv; int i, n; link->conf.ConfigIndex = 0x20; link->io.NumPorts1 = 64; link->io.IOAddrLines = 6; for (n = 0; n < 0x400; n += 0x40) { link->io.BasePort1 = n ^ 0x300; i = pcmcia_request_io(link, &link->io); if (i == 0) break; } if (i != 0) goto failed; i = pcmcia_request_irq(link, bluecard_interrupt); if (i != 0) goto failed; i = pcmcia_request_configuration(link, &link->conf); if (i != 0) goto failed; if (bluecard_open(info) != 0) goto failed; return 0; failed: bluecard_release(link); return -ENODEV; }
void bluecard_config(dev_link_t *link) { client_handle_t handle = link->handle; bluecard_info_t *info = link->priv; tuple_t tuple; u_short buf[256]; cisparse_t parse; config_info_t config; int i, n, last_ret, last_fn; tuple.TupleData = (cisdata_t *)buf; tuple.TupleOffset = 0; tuple.TupleDataMax = 255; tuple.Attributes = 0; /* Get configuration register information */ tuple.DesiredTuple = CISTPL_CONFIG; last_ret = first_tuple(handle, &tuple, &parse); if (last_ret != CS_SUCCESS) { last_fn = ParseTuple; goto cs_failed; } link->conf.ConfigBase = parse.config.base; link->conf.Present = parse.config.rmask[0]; /* Configure card */ link->state |= DEV_CONFIG; i = CardServices(GetConfigurationInfo, handle, &config); link->conf.Vcc = config.Vcc; link->conf.ConfigIndex = 0x20; link->io.NumPorts1 = 64; link->io.IOAddrLines = 6; for (n = 0; n < 0x400; n += 0x40) { link->io.BasePort1 = n ^ 0x300; i = CardServices(RequestIO, link->handle, &link->io); if (i == CS_SUCCESS) break; } if (i != CS_SUCCESS) { cs_error(link->handle, RequestIO, i); goto failed; } i = CardServices(RequestIRQ, link->handle, &link->irq); if (i != CS_SUCCESS) { cs_error(link->handle, RequestIRQ, i); link->irq.AssignedIRQ = 0; } i = CardServices(RequestConfiguration, link->handle, &link->conf); if (i != CS_SUCCESS) { cs_error(link->handle, RequestConfiguration, i); goto failed; } MOD_INC_USE_COUNT; if (bluecard_open(info) != 0) goto failed; strcpy(info->node.dev_name, info->hdev.name); link->dev = &info->node; link->state &= ~DEV_CONFIG_PENDING; return; cs_failed: cs_error(link->handle, last_fn, last_ret); failed: bluecard_release((u_long)link); }