/** Usb hub control transfer to get the port status. @param HubDev The hub device. @param Port The port of the hub. @param State Variable to return the hub port state. @retval EFI_SUCCESS The port state is returned in State. @retval Others Failed to retrieve the port state. **/ EFI_STATUS UsbHubCtrlGetPortStatus ( IN USB_DEVICE *HubDev, IN UINT8 Port, OUT VOID *State ) { EFI_STATUS Status; // // In USB bus, all the port index starts from 0. But HUB // indexes its port from 1. So, port number is added one. // No need to convert the hub bit to UEFI definition, they // are the same // Status = UsbCtrlRequest ( HubDev, EfiUsbDataIn, USB_REQ_TYPE_CLASS, USB_HUB_TARGET_PORT, USB_HUB_REQ_GET_STATUS, 0, (UINT16) (Port + 1), State, 4 ); return Status; }
/** Clear the feature of the device's port. @param HubDev The hub device. @param Port The port to clear feature. @param Feature The feature to clear. @retval EFI_SUCCESS The feature of the port is cleared. @retval Others Failed to clear the feature. **/ EFI_STATUS UsbHubCtrlClearPortFeature ( IN USB_DEVICE *HubDev, IN UINT8 Port, IN UINT16 Feature ) { EFI_STATUS Status; // // In USB bus, all the port index starts from 0. But HUB // indexes its port from 1. So, port number is added one. // Status = UsbCtrlRequest ( HubDev, EfiUsbNoData, USB_REQ_TYPE_CLASS, USB_HUB_TARGET_PORT, USB_HUB_REQ_CLEAR_FEATURE, Feature, (UINT16) (Port + 1), NULL, 0 ); return Status; }
/** Get the standard descriptors. @param UsbDev The USB device to read descriptor from. @param DescType The type of descriptor to read. @param DescIndex The index of descriptor to read. @param LangId Language ID, only used to get string, otherwise set it to 0. @param Buf The buffer to hold the descriptor read. @param Length The length of the buffer. @retval EFI_SUCCESS The descriptor is read OK. @retval Others Failed to retrieve the descriptor. **/ EFI_STATUS UsbCtrlGetDesc ( IN USB_DEVICE *UsbDev, IN UINTN DescType, IN UINTN DescIndex, IN UINT16 LangId, OUT VOID *Buf, IN UINTN Length ) { EFI_STATUS Status; Status = UsbCtrlRequest ( UsbDev, EfiUsbDataIn, USB_REQ_TYPE_STANDARD, USB_TARGET_DEVICE, USB_REQ_GET_DESCRIPTOR, (UINT16) ((DescType << 8) | DescIndex), LangId, Buf, Length ); return Status; }
/** Clear the transaction translate buffer if full/low speed control/bulk transfer failed and the transfer uses this hub as translator.Remember to clear the TT buffer of transaction translator, not that of the parent. @param HubDev The hub device. @param Port The port of the hub. @param DevAddr Address of the failed transaction. @param EpNum The endpoint number of the failed transaction. @param EpType The type of failed transaction. @retval EFI_SUCCESS The TT buffer is cleared. @retval Others Failed to clear the TT buffer. **/ EFI_STATUS UsbHubCtrlClearTTBuffer ( IN USB_DEVICE *HubDev, IN UINT8 Port, IN UINT16 DevAddr, IN UINT16 EpNum, IN UINT16 EpType ) { EFI_STATUS Status; UINT16 Value; // // Check USB2.0 spec page 424 for wValue's encoding // Value = (UINT16) ((EpNum & 0x0F) | (DevAddr << 4) | ((EpType & 0x03) << 11) | ((EpNum & 0x80) << 15)); Status = UsbCtrlRequest ( HubDev, EfiUsbNoData, USB_REQ_TYPE_CLASS, USB_HUB_TARGET_PORT, USB_HUB_REQ_CLEAR_TT, Value, (UINT16) (Port + 1), NULL, 0 ); return Status; }
/** Usb hub control transfer to get the (super speed) hub descriptor. @param HubDev The hub device. @param Buf The buffer to hold the descriptor. @param Len The length to retrieve. @retval EFI_SUCCESS The hub descriptor is retrieved. @retval Others Failed to retrieve the hub descriptor. **/ EFI_STATUS UsbHubCtrlGetHubDesc ( IN USB_DEVICE *HubDev, OUT VOID *Buf, IN UINTN Len ) { EFI_STATUS Status; UINT8 DescType; DescType = (HubDev->Speed == EFI_USB_SPEED_SUPER) ? USB_DESC_TYPE_HUB_SUPER_SPEED : USB_DESC_TYPE_HUB; Status = UsbCtrlRequest ( HubDev, EfiUsbDataIn, USB_REQ_TYPE_CLASS, USB_HUB_TARGET_HUB, USB_HUB_REQ_GET_DESC, (UINT16) (DescType << 8), 0, Buf, Len ); return Status; }
/** USB hub control transfer to clear the hub feature. @param HubDev The device of the hub. @param Feature The feature to clear. @retval EFI_SUCCESS Feature of the hub is cleared. @retval Others Failed to clear the feature. **/ EFI_STATUS UsbHubCtrlClearHubFeature ( IN USB_DEVICE *HubDev, IN UINT16 Feature ) { EFI_STATUS Status; Status = UsbCtrlRequest ( HubDev, EfiUsbNoData, USB_REQ_TYPE_CLASS, USB_HUB_TARGET_HUB, USB_HUB_REQ_CLEAR_FEATURE, Feature, 0, NULL, 0 ); return Status; }
/** Usb hub control transfer to reset the TT (Transaction Transaltor). @param HubDev The hub device. @param Port The port of the hub. @retval EFI_SUCCESS The TT of the hub is reset. @retval Others Failed to reset the port. **/ EFI_STATUS UsbHubCtrlResetTT ( IN USB_DEVICE *HubDev, IN UINT8 Port ) { EFI_STATUS Status; Status = UsbCtrlRequest ( HubDev, EfiUsbNoData, USB_REQ_TYPE_CLASS, USB_HUB_TARGET_HUB, USB_HUB_REQ_RESET_TT, 0, (UINT16) (Port + 1), NULL, 0 ); return Status; }
/** Usb hub control transfer to get the hub status. @param HubDev The hub device. @param State The variable to return the status. @retval EFI_SUCCESS The hub status is returned in State. @retval Others Failed to get the hub status. **/ EFI_STATUS UsbHubCtrlGetHubStatus ( IN USB_DEVICE *HubDev, OUT UINT32 *State ) { EFI_STATUS Status; Status = UsbCtrlRequest ( HubDev, EfiUsbDataIn, USB_REQ_TYPE_CLASS, USB_HUB_TARGET_HUB, USB_HUB_REQ_GET_STATUS, 0, 0, State, 4 ); return Status; }
/** USB hub control transfer to set the hub depth. @param HubDev The device of the hub. @param Depth The depth to set. @retval EFI_SUCCESS Depth of the hub is set. @retval Others Failed to set the depth. **/ EFI_STATUS UsbHubCtrlSetHubDepth ( IN USB_DEVICE *HubDev, IN UINT16 Depth ) { EFI_STATUS Status; Status = UsbCtrlRequest ( HubDev, EfiUsbNoData, USB_REQ_TYPE_CLASS, USB_HUB_TARGET_HUB, USB_HUB_REQ_SET_DEPTH, Depth, 0, NULL, 0 ); return Status; }
/** Set the device's configuration. This function changes the device's internal state. UsbSelectConfig changes the Usb bus's internal state. @param UsbDev The USB device to set configure to. @param ConfigIndex The configure index to set. @retval EFI_SUCCESS The device is configured now. @retval Others Failed to set the device configure. **/ EFI_STATUS UsbSetConfig ( IN USB_DEVICE *UsbDev, IN UINT8 ConfigIndex ) { EFI_STATUS Status; Status = UsbCtrlRequest ( UsbDev, EfiUsbNoData, USB_REQ_TYPE_STANDARD, USB_TARGET_DEVICE, USB_REQ_SET_CONFIG, ConfigIndex, 0, NULL, 0 ); return Status; }
/** Set the device's address. @param UsbDev The device to set address to. @param Address The address to set. @retval EFI_SUCCESS The device is set to the address. @retval Others Failed to set the device address. **/ EFI_STATUS UsbSetAddress ( IN USB_DEVICE *UsbDev, IN UINT8 Address ) { EFI_STATUS Status; Status = UsbCtrlRequest ( UsbDev, EfiUsbNoData, USB_REQ_TYPE_STANDARD, USB_TARGET_DEVICE, USB_REQ_SET_ADDRESS, Address, 0, NULL, 0 ); return Status; }
/** Usb hub control transfer to get the hub descriptor. @param HubDev The hub device. @param Buf The buffer to hold the descriptor. @param Len The length to retrieve. @retval EFI_SUCCESS The hub descriptor is retrieved. @retval Others Failed to retrieve the hub descriptor. **/ EFI_STATUS UsbHubCtrlGetHubDesc ( IN USB_DEVICE *HubDev, OUT VOID *Buf, IN UINTN Len ) { EFI_STATUS Status; Status = UsbCtrlRequest ( HubDev, EfiUsbDataIn, USB_REQ_TYPE_CLASS, USB_HUB_TARGET_HUB, USB_HUB_REQ_GET_DESC, (UINT16) (USB_DESC_TYPE_HUB << 8), 0, Buf, Len ); return Status; }
/** Usb hub control transfer to get the super speed hub descriptor. @param HubDev The hub device. @param Buf The buffer to hold the descriptor. @retval EFI_SUCCESS The hub descriptor is retrieved. @retval Others Failed to retrieve the hub descriptor. **/ EFI_STATUS UsbHubCtrlGetSuperSpeedHubDesc ( IN USB_DEVICE *HubDev, OUT VOID *Buf ) { EFI_STATUS Status; Status = EFI_INVALID_PARAMETER; Status = UsbCtrlRequest ( HubDev, EfiUsbDataIn, USB_REQ_TYPE_CLASS, USB_HUB_TARGET_HUB, USB_HUB_REQ_GET_DESC, (UINT16) (USB_DESC_TYPE_HUB_SUPER_SPEED << 8), 0, Buf, 32 ); return Status; }