Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

pcmcia: cleanup socket services header file

The header file for use by (in-kernel) PCMCIA sockets deserved a major
cleanup. Some stuff only used by the pcmcia core modules was moved to
cs_internal.h

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>

+118 -107
+27
drivers/pcmcia/cs_internal.h
··· 50 50 unsigned char cache[0]; 51 51 }; 52 52 53 + struct pccard_resource_ops { 54 + int (*validate_mem) (struct pcmcia_socket *s); 55 + int (*adjust_io_region) (struct resource *res, 56 + unsigned long r_start, 57 + unsigned long r_end, 58 + struct pcmcia_socket *s); 59 + struct resource* (*find_io) (unsigned long base, int num, 60 + unsigned long align, 61 + struct pcmcia_socket *s); 62 + struct resource* (*find_mem) (unsigned long base, unsigned long num, 63 + unsigned long align, int low, 64 + struct pcmcia_socket *s); 65 + int (*add_io) (struct pcmcia_socket *s, 66 + unsigned int action, 67 + unsigned long r_start, 68 + unsigned long r_end); 69 + int (*add_mem) (struct pcmcia_socket *s, 70 + unsigned int action, 71 + unsigned long r_start, 72 + unsigned long r_end); 73 + int (*init) (struct pcmcia_socket *s); 74 + void (*exit) (struct pcmcia_socket *s); 75 + }; 76 + 53 77 /* Flags in config state */ 54 78 #define CONFIG_LOCKED 0x01 55 79 #define CONFIG_IRQ_REQ 0x02 ··· 168 144 /* cs.c */ 169 145 extern struct rw_semaphore pcmcia_socket_list_rwsem; 170 146 extern struct list_head pcmcia_socket_list; 147 + extern struct class pcmcia_socket_class; 148 + 171 149 int pcmcia_get_window(struct pcmcia_socket *s, 172 150 window_handle_t *handle, 173 151 int idx, 174 152 win_req_t *req); 175 153 int pccard_reset_card(struct pcmcia_socket *skt); 176 154 int pccard_register_pcmcia(struct pcmcia_socket *s, struct pcmcia_callback *c); 155 + struct pcmcia_socket *pcmcia_get_socket_by_nr(unsigned int nr); 177 156 178 157 /* cistpl.c */ 179 158 int pcmcia_read_cis_mem(struct pcmcia_socket *s, int attr,
+91 -107
include/pcmcia/ss.h
··· 53 53 54 54 /* for GetSocket, SetSocket */ 55 55 typedef struct socket_state_t { 56 - u_int flags; 57 - u_int csc_mask; 58 - u_char Vcc, Vpp; 59 - u_char io_irq; 56 + u_int flags; 57 + u_int csc_mask; 58 + u_char Vcc, Vpp; 59 + u_char io_irq; 60 60 } socket_state_t; 61 61 62 62 extern socket_state_t dead_socket; ··· 86 86 #define HOOK_POWER_PRE 0x01 87 87 #define HOOK_POWER_POST 0x02 88 88 89 - 90 89 typedef struct pccard_io_map { 91 - u_char map; 92 - u_char flags; 93 - u_short speed; 94 - u_int start, stop; 90 + u_char map; 91 + u_char flags; 92 + u_short speed; 93 + u_int start, stop; 95 94 } pccard_io_map; 96 95 97 96 typedef struct pccard_mem_map { 98 - u_char map; 99 - u_char flags; 100 - u_short speed; 101 - u_long static_start; 102 - u_int card_start; 103 - struct resource *res; 97 + u_char map; 98 + u_char flags; 99 + u_short speed; 100 + u_long static_start; 101 + u_int card_start; 102 + struct resource *res; 104 103 } pccard_mem_map; 105 - 106 - typedef struct cb_bridge_map { 107 - u_char map; 108 - u_char flags; 109 - u_int start, stop; 110 - } cb_bridge_map; 111 - 112 - /* 113 - * Socket operations. 114 - */ 115 - struct pcmcia_socket; 116 - 117 - struct pccard_operations { 118 - int (*init)(struct pcmcia_socket *sock); 119 - int (*suspend)(struct pcmcia_socket *sock); 120 - int (*get_status)(struct pcmcia_socket *sock, u_int *value); 121 - int (*set_socket)(struct pcmcia_socket *sock, socket_state_t *state); 122 - int (*set_io_map)(struct pcmcia_socket *sock, struct pccard_io_map *io); 123 - int (*set_mem_map)(struct pcmcia_socket *sock, struct pccard_mem_map *mem); 124 - }; 125 - 126 - struct pccard_resource_ops { 127 - int (*validate_mem) (struct pcmcia_socket *s); 128 - int (*adjust_io_region) (struct resource *res, 129 - unsigned long r_start, 130 - unsigned long r_end, 131 - struct pcmcia_socket *s); 132 - struct resource* (*find_io) (unsigned long base, int num, 133 - unsigned long align, 134 - struct pcmcia_socket *s); 135 - struct resource* (*find_mem) (unsigned long base, unsigned long num, 136 - unsigned long align, int low, 137 - struct pcmcia_socket *s); 138 - int (*add_io) (struct pcmcia_socket *s, 139 - unsigned int action, 140 - unsigned long r_start, 141 - unsigned long r_end); 142 - int (*add_mem) (struct pcmcia_socket *s, 143 - unsigned int action, 144 - unsigned long r_start, 145 - unsigned long r_end); 146 - int (*init) (struct pcmcia_socket *s); 147 - void (*exit) (struct pcmcia_socket *s); 148 - }; 149 - /* SS_CAP_STATIC_MAP */ 150 - extern struct pccard_resource_ops pccard_static_ops; 151 - /* !SS_CAP_STATIC_MAP */ 152 - extern struct pccard_resource_ops pccard_nonstatic_ops; 153 - 154 - /* static mem, dynamic IO sockets */ 155 - extern struct pccard_resource_ops pccard_iodyn_ops; 156 - 157 - /* 158 - * Calls to set up low-level "Socket Services" drivers 159 - */ 160 - struct pcmcia_socket; 161 104 162 105 typedef struct io_window_t { 163 106 u_int InUse, Config; ··· 122 179 /* Maximum number of memory windows per socket */ 123 180 #define MAX_WIN 4 124 181 182 + 183 + /* 184 + * Socket operations. 185 + */ 186 + struct pcmcia_socket; 187 + struct pccard_resource_ops; 125 188 struct config_t; 126 189 struct pcmcia_callback; 127 190 struct user_info_t; 191 + 192 + struct pccard_operations { 193 + int (*init)(struct pcmcia_socket *s); 194 + int (*suspend)(struct pcmcia_socket *s); 195 + int (*get_status)(struct pcmcia_socket *s, u_int *value); 196 + int (*set_socket)(struct pcmcia_socket *s, socket_state_t *state); 197 + int (*set_io_map)(struct pcmcia_socket *s, struct pccard_io_map *io); 198 + int (*set_mem_map)(struct pcmcia_socket *s, struct pccard_mem_map *mem); 199 + }; 128 200 129 201 struct pcmcia_socket { 130 202 struct module *owner; ··· 176 218 struct pci_dev * cb_dev; 177 219 178 220 179 - /* socket setup is done so resources should be able to be allocated. Only 180 - * if set to 1, calls to find_{io,mem}_region are handled, and insertion 181 - * events are actually managed by the PCMCIA layer.*/ 221 + /* socket setup is done so resources should be able to be allocated. 222 + * Only if set to 1, calls to find_{io,mem}_region are handled, and 223 + * insertio events are actually managed by the PCMCIA layer.*/ 182 224 u8 resource_setup_done:1; 183 225 184 - /* is set to one if resource setup is done using adjust_resource_info() */ 226 + /* It's old if resource setup is done using adjust_resource_info() */ 185 227 u8 resource_setup_old:1; 186 228 u8 resource_setup_new:1; 187 229 ··· 194 236 195 237 /* Zoom video behaviour is so chip specific its not worth adding 196 238 this to _ops */ 197 - void (*zoom_video)(struct pcmcia_socket *, int); 239 + void (*zoom_video)(struct pcmcia_socket *, 240 + int); 198 241 199 242 /* so is power hook */ 200 243 int (*power_hook)(struct pcmcia_socket *sock, int operation); 201 - #ifdef CONFIG_CARDBUS 244 + 202 245 /* allows tuning the CB bridge before loading driver for the CB card */ 246 + #ifdef CONFIG_CARDBUS 203 247 void (*tune_bridge)(struct pcmcia_socket *sock, struct pci_bus *bus); 204 248 #endif 205 249 206 250 /* state thread */ 207 - struct mutex skt_mutex; /* protects socket h/w state */ 208 - 209 251 struct task_struct *thread; 210 252 struct completion thread_done; 211 - spinlock_t thread_lock; /* protects thread_events */ 212 253 unsigned int thread_events; 254 + /* protects socket h/w state */ 255 + struct mutex skt_mutex; 256 + /* protects thread_events */ 257 + spinlock_t thread_lock; 213 258 214 259 /* pcmcia (16-bit) */ 215 260 struct pcmcia_callback *callback; 216 261 217 262 #if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE) 218 - struct list_head devices_list; /* PCMCIA devices */ 219 - u8 device_count; /* the number of devices, used 220 - * only internally and subject 221 - * to incorrectness and change */ 263 + /* The following elements refer to 16-bit PCMCIA devices inserted 264 + * into the socket */ 265 + struct list_head devices_list; 222 266 267 + /* the number of devices, used only internally and subject to 268 + * incorrectness and change */ 269 + u8 device_count; 270 + 271 + /* 16-bit state: */ 223 272 struct { 224 - u8 present:1, /* PCMCIA card is present in socket */ 225 - busy:1, /* "master" ioctl is used */ 226 - dead:1, /* pcmcia module is being unloaded */ 227 - device_add_pending:1, /* a multifunction-device 228 - * add event is pending */ 229 - mfc_pfc:1, /* the pending event adds a mfc (1) or pfc (0) */ 230 - reserved:3; 231 - } pcmcia_state; 273 + /* PCMCIA card is present in socket */ 274 + u8 present:1; 275 + /* "master" ioctl is used */ 276 + u8 busy:1; 277 + /* pcmcia module is being unloaded */ 278 + u8 dead:1; 279 + /* a multifunction-device add event is pending */ 280 + u8 device_add_pending:1; 281 + /* the pending event adds a mfc (1) or pfc (0) */ 282 + u8 mfc_pfc:1; 232 283 233 - struct work_struct device_add; /* for adding further pseudo-multifunction 234 - * devices */ 284 + u8 reserved:3; 285 + } pcmcia_state; 286 + 287 + 288 + /* for adding further pseudo-multifunction devices */ 289 + struct work_struct device_add; 235 290 236 291 #ifdef CONFIG_PCMCIA_IOCTL 237 292 struct user_info_t *user; 238 293 wait_queue_head_t queue; 239 - #endif 240 - #endif 294 + #endif /* CONFIG_PCMCIA_IOCTL */ 295 + #endif /* CONFIG_PCMCIA */ 241 296 242 297 /* cardbus (32-bit) */ 243 298 #ifdef CONFIG_CARDBUS 244 299 struct resource * cb_cis_res; 245 300 void __iomem *cb_cis_virt; 246 - #endif 301 + #endif /* CONFIG_CARDBUS */ 247 302 248 303 /* socket device */ 249 304 struct device dev; 250 - void *driver_data; /* data internal to the socket driver */ 251 - 305 + /* data internal to the socket driver */ 306 + void *driver_data; 252 307 }; 253 308 254 - struct pcmcia_socket * pcmcia_get_socket_by_nr(unsigned int nr); 255 309 256 - 257 - 258 - extern void pcmcia_parse_events(struct pcmcia_socket *socket, unsigned int events); 259 - extern int pcmcia_register_socket(struct pcmcia_socket *socket); 260 - extern void pcmcia_unregister_socket(struct pcmcia_socket *socket); 261 - 262 - extern struct class pcmcia_socket_class; 310 + /* socket drivers must define the resource operations type they use. There 311 + * are three options: 312 + * - pccard_static_ops iomem and ioport areas are assigned statically 313 + * - pccard_iodyn_ops iomem areas is assigned statically, ioport 314 + * areas dynamically 315 + * - pccard_nonstatic_ops iomem and ioport areas are assigned dynamically. 316 + * If this option is selected, use 317 + * "select PCCARD_NONSTATIC" in Kconfig. 318 + */ 319 + extern struct pccard_resource_ops pccard_static_ops; 320 + extern struct pccard_resource_ops pccard_iodyn_ops; 321 + extern struct pccard_resource_ops pccard_nonstatic_ops; 263 322 264 323 /* socket drivers are expected to use these callbacks in their .drv struct */ 265 324 extern int pcmcia_socket_dev_suspend(struct device *dev, pm_message_t state); 266 325 extern int pcmcia_socket_dev_resume(struct device *dev); 326 + 327 + /* socket drivers use this callback in their IRQ handler */ 328 + extern void pcmcia_parse_events(struct pcmcia_socket *socket, 329 + unsigned int events); 330 + 331 + /* to register and unregister a socket */ 332 + extern int pcmcia_register_socket(struct pcmcia_socket *socket); 333 + extern void pcmcia_unregister_socket(struct pcmcia_socket *socket); 334 + 267 335 268 336 #endif /* _LINUX_SS_H */