summaryrefslogtreecommitdiff
path: root/drivers/pcmcia/ds_internal.h
blob: 2c3bb189dec694109a8914b0600ed713f14edf30 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/* ds_internal.h - internal header for 16-bit PCMCIA devices management */

struct user_info_t;

/* Socket state information */
struct pcmcia_bus_socket {
	struct kref		refcount;
	struct pcmcia_socket	*parent;

	/* the PCMCIA devices connected to this socket (normally one, more
	 * for multifunction devices: */
	struct list_head	devices_list;
	u8			device_count; /* the number of devices, used
					       * only internally and subject
					       * to incorrectness and change */

	struct {
		u8		present:1,
				busy:1,
				dead:1,
				device_add_pending:1,
				reserved:4;
	} 			pcmcia_state;

	struct work_struct	device_add;


#ifdef CONFIG_PCMCIA_IOCTL
	struct user_info_t	*user;
	wait_queue_head_t	queue;
#endif
};
extern spinlock_t pcmcia_dev_list_lock;

extern struct bus_type pcmcia_bus_type;


extern struct pcmcia_device * pcmcia_get_dev(struct pcmcia_device *p_dev);
extern void pcmcia_put_dev(struct pcmcia_device *p_dev);

struct pcmcia_bus_socket *pcmcia_get_bus_socket(struct pcmcia_bus_socket *s);
void pcmcia_put_bus_socket(struct pcmcia_bus_socket *s);

struct pcmcia_device * pcmcia_device_add(struct pcmcia_bus_socket *s, unsigned int function);

#ifdef CONFIG_PCMCIA_IOCTL
extern void __init pcmcia_setup_ioctl(void);
extern void __exit pcmcia_cleanup_ioctl(void);
extern void handle_event(struct pcmcia_bus_socket *s, event_t event);
extern int handle_request(struct pcmcia_bus_socket *s, event_t event);
#else
static inline void __init pcmcia_setup_ioctl(void) { return; }
static inline void __init pcmcia_cleanup_ioctl(void) { return; }
static inline void handle_event(struct pcmcia_bus_socket *s, event_t event) { return; }
static inline int handle_request(struct pcmcia_bus_socket *s, event_t event) { return CS_SUCCESS; }
#endif