Blame view

include/pcmcia/ds.h 5.22 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  /*
   * ds.h -- 16-bit PCMCIA core support
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
   * published by the Free Software Foundation.
   *
   * The initial developer of the original code is David A. Hinds
   * <dahinds@users.sourceforge.net>.  Portions created by David A. Hinds
   * are Copyright (C) 1999 David A. Hinds.  All Rights Reserved.
   *
   * (C) 1999		David A. Hinds
   * (C) 2003 - 2004	Dominik Brodowski
   */
  
  #ifndef _LINUX_DS_H
  #define _LINUX_DS_H
8e2f3b70e   Dominik Brodowski   [PATCH] pcmcia: f...
18
19
20
  #ifdef __KERNEL__
  #include <linux/mod_devicetable.h>
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
21
22
  #include <pcmcia/bulkmem.h>
  #include <pcmcia/cs_types.h>
1ad275e3e   Dominik Brodowski   [PATCH] pcmcia: d...
23
  #include <pcmcia/device_id.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
  
  typedef struct tuple_parse_t {
      tuple_t		tuple;
      cisdata_t		data[255];
      cisparse_t		parse;
  } tuple_parse_t;
  
  typedef struct win_info_t {
      window_handle_t	handle;
      win_req_t		window;
      memreq_t		map;
  } win_info_t;
      
  typedef struct bind_info_t {
      dev_info_t		dev_info;
      u_char		function;
fd238232c   Dominik Brodowski   [PATCH] pcmcia: e...
40
      struct pcmcia_device *instance;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
41
42
43
44
45
46
47
48
49
50
51
52
      char		name[DEV_NAME_LEN];
      u_short		major, minor;
      void		*next;
  } bind_info_t;
  
  typedef struct mtd_info_t {
      dev_info_t		dev_info;
      u_int		Attributes;
      u_int		CardOffset;
  } mtd_info_t;
  
  typedef union ds_ioctl_arg_t {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
53
54
55
56
57
58
59
60
61
62
63
64
65
66
      adjust_t		adjust;
      config_info_t	config;
      tuple_t		tuple;
      tuple_parse_t	tuple_parse;
      client_req_t	client_req;
      cs_status_t		status;
      conf_reg_t		conf_reg;
      cisinfo_t		cisinfo;
      region_info_t	region;
      bind_info_t		bind_info;
      mtd_info_t		mtd_info;
      win_info_t		win_info;
      cisdump_t		cisdump;
  } ds_ioctl_arg_t;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
  #define DS_ADJUST_RESOURCE_INFO		_IOWR('d', 2, adjust_t)
  #define DS_GET_CONFIGURATION_INFO	_IOWR('d', 3, config_info_t)
  #define DS_GET_FIRST_TUPLE		_IOWR('d', 4, tuple_t)
  #define DS_GET_NEXT_TUPLE		_IOWR('d', 5, tuple_t)
  #define DS_GET_TUPLE_DATA		_IOWR('d', 6, tuple_parse_t)
  #define DS_PARSE_TUPLE			_IOWR('d', 7, tuple_parse_t)
  #define DS_RESET_CARD			_IO  ('d', 8)
  #define DS_GET_STATUS			_IOWR('d', 9, cs_status_t)
  #define DS_ACCESS_CONFIGURATION_REGISTER _IOWR('d', 10, conf_reg_t)
  #define DS_VALIDATE_CIS			_IOR ('d', 11, cisinfo_t)
  #define DS_SUSPEND_CARD			_IO  ('d', 12)
  #define DS_RESUME_CARD			_IO  ('d', 13)
  #define DS_EJECT_CARD			_IO  ('d', 14)
  #define DS_INSERT_CARD			_IO  ('d', 15)
  #define DS_GET_FIRST_REGION		_IOWR('d', 16, region_info_t)
  #define DS_GET_NEXT_REGION		_IOWR('d', 17, region_info_t)
  #define DS_REPLACE_CIS			_IOWR('d', 18, cisdump_t)
  #define DS_GET_FIRST_WINDOW		_IOR ('d', 19, win_info_t)
  #define DS_GET_NEXT_WINDOW		_IOWR('d', 20, win_info_t)
  #define DS_GET_MEM_PAGE			_IOWR('d', 21, win_info_t)
  
  #define DS_BIND_REQUEST			_IOWR('d', 60, bind_info_t)
  #define DS_GET_DEVICE_INFO		_IOWR('d', 61, bind_info_t) 
  #define DS_GET_NEXT_DEVICE		_IOWR('d', 62, bind_info_t) 
  #define DS_UNBIND_REQUEST		_IOW ('d', 63, bind_info_t)
  #define DS_BIND_MTD			_IOWR('d', 64, mtd_info_t)
  
  #ifdef __KERNEL__
  #include <linux/device.h>
e2d409636   Dominik Brodowski   [PATCH] pcmcia: u...
96
  #include <pcmcia/ss.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
97
98
99
100
101
102
  
  typedef struct dev_node_t {
      char		dev_name[DEV_NAME_LEN];
      u_short		major, minor;
      struct dev_node_t	*next;
  } dev_node_t;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
103
104
  
  struct pcmcia_socket;
dbb22f0d6   Dominik Brodowski   [PATCH] pcmcia: a...
105
  struct config_t;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
106

