home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / pcmcia / ds.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  5.1 KB  |  202 lines

  1. /*
  2.  * ds.h -- 16-bit PCMCIA core support
  3.  *
  4.  * This program is free software; you can redistribute it and/or modify
  5.  * it under the terms of the GNU General Public License version 2 as
  6.  * published by the Free Software Foundation.
  7.  *
  8.  * The initial developer of the original code is David A. Hinds
  9.  * <dahinds@users.sourceforge.net>.  Portions created by David A. Hinds
  10.  * are Copyright (C) 1999 David A. Hinds.  All Rights Reserved.
  11.  *
  12.  * (C) 1999        David A. Hinds
  13.  * (C) 2003 - 2004    Dominik Brodowski
  14.  */
  15.  
  16. #ifndef _LINUX_DS_H
  17. #define _LINUX_DS_H
  18.  
  19. #ifdef __KERNEL__
  20. #include <linux/mod_devicetable.h>
  21. #endif
  22.  
  23. #include <pcmcia/bulkmem.h>
  24. #include <pcmcia/cs_types.h>
  25. #include <pcmcia/device_id.h>
  26.  
  27. typedef struct tuple_parse_t {
  28.     tuple_t        tuple;
  29.     cisdata_t        data[255];
  30.     cisparse_t        parse;
  31. } tuple_parse_t;
  32.  
  33. typedef struct win_info_t {
  34.     window_handle_t    handle;
  35.     win_req_t        window;
  36.     memreq_t        map;
  37. } win_info_t;
  38.     
  39. typedef struct bind_info_t {
  40.     dev_info_t        dev_info;
  41.     u_char        function;
  42.     struct pcmcia_device *instance;
  43.     char        name[DEV_NAME_LEN];
  44.     u_short        major, minor;
  45.     void        *next;
  46. } bind_info_t;
  47.  
  48. typedef struct mtd_info_t {
  49.     dev_info_t        dev_info;
  50.     u_int        Attributes;
  51.     u_int        CardOffset;
  52. } mtd_info_t;
  53.  
  54. typedef union ds_ioctl_arg_t {
  55.     adjust_t        adjust;
  56.     config_info_t    config;
  57.     tuple_t        tuple;
  58.     tuple_parse_t    tuple_parse;
  59.     client_req_t    client_req;
  60.     cs_status_t        status;
  61.     conf_reg_t        conf_reg;
  62.     cisinfo_t        cisinfo;
  63.     region_info_t    region;
  64.     bind_info_t        bind_info;
  65.     mtd_info_t        mtd_info;
  66.     win_info_t        win_info;
  67.     cisdump_t        cisdump;
  68. } ds_ioctl_arg_t;
  69.  
  70. #define DS_ADJUST_RESOURCE_INFO        _IOWR('d', 2, adjust_t)
  71. #define DS_GET_CONFIGURATION_INFO    _IOWR('d', 3, config_info_t)
  72. #define DS_GET_FIRST_TUPLE        _IOWR('d', 4, tuple_t)
  73. #define DS_GET_NEXT_TUPLE        _IOWR('d', 5, tuple_t)
  74. #define DS_GET_TUPLE_DATA        _IOWR('d', 6, tuple_parse_t)
  75. #define DS_PARSE_TUPLE            _IOWR('d', 7, tuple_parse_t)
  76. #define DS_RESET_CARD            _IO  ('d', 8)
  77. #define DS_GET_STATUS            _IOWR('d', 9, cs_status_t)
  78. #define DS_ACCESS_CONFIGURATION_REGISTER _IOWR('d', 10, conf_reg_t)
  79. #define DS_VALIDATE_CIS            _IOR ('d', 11, cisinfo_t)
  80. #define DS_SUSPEND_CARD            _IO  ('d', 12)
  81. #define DS_RESUME_CARD            _IO  ('d', 13)
  82. #define DS_EJECT_CARD            _IO  ('d', 14)
  83. #define DS_INSERT_CARD            _IO  ('d', 15)
  84. #define DS_GET_FIRST_REGION        _IOWR('d', 16, region_info_t)
  85. #define DS_GET_NEXT_REGION        _IOWR('d', 17, region_info_t)
  86. #define DS_REPLACE_CIS            _IOWR('d', 18, cisdump_t)
  87. #define DS_GET_FIRST_WINDOW        _IOR ('d', 19, win_info_t)
  88. #define DS_GET_NEXT_WINDOW        _IOWR('d', 20, win_info_t)
  89. #define DS_GET_MEM_PAGE            _IOWR('d', 21, win_info_t)
  90.  
  91. #define DS_BIND_REQUEST            _IOWR('d', 60, bind_info_t)
  92. #define DS_GET_DEVICE_INFO        _IOWR('d', 61, bind_info_t) 
  93. #define DS_GET_NEXT_DEVICE        _IOWR('d', 62, bind_info_t) 
  94. #define DS_UNBIND_REQUEST        _IOW ('d', 63, bind_info_t)
  95. #define DS_BIND_MTD            _IOWR('d', 64, mtd_info_t)
  96.  
  97. #ifdef __KERNEL__
  98. #include <linux/device.h>
  99. #include <pcmcia/ss.h>
  100.  
  101. typedef struct dev_node_t {
  102.     char        dev_name[DEV_NAME_LEN];
  103.     u_short        major, minor;
  104.     struct dev_node_t    *next;
  105. } dev_node_t;
  106.  
  107.  
  108. struct pcmcia_socket;
  109. struct config_t;
  110.  
  111. struct pcmcia_driver {
  112.     int (*probe)        (struct pcmcia_device *dev);
  113.     void (*remove)        (struct pcmcia_device *dev);
  114.  
  115.     int (*suspend)        (struct pcmcia_device *dev);
  116.     int (*resume)        (struct pcmcia_device *dev);
  117.  
  118.     struct module        *owner;
  119.     struct pcmcia_device_id    *id_table;
  120.     struct device_driver    drv;
  121. };
  122.  
  123. /* driver registration */
  124. int pcmcia_register_driver(struct pcmcia_driver *driver);
  125. void pcmcia_unregister_driver(struct pcmcia_driver *driver);
  126.  
  127.  
  128. struct pcmcia_device {
  129.     /* the socket and the device_no [for multifunction devices]
  130.        uniquely define a pcmcia_device */
  131.     struct pcmcia_socket    *socket;
  132.  
  133.     char            *devname;
  134.  
  135.     u8            device_no;
  136.  
  137.     /* the hardware "function" device; certain subdevices can
  138.      * share one hardware "function" device. */
  139.     u8            func;
  140.     struct config_t*    function_config;
  141.  
  142.     struct list_head    socket_device_list;
  143.  
  144.     /* deprecated, will be cleaned up soon */
  145.     dev_node_t        *dev_node;
  146.     u_int            open;
  147.     io_req_t        io;
  148.     irq_req_t        irq;
  149.     config_req_t        conf;
  150.     window_handle_t        win;
  151.  
  152.     /* Is the device suspended, or in the process of
  153.      * being removed? */
  154.     u16            suspended:1;
  155.     u16            _removed:1;
  156.  
  157.     /* Flags whether io, irq, win configurations were
  158.      * requested, and whether the configuration is "locked" */
  159.     u16            _irq:1;
  160.     u16            _io:1;
  161.     u16            _win:4;
  162.     u16            _locked:1;
  163.  
  164.     /* Flag whether a "fuzzy" func_id based match is
  165.      * allowed. */
  166.     u16            allow_func_id_match:1;
  167.  
  168.     /* information about this device */
  169.     u16            has_manf_id:1;
  170.     u16            has_card_id:1;
  171.     u16            has_func_id:1;
  172.  
  173.     u16            reserved:3;
  174.  
  175.     u8            func_id;
  176.     u16            manf_id;
  177.     u16            card_id;
  178.  
  179.     char *            prod_id[4];
  180.  
  181.     struct device        dev;
  182.  
  183. #ifdef CONFIG_PCMCIA_IOCTL
  184.     /* device driver wanted by cardmgr */
  185.     struct pcmcia_driver *    cardmgr;
  186. #endif
  187.  
  188.     /* data private to drivers */
  189.     void            *priv;
  190. };
  191.  
  192. #define to_pcmcia_dev(n) container_of(n, struct pcmcia_device, dev)
  193. #define to_pcmcia_drv(n) container_of(n, struct pcmcia_driver, drv)
  194.  
  195. #define handle_to_dev(handle) (handle->dev)
  196.  
  197. /* error reporting */
  198. void cs_error(struct pcmcia_device *handle, int func, int ret);
  199.  
  200. #endif /* __KERNEL__ */
  201. #endif /* _LINUX_DS_H */
  202.