/* * ipwireless_attach() creates an "instance" of the driver, allocating * local data structures for one device (one interface). The device * is registered with Card Services. * * The pcmcia_device structure is initialized, but we don't actually * configure the card at this point -- we wait until we receive a * card insertion event. */ static int ipwireless_attach(struct pcmcia_device *link) { struct ipw_dev *ipw; int ret; ipw = kzalloc(sizeof(struct ipw_dev), GFP_KERNEL); if (!ipw) return -ENOMEM; ipw->link = link; link->priv = ipw; ipw->hardware = ipwireless_hardware_create(); if (!ipw->hardware) { kfree(ipw); return -ENOMEM; } /* RegisterClient will call config_ipwireless */ ret = config_ipwireless(ipw); if (ret != 0) { ipwireless_detach(link); return ret; } return 0; }
/* * ipwireless_attach() creates an "instance" of the driver, allocating * local data structures for one device (one interface). The device * is registered with Card Services. * * The pcmcia_device structure is initialized, but we don't actually * configure the card at this point -- we wait until we receive a * card insertion event. */ static int ipwireless_attach(struct pcmcia_device *link) { struct ipw_dev *ipw; int ret; ipw = kzalloc(sizeof(struct ipw_dev), GFP_KERNEL); if (!ipw) return -ENOMEM; ipw->link = link; link->priv = ipw; link->irq.Instance = ipw; /* Link this device into our device list. */ link->dev_node = &ipw->nodes[0]; ipw->hardware = ipwireless_hardware_create(); if (!ipw->hardware) { kfree(ipw); return -ENOMEM; } /* RegisterClient will call config_ipwireless */ ret = config_ipwireless(ipw); if (ret != 0) { cs_error(link, RegisterClient, ret); ipwireless_detach(link); return ret; } return 0; }