driver.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:5k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* $Id$
  2.  *
  3.  * This file is subject to the terms and conditions of the GNU General Public
  4.  * License.  See the file "COPYING" in the main directory of this archive
  5.  * for more details.
  6.  *
  7.  * Copyright (C) 1992 - 1997, 2000 Silicon Graphics, Inc.
  8.  * Copyright (C) 2000 by Colin Ngam
  9.  */
  10. #ifndef _ASM_SN_DRIVER_H
  11. #define _ASM_SN_DRIVER_H
  12. /*
  13. ** Interface for device driver handle management.
  14. **
  15. ** These functions are mostly for use by the loadable driver code, and
  16. ** for use by I/O bus infrastructure code.
  17. */
  18. typedef struct device_driver_s *device_driver_t;
  19. #define DEVICE_DRIVER_NONE (device_driver_t)NULL
  20. /* == Driver thread priority support == */
  21. typedef int ilvl_t;
  22. /* default driver thread priority level */
  23. #define DRIVER_THREAD_PRI_DEFAULT (ilvl_t)230
  24. /* invalid driver thread priority level */
  25. #define DRIVER_THREAD_PRI_INVALID (ilvl_t)-1
  26. /* Associate a thread priority with a driver */
  27. extern int device_driver_thread_pri_set(device_driver_t driver,
  28. ilvl_t pri);
  29. /* Get the thread priority associated with the driver */
  30. extern ilvl_t device_driver_thread_pri_get(device_driver_t driver);
  31. /* Get the thread priority for a driver from the sysgen paramters */
  32. extern ilvl_t device_driver_sysgen_thread_pri_get(char *driver_prefix);
  33. /* Initialize device driver functions. */
  34. extern void device_driver_init(void);
  35. /* Allocate a driver handle */
  36. extern device_driver_t device_driver_alloc(char *prefix);
  37. /* Free a driver handle */
  38. extern void device_driver_free(device_driver_t driver);
  39. /* Given a device driver prefix, return a handle to the driver. */
  40. extern device_driver_t device_driver_get(char *prefix);
  41. /* Given a device, return a handle to the driver. */
  42. extern device_driver_t device_driver_getbydev(devfs_handle_t device);
  43. struct cdevsw;
  44. struct bdevsw;
  45. /* Associate a driver with bdevsw/cdevsw pointers. */
  46. extern int
  47. device_driver_devsw_put(device_driver_t driver,
  48. struct bdevsw *my_bdevsw,
  49. struct cdevsw *my_cdevsw);
  50. /* Given a driver, return the corresponding bdevsw and cdevsw pointers. */
  51. extern void
  52. device_driver_devsw_get( device_driver_t driver, 
  53. struct bdevsw **bdevswp,
  54. struct cdevsw **cdevswp);
  55. /* Given a driver, return its name (prefix). */
  56. extern void device_driver_name_get(device_driver_t driver, char *buffer, int length);
  57. /* 
  58.  * A descriptor for every static device driver in the system.
  59.  * lboot creates a table of these and places in in master.c.
  60.  * device_driver_init runs through this table during initialization
  61.  * in order to "register" every static device driver.
  62.  */
  63. typedef struct static_device_driver_desc_s {
  64. char  *sdd_prefix;
  65. struct bdevsw  *sdd_bdevsw;
  66. struct cdevsw  *sdd_cdevsw;
  67. } *static_device_driver_desc_t;
  68. extern struct static_device_driver_desc_s static_device_driver_table[];
  69. extern int static_devsw_count;
  70. /*====== administration support ========== */
  71. /* structure of each entry in the table created by lboot for
  72.  * device / driver administration
  73. */
  74. typedef struct dev_admin_info_s {
  75. char *dai_name; /* name of the device or driver
  76.  * prefix 
  77.  */
  78. char *dai_param_name; /* device or driver parameter name */
  79. char *dai_param_val; /* value of the parameter */
  80. } dev_admin_info_t;
  81. /* Update all the administrative hints associated with the device */
  82. extern void  device_admin_info_update(devfs_handle_t dev_vhdl);
  83. /* Update all the administrative hints associated with the device driver */
  84. extern void device_driver_admin_info_update(device_driver_t driver);
  85. /* Get a particular administrative hint associated with a device */
  86. extern char  *device_admin_info_get(devfs_handle_t dev_vhdl,
  87.        char *info_lbl);
  88. /* Associate a particular administrative hint for a device */
  89. extern int device_admin_info_set(devfs_handle_t dev_vhdl,
  90.       char *info_lbl,
  91.       char *info_val);
  92. /* Get a particular administrative hint associated with a device driver*/
  93. extern char  *device_driver_admin_info_get(char *driver_prefix,
  94.       char *info_name);
  95. /* Associate a particular administrative hint for a device driver*/
  96. extern int device_driver_admin_info_set(char *driver_prefix,
  97.      char *driver_info_lbl,
  98.      char *driver_info_val);
  99. /* Initialize the extended device administrative hint table */
  100. extern void device_admin_table_init(void);
  101. /* Add a hint corresponding to a device to the extended device administrative
  102.  * hint table.
  103.  */
  104. extern void device_admin_table_update(char *dev_name,
  105.   char *param_name,
  106.   char *param_val);
  107. /* Initialize the extended device driver administrative hint table */
  108. extern void device_driver_admin_table_init(void);
  109. /* Add a hint corresponding to a device to the extended device driver 
  110.  * administrative hint table.
  111.  */
  112. extern void device_driver_admin_table_update(char *drv_prefix,
  113.  char *param_name,
  114.  char *param_val);
  115. #endif /* _ASM_SN_DRIVER_H */