pcmcia: pass struct pcmcia_socket instead of socket nr to drivers
RFC PATCH 1/1 pcmcia: pass struct pcmcia_socket instead of socket nr to drivers
This patch modifies the callbacks to the socket drivers so that not a strange socket number is passed but a "struct pcmcia_socket *". This is already of great help for pci_socket.c, for example; but it will become much more important in future patches.
Tested on pci_socket.c, other x86-drivers only compile-checked... hd64465_ss.c and sa1100-*.c don't compile currently anyway.
Comments & Feedback appreciated,
Dominik
drivers/pcmcia/cs.c | 13 ++-- drivers/pcmcia/cs_internal.h | 3 - drivers/pcmcia/hd64465_ss.c | 65 +++++++++++----------- drivers/pcmcia/i82092.c | 126 +++++++++++++++++++++++-------------------- drivers/pcmcia/i82092aa.h | 24 ++++---- drivers/pcmcia/i82365.c | 80 ++++++++++++++------------- drivers/pcmcia/pci_socket.c | 83 ++++++++++++---------------- drivers/pcmcia/pci_socket.h | 2 drivers/pcmcia/tcic.c | 70 ++++++++++++----------- include/pcmcia/ss.h | 46 ++++++++++----- 10 files changed, 272 insertions(+), 240 deletions(-)
drivers/pcmcia/cs.c +8 -5
@@ -246,11 +246,11 @@ {int error; -if (handler && !try_module_get (s->ss_entry->owner)) +if (handler && !try_module_get (s->sock->owner))return -ENODEV ; error = s->ss_entry->register_callback (s->sock, handler, info);if (!handler) -module_put (s->ss_entry->owner); +module_put (s->sock->owner);return error; }
@@ -342,10 +342,13 @@/* socket initialization */ for (i =0 ; i < cls_d->nsock; i++) {socket_info_t *s = &s_info[i]; +struct pcmcia_socket *sock = &cls_d->socket[i]; + + sock->s_dev = dev; + sock->no = i; s->ss_entry = cls_d->ops; - s->sock = i + cls_d->sock_offset; - s->s_dev = dev; + s->sock = sock;/* base address = 0, map = 0 */ s->cis_mem.flags =0 ;
@@ -369,7 +372,7 @@sprintf (name,"%02d" , j); s->proc =proc_mkdir (name, proc_pccard);if (s->proc) - s->ss_entry->proc_setup (i, s->proc); + s->ss_entry->proc_setup (s->sock, s->proc);#ifdef PCMCIA_DEBUG if (s->proc) create_proc_read_entry("clients", 0, s->proc,
drivers/pcmcia/cs_internal.h +1 -2
@@ -121,7 +121,6 @@ typedef struct socket_info_t { spinlock_t lock; struct pccard_operations * ss_entry; - u_int sock; socket_state_t socket; socket_cap_t cap; u_int state;
@@ -159,7 +158,7 @@struct proc_dir_entry *proc;#endif int use_bus_pm; -struct device *s_dev; +struct pcmcia_socket *sock;/* TBD: integrate the following contents fully into this struct */ void *ds_info;/* ds_socket_info */ int socket_table_entry;
drivers/pcmcia/hd64465_ss.c +35 -30
191 lines not on this page · raw message
drivers/pcmcia/i82092.c +68 -58
374 lines not on this page · raw message
drivers/pcmcia/i82092aa.h +12 -12
@@ -26,18 +26,18 @@ -static int i82092aa_get_status (unsigned int sock,u_int *value); -static int i82092aa_get_socket (unsigned int sock,socket_state_t *state); -static int i82092aa_set_socket (unsigned int sock,socket_state_t *state); -static int i82092aa_get_io_map (unsigned int sock,struct pccard_io_map *io); -static int i82092aa_set_io_map (unsigned int sock,struct pccard_io_map *io); -static int i82092aa_get_mem_map (unsigned int sock,struct pccard_mem_map *mem); -static int i82092aa_set_mem_map (unsigned int sock,struct pccard_mem_map *mem); -static int i82092aa_init (unsigned int s); -static int i82092aa_suspend (unsigned int sock); -static int i82092aa_register_callback (unsigned int sock,void (*handler)(void *,unsigned int ),void * info); -static int i82092aa_inquire_socket (unsigned int sock,socket_cap_t *cap); -static void i82092aa_proc_setup (unsigned int sock,struct proc_dir_entry *base); +static int i82092aa_get_status (struct pcmcia_socket *sock,u_int *value); +static int i82092aa_get_socket (struct pcmcia_socket *sock,socket_state_t *state); +static int i82092aa_set_socket (struct pcmcia_socket *sock,socket_state_t *state); +static int i82092aa_get_io_map (struct pcmcia_socket *sock,struct pccard_io_map *io); +static int i82092aa_set_io_map (struct pcmcia_socket *sock,struct pccard_io_map *io); +static int i82092aa_get_mem_map (struct pcmcia_socket *sock,struct pccard_mem_map *mem); +static int i82092aa_set_mem_map (struct pcmcia_socket *sock,struct pccard_mem_map *mem); +static int i82092aa_init (struct pcmcia_socket *sock); +static int i82092aa_suspend (struct pcmcia_socket *sock); +static int i82092aa_register_callback (struct pcmcia_socket *sock,void (*handler)(void *,unsigned int ),void * info); +static int i82092aa_inquire_socket (struct pcmcia_socket *sock,socket_cap_t *cap); +static void i82092aa_proc_setup (struct pcmcia_socket *sock,struct proc_dir_entry *base);#endif
drivers/pcmcia/i82365.c +43 -37
189 lines not on this page · raw message
drivers/pcmcia/pci_socket.c +37 -46
203 lines not on this page · raw message
drivers/pcmcia/pci_socket.h +2 -0
@@ -23,7 +23,9 @@struct work_struct tq_task;struct timer_list poll_timer; +struct pcmcia_socket p_sock;struct pcmcia_socket_class_data cls_d; +/* A few words of private data for the low-level driver.. */ unsigned int private[8 ]; } pci_socket_t;
drivers/pcmcia/tcic.c +36 -34
225 lines not on this page · raw message
include/pcmcia/ss.h +30 -16
67 lines not on this page · raw message