00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef _LINUX_DS_H
00020 #define _LINUX_DS_H
00021
00022 #include "driver_ops.h"
00023 #include "bulkmem.h"
00024
00025 typedef struct tuple_parse_t {
00026 tuple_t tuple;
00027 cisdata_t data[255];
00028 cisparse_t parse;
00029 } tuple_parse_t;
00030
00031 typedef struct bind_info_t {
00032 dev_info_t dev_info;
00033 u_char function;
00034 struct dev_link_t *instance;
00035 char name[DEV_NAME_LEN];
00036 u_short major, minor;
00037 void *next;
00038 } bind_info_t;
00039
00040 typedef struct mtd_info_t {
00041 dev_info_t dev_info;
00042 u_int Attributes;
00043 u_int CardOffset;
00044 } mtd_info_t;
00045
00046 typedef union ds_ioctl_arg_t {
00047 servinfo_t servinfo;
00048 adjust_t adjust;
00049 config_info_t config;
00050 tuple_t tuple;
00051 tuple_parse_t tuple_parse;
00052 client_req_t client_req;
00053 cs_status_t status;
00054 conf_reg_t conf_reg;
00055 cisinfo_t cisinfo;
00056 region_info_t region;
00057 bind_info_t bind_info;
00058 mtd_info_t mtd_info;
00059 cisdump_t cisdump;
00060 } ds_ioctl_arg_t;
00061
00062 #define DS_GET_CARD_SERVICES_INFO _IOR ('d', 1, servinfo_t)
00063 #define DS_ADJUST_RESOURCE_INFO _IOWR('d', 2, adjust_t)
00064 #define DS_GET_CONFIGURATION_INFO _IOWR('d', 3, config_info_t)
00065 #define DS_GET_FIRST_TUPLE _IOWR('d', 4, tuple_t)
00066 #define DS_GET_NEXT_TUPLE _IOWR('d', 5, tuple_t)
00067 #define DS_GET_TUPLE_DATA _IOWR('d', 6, tuple_parse_t)
00068 #define DS_PARSE_TUPLE _IOWR('d', 7, tuple_parse_t)
00069 #define DS_RESET_CARD _IO ('d', 8)
00070 #define DS_GET_STATUS _IOWR('d', 9, cs_status_t)
00071 #define DS_ACCESS_CONFIGURATION_REGISTER _IOWR('d', 10, conf_reg_t)
00072 #define DS_VALIDATE_CIS _IOR ('d', 11, cisinfo_t)
00073 #define DS_SUSPEND_CARD _IO ('d', 12)
00074 #define DS_RESUME_CARD _IO ('d', 13)
00075 #define DS_EJECT_CARD _IO ('d', 14)
00076 #define DS_INSERT_CARD _IO ('d', 15)
00077 #define DS_GET_FIRST_REGION _IOWR('d', 16, region_info_t)
00078 #define DS_GET_NEXT_REGION _IOWR('d', 17, region_info_t)
00079 #define DS_REPLACE_CIS _IOWR('d', 18, cisdump_t)
00080
00081 #define DS_BIND_REQUEST _IOWR('d', 60, bind_info_t)
00082 #define DS_GET_DEVICE_INFO _IOWR('d', 61, bind_info_t)
00083 #define DS_GET_NEXT_DEVICE _IOWR('d', 62, bind_info_t)
00084 #define DS_UNBIND_REQUEST _IOW ('d', 63, bind_info_t)
00085 #define DS_BIND_MTD _IOWR('d', 64, mtd_info_t)
00086
00087 #ifdef __KERNEL__
00088
00089 typedef struct dev_link_t {
00090 dev_node_t *dev;
00091 u_int state, open;
00092 struct wait_queue *pending;
00093 struct timer_list release;
00094 client_handle_t handle;
00095 io_req_t io;
00096 irq_req_t irq;
00097 config_req_t conf;
00098 window_handle_t win;
00099 void *priv;
00100 struct dev_link_t *next;
00101 } dev_link_t;
00102
00103
00104 #define DEV_PRESENT 0x01
00105 #define DEV_CONFIG 0x02
00106 #define DEV_STALE_CONFIG 0x04
00107 #define DEV_STALE_LINK 0x08
00108 #define DEV_CONFIG_PENDING 0x10
00109 #define DEV_RELEASE_PENDING 0x20
00110 #define DEV_SUSPEND 0x40
00111 #define DEV_BUSY 0x80
00112
00113 #define DEV_OK(l) \
00114 ((l) && ((l->state & ~DEV_BUSY) == (DEV_CONFIG|DEV_PRESENT)))
00115
00116 int register_pccard_driver(dev_info_t *dev_info,
00117 dev_link_t *(*attach)(void),
00118 void (*detach)(dev_link_t *));
00119
00120 int unregister_pccard_driver(dev_info_t *dev_info);
00121
00122 #define register_pcmcia_driver register_pccard_driver
00123 #define unregister_pcmcia_driver unregister_pccard_driver
00124
00125 #ifdef __BEOS__
00126 #define DS_MODULE_NAME "bus_managers/pcmcia_ds/v1"
00127 typedef struct ds_module_info {
00128 bus_manager_info binfo;
00129 int (*_register_pccard_driver)(dev_info_t *,
00130 dev_link_t *(*)(void),
00131 void (*)(dev_link_t *));
00132 int (*_unregister_pccard_driver)(dev_info_t *);
00133 struct driver_info_t **root_driver;
00134 int *sockets;
00135 struct socket_info_t **socket_table;
00136 sem_id *list_sem;
00137 } ds_module_info;
00138 #endif
00139
00140 #endif
00141
00142 #endif