6179b5562   Bernhard Walle   add new_id to PCM...
107
108
109
110
  struct pcmcia_dynids {
  	spinlock_t		lock;
  	struct list_head	list;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
111
  struct pcmcia_driver {
f8cfa618d   Dominik Brodowski   [PATCH] pcmcia: u...
112
  	int (*probe)		(struct pcmcia_device *dev);
cc3b4866b   Dominik Brodowski   [PATCH] pcmcia: u...
113
  	void (*remove)		(struct pcmcia_device *dev);
98e4c28b7   Dominik Brodowski   [PATCH] pcmcia: n...
114
115
  	int (*suspend)		(struct pcmcia_device *dev);
  	int (*resume)		(struct pcmcia_device *dev);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
116
  	struct module		*owner;
1ad275e3e   Dominik Brodowski   [PATCH] pcmcia: d...
117
  	struct pcmcia_device_id	*id_table;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
118
  	struct device_driver	drv;
6179b5562   Bernhard Walle   add new_id to PCM...
119
  	struct pcmcia_dynids	dynids;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
120
121
122
123
124
  };
  
  /* driver registration */
  int pcmcia_register_driver(struct pcmcia_driver *driver);
  void pcmcia_unregister_driver(struct pcmcia_driver *driver);
e2d409636   Dominik Brodowski   [PATCH] pcmcia: u...
125

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
126
127
128
129
  struct pcmcia_device {
  	/* the socket and the device_no [for multifunction devices]
  	   uniquely define a pcmcia_device */
  	struct pcmcia_socket	*socket;
bd65a6857   Brice Goglin   [PATCH] pcmcia: a...
130
  	char			*devname;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
131
132
133
134
135
  	u8			device_no;
  
  	/* the hardware "function" device; certain subdevices can
  	 * share one hardware "function" device. */
  	u8			func;
dbb22f0d6   Dominik Brodowski   [PATCH] pcmcia: a...
136
  	struct config_t*	function_config;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
137
138
  
  	struct list_head	socket_device_list;
fd238232c   Dominik Brodowski   [PATCH] pcmcia: e...
139
140
  	/* deprecated, will be cleaned up soon */
  	dev_node_t		*dev_node;
fd238232c   Dominik Brodowski   [PATCH] pcmcia: e...
141
  	u_int			open;
fd238232c   Dominik Brodowski   [PATCH] pcmcia: e...
142
143
144
145
  	io_req_t		io;
  	irq_req_t		irq;
  	config_req_t		conf;
  	window_handle_t		win;
fd238232c   Dominik Brodowski   [PATCH] pcmcia: e...
146

9940ec361   Dominik Brodowski   [PATCH] pcmcia: c...
147
148
  	/* Is the device suspended, or in the process of
  	 * being removed? */
e2d409636   Dominik Brodowski   [PATCH] pcmcia: u...
149
  	u16			suspended:1;
9940ec361   Dominik Brodowski   [PATCH] pcmcia: c...
150
  	u16			_removed:1;
e2d409636   Dominik Brodowski   [PATCH] pcmcia: u...
151
152
153
154
155
156
157
  
  	/* Flags whether io, irq, win configurations were
  	 * requested, and whether the configuration is "locked" */
  	u16			_irq:1;
  	u16			_io:1;
  	u16			_win:4;
  	u16			_locked:1;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
158

e2d409636   Dominik Brodowski   [PATCH] pcmcia: u...
159
160
161
  	/* Flag whether a "fuzzy" func_id based match is
  	 * allowed. */
  	u16			allow_func_id_match:1;
f6fbe01ac   Dominik Brodowski   [PATCH] pcmcia: r...
162

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
163
  	/* information about this device */
e2d409636   Dominik Brodowski   [PATCH] pcmcia: u...
164
165
166
  	u16			has_manf_id:1;
  	u16			has_card_id:1;
  	u16			has_func_id:1;
1ad275e3e   Dominik Brodowski   [PATCH] pcmcia: d...
167

9940ec361   Dominik Brodowski   [PATCH] pcmcia: c...
168
  	u16			reserved:3;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
169
170
171
172
173
174
  
  	u8			func_id;
  	u16			manf_id;
  	u16			card_id;
  
  	char *			prod_id[4];
0e0fad8f7   Dominik Brodowski   [PATCH] pcmcia: s...
175
176
177
  	struct device		dev;
  
  #ifdef CONFIG_PCMCIA_IOCTL
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
178
179
  	/* device driver wanted by cardmgr */
  	struct pcmcia_driver *	cardmgr;
0e0fad8f7   Dominik Brodowski   [PATCH] pcmcia: s...
180
  #endif
e2d409636   Dominik Brodowski   [PATCH] pcmcia: u...
181
182
183
  
  	/* data private to drivers */
  	void			*priv;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
184
185
186
187
  };
  
  #define to_pcmcia_dev(n) container_of(n, struct pcmcia_device, dev)
  #define to_pcmcia_drv(n) container_of(n, struct pcmcia_driver, drv)
e12a9a93a   Dominik Brodowski   [PATCH] pcmcia: r...
188
  #define handle_to_dev(handle) (handle->dev)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
189
190
  
  /* error reporting */
fba395eee   Dominik Brodowski   [PATCH] pcmcia: r...
191
  void cs_error(struct pcmcia_device *handle, int func, int ret);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
192
193
194
  
  #endif /* __KERNEL__ */
  #endif /* _LINUX_DS_H */