]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Bus/Usb/UsbBotPei/PeiUsbLib.c
MdeModulePkg UsbBotPei: Remove redundant functions
[mirror_edk2.git] / MdeModulePkg / Bus / Usb / UsbBotPei / PeiUsbLib.c
CommitLineData
4b1bf81c 1/** @file\r
2Common Libarary for PEI USB.\r
3\r
d1102dba
LG
4Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
5\r
4b1bf81c 6This program and the accompanying materials\r
7are licensed and made available under the terms and conditions\r
8of the BSD License which accompanies this distribution. The\r
9full text of the license may be found at\r
10http://opensource.org/licenses/bsd-license.php\r
11\r
12THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
13WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
14\r
15**/\r
16\r
17#include "UsbPeim.h"\r
18#include "PeiUsbLib.h"\r
19\r
4b1bf81c 20\r
21/**\r
22 Clear a given usb feature.\r
23\r
24 @param PeiServices General-purpose services that are available to every PEIM.\r
25 @param UsbIoPpi Indicates the PEI_USB_IO_PPI instance.\r
26 @param Recipient The recipient of ClearFeature Request, should be one of Device/Interface/Endpoint.\r
27 @param Value Request Value.\r
28 @param Target Request Index.\r
29\r
30 @retval EFI_SUCCESS Usb feature is cleared successfully.\r
31 @retval EFI_DEVICE_ERROR Cannot clear the usb feature due to a hardware error.\r
32 @retval Others Other failure occurs.\r
33\r
34**/\r
35EFI_STATUS\r
36PeiUsbClearDeviceFeature (\r
37 IN EFI_PEI_SERVICES **PeiServices,\r
38 IN PEI_USB_IO_PPI *UsbIoPpi,\r
39 IN EFI_USB_RECIPIENT Recipient,\r
40 IN UINT16 Value,\r
41 IN UINT16 Target\r
42 )\r
43{\r
44 EFI_USB_DEVICE_REQUEST DevReq;\r
45\r
46 ASSERT (UsbIoPpi != NULL);\r
47\r
48 switch (Recipient) {\r
49 case EfiUsbDevice:\r
50 DevReq.RequestType = USB_DEV_CLEAR_FEATURE_REQ_TYPE_D;\r
51 break;\r
52\r
53 case EfiUsbInterface:\r
54 DevReq.RequestType = USB_DEV_CLEAR_FEATURE_REQ_TYPE_I;\r
55 break;\r
56\r
57 case EfiUsbEndpoint:\r
58 DevReq.RequestType = USB_DEV_CLEAR_FEATURE_REQ_TYPE_E;\r
59 break;\r
60 }\r
61\r
62 DevReq.Request = USB_DEV_CLEAR_FEATURE;\r
63 DevReq.Value = Value;\r
64 DevReq.Index = Target;\r
65 DevReq.Length = 0;\r
66\r
67 return UsbIoPpi->UsbControlTransfer (\r
68 PeiServices,\r
69 UsbIoPpi,\r
70 &DevReq,\r
71 EfiUsbNoData,\r
72 PcdGet32 (PcdUsbTransferTimeoutValue),\r
73 NULL,\r
74 0\r
75 );\r
76}\r
77\r
4b1bf81c 78\r
79/**\r
80 Clear Endpoint Halt.\r
81\r
82 @param PeiServices General-purpose services that are available to every PEIM.\r
83 @param UsbIoPpi Indicates the PEI_USB_IO_PPI instance.\r
84 @param EndpointAddress The endpoint address.\r
85\r
86 @retval EFI_SUCCESS Endpoint halt is cleared successfully.\r
87 @retval EFI_DEVICE_ERROR Cannot clear the endpoint halt status due to a hardware error.\r
88 @retval Others Other failure occurs.\r
89\r
90**/\r
91EFI_STATUS\r
92PeiUsbClearEndpointHalt (\r
93 IN EFI_PEI_SERVICES **PeiServices,\r
94 IN PEI_USB_IO_PPI *UsbIoPpi,\r
95 IN UINT8 EndpointAddress\r
96 )\r
97{\r
506560e7
SZ
98 EFI_STATUS Status;\r
99 EFI_USB_INTERFACE_DESCRIPTOR *InterfaceDesc;\r
100 EFI_USB_ENDPOINT_DESCRIPTOR *EndpointDescriptor;\r
101 UINT8 EndpointIndex;\r
4b1bf81c 102\r
4b1bf81c 103\r
506560e7
SZ
104 //\r
105 // Check its interface\r
106 //\r
107 Status = UsbIoPpi->UsbGetInterfaceDescriptor (\r
108 PeiServices,\r
109 UsbIoPpi,\r
110 &InterfaceDesc\r
111 );\r
112 if (EFI_ERROR (Status)) {\r
113 return Status;\r
114 }\r
115 for (EndpointIndex = 0; EndpointIndex < InterfaceDesc->NumEndpoints; EndpointIndex++) {\r
4b1bf81c 116 Status = UsbIoPpi->UsbGetEndpointDescriptor (PeiServices, UsbIoPpi, EndpointIndex, &EndpointDescriptor);\r
117 if (EFI_ERROR (Status)) {\r
118 return EFI_INVALID_PARAMETER;\r
119 }\r
120\r
121 if (EndpointDescriptor->EndpointAddress == EndpointAddress) {\r
122 break;\r
123 }\r
4b1bf81c 124 }\r
125\r
506560e7 126 if (EndpointIndex == InterfaceDesc->NumEndpoints) {\r
4b1bf81c 127 return EFI_INVALID_PARAMETER;\r
128 }\r
129\r
130 Status = PeiUsbClearDeviceFeature (\r
131 PeiServices,\r
132 UsbIoPpi,\r
133 EfiUsbEndpoint,\r
134 EfiUsbEndpointHalt,\r
135 EndpointAddress\r
136 );\r
137\r
4b1bf81c 138 return Status;\r
139}\r
140\r
4b1bf81c 141\r