1fb0b259e4e440577dcd6ba6722c252d90605b3e9vanjeff/** @file 2fb0b259e4e440577dcd6ba6722c252d90605b3e9vanjeff Definitions and prototypes for DebugPort driver. 3c1f23d63363d36947e76df61320bdd2e5e233946qhuang 454d5bb7d16536cab30d782825b0d342f4e02ab4cRuiyu NiCopyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR> 5e5eed7d3641d71d7ea539e5379ea9c6a5cd97004hhtianThis program and the accompanying materials 6fb0b259e4e440577dcd6ba6722c252d90605b3e9vanjeffare licensed and made available under the terms and conditions of the BSD License 7fb0b259e4e440577dcd6ba6722c252d90605b3e9vanjeffwhich accompanies this distribution. The full text of the license may be found at 8fb0b259e4e440577dcd6ba6722c252d90605b3e9vanjeffhttp://opensource.org/licenses/bsd-license.php 9c1f23d63363d36947e76df61320bdd2e5e233946qhuang 10fb0b259e4e440577dcd6ba6722c252d90605b3e9vanjeffTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11fb0b259e4e440577dcd6ba6722c252d90605b3e9vanjeffWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12c1f23d63363d36947e76df61320bdd2e5e233946qhuang 13fb0b259e4e440577dcd6ba6722c252d90605b3e9vanjeff**/ 14c1f23d63363d36947e76df61320bdd2e5e233946qhuang 15c1f23d63363d36947e76df61320bdd2e5e233946qhuang#ifndef __DEBUGPORT_H__ 16c1f23d63363d36947e76df61320bdd2e5e233946qhuang#define __DEBUGPORT_H__ 17c1f23d63363d36947e76df61320bdd2e5e233946qhuang 18ed7748fe4a5575adea8055c6da5948fbee65fd7avanjeff 19c1f23d63363d36947e76df61320bdd2e5e233946qhuang#include <Uefi.h> 20ed7748fe4a5575adea8055c6da5948fbee65fd7avanjeff 21c1f23d63363d36947e76df61320bdd2e5e233946qhuang#include <Protocol/DevicePath.h> 22c1f23d63363d36947e76df61320bdd2e5e233946qhuang#include <Protocol/ComponentName.h> 23c1f23d63363d36947e76df61320bdd2e5e233946qhuang#include <Protocol/DriverBinding.h> 24c1f23d63363d36947e76df61320bdd2e5e233946qhuang#include <Protocol/SerialIo.h> 25c1f23d63363d36947e76df61320bdd2e5e233946qhuang#include <Protocol/DebugPort.h> 26ed7748fe4a5575adea8055c6da5948fbee65fd7avanjeff 27c1f23d63363d36947e76df61320bdd2e5e233946qhuang#include <Library/DebugLib.h> 28c1f23d63363d36947e76df61320bdd2e5e233946qhuang#include <Library/UefiDriverEntryPoint.h> 29c1f23d63363d36947e76df61320bdd2e5e233946qhuang#include <Library/UefiLib.h> 30c1f23d63363d36947e76df61320bdd2e5e233946qhuang#include <Library/BaseMemoryLib.h> 31c1f23d63363d36947e76df61320bdd2e5e233946qhuang#include <Library/MemoryAllocationLib.h> 32c1f23d63363d36947e76df61320bdd2e5e233946qhuang#include <Library/UefiBootServicesTableLib.h> 33c1f23d63363d36947e76df61320bdd2e5e233946qhuang#include <Library/UefiRuntimeServicesTableLib.h> 34c1f23d63363d36947e76df61320bdd2e5e233946qhuang#include <Library/DevicePathLib.h> 35c1f23d63363d36947e76df61320bdd2e5e233946qhuang 36c1f23d63363d36947e76df61320bdd2e5e233946qhuang// 37c1f23d63363d36947e76df61320bdd2e5e233946qhuang// Driver Binding Externs 38c1f23d63363d36947e76df61320bdd2e5e233946qhuang// 3919f97f7e860b65f638777845b65b458659c7eb66qhuangextern EFI_DRIVER_BINDING_PROTOCOL gDebugPortDriverBinding; 4019f97f7e860b65f638777845b65b458659c7eb66qhuangextern EFI_COMPONENT_NAME_PROTOCOL gDebugPortComponentName; 4119f97f7e860b65f638777845b65b458659c7eb66qhuangextern EFI_COMPONENT_NAME2_PROTOCOL gDebugPortComponentName2; 42c1f23d63363d36947e76df61320bdd2e5e233946qhuang 43c1f23d63363d36947e76df61320bdd2e5e233946qhuang// 44c1f23d63363d36947e76df61320bdd2e5e233946qhuang// local type definitions 45c1f23d63363d36947e76df61320bdd2e5e233946qhuang// 46f3f2e05db8c89628498ec4efdb16184747824c63qhuang#define DEBUGPORT_DEVICE_SIGNATURE SIGNATURE_32 ('D', 'B', 'G', 'P') 47c1f23d63363d36947e76df61320bdd2e5e233946qhuang 48c1f23d63363d36947e76df61320bdd2e5e233946qhuang// 49c1f23d63363d36947e76df61320bdd2e5e233946qhuang// Device structure used by driver 50c1f23d63363d36947e76df61320bdd2e5e233946qhuang// 51c1f23d63363d36947e76df61320bdd2e5e233946qhuangtypedef struct { 52c1f23d63363d36947e76df61320bdd2e5e233946qhuang UINT32 Signature; 53c1f23d63363d36947e76df61320bdd2e5e233946qhuang EFI_HANDLE DriverBindingHandle; 54c1f23d63363d36947e76df61320bdd2e5e233946qhuang EFI_HANDLE DebugPortDeviceHandle; 55c1f23d63363d36947e76df61320bdd2e5e233946qhuang 56c1f23d63363d36947e76df61320bdd2e5e233946qhuang EFI_DEVICE_PATH_PROTOCOL *DebugPortDevicePath; 57c1f23d63363d36947e76df61320bdd2e5e233946qhuang EFI_DEBUGPORT_PROTOCOL DebugPortInterface; 58c1f23d63363d36947e76df61320bdd2e5e233946qhuang 59c1f23d63363d36947e76df61320bdd2e5e233946qhuang EFI_HANDLE SerialIoDeviceHandle; 60c1f23d63363d36947e76df61320bdd2e5e233946qhuang EFI_SERIAL_IO_PROTOCOL *SerialIoBinding; 61c1f23d63363d36947e76df61320bdd2e5e233946qhuang UINT64 BaudRate; 62c1f23d63363d36947e76df61320bdd2e5e233946qhuang UINT32 ReceiveFifoDepth; 63c1f23d63363d36947e76df61320bdd2e5e233946qhuang UINT32 Timeout; 64c1f23d63363d36947e76df61320bdd2e5e233946qhuang EFI_PARITY_TYPE Parity; 65c1f23d63363d36947e76df61320bdd2e5e233946qhuang UINT8 DataBits; 66c1f23d63363d36947e76df61320bdd2e5e233946qhuang EFI_STOP_BITS_TYPE StopBits; 67c1f23d63363d36947e76df61320bdd2e5e233946qhuang} DEBUGPORT_DEVICE; 68c1f23d63363d36947e76df61320bdd2e5e233946qhuang 69c1f23d63363d36947e76df61320bdd2e5e233946qhuang#define DEBUGPORT_DEVICE_FROM_THIS(a) CR (a, DEBUGPORT_DEVICE, DebugPortInterface, DEBUGPORT_DEVICE_SIGNATURE) 70c1f23d63363d36947e76df61320bdd2e5e233946qhuang 71c1f23d63363d36947e76df61320bdd2e5e233946qhuang#define EFI_ACPI_PC_COMPORT_HID EISA_PNP_ID (0x0500) 72c1f23d63363d36947e76df61320bdd2e5e233946qhuang#define EFI_ACPI_16550UART_HID EISA_PNP_ID (0x0501) 73c1f23d63363d36947e76df61320bdd2e5e233946qhuang 74c1f23d63363d36947e76df61320bdd2e5e233946qhuang#define DEBUGPORT_UART_DEFAULT_BAUDRATE 115200 75c1f23d63363d36947e76df61320bdd2e5e233946qhuang#define DEBUGPORT_UART_DEFAULT_PARITY 0 76c1f23d63363d36947e76df61320bdd2e5e233946qhuang#define DEBUGPORT_UART_DEFAULT_FIFO_DEPTH 16 772d285faad8505a22d923935b6f00eebeba5b4172vanjeff#define DEBUGPORT_UART_DEFAULT_TIMEOUT 50000 ///< 5 ms 78c1f23d63363d36947e76df61320bdd2e5e233946qhuang#define DEBUGPORT_UART_DEFAULT_DATA_BITS 8 79c1f23d63363d36947e76df61320bdd2e5e233946qhuang#define DEBUGPORT_UART_DEFAULT_STOP_BITS 1 80c1f23d63363d36947e76df61320bdd2e5e233946qhuang 81c1f23d63363d36947e76df61320bdd2e5e233946qhuang#define DEBUGPORT_DRIVER_VERSION 1 82c1f23d63363d36947e76df61320bdd2e5e233946qhuang 8349c8b87c66e8034d935ed11673dd8a230e43440avanjeff#define IS_UART_DEVICEPATH(dp) (DevicePathType (dp) == MESSAGING_DEVICE_PATH && DevicePathSubType (dp) == MSG_UART_DP) 84c1f23d63363d36947e76df61320bdd2e5e233946qhuang 8549c8b87c66e8034d935ed11673dd8a230e43440avanjeff/** 867601dbe7c5ed94c859600649fc316918bb3572b3gikidy Debug Port Driver entry point. 8749c8b87c66e8034d935ed11673dd8a230e43440avanjeff 8849c8b87c66e8034d935ed11673dd8a230e43440avanjeff Reads DebugPort variable to determine what device and settings to use as the 8949c8b87c66e8034d935ed11673dd8a230e43440avanjeff debug port. Binds exclusively to SerialIo. Reverts to defaults if no variable 9049c8b87c66e8034d935ed11673dd8a230e43440avanjeff is found. 9149c8b87c66e8034d935ed11673dd8a230e43440avanjeff 9249c8b87c66e8034d935ed11673dd8a230e43440avanjeff @param[in] ImageHandle The firmware allocated handle for the EFI image. 9349c8b87c66e8034d935ed11673dd8a230e43440avanjeff @param[in] SystemTable A pointer to the EFI System Table. 9449c8b87c66e8034d935ed11673dd8a230e43440avanjeff 9549c8b87c66e8034d935ed11673dd8a230e43440avanjeff @retval EFI_SUCCESS The entry point is executed successfully. 9649c8b87c66e8034d935ed11673dd8a230e43440avanjeff @retval EFI_OUT_OF_RESOURCES Fails to allocate memory for device. 9749c8b87c66e8034d935ed11673dd8a230e43440avanjeff @retval other Some error occurs when executing this entry point. 9849c8b87c66e8034d935ed11673dd8a230e43440avanjeff 9949c8b87c66e8034d935ed11673dd8a230e43440avanjeff**/ 100c1f23d63363d36947e76df61320bdd2e5e233946qhuangEFI_STATUS 10149c8b87c66e8034d935ed11673dd8a230e43440avanjeffEFIAPI 10249c8b87c66e8034d935ed11673dd8a230e43440avanjeffInitializeDebugPortDriver ( 103c1f23d63363d36947e76df61320bdd2e5e233946qhuang IN EFI_HANDLE ImageHandle, 104c1f23d63363d36947e76df61320bdd2e5e233946qhuang IN EFI_SYSTEM_TABLE *SystemTable 105ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 106c1f23d63363d36947e76df61320bdd2e5e233946qhuang 10749c8b87c66e8034d935ed11673dd8a230e43440avanjeff/** 10849c8b87c66e8034d935ed11673dd8a230e43440avanjeff Checks to see if there's not already a DebugPort interface somewhere. 10949c8b87c66e8034d935ed11673dd8a230e43440avanjeff 11049c8b87c66e8034d935ed11673dd8a230e43440avanjeff If there's a DEBUGPORT variable, the device path must match exactly. If there's 11149c8b87c66e8034d935ed11673dd8a230e43440avanjeff no DEBUGPORT variable, then device path is not checked and does not matter. 11249c8b87c66e8034d935ed11673dd8a230e43440avanjeff Checks to see that there's a serial io interface on the controller handle 11349c8b87c66e8034d935ed11673dd8a230e43440avanjeff that can be bound BY_DRIVER | EXCLUSIVE. 11449c8b87c66e8034d935ed11673dd8a230e43440avanjeff If all these tests succeed, then we return EFI_SUCCESS, else, EFI_UNSUPPORTED 11549c8b87c66e8034d935ed11673dd8a230e43440avanjeff or other error returned by OpenProtocol. 11649c8b87c66e8034d935ed11673dd8a230e43440avanjeff 11749c8b87c66e8034d935ed11673dd8a230e43440avanjeff @param This Protocol instance pointer. 11849c8b87c66e8034d935ed11673dd8a230e43440avanjeff @param ControllerHandle Handle of device to test. 11949c8b87c66e8034d935ed11673dd8a230e43440avanjeff @param RemainingDevicePath Optional parameter use to pick a specific child 12049c8b87c66e8034d935ed11673dd8a230e43440avanjeff device to start. 12149c8b87c66e8034d935ed11673dd8a230e43440avanjeff 12249c8b87c66e8034d935ed11673dd8a230e43440avanjeff @retval EFI_SUCCESS This driver supports this device. 12349c8b87c66e8034d935ed11673dd8a230e43440avanjeff @retval EFI_UNSUPPORTED Debug Port device is not supported. 12449c8b87c66e8034d935ed11673dd8a230e43440avanjeff @retval EFI_OUT_OF_RESOURCES Fails to allocate memory for device. 12549c8b87c66e8034d935ed11673dd8a230e43440avanjeff @retval others Some error occurs. 12649c8b87c66e8034d935ed11673dd8a230e43440avanjeff 12749c8b87c66e8034d935ed11673dd8a230e43440avanjeff**/ 128c1f23d63363d36947e76df61320bdd2e5e233946qhuangEFI_STATUS 129c1f23d63363d36947e76df61320bdd2e5e233946qhuangEFIAPI 130c1f23d63363d36947e76df61320bdd2e5e233946qhuangDebugPortSupported ( 131c1f23d63363d36947e76df61320bdd2e5e233946qhuang IN EFI_DRIVER_BINDING_PROTOCOL *This, 132c1f23d63363d36947e76df61320bdd2e5e233946qhuang IN EFI_HANDLE Controller, 133c1f23d63363d36947e76df61320bdd2e5e233946qhuang IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath 134ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 135c1f23d63363d36947e76df61320bdd2e5e233946qhuang 13649c8b87c66e8034d935ed11673dd8a230e43440avanjeff/** 13749c8b87c66e8034d935ed11673dd8a230e43440avanjeff Binds exclusively to serial io on the controller handle, Produces DebugPort 13849c8b87c66e8034d935ed11673dd8a230e43440avanjeff protocol and DevicePath on new handle. 13949c8b87c66e8034d935ed11673dd8a230e43440avanjeff 14049c8b87c66e8034d935ed11673dd8a230e43440avanjeff @param This Protocol instance pointer. 14149c8b87c66e8034d935ed11673dd8a230e43440avanjeff @param ControllerHandle Handle of device to bind driver to. 14249c8b87c66e8034d935ed11673dd8a230e43440avanjeff @param RemainingDevicePath Optional parameter use to pick a specific child 14349c8b87c66e8034d935ed11673dd8a230e43440avanjeff device to start. 14449c8b87c66e8034d935ed11673dd8a230e43440avanjeff 14549c8b87c66e8034d935ed11673dd8a230e43440avanjeff @retval EFI_SUCCESS This driver is added to ControllerHandle. 14649c8b87c66e8034d935ed11673dd8a230e43440avanjeff @retval EFI_OUT_OF_RESOURCES Fails to allocate memory for device. 14749c8b87c66e8034d935ed11673dd8a230e43440avanjeff @retval others Some error occurs. 14849c8b87c66e8034d935ed11673dd8a230e43440avanjeff 14949c8b87c66e8034d935ed11673dd8a230e43440avanjeff**/ 150c1f23d63363d36947e76df61320bdd2e5e233946qhuangEFI_STATUS 151c1f23d63363d36947e76df61320bdd2e5e233946qhuangEFIAPI 152c1f23d63363d36947e76df61320bdd2e5e233946qhuangDebugPortStart ( 153c1f23d63363d36947e76df61320bdd2e5e233946qhuang IN EFI_DRIVER_BINDING_PROTOCOL *This, 154c1f23d63363d36947e76df61320bdd2e5e233946qhuang IN EFI_HANDLE Controller, 155c1f23d63363d36947e76df61320bdd2e5e233946qhuang IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath 156ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 157c1f23d63363d36947e76df61320bdd2e5e233946qhuang 15849c8b87c66e8034d935ed11673dd8a230e43440avanjeff/** 15949c8b87c66e8034d935ed11673dd8a230e43440avanjeff Stop this driver on ControllerHandle by removing Serial IO protocol on 16049c8b87c66e8034d935ed11673dd8a230e43440avanjeff the ControllerHandle. 16149c8b87c66e8034d935ed11673dd8a230e43440avanjeff 16249c8b87c66e8034d935ed11673dd8a230e43440avanjeff @param This Protocol instance pointer. 16349c8b87c66e8034d935ed11673dd8a230e43440avanjeff @param ControllerHandle Handle of device to stop driver on 16449c8b87c66e8034d935ed11673dd8a230e43440avanjeff @param NumberOfChildren Number of Handles in ChildHandleBuffer. If number of 16549c8b87c66e8034d935ed11673dd8a230e43440avanjeff children is zero stop the entire bus driver. 16649c8b87c66e8034d935ed11673dd8a230e43440avanjeff @param ChildHandleBuffer List of Child Handles to Stop. 16749c8b87c66e8034d935ed11673dd8a230e43440avanjeff 16849c8b87c66e8034d935ed11673dd8a230e43440avanjeff @retval EFI_SUCCESS This driver is removed ControllerHandle. 16949c8b87c66e8034d935ed11673dd8a230e43440avanjeff @retval other This driver was not removed from this device. 17049c8b87c66e8034d935ed11673dd8a230e43440avanjeff 17149c8b87c66e8034d935ed11673dd8a230e43440avanjeff**/ 172c1f23d63363d36947e76df61320bdd2e5e233946qhuangEFI_STATUS 173c1f23d63363d36947e76df61320bdd2e5e233946qhuangEFIAPI 174c1f23d63363d36947e76df61320bdd2e5e233946qhuangDebugPortStop ( 175c1f23d63363d36947e76df61320bdd2e5e233946qhuang IN EFI_DRIVER_BINDING_PROTOCOL *This, 176c1f23d63363d36947e76df61320bdd2e5e233946qhuang IN EFI_HANDLE Controller, 177c1f23d63363d36947e76df61320bdd2e5e233946qhuang IN UINTN NumberOfChildren, 178c1f23d63363d36947e76df61320bdd2e5e233946qhuang IN EFI_HANDLE *ChildHandleBuffer 179ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 180c1f23d63363d36947e76df61320bdd2e5e233946qhuang 181c1f23d63363d36947e76df61320bdd2e5e233946qhuang// 182c1f23d63363d36947e76df61320bdd2e5e233946qhuang// EFI Component Name Functions 183c1f23d63363d36947e76df61320bdd2e5e233946qhuang// 18419f97f7e860b65f638777845b65b458659c7eb66qhuang/** 18519f97f7e860b65f638777845b65b458659c7eb66qhuang Retrieves a Unicode string that is the user readable name of the driver. 18619f97f7e860b65f638777845b65b458659c7eb66qhuang 18719f97f7e860b65f638777845b65b458659c7eb66qhuang This function retrieves the user readable name of a driver in the form of a 18819f97f7e860b65f638777845b65b458659c7eb66qhuang Unicode string. If the driver specified by This has a user readable name in 18919f97f7e860b65f638777845b65b458659c7eb66qhuang the language specified by Language, then a pointer to the driver name is 19019f97f7e860b65f638777845b65b458659c7eb66qhuang returned in DriverName, and EFI_SUCCESS is returned. If the driver specified 19119f97f7e860b65f638777845b65b458659c7eb66qhuang by This does not support the language specified by Language, 19219f97f7e860b65f638777845b65b458659c7eb66qhuang then EFI_UNSUPPORTED is returned. 19319f97f7e860b65f638777845b65b458659c7eb66qhuang 19419f97f7e860b65f638777845b65b458659c7eb66qhuang @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or 19519f97f7e860b65f638777845b65b458659c7eb66qhuang EFI_COMPONENT_NAME_PROTOCOL instance. 19619f97f7e860b65f638777845b65b458659c7eb66qhuang 19719f97f7e860b65f638777845b65b458659c7eb66qhuang @param Language[in] A pointer to a Null-terminated ASCII string 19819f97f7e860b65f638777845b65b458659c7eb66qhuang array indicating the language. This is the 19919f97f7e860b65f638777845b65b458659c7eb66qhuang language of the driver name that the caller is 20019f97f7e860b65f638777845b65b458659c7eb66qhuang requesting, and it must match one of the 20119f97f7e860b65f638777845b65b458659c7eb66qhuang languages specified in SupportedLanguages. The 20219f97f7e860b65f638777845b65b458659c7eb66qhuang number of languages supported by a driver is up 20319f97f7e860b65f638777845b65b458659c7eb66qhuang to the driver writer. Language is specified 2040254efc01e461445240512ae1a1c2fc48ed2f70egikidy in RFC 4646 or ISO 639-2 language code format. 20519f97f7e860b65f638777845b65b458659c7eb66qhuang 20619f97f7e860b65f638777845b65b458659c7eb66qhuang @param DriverName[out] A pointer to the Unicode string to return. 20719f97f7e860b65f638777845b65b458659c7eb66qhuang This Unicode string is the name of the 20819f97f7e860b65f638777845b65b458659c7eb66qhuang driver specified by This in the language 20919f97f7e860b65f638777845b65b458659c7eb66qhuang specified by Language. 21019f97f7e860b65f638777845b65b458659c7eb66qhuang 21119f97f7e860b65f638777845b65b458659c7eb66qhuang @retval EFI_SUCCESS The Unicode string for the Driver specified by 21219f97f7e860b65f638777845b65b458659c7eb66qhuang This and the language specified by Language was 21319f97f7e860b65f638777845b65b458659c7eb66qhuang returned in DriverName. 21419f97f7e860b65f638777845b65b458659c7eb66qhuang 21519f97f7e860b65f638777845b65b458659c7eb66qhuang @retval EFI_INVALID_PARAMETER Language is NULL. 21619f97f7e860b65f638777845b65b458659c7eb66qhuang 21719f97f7e860b65f638777845b65b458659c7eb66qhuang @retval EFI_INVALID_PARAMETER DriverName is NULL. 21819f97f7e860b65f638777845b65b458659c7eb66qhuang 21919f97f7e860b65f638777845b65b458659c7eb66qhuang @retval EFI_UNSUPPORTED The driver specified by This does not support 22019f97f7e860b65f638777845b65b458659c7eb66qhuang the language specified by Language. 22119f97f7e860b65f638777845b65b458659c7eb66qhuang 22219f97f7e860b65f638777845b65b458659c7eb66qhuang**/ 223c1f23d63363d36947e76df61320bdd2e5e233946qhuangEFI_STATUS 224c1f23d63363d36947e76df61320bdd2e5e233946qhuangEFIAPI 225c1f23d63363d36947e76df61320bdd2e5e233946qhuangDebugPortComponentNameGetDriverName ( 22619f97f7e860b65f638777845b65b458659c7eb66qhuang IN EFI_COMPONENT_NAME_PROTOCOL *This, 22719f97f7e860b65f638777845b65b458659c7eb66qhuang IN CHAR8 *Language, 22819f97f7e860b65f638777845b65b458659c7eb66qhuang OUT CHAR16 **DriverName 22919f97f7e860b65f638777845b65b458659c7eb66qhuang ); 23019f97f7e860b65f638777845b65b458659c7eb66qhuang 23119f97f7e860b65f638777845b65b458659c7eb66qhuang 23219f97f7e860b65f638777845b65b458659c7eb66qhuang/** 23319f97f7e860b65f638777845b65b458659c7eb66qhuang Retrieves a Unicode string that is the user readable name of the controller 23419f97f7e860b65f638777845b65b458659c7eb66qhuang that is being managed by a driver. 23519f97f7e860b65f638777845b65b458659c7eb66qhuang 23619f97f7e860b65f638777845b65b458659c7eb66qhuang This function retrieves the user readable name of the controller specified by 23719f97f7e860b65f638777845b65b458659c7eb66qhuang ControllerHandle and ChildHandle in the form of a Unicode string. If the 23819f97f7e860b65f638777845b65b458659c7eb66qhuang driver specified by This has a user readable name in the language specified by 23919f97f7e860b65f638777845b65b458659c7eb66qhuang Language, then a pointer to the controller name is returned in ControllerName, 24019f97f7e860b65f638777845b65b458659c7eb66qhuang and EFI_SUCCESS is returned. If the driver specified by This is not currently 24119f97f7e860b65f638777845b65b458659c7eb66qhuang managing the controller specified by ControllerHandle and ChildHandle, 24219f97f7e860b65f638777845b65b458659c7eb66qhuang then EFI_UNSUPPORTED is returned. If the driver specified by This does not 24319f97f7e860b65f638777845b65b458659c7eb66qhuang support the language specified by Language, then EFI_UNSUPPORTED is returned. 24419f97f7e860b65f638777845b65b458659c7eb66qhuang 24519f97f7e860b65f638777845b65b458659c7eb66qhuang @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or 24619f97f7e860b65f638777845b65b458659c7eb66qhuang EFI_COMPONENT_NAME_PROTOCOL instance. 247c1f23d63363d36947e76df61320bdd2e5e233946qhuang 24819f97f7e860b65f638777845b65b458659c7eb66qhuang @param ControllerHandle[in] The handle of a controller that the driver 24919f97f7e860b65f638777845b65b458659c7eb66qhuang specified by This is managing. This handle 25019f97f7e860b65f638777845b65b458659c7eb66qhuang specifies the controller whose name is to be 25119f97f7e860b65f638777845b65b458659c7eb66qhuang returned. 25219f97f7e860b65f638777845b65b458659c7eb66qhuang 25319f97f7e860b65f638777845b65b458659c7eb66qhuang @param ChildHandle[in] The handle of the child controller to retrieve 25419f97f7e860b65f638777845b65b458659c7eb66qhuang the name of. This is an optional parameter that 25519f97f7e860b65f638777845b65b458659c7eb66qhuang may be NULL. It will be NULL for device 25619f97f7e860b65f638777845b65b458659c7eb66qhuang drivers. It will also be NULL for a bus drivers 25719f97f7e860b65f638777845b65b458659c7eb66qhuang that wish to retrieve the name of the bus 25819f97f7e860b65f638777845b65b458659c7eb66qhuang controller. It will not be NULL for a bus 25919f97f7e860b65f638777845b65b458659c7eb66qhuang driver that wishes to retrieve the name of a 26019f97f7e860b65f638777845b65b458659c7eb66qhuang child controller. 26119f97f7e860b65f638777845b65b458659c7eb66qhuang 26219f97f7e860b65f638777845b65b458659c7eb66qhuang @param Language[in] A pointer to a Null-terminated ASCII string 26319f97f7e860b65f638777845b65b458659c7eb66qhuang array indicating the language. This is the 26419f97f7e860b65f638777845b65b458659c7eb66qhuang language of the driver name that the caller is 26519f97f7e860b65f638777845b65b458659c7eb66qhuang requesting, and it must match one of the 26619f97f7e860b65f638777845b65b458659c7eb66qhuang languages specified in SupportedLanguages. The 26719f97f7e860b65f638777845b65b458659c7eb66qhuang number of languages supported by a driver is up 26819f97f7e860b65f638777845b65b458659c7eb66qhuang to the driver writer. Language is specified in 2690254efc01e461445240512ae1a1c2fc48ed2f70egikidy RFC 4646 or ISO 639-2 language code format. 27019f97f7e860b65f638777845b65b458659c7eb66qhuang 27119f97f7e860b65f638777845b65b458659c7eb66qhuang @param ControllerName[out] A pointer to the Unicode string to return. 27219f97f7e860b65f638777845b65b458659c7eb66qhuang This Unicode string is the name of the 27319f97f7e860b65f638777845b65b458659c7eb66qhuang controller specified by ControllerHandle and 27419f97f7e860b65f638777845b65b458659c7eb66qhuang ChildHandle in the language specified by 27519f97f7e860b65f638777845b65b458659c7eb66qhuang Language from the point of view of the driver 27619f97f7e860b65f638777845b65b458659c7eb66qhuang specified by This. 27719f97f7e860b65f638777845b65b458659c7eb66qhuang 27819f97f7e860b65f638777845b65b458659c7eb66qhuang @retval EFI_SUCCESS The Unicode string for the user readable name in 27919f97f7e860b65f638777845b65b458659c7eb66qhuang the language specified by Language for the 28019f97f7e860b65f638777845b65b458659c7eb66qhuang driver specified by This was returned in 28119f97f7e860b65f638777845b65b458659c7eb66qhuang DriverName. 28219f97f7e860b65f638777845b65b458659c7eb66qhuang 283284ee2e829ab2453293b7dc4539727ad6c047163niruiyu @retval EFI_INVALID_PARAMETER ControllerHandle is NULL. 28419f97f7e860b65f638777845b65b458659c7eb66qhuang 28519f97f7e860b65f638777845b65b458659c7eb66qhuang @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid 28619f97f7e860b65f638777845b65b458659c7eb66qhuang EFI_HANDLE. 28719f97f7e860b65f638777845b65b458659c7eb66qhuang 28819f97f7e860b65f638777845b65b458659c7eb66qhuang @retval EFI_INVALID_PARAMETER Language is NULL. 28919f97f7e860b65f638777845b65b458659c7eb66qhuang 29019f97f7e860b65f638777845b65b458659c7eb66qhuang @retval EFI_INVALID_PARAMETER ControllerName is NULL. 29119f97f7e860b65f638777845b65b458659c7eb66qhuang 29219f97f7e860b65f638777845b65b458659c7eb66qhuang @retval EFI_UNSUPPORTED The driver specified by This is not currently 29319f97f7e860b65f638777845b65b458659c7eb66qhuang managing the controller specified by 29419f97f7e860b65f638777845b65b458659c7eb66qhuang ControllerHandle and ChildHandle. 29519f97f7e860b65f638777845b65b458659c7eb66qhuang 29619f97f7e860b65f638777845b65b458659c7eb66qhuang @retval EFI_UNSUPPORTED The driver specified by This does not support 29719f97f7e860b65f638777845b65b458659c7eb66qhuang the language specified by Language. 29819f97f7e860b65f638777845b65b458659c7eb66qhuang 29919f97f7e860b65f638777845b65b458659c7eb66qhuang**/ 300c1f23d63363d36947e76df61320bdd2e5e233946qhuangEFI_STATUS 301c1f23d63363d36947e76df61320bdd2e5e233946qhuangEFIAPI 302c1f23d63363d36947e76df61320bdd2e5e233946qhuangDebugPortComponentNameGetControllerName ( 30319f97f7e860b65f638777845b65b458659c7eb66qhuang IN EFI_COMPONENT_NAME_PROTOCOL *This, 30419f97f7e860b65f638777845b65b458659c7eb66qhuang IN EFI_HANDLE ControllerHandle, 30519f97f7e860b65f638777845b65b458659c7eb66qhuang IN EFI_HANDLE ChildHandle OPTIONAL, 30619f97f7e860b65f638777845b65b458659c7eb66qhuang IN CHAR8 *Language, 30719f97f7e860b65f638777845b65b458659c7eb66qhuang OUT CHAR16 **ControllerName 30819f97f7e860b65f638777845b65b458659c7eb66qhuang ); 30919f97f7e860b65f638777845b65b458659c7eb66qhuang 310c1f23d63363d36947e76df61320bdd2e5e233946qhuang 31149c8b87c66e8034d935ed11673dd8a230e43440avanjeff/** 31249c8b87c66e8034d935ed11673dd8a230e43440avanjeff DebugPort protocol member function. Calls SerialIo:GetControl to flush buffer. 31349c8b87c66e8034d935ed11673dd8a230e43440avanjeff We cannot call SerialIo:SetAttributes because it uses pool services, which use 31449c8b87c66e8034d935ed11673dd8a230e43440avanjeff locks, which affect TPL, so it's not interrupt context safe or re-entrant. 31549c8b87c66e8034d935ed11673dd8a230e43440avanjeff SerialIo:Reset() calls SetAttributes, so it can't be used either. 31649c8b87c66e8034d935ed11673dd8a230e43440avanjeff 31749c8b87c66e8034d935ed11673dd8a230e43440avanjeff The port itself should be fine since it was set up during initialization. 31849c8b87c66e8034d935ed11673dd8a230e43440avanjeff 31949c8b87c66e8034d935ed11673dd8a230e43440avanjeff @param This Protocol instance pointer. 32049c8b87c66e8034d935ed11673dd8a230e43440avanjeff 32149c8b87c66e8034d935ed11673dd8a230e43440avanjeff @return EFI_SUCCESS Always. 32249c8b87c66e8034d935ed11673dd8a230e43440avanjeff 32349c8b87c66e8034d935ed11673dd8a230e43440avanjeff**/ 324c1f23d63363d36947e76df61320bdd2e5e233946qhuangEFI_STATUS 325c1f23d63363d36947e76df61320bdd2e5e233946qhuangEFIAPI 326c1f23d63363d36947e76df61320bdd2e5e233946qhuangDebugPortReset ( 327c1f23d63363d36947e76df61320bdd2e5e233946qhuang IN EFI_DEBUGPORT_PROTOCOL *This 328ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 329c1f23d63363d36947e76df61320bdd2e5e233946qhuang 33049c8b87c66e8034d935ed11673dd8a230e43440avanjeff/** 33149c8b87c66e8034d935ed11673dd8a230e43440avanjeff DebugPort protocol member function. Calls SerialIo:Read() after setting 33249c8b87c66e8034d935ed11673dd8a230e43440avanjeff if it's different than the last SerialIo access. 33349c8b87c66e8034d935ed11673dd8a230e43440avanjeff 33449c8b87c66e8034d935ed11673dd8a230e43440avanjeff @param This Pointer to DebugPort protocol. 33549c8b87c66e8034d935ed11673dd8a230e43440avanjeff @param Timeout Timeout value. 33649c8b87c66e8034d935ed11673dd8a230e43440avanjeff @param BufferSize On input, the size of Buffer. 33749c8b87c66e8034d935ed11673dd8a230e43440avanjeff On output, the amount of data actually written. 33849c8b87c66e8034d935ed11673dd8a230e43440avanjeff @param Buffer Pointer to buffer to read. 33949c8b87c66e8034d935ed11673dd8a230e43440avanjeff 34049c8b87c66e8034d935ed11673dd8a230e43440avanjeff @retval EFI_SUCCESS 34149c8b87c66e8034d935ed11673dd8a230e43440avanjeff @retval others 34249c8b87c66e8034d935ed11673dd8a230e43440avanjeff 34349c8b87c66e8034d935ed11673dd8a230e43440avanjeff**/ 344c1f23d63363d36947e76df61320bdd2e5e233946qhuangEFI_STATUS 345c1f23d63363d36947e76df61320bdd2e5e233946qhuangEFIAPI 346c1f23d63363d36947e76df61320bdd2e5e233946qhuangDebugPortRead ( 347c1f23d63363d36947e76df61320bdd2e5e233946qhuang IN EFI_DEBUGPORT_PROTOCOL *This, 348c1f23d63363d36947e76df61320bdd2e5e233946qhuang IN UINT32 Timeout, 349c1f23d63363d36947e76df61320bdd2e5e233946qhuang IN OUT UINTN *BufferSize, 350c1f23d63363d36947e76df61320bdd2e5e233946qhuang IN VOID *Buffer 351ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 352c1f23d63363d36947e76df61320bdd2e5e233946qhuang 35349c8b87c66e8034d935ed11673dd8a230e43440avanjeff/** 35449c8b87c66e8034d935ed11673dd8a230e43440avanjeff DebugPort protocol member function. Calls SerialIo:Write() Writes 8 bytes at 35549c8b87c66e8034d935ed11673dd8a230e43440avanjeff a time and does a GetControl between 8 byte writes to help insure reads are 35649c8b87c66e8034d935ed11673dd8a230e43440avanjeff interspersed This is poor-man's flow control. 35749c8b87c66e8034d935ed11673dd8a230e43440avanjeff 35849c8b87c66e8034d935ed11673dd8a230e43440avanjeff @param This Pointer to DebugPort protocol. 35949c8b87c66e8034d935ed11673dd8a230e43440avanjeff @param Timeout Timeout value. 36049c8b87c66e8034d935ed11673dd8a230e43440avanjeff @param BufferSize On input, the size of Buffer. 36149c8b87c66e8034d935ed11673dd8a230e43440avanjeff On output, the amount of data actually written. 36249c8b87c66e8034d935ed11673dd8a230e43440avanjeff @param Buffer Pointer to buffer to read. 36349c8b87c66e8034d935ed11673dd8a230e43440avanjeff 36449c8b87c66e8034d935ed11673dd8a230e43440avanjeff @retval EFI_SUCCESS The data was written. 36549c8b87c66e8034d935ed11673dd8a230e43440avanjeff @retval others Fails when writting datas to debug port device. 36649c8b87c66e8034d935ed11673dd8a230e43440avanjeff 36749c8b87c66e8034d935ed11673dd8a230e43440avanjeff**/ 368c1f23d63363d36947e76df61320bdd2e5e233946qhuangEFI_STATUS 369c1f23d63363d36947e76df61320bdd2e5e233946qhuangEFIAPI 370c1f23d63363d36947e76df61320bdd2e5e233946qhuangDebugPortWrite ( 371c1f23d63363d36947e76df61320bdd2e5e233946qhuang IN EFI_DEBUGPORT_PROTOCOL *This, 372c1f23d63363d36947e76df61320bdd2e5e233946qhuang IN UINT32 Timeout, 373c1f23d63363d36947e76df61320bdd2e5e233946qhuang IN OUT UINTN *BufferSize, 374c1f23d63363d36947e76df61320bdd2e5e233946qhuang OUT VOID *Buffer 375ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 376c1f23d63363d36947e76df61320bdd2e5e233946qhuang 37749c8b87c66e8034d935ed11673dd8a230e43440avanjeff/** 37849c8b87c66e8034d935ed11673dd8a230e43440avanjeff DebugPort protocol member function. Calls SerialIo:Write() after setting 37949c8b87c66e8034d935ed11673dd8a230e43440avanjeff if it's different than the last SerialIo access. 38049c8b87c66e8034d935ed11673dd8a230e43440avanjeff 38149c8b87c66e8034d935ed11673dd8a230e43440avanjeff @param This Pointer to DebugPort protocol. 38249c8b87c66e8034d935ed11673dd8a230e43440avanjeff 38349c8b87c66e8034d935ed11673dd8a230e43440avanjeff @retval EFI_SUCCESS At least 1 character is ready to be read from 38449c8b87c66e8034d935ed11673dd8a230e43440avanjeff the DebugPort interface. 38549c8b87c66e8034d935ed11673dd8a230e43440avanjeff @retval EFI_NOT_READY There are no characters ready to read from the 38649c8b87c66e8034d935ed11673dd8a230e43440avanjeff DebugPort interface 38749c8b87c66e8034d935ed11673dd8a230e43440avanjeff @retval EFI_DEVICE_ERROR A hardware failure occured... (from SerialIo) 38849c8b87c66e8034d935ed11673dd8a230e43440avanjeff 38949c8b87c66e8034d935ed11673dd8a230e43440avanjeff**/ 390c1f23d63363d36947e76df61320bdd2e5e233946qhuangEFI_STATUS 391c1f23d63363d36947e76df61320bdd2e5e233946qhuangEFIAPI 392c1f23d63363d36947e76df61320bdd2e5e233946qhuangDebugPortPoll ( 393c1f23d63363d36947e76df61320bdd2e5e233946qhuang IN EFI_DEBUGPORT_PROTOCOL *This 394ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 395c1f23d63363d36947e76df61320bdd2e5e233946qhuang 396c1f23d63363d36947e76df61320bdd2e5e233946qhuang#endif 397