[RFC PATCH 2/7] pcmcia updates (post 2.6.16): access config_t using
pointer instead of array (1/2)
Dominik Brodowski
linux at dominikbrodowski.net
Tue Jan 10 15:44:11 EST 2006
[PATCH] pcmcia: access config_t using pointer instead of array
Access the PCMCIA config_t struct (one per device function) using
a pointer in struct pcmcia_device, instead of looking them up in
an array.
Signed-off-by: Dominik Brodowski <linux at dominikbrodowski.net>
---
drivers/pcmcia/cs_internal.h | 6 ------
drivers/pcmcia/ds.c | 1 +
drivers/pcmcia/pcmcia_resource.c | 19 +++++++++----------
include/pcmcia/ds.h | 2 ++
4 files changed, 12 insertions(+), 16 deletions(-)
7271bd61a7598bb8e9d1b57ecdb47dd92b796ca0
diff --git a/drivers/pcmcia/cs_internal.h b/drivers/pcmcia/cs_internal.h
index 2b267de..f889a44 100644
--- a/drivers/pcmcia/cs_internal.h
+++ b/drivers/pcmcia/cs_internal.h
@@ -94,12 +94,6 @@ static inline void cs_socket_put(struct
}
}
-#define CHECK_SOCKET(s) \
- (((s) >= sockets) || (socket_table[s]->ops == NULL))
-
-#define SOCKET(h) (h->socket)
-#define CONFIG(h) (&SOCKET(h)->config[(h)->func])
-
/* In cardbus.c */
int cb_alloc(struct pcmcia_socket *s);
void cb_free(struct pcmcia_socket *s);
diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c
index 621ec45..4ed438b 100644
--- a/drivers/pcmcia/ds.c
+++ b/drivers/pcmcia/ds.c
@@ -392,6 +392,7 @@ static int pcmcia_device_probe(struct de
goto put_module;
}
}
+ p_dev->function_config = &s->config[p_dev->func];
ret = p_drv->probe(p_dev);
diff --git a/drivers/pcmcia/pcmcia_resource.c b/drivers/pcmcia/pcmcia_resource.c
index f588145..11a94d9 100644
--- a/drivers/pcmcia/pcmcia_resource.c
+++ b/drivers/pcmcia/pcmcia_resource.c
@@ -372,9 +372,7 @@ int pccard_get_status(struct pcmcia_sock
int pcmcia_get_status(client_handle_t handle, cs_status_t *status)
{
- struct pcmcia_socket *s;
- s = SOCKET(handle);
- return pccard_get_status(s, handle->func, status);
+ return pccard_get_status(handle->socket, handle->func, status);
}
EXPORT_SYMBOL(pcmcia_get_status);
@@ -422,7 +420,8 @@ int pcmcia_modify_configuration(struct p
config_t *c;
s = p_dev->socket;
- c = CONFIG(p_dev);
+ c = p_dev->function_config;
+
if (!(s->state & SOCKET_PRESENT))
return CS_NO_CARD;
if (!(c->state & CONFIG_LOCKED))
@@ -470,7 +469,7 @@ int pcmcia_release_configuration(struct
p_dev->state &= ~CLIENT_CONFIG_LOCKED;
if (!(p_dev->state & CLIENT_STALE)) {
- config_t *c = CONFIG(p_dev);
+ config_t *c = p_dev->function_config;
if (--(s->lock_count) == 0) {
s->socket.flags = SS_OUTPUT_ENA; /* Is this correct? */
s->socket.Vpp = 0;
@@ -512,7 +511,7 @@ int pcmcia_release_io(struct pcmcia_devi
p_dev->state &= ~CLIENT_IO_REQ;
if (!(p_dev->state & CLIENT_STALE)) {
- config_t *c = CONFIG(p_dev);
+ config_t *c = p_dev->function_config;
if (c->state & CONFIG_LOCKED)
return CS_CONFIGURATION_LOCKED;
if ((c->io.BasePort1 != req->BasePort1) ||
@@ -540,7 +539,7 @@ int pcmcia_release_irq(struct pcmcia_dev
p_dev->state &= ~CLIENT_IRQ_REQ;
if (!(p_dev->state & CLIENT_STALE)) {
- config_t *c = CONFIG(p_dev);
+ config_t *c= p_dev->function_config;
if (c->state & CONFIG_LOCKED)
return CS_CONFIGURATION_LOCKED;
if (c->irq.Attributes != req->Attributes)
@@ -610,7 +609,7 @@ int pcmcia_request_configuration(struct
if (req->IntType & INT_CARDBUS)
return CS_UNSUPPORTED_MODE;
- c = CONFIG(p_dev);
+ c = p_dev->function_config;
if (c->state & CONFIG_LOCKED)
return CS_CONFIGURATION_LOCKED;
@@ -730,7 +729,7 @@ int pcmcia_request_io(struct pcmcia_devi
if (!req)
return CS_UNSUPPORTED_MODE;
- c = CONFIG(p_dev);
+ c = p_dev->function_config;
if (c->state & CONFIG_LOCKED)
return CS_CONFIGURATION_LOCKED;
if (c->state & CONFIG_IO_REQ)
@@ -786,7 +785,7 @@ int pcmcia_request_irq(struct pcmcia_dev
if (!(s->state & SOCKET_PRESENT))
return CS_NO_CARD;
- c = CONFIG(p_dev);
+ c = p_dev->function_config;
if (c->state & CONFIG_LOCKED)
return CS_CONFIGURATION_LOCKED;
if (c->state & CONFIG_IRQ_REQ)
diff --git a/include/pcmcia/ds.h b/include/pcmcia/ds.h
index 8e2a963..ac11fb1 100644
--- a/include/pcmcia/ds.h
+++ b/include/pcmcia/ds.h
@@ -131,6 +131,7 @@ typedef struct dev_link_t {
struct pcmcia_socket;
+struct config_t;
struct pcmcia_driver {
int (*probe) (struct pcmcia_device *dev);
@@ -160,6 +161,7 @@ struct pcmcia_device {
/* the hardware "function" device; certain subdevices can
* share one hardware "function" device. */
u8 func;
+ struct config_t* function_config;
struct list_head socket_device_list;
--
1.0.GIT
More information about the linux-pcmcia
mailing list