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

嵌入式Linux

开发平台:

Unix_Linux

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