}
 }
 
-#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 CHECK_REGION(r) \
-    (((r) == NULL) || ((r)->region_magic != REGION_MAGIC))
-
-#define CHECK_ERASEQ(q) \
-    (((q) == NULL) || ((q)->eraseq_magic != ERASEQ_MAGIC))
+#define SOCKET(h) (h->socket)
+#define CONFIG(h) (&SOCKET(h)->config[(h)->func])
 
 /* In cardbus.c */
 int cb_alloc(struct pcmcia_socket *s);
 
        int i;
        char *serv;
 
-       if (CHECK_HANDLE(handle))
+       if (!handle)
                printk(KERN_NOTICE);
        else {
                struct pcmcia_device *p_dev = handle_to_pdev(handle);
 
        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;
        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;
-       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);
        if (!p_drv)
                return 0;
 
-       if (p_dev->client.state & (CLIENT_UNBOUND|CLIENT_STALE))
+       if (p_dev->state & (CLIENT_UNBOUND|CLIENT_STALE))
                return 0;
 
        if (p_drv->event)
 
 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 = NULL;
        struct pcmcia_device *p_dev = NULL;
        struct pcmcia_driver *p_drv = NULL;
                        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;
                        }
 
        pcmcia_put_socket(s); /* safe, as we already hold a reference from bind_device */
 
-       *handle = client;
-       client->state &= ~CLIENT_UNBOUND;
-       client->Socket = s;
+       *handle = p_dev;
+       p_dev->state &= ~CLIENT_UNBOUND;
        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
                }
                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);
        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);
 
                        goto warn_out;
 
        if (handle->state & CLIENT_STALE) {
-               handle->client_magic = 0;
                handle->state &= ~CLIENT_STALE;
                pcmcia_put_dev(p_dev);
        } else {
 
 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);
 }
 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);
 
 int pcmcia_reset_card(client_handle_t handle, client_req_t *req)
 {
        struct pcmcia_socket *skt;
-    
-       if (CHECK_HANDLE(handle))
-               return CS_BAD_HANDLE;
+
        skt = SOCKET(handle);
        if (!skt)
                return CS_BAD_HANDLE;
        return pccard_reset_card(skt);
 }
 EXPORT_SYMBOL(pcmcia_reset_card);
-
 
                                         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);
 
 {
        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);
 
 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);
 
        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))
        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);
 {
        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);
 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);
        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;
        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;
        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;
        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))
 
 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;
 
           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;
 #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);