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

Linux/Unix编程

开发平台:

Unix_Linux

  1. #ifndef __LINUX_HUB_H
  2. #define __LINUX_HUB_H
  3. #include <linux/list.h>
  4. #include <linux/compiler.h> /* likely()/unlikely() */
  5. /*
  6.  * Hub request types
  7.  */
  8. #define USB_RT_HUB (USB_TYPE_CLASS | USB_RECIP_DEVICE)
  9. #define USB_RT_PORT (USB_TYPE_CLASS | USB_RECIP_OTHER)
  10. /*
  11.  * Hub Class feature numbers
  12.  * See USB 2.0 spec Table 11-17
  13.  */
  14. #define C_HUB_LOCAL_POWER 0
  15. #define C_HUB_OVER_CURRENT 1
  16. /*
  17.  * Port feature numbers
  18.  * See USB 2.0 spec Table 11-17
  19.  */
  20. #define USB_PORT_FEAT_CONNECTION 0
  21. #define USB_PORT_FEAT_ENABLE 1
  22. #define USB_PORT_FEAT_SUSPEND 2
  23. #define USB_PORT_FEAT_OVER_CURRENT 3
  24. #define USB_PORT_FEAT_RESET 4
  25. #define USB_PORT_FEAT_POWER 8
  26. #define USB_PORT_FEAT_LOWSPEED 9
  27. #define USB_PORT_FEAT_HIGHSPEED 10
  28. #define USB_PORT_FEAT_C_CONNECTION 16
  29. #define USB_PORT_FEAT_C_ENABLE 17
  30. #define USB_PORT_FEAT_C_SUSPEND 18
  31. #define USB_PORT_FEAT_C_OVER_CURRENT 19
  32. #define USB_PORT_FEAT_C_RESET 20
  33. #define USB_PORT_FEAT_TEST              21
  34. #define USB_PORT_FEAT_INDICATOR         22
  35. /* 
  36.  * Hub Status and Hub Change results
  37.  * See USB 2.0 spec Table 11-19 and Table 11-20
  38.  */
  39. struct usb_port_status {
  40. __u16 wPortStatus;
  41. __u16 wPortChange;
  42. } __attribute__ ((packed));
  43. /* 
  44.  * wPortStatus bit field
  45.  * See USB 2.0 spec Table 11-21
  46.  */
  47. #define USB_PORT_STAT_CONNECTION 0x0001
  48. #define USB_PORT_STAT_ENABLE 0x0002
  49. #define USB_PORT_STAT_SUSPEND 0x0004
  50. #define USB_PORT_STAT_OVERCURRENT 0x0008
  51. #define USB_PORT_STAT_RESET 0x0010
  52. /* bits 5 for 7 are reserved */
  53. #define USB_PORT_STAT_POWER 0x0100
  54. #define USB_PORT_STAT_LOW_SPEED 0x0200
  55. #define USB_PORT_STAT_HIGH_SPEED        0x0400
  56. #define USB_PORT_STAT_TEST              0x0800
  57. #define USB_PORT_STAT_INDICATOR         0x1000
  58. /* bits 13 to 15 are reserved */
  59. /* 
  60.  * wPortChange bit field
  61.  * See USB 2.0 spec Table 11-22
  62.  * Bits 0 to 4 shown, bits 5 to 15 are reserved
  63.  */
  64. #define USB_PORT_STAT_C_CONNECTION 0x0001
  65. #define USB_PORT_STAT_C_ENABLE 0x0002
  66. #define USB_PORT_STAT_C_SUSPEND 0x0004
  67. #define USB_PORT_STAT_C_OVERCURRENT 0x0008
  68. #define USB_PORT_STAT_C_RESET 0x0010
  69. /*
  70.  * wHubCharacteristics (masks) 
  71.  * See USB 2.0 spec Table 11-13, offset 3
  72.  */
  73. #define HUB_CHAR_LPSM 0x0003 /* D1 .. D0 */
  74. #define HUB_CHAR_COMPOUND 0x0004 /* D2       */
  75. #define HUB_CHAR_OCPM 0x0018 /* D4 .. D3 */
  76. #define HUB_CHAR_TTTT           0x0060 /* D6 .. D5 */
  77. #define HUB_CHAR_PORTIND        0x0080 /* D7       */
  78. struct usb_hub_status {
  79. __u16 wHubStatus;
  80. __u16 wHubChange;
  81. } __attribute__ ((packed));
  82. /*
  83.  * Hub Status & Hub Change bit masks
  84.  * See USB 2.0 spec Table 11-19 and Table 11-20
  85.  * Bits 0 and 1 for wHubStatus and wHubChange
  86.  * Bits 2 to 15 are reserved for both
  87.  */
  88. #define HUB_STATUS_LOCAL_POWER 0x0001
  89. #define HUB_STATUS_OVERCURRENT 0x0002
  90. #define HUB_CHANGE_LOCAL_POWER 0x0001
  91. #define HUB_CHANGE_OVERCURRENT 0x0002
  92. /* 
  93.  * Hub descriptor 
  94.  * See USB 2.0 spec Table 11-13
  95.  */
  96. struct usb_hub_descriptor {
  97. __u8  bDescLength;
  98. __u8  bDescriptorType;
  99. __u8  bNbrPorts;
  100. __u16 wHubCharacteristics;
  101. __u8  bPwrOn2PwrGood;
  102. __u8  bHubContrCurrent;
  103.      /* add 1 bit for hub status change; round to bytes */
  104. __u8  DeviceRemovable[(USB_MAXCHILDREN + 1 + 7) / 8];
  105. __u8  PortPwrCtrlMask[(USB_MAXCHILDREN + 1 + 7) / 8];
  106. } __attribute__ ((packed));
  107. struct usb_device;
  108. struct usb_hub {
  109. struct usb_device *dev;
  110. struct urb *urb; /* Interrupt polling pipe */
  111. char buffer[(USB_MAXCHILDREN + 1 + 7) / 8]; /* add 1 bit for hub status change */
  112. /* and add 7 bits to round up to byte boundary */
  113. int error;
  114. int nerrors;
  115. struct list_head hub_list;
  116. struct list_head event_list;
  117. struct usb_hub_descriptor *descriptor;
  118. struct semaphore khubd_sem;
  119. struct usb_tt tt; /* Transaction Translator */
  120. };
  121. #endif /* __LINUX_HUB_H */