mirror of
https://github.com/torvalds/linux.git
synced 2024-09-23 16:33:16 +00:00
[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>
This commit is contained in:
parent
90c6cdd1fa
commit
b5e43913cf
|
@ -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)
|
||||||
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)
|
||||||
|
|
||||||
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;
|
||||||
/* 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 {
|
||||||
* 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;
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
|
|
||||||
/* 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,
|
||||||
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,
|
||||||
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;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user