Index: 2.6.10/drivers/pcmcia/cs_internal.h =================================================================== --- 2.6.10.orig/drivers/pcmcia/cs_internal.h 2004-12-29 18:38:33.511140891 +0100 +++ 2.6.10/drivers/pcmcia/cs_internal.h 2004-12-29 18:39:05.188497753 +0100 @@ -99,14 +99,11 @@ } } -#define CHECK_HANDLE(h) \ - (((h) == NULL) || ((h)->client_magic != CLIENT_MAGIC)) - #define CHECK_SOCKET(s) \ (((s) >= sockets) || (socket_table[s]->ops == NULL)) -#define SOCKET(h) (h->Socket) -#define CONFIG(h) (&SOCKET(h)->config[(h)->Function]) +#define SOCKET(h) (h->socket) +#define CONFIG(h) (&SOCKET(h)->config[(h)->func]) #define CHECK_REGION(r) \ (((r) == NULL) || ((r)->region_magic != REGION_MAGIC)) Index: 2.6.10/drivers/pcmcia/ds.c =================================================================== --- 2.6.10.orig/drivers/pcmcia/ds.c 2004-12-29 18:38:33.512140744 +0100 +++ 2.6.10/drivers/pcmcia/ds.c 2004-12-29 18:39:54.816223523 +0100 @@ -223,7 +223,7 @@ int i; char *serv; - if (CHECK_HANDLE(handle)) + if (!handle) printk(KERN_NOTICE); else { struct pcmcia_device *p_dev = handle_to_pdev(handle); @@ -435,7 +435,7 @@ if (p_drv->attach) { p_dev->instance = p_drv->attach(); - if ((!p_dev->instance) || (p_dev->client.state & CLIENT_UNBOUND)) { + if ((!p_dev->instance) || (p_dev->state & CLIENT_UNBOUND)) { printk(KERN_NOTICE "ds: unable to create instance " "of '%s'!\n", p_drv->drv.name); ret = -EINVAL; @@ -575,10 +575,7 @@ sprintf (p_dev->dev.bus_id, "%d.%d", p_dev->socket->sock, p_dev->device_no); /* compat */ - p_dev->client.client_magic = CLIENT_MAGIC; - p_dev->client.Socket = s->parent; - p_dev->client.Function = function; - p_dev->client.state = CLIENT_UNBOUND; + p_dev->state = CLIENT_UNBOUND; /* Add to the list in pcmcia_bus_socket */ spin_lock_irqsave(&pcmcia_dev_list_lock, flags); @@ -961,7 +958,7 @@ p_drv = to_pcmcia_drv(p_dev->dev.driver); - if (p_dev->client.state & (CLIENT_UNBOUND|CLIENT_STALE)) + if (p_dev->state & (CLIENT_UNBOUND|CLIENT_STALE)) return 0; if (p_drv->event) @@ -1157,7 +1154,7 @@ int pcmcia_register_client(client_handle_t *handle, client_reg_t *req) { - client_t *client = NULL; + struct pcmcia_device *client = NULL; struct pcmcia_socket *s; struct pcmcia_bus_socket *skt = NULL; struct pcmcia_device *p_dev = NULL; @@ -1182,14 +1179,14 @@ p_dev = pcmcia_get_dev(p_dev); if (!p_dev) continue; - if ((!p_dev->client.state & CLIENT_UNBOUND) || + if ((!p_dev->state & CLIENT_UNBOUND) || (!p_dev->dev.driver)) { pcmcia_put_dev(p_dev); continue; } p_drv = to_pcmcia_drv(p_dev->dev.driver); if (!strncmp(p_drv->drv.name, (char *)req->dev_info, DEV_NAME_LEN)) { - client = &p_dev->client; + client = p_dev; spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags); goto found; } @@ -1205,19 +1202,16 @@ pcmcia_put_bus_socket(skt); /* safe, as we already hold a reference from bind_device */ - *handle = client; - client->state &= ~CLIENT_UNBOUND; - client->Socket = s; + (*handle) = p_dev; p_dev->event_callback_args = req->event_callback_args; - p_dev->event_callback_args.client_handle = client; + p_dev->event_callback_args.client_handle = p_dev; if (s->state & SOCKET_CARDBUS) client->state |= CLIENT_CARDBUS; - if ((!(s->state & SOCKET_CARDBUS)) && (s->functions == 0) && - (client->Function != BIND_FN_ALL)) { + if ((!(s->state & SOCKET_CARDBUS)) && (s->functions == 0)) { cistpl_longlink_mfc_t mfc; - if (pccard_read_tuple(s, client->Function, CISTPL_LONGLINK_MFC, &mfc) + if (pccard_read_tuple(s, client->func, CISTPL_LONGLINK_MFC, &mfc) == CS_SUCCESS) s->functions = mfc.nfn; else @@ -1371,7 +1365,7 @@ } p_dev = list_entry((&s->devices_list)->next, struct pcmcia_device, socket_device_list); list_del(&p_dev->socket_device_list); - p_dev->client.state |= CLIENT_STALE; + p_dev->state |= CLIENT_STALE; spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags); device_unregister(&p_dev->dev); @@ -1386,9 +1380,6 @@ int i; struct pcmcia_device *p_dev = handle_to_pdev(handle); - if (CHECK_HANDLE(handle)) - return CS_BAD_HANDLE; - s = SOCKET(handle); ds_dbg(1, "deregister_client(%p)\n", handle); @@ -1399,7 +1390,6 @@ goto warn_out; if (handle->state & CLIENT_STALE) { - handle->client_magic = 0; handle->state &= ~CLIENT_STALE; pcmcia_put_dev(p_dev); } else { Index: 2.6.10/drivers/pcmcia/pcmcia_compat.c =================================================================== --- 2.6.10.orig/drivers/pcmcia/pcmcia_compat.c 2004-12-29 18:38:33.512140744 +0100 +++ 2.6.10/drivers/pcmcia/pcmcia_compat.c 2004-12-29 18:39:05.191497313 +0100 @@ -31,28 +31,22 @@ int pcmcia_get_first_tuple(client_handle_t handle, tuple_t *tuple) { struct pcmcia_socket *s; - if (CHECK_HANDLE(handle)) - return CS_BAD_HANDLE; s = SOCKET(handle); - return pccard_get_first_tuple(s, handle->Function, tuple); + return pccard_get_first_tuple(s, handle->func, tuple); } EXPORT_SYMBOL(pcmcia_get_first_tuple); int pcmcia_get_next_tuple(client_handle_t handle, tuple_t *tuple) { struct pcmcia_socket *s; - if (CHECK_HANDLE(handle)) - return CS_BAD_HANDLE; s = SOCKET(handle); - return pccard_get_next_tuple(s, handle->Function, tuple); + return pccard_get_next_tuple(s, handle->func, tuple); } EXPORT_SYMBOL(pcmcia_get_next_tuple); int pcmcia_get_tuple_data(client_handle_t handle, tuple_t *tuple) { struct pcmcia_socket *s; - if (CHECK_HANDLE(handle)) - return CS_BAD_HANDLE; s = SOCKET(handle); return pccard_get_tuple_data(s, tuple); } @@ -67,10 +61,8 @@ int pcmcia_validate_cis(client_handle_t handle, cisinfo_t *info) { struct pcmcia_socket *s; - if (CHECK_HANDLE(handle)) - return CS_BAD_HANDLE; s = SOCKET(handle); - return pccard_validate_cis(s, handle->Function, info); + return pccard_validate_cis(s, handle->func, info); } EXPORT_SYMBOL(pcmcia_validate_cis); @@ -79,12 +71,12 @@ { struct pcmcia_socket *s; - if ((CHECK_HANDLE(handle)) || !config) + if (!config) return CS_BAD_HANDLE; s = SOCKET(handle); if (!s) return CS_BAD_HANDLE; - return pccard_get_configuration_info(s, handle->Function, config); + return pccard_get_configuration_info(s, handle->func, config); } EXPORT_SYMBOL(pcmcia_get_configuration_info); @@ -92,8 +84,6 @@ { struct pcmcia_socket *skt; - if (CHECK_HANDLE(handle)) - return CS_BAD_HANDLE; skt = SOCKET(handle); if (!skt) return CS_BAD_HANDLE; @@ -105,10 +95,8 @@ int pcmcia_get_status(client_handle_t handle, cs_status_t *status) { struct pcmcia_socket *s; - if (CHECK_HANDLE(handle)) - return CS_BAD_HANDLE; s = SOCKET(handle); - return pccard_get_status(s, handle->Function, status); + return pccard_get_status(s, handle->func, status); } EXPORT_SYMBOL(pcmcia_get_status); @@ -116,10 +104,8 @@ conf_reg_t *reg) { struct pcmcia_socket *s; - if (CHECK_HANDLE(handle)) - return CS_BAD_HANDLE; s = SOCKET(handle); - return pccard_access_configuration_register(s, handle->Function, reg); + return pccard_access_configuration_register(s, handle->func, reg); } EXPORT_SYMBOL(pcmcia_access_configuration_register); Index: 2.6.10/drivers/pcmcia/pcmcia_resource.c =================================================================== --- 2.6.10.orig/drivers/pcmcia/pcmcia_resource.c 2004-12-29 18:38:33.513140598 +0100 +++ 2.6.10/drivers/pcmcia/pcmcia_resource.c 2004-12-29 18:39:05.192497167 +0100 @@ -318,8 +318,6 @@ struct pcmcia_socket *s; config_t *c; - if (CHECK_HANDLE(handle)) - return CS_BAD_HANDLE; s = SOCKET(handle); c = CONFIG(handle); if (!(s->state & SOCKET_PRESENT)) return CS_NO_CARD; @@ -363,8 +361,7 @@ struct pcmcia_socket *s; int i; - if (CHECK_HANDLE(handle) || - !(handle->state & CLIENT_CONFIG_LOCKED)) + if (!(handle->state & CLIENT_CONFIG_LOCKED)) return CS_BAD_HANDLE; handle->state &= ~CLIENT_CONFIG_LOCKED; s = SOCKET(handle); @@ -406,7 +403,7 @@ { struct pcmcia_socket *s; - if (CHECK_HANDLE(handle) || !(handle->state & CLIENT_IO_REQ)) + if (!(handle->state & CLIENT_IO_REQ)) return CS_BAD_HANDLE; handle->state &= ~CLIENT_IO_REQ; s = SOCKET(handle); @@ -435,7 +432,7 @@ int pcmcia_release_irq(client_handle_t handle, irq_req_t *req) { struct pcmcia_socket *s; - if (CHECK_HANDLE(handle) || !(handle->state & CLIENT_IRQ_REQ)) + if (!(handle->state & CLIENT_IRQ_REQ)) return CS_BAD_HANDLE; handle->state &= ~CLIENT_IRQ_REQ; s = SOCKET(handle); @@ -502,8 +499,6 @@ config_t *c; pccard_io_map iomap; - if (CHECK_HANDLE(handle)) - return CS_BAD_HANDLE; s = SOCKET(handle); if (!(s->state & SOCKET_PRESENT)) return CS_NO_CARD; @@ -626,8 +621,6 @@ struct pcmcia_socket *s; config_t *c; - if (CHECK_HANDLE(handle)) - return CS_BAD_HANDLE; s = SOCKET(handle); if (!(s->state & SOCKET_PRESENT)) return CS_NO_CARD; @@ -688,8 +681,6 @@ int ret = CS_IN_USE, irq = 0; struct pcmcia_device *p_dev = handle_to_pdev(handle); - if (CHECK_HANDLE(handle)) - return CS_BAD_HANDLE; s = SOCKET(handle); if (!(s->state & SOCKET_PRESENT)) return CS_NO_CARD; @@ -762,9 +753,7 @@ u_long align; int w; - if (CHECK_HANDLE(*handle)) - return CS_BAD_HANDLE; - s = (*handle)->Socket; + s = (*handle)->socket; if (!(s->state & SOCKET_PRESENT)) return CS_NO_CARD; if (req->Attributes & (WIN_PAGED | WIN_SHARED)) Index: 2.6.10/include/pcmcia/cs_types.h =================================================================== --- 2.6.10.orig/include/pcmcia/cs_types.h 2004-12-29 18:38:33.513140598 +0100 +++ 2.6.10/include/pcmcia/cs_types.h 2004-12-29 18:39:05.203495555 +0100 @@ -32,8 +32,8 @@ typedef u_char cisdata_t; typedef u_short page_t; -struct client_t; -typedef struct client_t *client_handle_t; +struct pcmcia_device; +typedef struct pcmcia_device *client_handle_t; struct window_t; typedef struct window_t *window_handle_t; Index: 2.6.10/include/pcmcia/ds.h =================================================================== --- 2.6.10.orig/include/pcmcia/ds.h 2004-12-29 18:38:33.514140451 +0100 +++ 2.6.10/include/pcmcia/ds.h 2004-12-29 18:39:05.204495408 +0100 @@ -164,13 +164,7 @@ struct soon */ dev_link_t *instance; event_callback_args_t event_callback_args; - - struct client_t { - u_short client_magic; - struct pcmcia_socket *Socket; - u_char Function; - u_int state; - } client; + u_int state; /* information about this device */ u8 has_manf_id:1; @@ -193,8 +187,8 @@ #define to_pcmcia_dev(n) container_of(n, struct pcmcia_device, dev) #define to_pcmcia_drv(n) container_of(n, struct pcmcia_driver, drv) -#define handle_to_pdev(handle) container_of(handle, struct pcmcia_device, client); -#define handle_to_dev(handle) ((container_of(handle, struct pcmcia_device, client))->dev) +#define handle_to_pdev(handle) (handle) +#define handle_to_dev(handle) (handle->dev) /* error reporting */ void cs_error(client_handle_t handle, int func, int ret);