Skip to contentSkip to conversation

pcmcia: pass struct pcmcia_socket instead of socket nr to drivers

RFC PATCH New Dominik Brodowski 1 participant 1 message Feb 26, 2003 Pcmcia

lore
Share & tools
lore
#0 lore raw

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
diff -ru linux-original/drivers/pcmcia/cs.c linux/drivers/pcmcia/cs.c
@@ -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
diff -ru linux-original/drivers/pcmcia/cs_internal.h linux/drivers/pcmcia/cs_internal.h
@@ -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
diff -ru linux-original/drivers/pcmcia/i82092aa.h linux/drivers/pcmcia/i82092aa.h
@@ -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
diff -ru linux-original/drivers/pcmcia/pci_socket.h linux/drivers/pcmcia/pci_socket.h
@@ -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