mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-11-24 11:45:27 +01:00
7c0aa811ec
Signed-off-by: Sergey Isakov <isakov-sl@bk.ru>
259 lines
7.5 KiB
C
259 lines
7.5 KiB
C
/** @file
|
|
Constants definitions for Usb Hub Peim
|
|
|
|
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
|
|
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
#ifndef _PEI_HUB_PEIM_H_
|
|
#define _PEI_HUB_PEIM_H_
|
|
|
|
|
|
//
|
|
// Hub feature numbers
|
|
//
|
|
#define C_HUB_LOCAL_POWER 0
|
|
#define C_HUB_OVER_CURRENT 1
|
|
|
|
//
|
|
// Hub class code & sub class code
|
|
//
|
|
#define CLASS_CODE_HUB 0x09
|
|
#define SUB_CLASS_CODE_HUB 0
|
|
|
|
//
|
|
// Hub Status & Hub Change bit masks
|
|
//
|
|
#define HUB_STATUS_LOCAL_POWER 0x0001
|
|
#define HUB_STATUS_OVERCURRENT 0x0002
|
|
|
|
#define HUB_CHANGE_LOCAL_POWER 0x0001
|
|
#define HUB_CHANGE_OVERCURRENT 0x0002
|
|
|
|
//
|
|
// Hub Characteristics
|
|
//
|
|
#define HUB_CHAR_LPSM 0x0003
|
|
#define HUB_CHAR_COMPOUND 0x0004
|
|
#define HUB_CHAR_OCPM 0x0018
|
|
|
|
//
|
|
// Standard hub request and request type
|
|
// By [Spec-USB20/Chapter-11.24]
|
|
//
|
|
#define USB_HUB_CLEAR_FEATURE 0x01
|
|
#define USB_HUB_CLEAR_FEATURE_REQ_TYPE 0x20
|
|
|
|
#define USB_HUB_CLEAR_FEATURE_PORT 0x01
|
|
#define USB_HUB_CLEAR_FEATURE_PORT_REQ_TYPE 0x23
|
|
|
|
#define USB_HUB_GET_BUS_STATE 0x02
|
|
#define USB_HUB_GET_BUS_STATE_REQ_TYPE 0xA3
|
|
|
|
#define USB_HUB_GET_DESCRIPTOR 0x06
|
|
#define USB_HUB_GET_DESCRIPTOR_REQ_TYPE 0xA0
|
|
|
|
#define USB_HUB_GET_HUB_STATUS 0x00
|
|
#define USB_HUB_GET_HUB_STATUS_REQ_TYPE 0xA0
|
|
|
|
#define USB_HUB_GET_PORT_STATUS 0x00
|
|
#define USB_HUB_GET_PORT_STATUS_REQ_TYPE 0xA3
|
|
|
|
#define USB_HUB_SET_DESCRIPTOR 0x07
|
|
#define USB_HUB_SET_DESCRIPTOR_REQ_TYPE 0x20
|
|
|
|
#define USB_HUB_SET_HUB_FEATURE 0x03
|
|
#define USB_HUB_SET_HUB_FEATURE_REQ_TYPE 0x20
|
|
|
|
#define USB_HUB_SET_PORT_FEATURE 0x03
|
|
#define USB_HUB_SET_PORT_FEATURE_REQ_TYPE 0x23
|
|
|
|
#define USB_RT_HUB (USB_TYPE_CLASS | USB_RECIP_DEVICE)
|
|
#define USB_RT_PORT (USB_TYPE_CLASS | USB_RECIP_OTHER)
|
|
|
|
#define USB_HUB_REQ_SET_DEPTH 12
|
|
|
|
#define MAXBYTES 8
|
|
#pragma pack(1)
|
|
//
|
|
// Hub descriptor, the last two fields are of variable lenght.
|
|
//
|
|
typedef struct {
|
|
UINT8 Length;
|
|
UINT8 DescriptorType;
|
|
UINT8 NbrPorts;
|
|
UINT8 HubCharacteristics[2];
|
|
UINT8 PwrOn2PwrGood;
|
|
UINT8 HubContrCurrent;
|
|
UINT8 Filler[MAXBYTES];
|
|
} EFI_USB_HUB_DESCRIPTOR;
|
|
|
|
typedef struct {
|
|
UINT16 HubStatus;
|
|
UINT16 HubChangeStatus;
|
|
} EFI_USB_HUB_STATUS;
|
|
|
|
#pragma pack()
|
|
/**
|
|
Get a given hub port status.
|
|
|
|
@param PeiServices General-purpose services that are available to every PEIM.
|
|
@param UsbIoPpi Indicates the PEI_USB_IO_PPI instance.
|
|
@param Port Usb hub port number (starting from 1).
|
|
@param PortStatus Current Hub port status and change status.
|
|
|
|
@retval EFI_SUCCESS Port status is obtained successfully.
|
|
@retval EFI_DEVICE_ERROR Cannot get the port status due to a hardware error.
|
|
@retval Others Other failure occurs.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
PeiHubGetPortStatus (
|
|
IN EFI_PEI_SERVICES **PeiServices,
|
|
IN PEI_USB_IO_PPI *UsbIoPpi,
|
|
IN UINT8 Port,
|
|
OUT UINT32 *PortStatus
|
|
);
|
|
|
|
/**
|
|
Set specified feature to a given hub port.
|
|
|
|
@param PeiServices General-purpose services that are available to every PEIM.
|
|
@param UsbIoPpi Indicates the PEI_USB_IO_PPI instance.
|
|
@param Port Usb hub port number (starting from 1).
|
|
@param Value New feature value.
|
|
|
|
@retval EFI_SUCCESS Port feature is set successfully.
|
|
@retval EFI_DEVICE_ERROR Cannot set the port feature due to a hardware error.
|
|
@retval Others Other failure occurs.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
PeiHubSetPortFeature (
|
|
IN EFI_PEI_SERVICES **PeiServices,
|
|
IN PEI_USB_IO_PPI *UsbIoPpi,
|
|
IN UINT8 Port,
|
|
IN UINT8 Value
|
|
);
|
|
|
|
|
|
/**
|
|
Get a given hub status.
|
|
|
|
@param PeiServices General-purpose services that are available to every PEIM.
|
|
@param UsbIoPpi Indicates the PEI_USB_IO_PPI instance.
|
|
@param HubStatus Current Hub status and change status.
|
|
|
|
@retval EFI_SUCCESS Hub status is obtained successfully.
|
|
@retval EFI_DEVICE_ERROR Cannot get the hub status due to a hardware error.
|
|
@retval Others Other failure occurs.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
PeiHubGetHubStatus (
|
|
IN EFI_PEI_SERVICES **PeiServices,
|
|
IN PEI_USB_IO_PPI *UsbIoPpi,
|
|
OUT UINT32 *HubStatus
|
|
);
|
|
|
|
/**
|
|
Clear specified feature on a given hub port.
|
|
|
|
@param PeiServices General-purpose services that are available to every PEIM.
|
|
@param UsbIoPpi Indicates the PEI_USB_IO_PPI instance.
|
|
@param Port Usb hub port number (starting from 1).
|
|
@param Value Feature value that will be cleared from the hub port.
|
|
|
|
@retval EFI_SUCCESS Port feature is cleared successfully.
|
|
@retval EFI_DEVICE_ERROR Cannot clear the port feature due to a hardware error.
|
|
@retval Others Other failure occurs.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
PeiHubClearPortFeature (
|
|
IN EFI_PEI_SERVICES **PeiServices,
|
|
IN PEI_USB_IO_PPI *UsbIoPpi,
|
|
IN UINT8 Port,
|
|
IN UINT8 Value
|
|
);
|
|
|
|
/**
|
|
Clear specified feature on a given hub.
|
|
|
|
@param PeiServices General-purpose services that are available to every PEIM.
|
|
@param UsbIoPpi Indicates the PEI_USB_IO_PPI instance.
|
|
@param Value Feature value that will be cleared from the hub port.
|
|
|
|
@retval EFI_SUCCESS Hub feature is cleared successfully.
|
|
@retval EFI_DEVICE_ERROR Cannot clear the hub feature due to a hardware error.
|
|
@retval Others Other failure occurs.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
PeiHubClearHubFeature (
|
|
IN EFI_PEI_SERVICES **PeiServices,
|
|
IN PEI_USB_IO_PPI *UsbIoPpi,
|
|
IN UINT8 Value
|
|
);
|
|
|
|
/**
|
|
Get a given hub descriptor.
|
|
|
|
@param PeiServices General-purpose services that are available to every PEIM.
|
|
@param PeiUsbDevice Indicates the hub controller device.
|
|
@param UsbIoPpi Indicates the PEI_USB_IO_PPI instance.
|
|
@param DescriptorSize The length of Hub Descriptor buffer.
|
|
@param HubDescriptor Caller allocated buffer to store the hub descriptor if
|
|
successfully returned.
|
|
|
|
@retval EFI_SUCCESS Hub descriptor is obtained successfully.
|
|
@retval EFI_DEVICE_ERROR Cannot get the hub descriptor due to a hardware error.
|
|
@retval Others Other failure occurs.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
PeiGetHubDescriptor (
|
|
IN EFI_PEI_SERVICES **PeiServices,
|
|
IN PEI_USB_DEVICE *PeiUsbDevice,
|
|
IN PEI_USB_IO_PPI *UsbIoPpi,
|
|
IN UINTN DescriptorSize,
|
|
OUT EFI_USB_HUB_DESCRIPTOR *HubDescriptor
|
|
);
|
|
|
|
/**
|
|
Configure a given hub.
|
|
|
|
@param PeiServices General-purpose services that are available to every PEIM.
|
|
@param PeiUsbDevice Indicating the hub controller device that will be configured
|
|
|
|
@retval EFI_SUCCESS Hub configuration is done successfully.
|
|
@retval EFI_DEVICE_ERROR Cannot configure the hub due to a hardware error.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
PeiDoHubConfig (
|
|
IN EFI_PEI_SERVICES **PeiServices,
|
|
IN PEI_USB_DEVICE *PeiUsbDevice
|
|
);
|
|
|
|
/**
|
|
Send reset signal over the given root hub port.
|
|
|
|
@param PeiServices General-purpose services that are available to every PEIM.
|
|
@param UsbIoPpi Indicates the PEI_USB_IO_PPI instance.
|
|
@param PortNum Usb hub port number (starting from 1).
|
|
|
|
**/
|
|
VOID
|
|
PeiResetHubPort (
|
|
IN EFI_PEI_SERVICES **PeiServices,
|
|
IN PEI_USB_IO_PPI *UsbIoPpi,
|
|
IN UINT8 PortNum
|
|
);
|
|
|
|
#endif
|
|
|
|
|