cs.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:14k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * cs.h 1.74 2001/10/04 03:15:22
  3.  *
  4.  * The contents of this file are subject to the Mozilla Public License
  5.  * Version 1.1 (the "License"); you may not use this file except in
  6.  * compliance with the License. You may obtain a copy of the License
  7.  * at http://www.mozilla.org/MPL/
  8.  *
  9.  * Software distributed under the License is distributed on an "AS IS"
  10.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  11.  * the License for the specific language governing rights and
  12.  * limitations under the License. 
  13.  *
  14.  * The initial developer of the original code is David A. Hinds
  15.  * <dahinds@users.sourceforge.net>.  Portions created by David A. Hinds
  16.  * are Copyright (C) 1999 David A. Hinds.  All Rights Reserved.
  17.  *
  18.  * Alternatively, the contents of this file may be used under the
  19.  * terms of the GNU General Public License version 2 (the "GPL"), in
  20.  * which case the provisions of the GPL are applicable instead of the
  21.  * above.  If you wish to allow the use of your version of this file
  22.  * only under the terms of the GPL and not to allow others to use
  23.  * your version of this file under the MPL, indicate your decision by
  24.  * deleting the provisions above and replace them with the notice and
  25.  * other provisions required by the GPL.  If you do not delete the
  26.  * provisions above, a recipient may use your version of this file
  27.  * under either the MPL or the GPL.
  28.  */
  29. #ifndef _LINUX_CS_H
  30. #define _LINUX_CS_H
  31. /* For AccessConfigurationRegister */
  32. typedef struct conf_reg_t {
  33.     u_char Function;
  34.     u_int Action;
  35.     off_t Offset;
  36.     u_int Value;
  37. } conf_reg_t;
  38. /* Actions */
  39. #define CS_READ 1
  40. #define CS_WRITE 2
  41. /* for AdjustResourceInfo */
  42. typedef struct adjust_t {
  43.     u_int Action;
  44.     u_int Resource;
  45.     u_int Attributes;
  46.     union {
  47. struct memory {
  48.     u_long Base;
  49.     u_long Size;
  50. } memory;
  51. struct io {
  52.     ioaddr_t BasePort;
  53.     ioaddr_t NumPorts;
  54.     u_int IOAddrLines;
  55. } io;
  56. struct irq {
  57.     u_int IRQ;
  58. } irq;
  59.     } resource;
  60. } adjust_t;
  61. /* Action field */
  62. #define REMOVE_MANAGED_RESOURCE 1
  63. #define ADD_MANAGED_RESOURCE 2
  64. #define GET_FIRST_MANAGED_RESOURCE 3
  65. #define GET_NEXT_MANAGED_RESOURCE 4
  66. /* Resource field */
  67. #define RES_MEMORY_RANGE 1
  68. #define RES_IO_RANGE 2
  69. #define RES_IRQ 3
  70. /* Attribute field */
  71. #define RES_IRQ_TYPE 0x03
  72. #define RES_IRQ_TYPE_EXCLUSIVE 0
  73. #define RES_IRQ_TYPE_TIME 1
  74. #define RES_IRQ_TYPE_DYNAMIC 2
  75. #define RES_IRQ_CSC 0x04
  76. #define RES_SHARED 0x08
  77. #define RES_RESERVED 0x10
  78. #define RES_ALLOCATED 0x20
  79. #define RES_REMOVED 0x40
  80. typedef struct servinfo_t {
  81.     char Signature[2];
  82.     u_int Count;
  83.     u_int Revision;
  84.     u_int CSLevel;
  85.     char *VendorString;
  86. } servinfo_t;
  87. typedef struct event_callback_args_t {
  88.     client_handle_t client_handle;
  89.     void *info;
  90.     void *mtdrequest;
  91.     void *buffer;
  92.     void *misc;
  93.     void *client_data;
  94.     struct bus_operations *bus;
  95. } event_callback_args_t;
  96. /* for GetConfigurationInfo */
  97. typedef struct config_info_t {
  98.     u_char Function;
  99.     u_int Attributes;
  100.     u_int Vcc, Vpp1, Vpp2;
  101.     u_int IntType;
  102.     u_int ConfigBase;
  103.     u_char Status, Pin, Copy, Option, ExtStatus;
  104.     u_int Present;
  105.     u_int CardValues;
  106.     u_int AssignedIRQ;
  107.     u_int IRQAttributes;
  108.     ioaddr_t BasePort1;
  109.     ioaddr_t NumPorts1;
  110.     u_int Attributes1;
  111.     ioaddr_t BasePort2;
  112.     ioaddr_t NumPorts2;
  113.     u_int Attributes2;
  114.     u_int IOAddrLines;
  115. } config_info_t;
  116. /* For CardValues field */
  117. #define CV_OPTION_VALUE 0x01
  118. #define CV_STATUS_VALUE 0x02
  119. #define CV_PIN_REPLACEMENT 0x04
  120. #define CV_COPY_VALUE 0x08
  121. #define CV_EXT_STATUS 0x10
  122. /* For GetFirst/NextClient */
  123. typedef struct client_req_t {
  124.     socket_t Socket;
  125.     u_int Attributes;
  126. } client_req_t;
  127. #define CLIENT_THIS_SOCKET 0x01
  128. /* For RegisterClient */
  129. typedef struct client_reg_t {
  130.     dev_info_t *dev_info;
  131.     u_int Attributes;
  132.     u_int EventMask;
  133.     int (*event_handler)(event_t event, int priority,
  134.  event_callback_args_t *);
  135.     event_callback_args_t event_callback_args;
  136.     u_int Version;
  137. } client_reg_t;
  138. /* ModifyConfiguration */
  139. typedef struct modconf_t {
  140.     u_int Attributes;
  141.     u_int Vcc, Vpp1, Vpp2;
  142. } modconf_t;
  143. /* Attributes for ModifyConfiguration */
  144. #define CONF_IRQ_CHANGE_VALID 0x100
  145. #define CONF_VCC_CHANGE_VALID 0x200
  146. #define CONF_VPP1_CHANGE_VALID 0x400
  147. #define CONF_VPP2_CHANGE_VALID 0x800
  148. /* For RequestConfiguration */
  149. typedef struct config_req_t {
  150.     u_int Attributes;
  151.     u_int Vcc, Vpp1, Vpp2;
  152.     u_int IntType;
  153.     u_int ConfigBase;
  154.     u_char Status, Pin, Copy, ExtStatus;
  155.     u_char ConfigIndex;
  156.     u_int Present;
  157. } config_req_t;
  158. /* Attributes for RequestConfiguration */
  159. #define CONF_ENABLE_IRQ 0x01
  160. #define CONF_ENABLE_DMA 0x02
  161. #define CONF_ENABLE_SPKR 0x04
  162. #define CONF_VALID_CLIENT 0x100
  163. /* IntType field */
  164. #define INT_MEMORY 0x01
  165. #define INT_MEMORY_AND_IO 0x02
  166. #define INT_CARDBUS 0x04
  167. #define INT_ZOOMED_VIDEO 0x08
  168. /* For RequestIO and ReleaseIO */
  169. typedef struct io_req_t {
  170.     ioaddr_t BasePort1;
  171.     ioaddr_t NumPorts1;
  172.     u_int Attributes1;
  173.     ioaddr_t BasePort2;
  174.     ioaddr_t NumPorts2;
  175.     u_int Attributes2;
  176.     u_int IOAddrLines;
  177. } io_req_t;
  178. /* Attributes for RequestIO and ReleaseIO */
  179. #define IO_SHARED 0x01
  180. #define IO_FIRST_SHARED 0x02
  181. #define IO_FORCE_ALIAS_ACCESS 0x04
  182. #define IO_DATA_PATH_WIDTH 0x18
  183. #define IO_DATA_PATH_WIDTH_8 0x00
  184. #define IO_DATA_PATH_WIDTH_16 0x08
  185. #define IO_DATA_PATH_WIDTH_AUTO 0x10
  186. /* For RequestIRQ and ReleaseIRQ */
  187. typedef struct irq_req_t {
  188.     u_int Attributes;
  189.     u_int AssignedIRQ;
  190.     u_int IRQInfo1, IRQInfo2;
  191.     void *Handler;
  192.     void *Instance;
  193. } irq_req_t;
  194. /* Attributes for RequestIRQ and ReleaseIRQ */
  195. #define IRQ_TYPE 0x03
  196. #define IRQ_TYPE_EXCLUSIVE 0x00
  197. #define IRQ_TYPE_TIME 0x01
  198. #define IRQ_TYPE_DYNAMIC_SHARING 0x02
  199. #define IRQ_FORCED_PULSE 0x04
  200. #define IRQ_FIRST_SHARED 0x08
  201. #define IRQ_HANDLE_PRESENT 0x10
  202. #define IRQ_PULSE_ALLOCATED 0x100
  203. /* Bits in IRQInfo1 field */
  204. #define IRQ_MASK 0x0f
  205. #define IRQ_NMI_ID 0x01
  206. #define IRQ_IOCK_ID 0x02
  207. #define IRQ_BERR_ID 0x04
  208. #define IRQ_VEND_ID 0x08
  209. #define IRQ_INFO2_VALID 0x10
  210. #define IRQ_LEVEL_ID 0x20
  211. #define IRQ_PULSE_ID 0x40
  212. #define IRQ_SHARE_ID 0x80
  213. typedef struct eventmask_t {
  214.     u_int Attributes;
  215.     u_int EventMask;
  216. } eventmask_t;
  217. #define CONF_EVENT_MASK_VALID 0x01
  218. /* Configuration registers present */
  219. #define PRESENT_OPTION 0x001
  220. #define PRESENT_STATUS 0x002
  221. #define PRESENT_PIN_REPLACE 0x004
  222. #define PRESENT_COPY 0x008
  223. #define PRESENT_EXT_STATUS 0x010
  224. #define PRESENT_IOBASE_0 0x020
  225. #define PRESENT_IOBASE_1 0x040
  226. #define PRESENT_IOBASE_2 0x080
  227. #define PRESENT_IOBASE_3 0x100
  228. #define PRESENT_IOSIZE 0x200
  229. /* For GetMemPage, MapMemPage */
  230. typedef struct memreq_t {
  231.     u_int CardOffset;
  232.     page_t Page;
  233. } memreq_t;
  234. /* For ModifyWindow */
  235. typedef struct modwin_t {
  236.     u_int Attributes;
  237.     u_int AccessSpeed;
  238. } modwin_t;
  239. /* For RequestWindow */
  240. typedef struct win_req_t {
  241.     u_int Attributes;
  242.     u_long Base;
  243.     u_int Size;
  244.     u_int AccessSpeed;
  245. } win_req_t;
  246. /* Attributes for RequestWindow */
  247. #define WIN_ADDR_SPACE 0x0001
  248. #define WIN_ADDR_SPACE_MEM 0x0000
  249. #define WIN_ADDR_SPACE_IO 0x0001
  250. #define WIN_MEMORY_TYPE 0x0002
  251. #define WIN_MEMORY_TYPE_CM 0x0000
  252. #define WIN_MEMORY_TYPE_AM 0x0002
  253. #define WIN_ENABLE 0x0004
  254. #define WIN_DATA_WIDTH 0x0018
  255. #define WIN_DATA_WIDTH_8 0x0000
  256. #define WIN_DATA_WIDTH_16 0x0008
  257. #define WIN_DATA_WIDTH_32 0x0010
  258. #define WIN_PAGED 0x0020
  259. #define WIN_SHARED 0x0040
  260. #define WIN_FIRST_SHARED 0x0080
  261. #define WIN_USE_WAIT 0x0100
  262. #define WIN_STRICT_ALIGN 0x0200
  263. #define WIN_MAP_BELOW_1MB 0x0400
  264. #define WIN_PREFETCH 0x0800
  265. #define WIN_CACHEABLE 0x1000
  266. #define WIN_BAR_MASK 0xe000
  267. #define WIN_BAR_SHIFT 13
  268. /* Attributes for RegisterClient */
  269. #define INFO_MASTER_CLIENT 0x01
  270. #define INFO_IO_CLIENT 0x02
  271. #define INFO_MTD_CLIENT 0x04
  272. #define INFO_MEM_CLIENT 0x08
  273. #define MAX_NUM_CLIENTS 3
  274. #define INFO_CARD_SHARE 0x10
  275. #define INFO_CARD_EXCL 0x20
  276. typedef struct cs_status_t {
  277.     u_char Function;
  278.     event_t  CardState;
  279.     event_t SocketState;
  280. } cs_status_t;
  281. typedef struct error_info_t {
  282.     int func;
  283.     int retcode;
  284. } error_info_t;
  285. /* Special stuff for binding drivers to sockets */
  286. typedef struct bind_req_t {
  287.     socket_t Socket;
  288.     u_char Function;
  289.     dev_info_t *dev_info;
  290. } bind_req_t;
  291. /* Flag to bind to all functions */
  292. #define BIND_FN_ALL 0xff
  293. typedef struct mtd_bind_t {
  294.     socket_t Socket;
  295.     u_int Attributes;
  296.     u_int CardOffset;
  297.     dev_info_t *dev_info;
  298. } mtd_bind_t;
  299. /* Events */
  300. #define CS_EVENT_PRI_LOW 0
  301. #define CS_EVENT_PRI_HIGH 1
  302. #define CS_EVENT_WRITE_PROTECT 0x000001
  303. #define CS_EVENT_CARD_LOCK 0x000002
  304. #define CS_EVENT_CARD_INSERTION 0x000004
  305. #define CS_EVENT_CARD_REMOVAL 0x000008
  306. #define CS_EVENT_BATTERY_DEAD 0x000010
  307. #define CS_EVENT_BATTERY_LOW 0x000020
  308. #define CS_EVENT_READY_CHANGE 0x000040
  309. #define CS_EVENT_CARD_DETECT 0x000080
  310. #define CS_EVENT_RESET_REQUEST 0x000100
  311. #define CS_EVENT_RESET_PHYSICAL 0x000200
  312. #define CS_EVENT_CARD_RESET 0x000400
  313. #define CS_EVENT_REGISTRATION_COMPLETE 0x000800
  314. #define CS_EVENT_RESET_COMPLETE 0x001000
  315. #define CS_EVENT_PM_SUSPEND 0x002000
  316. #define CS_EVENT_PM_RESUME 0x004000
  317. #define CS_EVENT_INSERTION_REQUEST 0x008000
  318. #define CS_EVENT_EJECTION_REQUEST 0x010000
  319. #define CS_EVENT_MTD_REQUEST 0x020000
  320. #define CS_EVENT_ERASE_COMPLETE 0x040000
  321. #define CS_EVENT_REQUEST_ATTENTION 0x080000
  322. #define CS_EVENT_CB_DETECT 0x100000
  323. #define CS_EVENT_3VCARD 0x200000
  324. #define CS_EVENT_XVCARD 0x400000
  325. /* Return codes */
  326. #define CS_SUCCESS 0x00
  327. #define CS_BAD_ADAPTER 0x01
  328. #define CS_BAD_ATTRIBUTE 0x02
  329. #define CS_BAD_BASE 0x03
  330. #define CS_BAD_EDC 0x04
  331. #define CS_BAD_IRQ 0x06
  332. #define CS_BAD_OFFSET 0x07
  333. #define CS_BAD_PAGE 0x08
  334. #define CS_READ_FAILURE 0x09
  335. #define CS_BAD_SIZE 0x0a
  336. #define CS_BAD_SOCKET 0x0b
  337. #define CS_BAD_TYPE 0x0d
  338. #define CS_BAD_VCC 0x0e
  339. #define CS_BAD_VPP 0x0f
  340. #define CS_BAD_WINDOW 0x11
  341. #define CS_WRITE_FAILURE 0x12
  342. #define CS_NO_CARD 0x14
  343. #define CS_UNSUPPORTED_FUNCTION 0x15
  344. #define CS_UNSUPPORTED_MODE 0x16
  345. #define CS_BAD_SPEED 0x17
  346. #define CS_BUSY 0x18
  347. #define CS_GENERAL_FAILURE 0x19
  348. #define CS_WRITE_PROTECTED 0x1a
  349. #define CS_BAD_ARG_LENGTH 0x1b
  350. #define CS_BAD_ARGS 0x1c
  351. #define CS_CONFIGURATION_LOCKED 0x1d
  352. #define CS_IN_USE 0x1e
  353. #define CS_NO_MORE_ITEMS 0x1f
  354. #define CS_OUT_OF_RESOURCE 0x20
  355. #define CS_BAD_HANDLE 0x21
  356. #define CS_BAD_TUPLE 0x40
  357. #ifdef __KERNEL__
  358. /*
  359.  *  The main Card Services entry point
  360.  */
  361. enum service {
  362.     AccessConfigurationRegister, AddSocketServices,
  363.     AdjustResourceInfo, CheckEraseQueue, CloseMemory, CopyMemory,
  364.     DeregisterClient, DeregisterEraseQueue, GetCardServicesInfo,
  365.     GetClientInfo, GetConfigurationInfo, GetEventMask,
  366.     GetFirstClient, GetFirstPartion, GetFirstRegion, GetFirstTuple,
  367.     GetNextClient, GetNextPartition, GetNextRegion, GetNextTuple,
  368.     GetStatus, GetTupleData, MapLogSocket, MapLogWindow, MapMemPage,
  369.     MapPhySocket, MapPhyWindow, ModifyConfiguration, ModifyWindow,
  370.     OpenMemory, ParseTuple, ReadMemory, RegisterClient,
  371.     RegisterEraseQueue, RegisterMTD, RegisterTimer,
  372.     ReleaseConfiguration, ReleaseExclusive, ReleaseIO, ReleaseIRQ,
  373.     ReleaseSocketMask, ReleaseWindow, ReplaceSocketServices,
  374.     RequestConfiguration, RequestExclusive, RequestIO, RequestIRQ,
  375.     RequestSocketMask, RequestWindow, ResetCard, ReturnSSEntry,
  376.     SetEventMask, SetRegion, ValidateCIS, VendorSpecific,
  377.     WriteMemory, BindDevice, BindMTD, ReportError,
  378.     SuspendCard, ResumeCard, EjectCard, InsertCard, ReplaceCIS,
  379.     GetFirstWindow, GetNextWindow, GetMemPage
  380. };
  381. #ifdef IN_CARD_SERVICES
  382. extern int CardServices(int func, void *a1, void *a2, void *a3);
  383. #else
  384. extern int CardServices(int func, ...);
  385. #endif
  386. int pcmcia_access_configuration_register(client_handle_t handle, conf_reg_t *reg);
  387. int pcmcia_bind_device(bind_req_t *req);
  388. int pcmcia_bind_mtd(mtd_bind_t *req);
  389. int pcmcia_deregister_client(client_handle_t handle);
  390. int pcmcia_get_configuration_info(client_handle_t handle, config_info_t *config);
  391. int pcmcia_get_card_services_info(servinfo_t *info);
  392. int pcmcia_get_first_client(client_handle_t *handle, client_req_t *req);
  393. int pcmcia_get_next_client(client_handle_t *handle, client_req_t *req);
  394. int pcmcia_get_window(window_handle_t *handle, int idx, win_req_t *req);
  395. int pcmcia_get_first_window(window_handle_t *win, win_req_t *req);
  396. int pcmcia_get_next_window(window_handle_t *win, win_req_t *req);
  397. int pcmcia_get_status(client_handle_t handle, cs_status_t *status);
  398. int pcmcia_get_mem_page(window_handle_t win, memreq_t *req);
  399. int pcmcia_map_mem_page(window_handle_t win, memreq_t *req);
  400. int pcmcia_modify_configuration(client_handle_t handle, modconf_t *mod);
  401. int pcmcia_modify_window(window_handle_t win, modwin_t *req);
  402. int pcmcia_register_client(client_handle_t *handle, client_reg_t *req);
  403. int pcmcia_release_configuration(client_handle_t handle);
  404. int pcmcia_release_io(client_handle_t handle, io_req_t *req);
  405. int pcmcia_release_irq(client_handle_t handle, irq_req_t *req);
  406. int pcmcia_release_window(window_handle_t win);
  407. int pcmcia_request_configuration(client_handle_t handle, config_req_t *req);
  408. int pcmcia_request_io(client_handle_t handle, io_req_t *req);
  409. int pcmcia_request_irq(client_handle_t handle, irq_req_t *req);
  410. int pcmcia_request_window(client_handle_t *handle, win_req_t *req, window_handle_t *wh);
  411. int pcmcia_reset_card(client_handle_t handle, client_req_t *req);
  412. int pcmcia_suspend_card(client_handle_t handle, client_req_t *req);
  413. int pcmcia_resume_card(client_handle_t handle, client_req_t *req);
  414. int pcmcia_eject_card(client_handle_t handle, client_req_t *req);
  415. int pcmcia_insert_card(client_handle_t handle, client_req_t *req);
  416. int pcmcia_set_event_mask(client_handle_t handle, eventmask_t *mask);
  417. int pcmcia_report_error(client_handle_t handle, error_info_t *err);
  418. struct pci_bus *pcmcia_lookup_bus(client_handle_t handle);
  419. /* rsrc_mgr.c */
  420. int pcmcia_adjust_resource_info(client_handle_t handle, adjust_t *adj);
  421. #endif /* __KERNEL__ */
  422. #endif /* _LINUX_CS_H */