summaryrefslogtreecommitdiffstats
path: root/drivers/pcmcia
diff options
context:
space:
mode:
authorDominik Brodowski <linux@dominikbrodowski.net>2005-06-28 01:28:50 +0200
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-28 03:03:19 +0200
commitb5e43913cfe95a18ad8929585a0bb58e46cf3390 (patch)
tree2dbdcf979e3a300141c1ffdaf96e03127675cb1e /drivers/pcmcia
parent[PATCH] pcmcia: clean up cs ds callback (diff)
downloadlinux-b5e43913cfe95a18ad8929585a0bb58e46cf3390.tar.xz
linux-b5e43913cfe95a18ad8929585a0bb58e46cf3390.zip
[PATCH] pcmcia: make PCMCIA status a bitfield
make pcmcia_bus_socket->state a bitfield, and rename it pcmcia_state to prepare for struct pcmcia_bus_socket integration into struct pcmcia_socket. Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/pcmcia')
-rw-r--r--drivers/pcmcia/ds.c12
-rw-r--r--drivers/pcmcia/ds_internal.h14
-rw-r--r--drivers/pcmcia/pcmcia_ioctl.c12
3 files changed, 20 insertions, 18 deletions
diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c
index 54068f451ee6..85e2cb2b9e91 100644
--- a/drivers/pcmcia/ds.c
+++ b/drivers/pcmcia/ds.c
@@ -622,14 +622,14 @@ static void pcmcia_delayed_add_pseudo_device(void *data)
{
struct pcmcia_bus_socket *s = data;
pcmcia_device_add(s, 0);
- s->device_add_pending = 0;
+ s->pcmcia_state.device_add_pending = 0;
}
static inline void pcmcia_add_pseudo_device(struct pcmcia_bus_socket *s)
{
- if (!s->device_add_pending) {
+ if (!s->pcmcia_state.device_add_pending) {
schedule_work(&s->device_add);
- s->device_add_pending = 1;
+ s->pcmcia_state.device_add_pending = 1;
}
return;
}
@@ -981,14 +981,14 @@ static int ds_event(struct pcmcia_socket *skt, event_t event, int priority)
switch (event) {
case CS_EVENT_CARD_REMOVAL:
- s->state &= ~DS_SOCKET_PRESENT;
+ s->pcmcia_state.present = 0;
send_event(skt, event, priority);
unbind_request(s);
handle_event(s, event);
break;
case CS_EVENT_CARD_INSERTION:
- s->state |= DS_SOCKET_PRESENT;
+ s->pcmcia_state.present = 1;
pcmcia_card_add(skt);
handle_event(s, event);
break;
@@ -1229,7 +1229,7 @@ static void pcmcia_bus_remove_socket(struct class_device *class_dev)
pccard_register_pcmcia(socket, NULL);
- socket->pcmcia->state |= DS_SOCKET_DEAD;
+ socket->pcmcia->pcmcia_state.dead = 1;
pcmcia_put_bus_socket(socket->pcmcia);
socket->pcmcia = NULL;
diff --git a/drivers/pcmcia/ds_internal.h b/drivers/pcmcia/ds_internal.h
index b05bc39d9cd6..2c3bb189dec6 100644
--- a/drivers/pcmcia/ds_internal.h
+++ b/drivers/pcmcia/ds_internal.h
@@ -5,7 +5,6 @@ struct user_info_t;
/* Socket state information */
struct pcmcia_bus_socket {
struct kref refcount;
- int state;
struct pcmcia_socket *parent;
/* the PCMCIA devices connected to this socket (normally one, more
@@ -15,7 +14,14 @@ struct pcmcia_bus_socket {
* only internally and subject
* to incorrectness and change */
- u8 device_add_pending;
+ struct {
+ u8 present:1,
+ busy:1,
+ dead:1,
+ device_add_pending:1,
+ reserved:4;
+ } pcmcia_state;
+
struct work_struct device_add;
@@ -29,10 +35,6 @@ extern spinlock_t pcmcia_dev_list_lock;
extern struct bus_type pcmcia_bus_type;
-#define DS_SOCKET_PRESENT 0x01
-#define DS_SOCKET_BUSY 0x02
-#define DS_SOCKET_DEAD 0x80
-
extern struct pcmcia_device * pcmcia_get_dev(struct pcmcia_device *p_dev);
extern void pcmcia_put_dev(struct pcmcia_device *p_dev);
diff --git a/drivers/pcmcia/pcmcia_ioctl.c b/drivers/pcmcia/pcmcia_ioctl.c
index e8d2c95db1c9..b223f5235de7 100644
--- a/drivers/pcmcia/pcmcia_ioctl.c
+++ b/drivers/pcmcia/pcmcia_ioctl.c
@@ -404,12 +404,12 @@ static int ds_open(struct inode *inode, struct file *file)
return -ENODEV;
if ((file->f_flags & O_ACCMODE) != O_RDONLY) {
- if (s->state & DS_SOCKET_BUSY) {
+ if (s->pcmcia_state.busy) {
pcmcia_put_bus_socket(s);
return -EBUSY;
}
else
- s->state |= DS_SOCKET_BUSY;
+ s->pcmcia_state.busy = 1;
}
user = kmalloc(sizeof(user_info_t), GFP_KERNEL);
@@ -424,7 +424,7 @@ static int ds_open(struct inode *inode, struct file *file)
s->user = user;
file->private_data = user;
- if (s->state & DS_SOCKET_PRESENT)
+ if (s->pcmcia_state.present)
queue_event(user, CS_EVENT_CARD_INSERTION);
return 0;
} /* ds_open */
@@ -446,7 +446,7 @@ static int ds_release(struct inode *inode, struct file *file)
/* Unlink user data structure */
if ((file->f_flags & O_ACCMODE) != O_RDONLY) {
- s->state &= ~DS_SOCKET_BUSY;
+ s->pcmcia_state.busy = 0;
}
file->private_data = NULL;
for (link = &s->user; *link; link = &(*link)->next)
@@ -480,7 +480,7 @@ static ssize_t ds_read(struct file *file, char __user *buf,
return -EIO;
s = user->socket;
- if (s->state & DS_SOCKET_DEAD)
+ if (s->pcmcia_state.dead)
return -EIO;
ret = wait_event_interruptible(s->queue, !queue_empty(user));
@@ -550,7 +550,7 @@ static int ds_ioctl(struct inode * inode, struct file * file,
return -EIO;
s = user->socket;
- if (s->state & DS_SOCKET_DEAD)
+ if (s->pcmcia_state.dead)
return -EIO;
size = (cmd & IOCSIZE_MASK) >> IOCSIZE_SHIFT;