0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #ifndef _LINUX_SS_H
0013 #define _LINUX_SS_H
0014
0015 #include <linux/device.h>
0016 #include <linux/sched.h> /* task_struct, completion */
0017 #include <linux/mutex.h>
0018
0019 #ifdef CONFIG_CARDBUS
0020 #include <linux/pci.h>
0021 #endif
0022
0023
0024 #define SS_WRPROT 0x0001
0025 #define SS_CARDLOCK 0x0002
0026 #define SS_EJECTION 0x0004
0027 #define SS_INSERTION 0x0008
0028 #define SS_BATDEAD 0x0010
0029 #define SS_BATWARN 0x0020
0030 #define SS_READY 0x0040
0031 #define SS_DETECT 0x0080
0032 #define SS_POWERON 0x0100
0033 #define SS_GPI 0x0200
0034 #define SS_STSCHG 0x0400
0035 #define SS_CARDBUS 0x0800
0036 #define SS_3VCARD 0x1000
0037 #define SS_XVCARD 0x2000
0038 #define SS_PENDING 0x4000
0039 #define SS_ZVCARD 0x8000
0040
0041
0042 #define SS_CAP_PAGE_REGS 0x0001
0043 #define SS_CAP_VIRTUAL_BUS 0x0002
0044 #define SS_CAP_MEM_ALIGN 0x0004
0045 #define SS_CAP_STATIC_MAP 0x0008
0046 #define SS_CAP_PCCARD 0x4000
0047 #define SS_CAP_CARDBUS 0x8000
0048
0049
0050 typedef struct socket_state_t {
0051 u_int flags;
0052 u_int csc_mask;
0053 u_char Vcc, Vpp;
0054 u_char io_irq;
0055 } socket_state_t;
0056
0057 extern socket_state_t dead_socket;
0058
0059
0060 #define SS_PWR_AUTO 0x0010
0061 #define SS_IOCARD 0x0020
0062 #define SS_RESET 0x0040
0063 #define SS_DMA_MODE 0x0080
0064 #define SS_SPKR_ENA 0x0100
0065 #define SS_OUTPUT_ENA 0x0200
0066
0067
0068 #define MAP_ACTIVE 0x01
0069 #define MAP_16BIT 0x02
0070 #define MAP_AUTOSZ 0x04
0071 #define MAP_0WS 0x08
0072 #define MAP_WRPROT 0x10
0073 #define MAP_ATTRIB 0x20
0074 #define MAP_USE_WAIT 0x40
0075 #define MAP_PREFETCH 0x80
0076
0077
0078 #define MAP_IOSPACE 0x20
0079
0080
0081 #define HOOK_POWER_PRE 0x01
0082 #define HOOK_POWER_POST 0x02
0083
0084 typedef struct pccard_io_map {
0085 u_char map;
0086 u_char flags;
0087 u_short speed;
0088 phys_addr_t start, stop;
0089 } pccard_io_map;
0090
0091 typedef struct pccard_mem_map {
0092 u_char map;
0093 u_char flags;
0094 u_short speed;
0095 phys_addr_t static_start;
0096 u_int card_start;
0097 struct resource *res;
0098 } pccard_mem_map;
0099
0100 typedef struct io_window_t {
0101 u_int InUse, Config;
0102 struct resource *res;
0103 } io_window_t;
0104
0105
0106 #define MAX_IO_WIN 2
0107
0108
0109 #define MAX_WIN 4
0110
0111
0112
0113
0114
0115 struct pcmcia_socket;
0116 struct pccard_resource_ops;
0117 struct config_t;
0118 struct pcmcia_callback;
0119 struct user_info_t;
0120
0121 struct pccard_operations {
0122 int (*init)(struct pcmcia_socket *s);
0123 int (*suspend)(struct pcmcia_socket *s);
0124 int (*get_status)(struct pcmcia_socket *s, u_int *value);
0125 int (*set_socket)(struct pcmcia_socket *s, socket_state_t *state);
0126 int (*set_io_map)(struct pcmcia_socket *s, struct pccard_io_map *io);
0127 int (*set_mem_map)(struct pcmcia_socket *s, struct pccard_mem_map *mem);
0128 };
0129
0130 struct pcmcia_socket {
0131 struct module *owner;
0132 socket_state_t socket;
0133 u_int state;
0134 u_int suspended_state;
0135 u_short functions;
0136 u_short lock_count;
0137 pccard_mem_map cis_mem;
0138 void __iomem *cis_virt;
0139 io_window_t io[MAX_IO_WIN];
0140 pccard_mem_map win[MAX_WIN];
0141 struct list_head cis_cache;
0142 size_t fake_cis_len;
0143 u8 *fake_cis;
0144
0145 struct list_head socket_list;
0146 struct completion socket_released;
0147
0148
0149 unsigned int sock;
0150
0151
0152
0153 u_int features;
0154 u_int irq_mask;
0155 u_int map_size;
0156 u_int io_offset;
0157 u_int pci_irq;
0158 struct pci_dev *cb_dev;
0159
0160
0161
0162
0163 u8 resource_setup_done;
0164
0165
0166 struct pccard_operations *ops;
0167 struct pccard_resource_ops *resource_ops;
0168 void *resource_data;
0169
0170
0171
0172 void (*zoom_video)(struct pcmcia_socket *,
0173 int);
0174
0175
0176 int (*power_hook)(struct pcmcia_socket *sock, int operation);
0177
0178
0179 #ifdef CONFIG_CARDBUS
0180 void (*tune_bridge)(struct pcmcia_socket *sock, struct pci_bus *bus);
0181 #endif
0182
0183
0184 struct task_struct *thread;
0185 struct completion thread_done;
0186 unsigned int thread_events;
0187 unsigned int sysfs_events;
0188
0189
0190
0191 struct mutex skt_mutex;
0192 struct mutex ops_mutex;
0193
0194
0195 spinlock_t thread_lock;
0196
0197
0198 struct pcmcia_callback *callback;
0199
0200 #if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE)
0201
0202
0203 struct list_head devices_list;
0204
0205
0206
0207 u8 device_count;
0208
0209
0210 u8 pcmcia_pfc;
0211
0212
0213 atomic_t present;
0214
0215
0216 unsigned int pcmcia_irq;
0217
0218 #endif
0219
0220
0221 struct device dev;
0222
0223 void *driver_data;
0224
0225 int resume_status;
0226 };
0227
0228
0229
0230
0231
0232
0233
0234
0235
0236
0237
0238
0239
0240
0241 extern struct pccard_resource_ops pccard_static_ops;
0242 #if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE)
0243 extern struct pccard_resource_ops pccard_iodyn_ops;
0244 extern struct pccard_resource_ops pccard_nonstatic_ops;
0245 #else
0246
0247
0248
0249 #define pccard_iodyn_ops pccard_static_ops
0250 #define pccard_nonstatic_ops pccard_static_ops
0251 #endif
0252
0253
0254
0255 extern void pcmcia_parse_events(struct pcmcia_socket *socket,
0256 unsigned int events);
0257
0258
0259 extern int pcmcia_register_socket(struct pcmcia_socket *socket);
0260 extern void pcmcia_unregister_socket(struct pcmcia_socket *socket);
0261
0262
0263 #endif