Commit b5e43913 authored by Dominik Brodowski's avatar Dominik Brodowski Committed by Linus Torvalds

[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: default avatarDominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 90c6cdd1
...@@ -622,14 +622,14 @@ static void pcmcia_delayed_add_pseudo_device(void *data) ...@@ -622,14 +622,14 @@ static void pcmcia_delayed_add_pseudo_device(void *data)
{ {
struct pcmcia_bus_socket *s = data; struct pcmcia_bus_socket *s = data;
pcmcia_device_add(s, 0); 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) 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); schedule_work(&s->device_add);
s->device_add_pending = 1; s->pcmcia_state.device_add_pending = 1;
} }
return; return;
} }
...@@ -981,14 +981,14 @@ static int ds_event(struct pcmcia_socket *skt, event_t event, int priority) ...@@ -981,14 +981,14 @@ static int ds_event(struct pcmcia_socket *skt, event_t event, int priority)
switch (event) { switch (event) {
case CS_EVENT_CARD_REMOVAL: case CS_EVENT_CARD_REMOVAL:
s->state &= ~DS_SOCKET_PRESENT; s->pcmcia_state.present = 0;
send_event(skt, event, priority); send_event(skt, event, priority);
unbind_request(s); unbind_request(s);
handle_event(s, event); handle_event(s, event);
break; break;
case CS_EVENT_CARD_INSERTION: case CS_EVENT_CARD_INSERTION:
s->state |= DS_SOCKET_PRESENT; s->pcmcia_state.present = 1;
pcmcia_card_add(skt); pcmcia_card_add(skt);
handle_event(s, event); handle_event(s, event);
break; break;
...@@ -1229,7 +1229,7 @@ static void pcmcia_bus_remove_socket(struct class_device *class_dev) ...@@ -1229,7 +1229,7 @@ static void pcmcia_bus_remove_socket(struct class_device *class_dev)
pccard_register_pcmcia(socket, NULL); pccard_register_pcmcia(socket, NULL);
socket->pcmcia->state |= DS_SOCKET_DEAD; socket->pcmcia->pcmcia_state.dead = 1;
pcmcia_put_bus_socket(socket->pcmcia); pcmcia_put_bus_socket(socket->pcmcia);
socket->pcmcia = NULL; socket->pcmcia = NULL;
......
...@@ -5,7 +5,6 @@ struct user_info_t; ...@@ -5,7 +5,6 @@ struct user_info_t;
/* Socket state information */ /* Socket state information */
struct pcmcia_bus_socket { struct pcmcia_bus_socket {
struct kref refcount; struct kref refcount;
int state;
struct pcmcia_socket *parent; struct pcmcia_socket *parent;
/* the PCMCIA devices connected to this socket (normally one, more /* the PCMCIA devices connected to this socket (normally one, more
...@@ -15,7 +14,14 @@ struct pcmcia_bus_socket { ...@@ -15,7 +14,14 @@ struct pcmcia_bus_socket {
* only internally and subject * only internally and subject
* to incorrectness and change */ * 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; struct work_struct device_add;
...@@ -29,10 +35,6 @@ extern spinlock_t pcmcia_dev_list_lock; ...@@ -29,10 +35,6 @@ extern spinlock_t pcmcia_dev_list_lock;
extern struct bus_type pcmcia_bus_type; 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 struct pcmcia_device * pcmcia_get_dev(struct pcmcia_device *p_dev);
extern void pcmcia_put_dev(struct pcmcia_device *p_dev); extern void pcmcia_put_dev(struct pcmcia_device *p_dev);
......
...@@ -404,12 +404,12 @@ static int ds_open(struct inode *inode, struct file *file) ...@@ -404,12 +404,12 @@ static int ds_open(struct inode *inode, struct file *file)
return -ENODEV; return -ENODEV;
if ((file->f_flags & O_ACCMODE) != O_RDONLY) { if ((file->f_flags & O_ACCMODE) != O_RDONLY) {
if (s->state & DS_SOCKET_BUSY) { if (s->pcmcia_state.busy) {
pcmcia_put_bus_socket(s); pcmcia_put_bus_socket(s);
return -EBUSY; return -EBUSY;
} }
else else
s->state |= DS_SOCKET_BUSY; s->pcmcia_state.busy = 1;
} }
user = kmalloc(sizeof(user_info_t), GFP_KERNEL); user = kmalloc(sizeof(user_info_t), GFP_KERNEL);
...@@ -424,7 +424,7 @@ static int ds_open(struct inode *inode, struct file *file) ...@@ -424,7 +424,7 @@ static int ds_open(struct inode *inode, struct file *file)
s->user = user; s->user = user;
file->private_data = user; file->private_data = user;
if (s->state & DS_SOCKET_PRESENT) if (s->pcmcia_state.present)
queue_event(user, CS_EVENT_CARD_INSERTION); queue_event(user, CS_EVENT_CARD_INSERTION);
return 0; return 0;
} /* ds_open */ } /* ds_open */
...@@ -446,7 +446,7 @@ static int ds_release(struct inode *inode, struct file *file) ...@@ -446,7 +446,7 @@ static int ds_release(struct inode *inode, struct file *file)
/* Unlink user data structure */ /* Unlink user data structure */
if ((file->f_flags & O_ACCMODE) != O_RDONLY) { if ((file->f_flags & O_ACCMODE) != O_RDONLY) {
s->state &= ~DS_SOCKET_BUSY; s->pcmcia_state.busy = 0;
} }
file->private_data = NULL; file->private_data = NULL;
for (link = &s->user; *link; link = &(*link)->next) for (link = &s->user; *link; link = &(*link)->next)
...@@ -480,7 +480,7 @@ static ssize_t ds_read(struct file *file, char __user *buf, ...@@ -480,7 +480,7 @@ static ssize_t ds_read(struct file *file, char __user *buf,
return -EIO; return -EIO;
s = user->socket; s = user->socket;
if (s->state & DS_SOCKET_DEAD) if (s->pcmcia_state.dead)
return -EIO; return -EIO;
ret = wait_event_interruptible(s->queue, !queue_empty(user)); ret = wait_event_interruptible(s->queue, !queue_empty(user));
...@@ -550,7 +550,7 @@ static int ds_ioctl(struct inode * inode, struct file * file, ...@@ -550,7 +550,7 @@ static int ds_ioctl(struct inode * inode, struct file * file,
return -EIO; return -EIO;
s = user->socket; s = user->socket;
if (s->state & DS_SOCKET_DEAD) if (s->pcmcia_state.dead)
return -EIO; return -EIO;
size = (cmd & IOCSIZE_MASK) >> IOCSIZE_SHIFT; size = (cmd & IOCSIZE_MASK) >> IOCSIZE_SHIFT;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment