]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Bus/Usb/UsbBusDxe/UsbHub.h
Fixed unexpected timeout in Usb MassStorage Driver.
[mirror_edk2.git] / MdeModulePkg / Bus / Usb / UsbBusDxe / UsbHub.h
CommitLineData
e237e7ae 1/** @file\r
2\r
3Copyright (c) 2007, Intel Corporation\r
4All rights reserved. This program and the accompanying materials\r
5are licensed and made available under the terms and conditions of the BSD License\r
6which accompanies this distribution. The full text of the license may be found at\r
7http://opensource.org/licenses/bsd-license.php\r
8\r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11\r
12 Module Name:\r
13\r
14 UsbHub.h\r
15\r
16 Abstract:\r
17\r
18 The definition for USB hub\r
19\r
20 Revision History\r
21\r
22\r
23**/\r
24\r
25#ifndef _USB_HUB_H_\r
26#define _USB_HUB_H_\r
27\r
c52fa98c 28#include <IndustryStandard/Usb.h>\r
29\r
e237e7ae 30#define USB_ENDPOINT_ADDR(EpAddr) ((EpAddr) & 0x7F)\r
31#define USB_ENDPOINT_TYPE(Desc) ((Desc)->Attributes & USB_ENDPOINT_TYPE_MASK)\r
32\r
33enum {\r
34 USB_DESC_TYPE_HUB = 0x29,\r
35\r
36 //\r
37 // Hub class control transfer target\r
38 //\r
39 USB_HUB_TARGET_HUB = 0,\r
40 USB_HUB_TARGET_PORT = 3,\r
41\r
42 //\r
43 // HUB class specific contrl transfer request type\r
44 //\r
45 USB_HUB_REQ_GET_STATUS = 0,\r
46 USB_HUB_REQ_CLEAR_FEATURE = 1,\r
47 USB_HUB_REQ_SET_FEATURE = 3,\r
48 USB_HUB_REQ_GET_DESC = 6,\r
49 USB_HUB_REQ_SET_DESC = 7,\r
50 USB_HUB_REQ_CLEAR_TT = 8,\r
51 USB_HUB_REQ_RESET_TT = 9,\r
52 USB_HUB_REQ_GET_TT_STATE = 10,\r
53 USB_HUB_REQ_STOP_TT = 11,\r
54\r
55\r
56 //\r
57 // USB hub class feature selector\r
58 //\r
59 USB_HUB_C_HUB_LOCAL_POWER = 0,\r
60 USB_HUB_C_HUB_OVER_CURRENT = 1,\r
61 USB_HUB_PORT_CONNECTION = 0,\r
62 USB_HUB_PORT_ENABLE = 1,\r
63 USB_HUB_PORT_SUSPEND = 2,\r
64 USB_HUB_PORT_OVER_CURRENT = 3,\r
65 USB_HUB_PORT_RESET = 4,\r
66 USB_HUB_PORT_POWER = 8,\r
67 USB_HUB_PORT_LOW_SPEED = 9,\r
68 USB_HUB_C_PORT_CONNECT = 16,\r
69 USB_HUB_C_PORT_ENABLE = 17,\r
70 USB_HUB_C_PORT_SUSPEND = 18,\r
71 USB_HUB_C_PORT_OVER_CURRENT = 19,\r
72 USB_HUB_C_PORT_RESET = 20,\r
73 USB_HUB_PORT_TEST = 21,\r
74 USB_HUB_PORT_INDICATOR = 22,\r
75\r
76 //\r
77 // USB hub power control method. In gang power control\r
78 //\r
79 USB_HUB_GANG_POWER_CTRL = 0,\r
80 USB_HUB_PORT_POWER_CTRL = 0x01,\r
81\r
82 //\r
83 // USB hub status bits\r
84 //\r
85 USB_HUB_STAT_LOCAL_POWER = 0x01,\r
86 USB_HUB_STAT_OVER_CURRENT = 0x02,\r
87 USB_HUB_STAT_C_LOCAL_POWER = 0x01,\r
88 USB_HUB_STAT_C_OVER_CURRENT = 0x02,\r
89\r
90 USB_HUB_CLASS_CODE = 0x09,\r
91 USB_HUB_SUBCLASS_CODE = 0x00,\r
92\r
41e8ff27 93 //\r
94 // Host software return timeout if port status doesn't change \r
95 // after 500ms(LOOP * STALL = 100 * 5ms), set by experience\r
96 //\r
97 USB_WAIT_PORT_STS_CHANGE_LOOP = 100,\r
e237e7ae 98};\r
99\r
100#pragma pack(1)\r
101//\r
102// Hub descriptor, the last two fields are of variable lenght.\r
103//\r
104typedef struct {\r
105 UINT8 Length;\r
106 UINT8 DescType;\r
107 UINT8 NumPorts;\r
108 UINT16 HubCharacter;\r
109 UINT8 PwrOn2PwrGood;\r
110 UINT8 HubContrCurrent;\r
111 UINT8 Filler[16];\r
112} EFI_USB_HUB_DESCRIPTOR;\r
113#pragma pack()\r
114\r
115\r
116typedef struct {\r
117 UINT16 ChangedBit;\r
41e8ff27 118 EFI_USB_PORT_FEATURE Feature;\r
e237e7ae 119} USB_CHANGE_FEATURE_MAP;\r
120\r
121\r
122EFI_STATUS\r
123UsbHubCtrlClearTTBuffer (\r
124 IN USB_DEVICE *UsbDev,\r
125 IN UINT8 Port,\r
126 IN UINT16 DevAddr,\r
127 IN UINT16 EpNum,\r
128 IN UINT16 EpType\r
129 );\r
130\r
131\r
132BOOLEAN\r
133UsbIsHubInterface (\r
134 IN USB_INTERFACE *UsbIf\r
135 );\r
136\r
137EFI_STATUS\r
138UsbHubAckHubStatus (\r
139 IN USB_DEVICE *UsbDev\r
140 );\r
141\r
142extern USB_HUB_API mUsbHubApi;\r
143extern USB_HUB_API mUsbRootHubApi;\r
144#endif\r
145\r