/** Read the whole usb hub descriptor. It is necessary to do it in two steps because hub descriptor is of variable length. @param HubDev The hub device. @param HubDesc The variable to return the descriptor. @retval EFI_SUCCESS The hub descriptor is read. @retval Others Failed to read the hub descriptor. **/ EFI_STATUS UsbHubReadDesc ( IN USB_DEVICE *HubDev, OUT EFI_USB_HUB_DESCRIPTOR *HubDesc ) { EFI_STATUS Status; if (HubDev->Speed == EFI_USB_SPEED_SUPER) { // // Get the super speed hub descriptor // Status = UsbHubCtrlGetSuperSpeedHubDesc (HubDev, HubDesc); } else { // // First get the hub descriptor length // Status = UsbHubCtrlGetHubDesc (HubDev, HubDesc, 2); if (EFI_ERROR (Status)) { return Status; } // // Get the whole hub descriptor // Status = UsbHubCtrlGetHubDesc (HubDev, HubDesc, HubDesc->Length); } return Status; }
/** Read the whole usb hub descriptor. It is necessary to do it in two steps because hub descriptor is of variable length. @param HubDev The hub device. @param HubDesc The variable to return the descriptor. @retval EFI_SUCCESS The hub descriptor is read. @retval Others Failed to read the hub descriptor. **/ EFI_STATUS UsbHubReadDesc ( IN USB_DEVICE *HubDev, OUT EFI_USB_HUB_DESCRIPTOR *HubDesc ) { EFI_STATUS Status; // // First get the hub descriptor length // Status = UsbHubCtrlGetHubDesc (HubDev, HubDesc, 2); if (EFI_ERROR (Status)) { return Status; } // // Get the whole hub descriptor // return UsbHubCtrlGetHubDesc (HubDev, HubDesc, HubDesc->Length); }