Update code style.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8669 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
lgao4
2009-06-26 08:39:21 +00:00
parent 9b90631549
commit 91c681977b
7 changed files with 574 additions and 485 deletions

View File

@ -1,7 +1,7 @@
/** @file /** @file
UEFI Component Name and Name2 protocol for Isa serial driver.
Copyright (c) 2006 - 2009, Intel Corporation.<BR>
Copyright (c) 2006 - 2007, Intel Corporation.<BR>
All rights reserved. This program and the accompanying materials All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at which accompanies this distribution. The full text of the license may be found at
@ -14,6 +14,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#include "Serial.h" #include "Serial.h"
#define SERIAL_PORT_NAME "ISA Serial Port # "
// //
// EFI Component Name Protocol // EFI Component Name Protocol
// //
@ -227,27 +228,19 @@ IsaSerialComponentNameGetControllerName (
); );
} }
/**
Add the ISO639-2 and RFC4646 component name both for the Serial IO device
@param SerialDevice A pointer to the SERIAL_DEV instance.
@param IsaIo A pointer to the EFI_ISA_IO_PROTOCOL instance.
**/
VOID VOID
AddName ( AddName (
IN SERIAL_DEV *SerialDevice, IN SERIAL_DEV *SerialDevice,
IN EFI_ISA_IO_PROTOCOL *IsaIo IN EFI_ISA_IO_PROTOCOL *IsaIo
) )
/**
Routine Description:
Add the component name for the serial io device
Arguments:
SerialDevice - A pointer to the SERIAL_DEV instance.
IsaIo - A pointer to the EFI_ISA_IO_PROTOCOL instance.
Returns:
None
**/
{ {
CHAR16 SerialPortName[sizeof (SERIAL_PORT_NAME)]; CHAR16 SerialPortName[sizeof (SERIAL_PORT_NAME)];

View File

@ -1,177 +0,0 @@
/**@file
Copyright (c) 2006 - 2007, Intel Corporation.<BR>
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef _SERIAL_COMPONENT_NAME_H
#define _SERIAL_COMPONENT_NAME_H
#define SERIAL_PORT_NAME "ISA Serial Port # "
#define ADD_SERIAL_NAME(x, y) AddName ((x), (y))
extern EFI_COMPONENT_NAME_PROTOCOL gIsaSerialComponentName;
extern EFI_COMPONENT_NAME2_PROTOCOL gIsaSerialComponentName2;
//
// EFI Component Name Functions
//
/**
Retrieves a Unicode string that is the user readable name of the driver.
This function retrieves the user readable name of a driver in the form of a
Unicode string. If the driver specified by This has a user readable name in
the language specified by Language, then a pointer to the driver name is
returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
by This does not support the language specified by Language,
then EFI_UNSUPPORTED is returned.
@param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
EFI_COMPONENT_NAME_PROTOCOL instance.
@param Language[in] A pointer to a Null-terminated ASCII string
array indicating the language. This is the
language of the driver name that the caller is
requesting, and it must match one of the
languages specified in SupportedLanguages. The
number of languages supported by a driver is up
to the driver writer. Language is specified
in RFC 4646 or ISO 639-2 language code format.
@param DriverName[out] A pointer to the Unicode string to return.
This Unicode string is the name of the
driver specified by This in the language
specified by Language.
@retval EFI_SUCCESS The Unicode string for the Driver specified by
This and the language specified by Language was
returned in DriverName.
@retval EFI_INVALID_PARAMETER Language is NULL.
@retval EFI_INVALID_PARAMETER DriverName is NULL.
@retval EFI_UNSUPPORTED The driver specified by This does not support
the language specified by Language.
**/
EFI_STATUS
EFIAPI
IsaSerialComponentNameGetDriverName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN CHAR8 *Language,
OUT CHAR16 **DriverName
);
/**
Retrieves a Unicode string that is the user readable name of the controller
that is being managed by a driver.
This function retrieves the user readable name of the controller specified by
ControllerHandle and ChildHandle in the form of a Unicode string. If the
driver specified by This has a user readable name in the language specified by
Language, then a pointer to the controller name is returned in ControllerName,
and EFI_SUCCESS is returned. If the driver specified by This is not currently
managing the controller specified by ControllerHandle and ChildHandle,
then EFI_UNSUPPORTED is returned. If the driver specified by This does not
support the language specified by Language, then EFI_UNSUPPORTED is returned.
@param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
EFI_COMPONENT_NAME_PROTOCOL instance.
@param ControllerHandle[in] The handle of a controller that the driver
specified by This is managing. This handle
specifies the controller whose name is to be
returned.
@param ChildHandle[in] The handle of the child controller to retrieve
the name of. This is an optional parameter that
may be NULL. It will be NULL for device
drivers. It will also be NULL for a bus drivers
that wish to retrieve the name of the bus
controller. It will not be NULL for a bus
driver that wishes to retrieve the name of a
child controller.
@param Language[in] A pointer to a Null-terminated ASCII string
array indicating the language. This is the
language of the driver name that the caller is
requesting, and it must match one of the
languages specified in SupportedLanguages. The
number of languages supported by a driver is up
to the driver writer. Language is specified in
RFC 4646 or ISO 639-2 language code format.
@param ControllerName[out] A pointer to the Unicode string to return.
This Unicode string is the name of the
controller specified by ControllerHandle and
ChildHandle in the language specified by
Language from the point of view of the driver
specified by This.
@retval EFI_SUCCESS The Unicode string for the user readable name in
the language specified by Language for the
driver specified by This was returned in
DriverName.
@retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
@retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
EFI_HANDLE.
@retval EFI_INVALID_PARAMETER Language is NULL.
@retval EFI_INVALID_PARAMETER ControllerName is NULL.
@retval EFI_UNSUPPORTED The driver specified by This is not currently
managing the controller specified by
ControllerHandle and ChildHandle.
@retval EFI_UNSUPPORTED The driver specified by This does not support
the language specified by Language.
**/
EFI_STATUS
EFIAPI
IsaSerialComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
);
VOID
AddName (
IN SERIAL_DEV *SerialDevice,
IN EFI_ISA_IO_PROTOCOL *IsaIo
)
/**
Routine Description:
Add the component name for the serial io device
Arguments:
SerialDevice - A pointer to the SERIAL_DEV instance.
IsaIo - A pointer to the EFI_ISA_IO_PROTOCOL instance.
Returns:
None
**/
;
#endif

View File

@ -1,7 +1,6 @@
#/** @file #/** @file
# Component description file for IsaSerial module.
#
# Serial driver for standard UARTS on an ISA bus. # Serial driver for standard UARTS on an ISA bus.
#
# Copyright (c) 2007 - 2009, Intel Corporation # Copyright (c) 2007 - 2009, Intel Corporation
# #
# All rights reserved. This program and the accompanying materials # All rights reserved. This program and the accompanying materials
@ -35,7 +34,6 @@
[Sources.common] [Sources.common]
ComponentName.c ComponentName.c
ComponentName.h
Serial.h Serial.h
Serial.c Serial.c
@ -58,14 +56,12 @@
DebugLib DebugLib
[Protocols] [Protocols]
gEfiIsaIoProtocolGuid # PROTOCOL TO_START gEfiIsaIoProtocolGuid ## TO_START
gEfiSerialIoProtocolGuid # PROTOCOL BY_START gEfiDevicePathProtocolGuid ## TO_START
gEfiDevicePathProtocolGuid # PROTOCOL TO_START gEfiSerialIoProtocolGuid ## BY_START
[FixedPcd.common] [FixedPcd.common]
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate|115200 gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate|115200
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits|8 gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits|8
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity|1 gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity|1
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits|1 gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits|1

View File

@ -1,7 +1,7 @@
/** @file /** @file
Serial driver for standard UARTS on an ISA bus. Serial driver for standard UARTS on an ISA bus.
Copyright (c) 2006 - 2007, Intel Corporation<BR> Copyright (c) 2006 - 2009, Intel Corporation<BR>
All rights reserved. This program and the accompanying materials All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at which accompanies this distribution. The full text of the license may be found at
@ -82,7 +82,7 @@ SERIAL_DEV gSerialDevTempate = {
}, },
FALSE, FALSE,
FALSE, FALSE,
UART16550A, Uart16550A,
NULL NULL
}; };
@ -125,11 +125,11 @@ InitializeIsaSerial (
/** /**
Check to see if this driver supports the given controller Check to see if this driver supports the given controller
@param This - A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance. @param This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
@param Controller - The handle of the controller to test. @param Controller The handle of the controller to test.
@param RemainingDevicePath - A pointer to the remaining portion of a device path. @param RemainingDevicePath A pointer to the remaining portion of a device path.
@return EFI_SUCCESS - This driver can support the given controller @return EFI_SUCCESS This driver can support the given controller
**/ **/
EFI_STATUS EFI_STATUS
@ -261,11 +261,11 @@ Error:
/** /**
Start to management the controller passed in Start to management the controller passed in
@param This - A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance. @param This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
@param Controller - The handle of the controller to test. @param Controller The handle of the controller to test.
@param RemainingDevicePath - A pointer to the remaining portion of a device path. @param RemainingDevicePath A pointer to the remaining portion of a device path.
@return EFI_SUCCESS - Driver is started successfully @return EFI_SUCCESS Driver is started successfully
**/ **/
EFI_STATUS EFI_STATUS
@ -388,7 +388,7 @@ SerialControllerDriverStart (
SerialDevice->IsaIo = IsaIo; SerialDevice->IsaIo = IsaIo;
SerialDevice->ParentDevicePath = ParentDevicePath; SerialDevice->ParentDevicePath = ParentDevicePath;
ADD_SERIAL_NAME (SerialDevice, IsaIo); AddName (SerialDevice, IsaIo);
for (Index = 0; SerialDevice->IsaIo->ResourceList->ResourceItem[Index].Type != EfiIsaAcpiResourceEndOfList; Index++) { for (Index = 0; SerialDevice->IsaIo->ResourceList->ResourceItem[Index].Type != EfiIsaAcpiResourceEndOfList; Index++) {
if (SerialDevice->IsaIo->ResourceList->ResourceItem[Index].Type == EfiIsaAcpiResourceIo) { if (SerialDevice->IsaIo->ResourceList->ResourceItem[Index].Type == EfiIsaAcpiResourceIo) {
@ -501,8 +501,8 @@ Error:
This->DriverBindingHandle, This->DriverBindingHandle,
Controller Controller
); );
if (SerialDevice) { if (SerialDevice != NULL) {
if (SerialDevice->DevicePath) { if (SerialDevice->DevicePath != NULL) {
gBS->FreePool (SerialDevice->DevicePath); gBS->FreePool (SerialDevice->DevicePath);
} }
@ -517,13 +517,13 @@ Error:
/** /**
Disconnect this driver with the controller, uninstall related protocol instance Disconnect this driver with the controller, uninstall related protocol instance
@param This - A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance. @param This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
@param Controller - The handle of the controller to test. @param Controller The handle of the controller to test.
@param NumberOfChildren - Number of child device. @param NumberOfChildren Number of child device.
@param ChildHandleBuffer - A pointer to the remaining portion of a device path. @param ChildHandleBuffer A pointer to the remaining portion of a device path.
@retval EFI_SUCCESS - Operation successfully @retval EFI_SUCCESS Operation successfully
@retval EFI_DEVICE_ERROR - Cannot stop the driver successfully @retval EFI_DEVICE_ERROR Cannot stop the driver successfully
**/ **/
EFI_STATUS EFI_STATUS
@ -624,7 +624,7 @@ SerialControllerDriverStop (
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
); );
} else { } else {
if (SerialDevice->DevicePath) { if (SerialDevice->DevicePath != NULL) {
gBS->FreePool (SerialDevice->DevicePath); gBS->FreePool (SerialDevice->DevicePath);
} }
@ -646,9 +646,9 @@ SerialControllerDriverStop (
} }
/** /**
Detect whether specific FIFO is full or not Detect whether specific FIFO is full or not.
@param Fifo - A pointer to the Data Structure SERIAL_DEV_FIFO @param Fifo A pointer to the Data Structure SERIAL_DEV_FIFO
@return whether specific FIFO is full or not @return whether specific FIFO is full or not
@ -667,10 +667,9 @@ IsaSerialFifoFull (
} }
/** /**
Detect whether specific FIFO is empty or not Detect whether specific FIFO is empty or not.
@param Fifo A pointer to the Data Structure SERIAL_DEV_FIFO
@param Fifo - A pointer to the Data Structure SERIAL_DEV_FIFO
@return whether specific FIFO is empty or not @return whether specific FIFO is empty or not
@ -689,13 +688,13 @@ IsaSerialFifoEmpty (
} }
/** /**
Add data to specific FIFO Add data to specific FIFO.
@param Fifo - A pointer to the Data Structure SERIAL_DEV_FIFO @param Fifo A pointer to the Data Structure SERIAL_DEV_FIFO
@param Data - the data added to FIFO @param Data the data added to FIFO
@retval EFI_SUCCESS - Add data to specific FIFO successfully @retval EFI_SUCCESS Add data to specific FIFO successfully
@retval EFI_OUT_OF_RESOURCE - Failed to add data because FIFO is already full @retval EFI_OUT_OF_RESOURCE Failed to add data because FIFO is already full
**/ **/
EFI_STATUS EFI_STATUS
@ -725,13 +724,13 @@ IsaSerialFifoAdd (
} }
/** /**
Remove data from specific FIFO Remove data from specific FIFO.
@param Fifo - A pointer to the Data Structure SERIAL_DEV_FIFO @param Fifo A pointer to the Data Structure SERIAL_DEV_FIFO
@param Data - the data removed from FIFO @param Data the data removed from FIFO
@retval EFI_SUCCESS - Remove data from specific FIFO successfully @retval EFI_SUCCESS Remove data from specific FIFO successfully
@retval EFI_OUT_OF_RESOURCE - Failed to remove data because FIFO is empty @retval EFI_OUT_OF_RESOURCE Failed to remove data because FIFO is empty
**/ **/
EFI_STATUS EFI_STATUS
@ -763,10 +762,10 @@ IsaSerialFifoRemove (
/** /**
Reads and writes all avaliable data. Reads and writes all avaliable data.
@param SerialDevice - The device to flush @param SerialDevice The device to flush
@retval EFI_SUCCESS - Data was read/written successfully. @retval EFI_SUCCESS Data was read/written successfully.
@retval EFI_OUT_OF_RESOURCE - Failed because software receive FIFO is full. Note, when @retval EFI_OUT_OF_RESOURCE Failed because software receive FIFO is full. Note, when
this happens, pending writes are not done. this happens, pending writes are not done.
**/ **/
@ -808,16 +807,16 @@ IsaSerialReceiveTransmit (
// //
// Flush incomming data to prevent a an overrun during a long write // Flush incomming data to prevent a an overrun during a long write
// //
if (Lsr.Bits.DR && !ReceiveFifoFull) { if ((Lsr.Bits.Dr == 1) && !ReceiveFifoFull) {
ReceiveFifoFull = IsaSerialFifoFull (&SerialDevice->Receive); ReceiveFifoFull = IsaSerialFifoFull (&SerialDevice->Receive);
if (!ReceiveFifoFull) { if (!ReceiveFifoFull) {
if (Lsr.Bits.FIFOE || Lsr.Bits.OE || Lsr.Bits.PE || Lsr.Bits.FE || Lsr.Bits.BI) { if (Lsr.Bits.FIFOe == 1 || Lsr.Bits.Oe == 1 || Lsr.Bits.Pe == 1 || Lsr.Bits.Fe == 1 || Lsr.Bits.Bi == 1) {
REPORT_STATUS_CODE_WITH_DEVICE_PATH ( REPORT_STATUS_CODE_WITH_DEVICE_PATH (
EFI_ERROR_CODE, EFI_ERROR_CODE,
EFI_P_EC_INPUT_ERROR | EFI_PERIPHERAL_SERIAL_PORT, EFI_P_EC_INPUT_ERROR | EFI_PERIPHERAL_SERIAL_PORT,
SerialDevice->DevicePath SerialDevice->DevicePath
); );
if (Lsr.Bits.FIFOE || Lsr.Bits.PE || Lsr.Bits.FE || Lsr.Bits.BI) { if (Lsr.Bits.FIFOe == 1 || Lsr.Bits.Pe == 1|| Lsr.Bits.Fe == 1 || Lsr.Bits.Bi == 1) {
Data = READ_RBR (SerialDevice->IsaIo, SerialDevice->BaseAddress); Data = READ_RBR (SerialDevice->IsaIo, SerialDevice->BaseAddress);
continue; continue;
} }
@ -827,7 +826,7 @@ IsaSerialReceiveTransmit (
// //
if (SerialDevice->HardwareFlowControl) { if (SerialDevice->HardwareFlowControl) {
Mcr.Data = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress); Mcr.Data = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);
Mcr.Bits.DTRC &= 0; Mcr.Bits.DtrC &= 0;
WRITE_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Mcr.Data); WRITE_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Mcr.Data);
} }
@ -838,7 +837,7 @@ IsaSerialReceiveTransmit (
// //
if (SerialDevice->HardwareFlowControl) { if (SerialDevice->HardwareFlowControl) {
Mcr.Data = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress); Mcr.Data = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);
Mcr.Bits.DTRC |= 1; Mcr.Bits.DtrC |= 1;
WRITE_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Mcr.Data); WRITE_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Mcr.Data);
} }
@ -856,7 +855,7 @@ IsaSerialReceiveTransmit (
// //
// Do the write // Do the write
// //
if (Lsr.Bits.THRE && !IsaSerialFifoEmpty (&SerialDevice->Transmit)) { if (Lsr.Bits.Thre == 1 && !IsaSerialFifoEmpty (&SerialDevice->Transmit)) {
// //
// Make sure the transmit data will not be missed // Make sure the transmit data will not be missed
// //
@ -865,14 +864,14 @@ IsaSerialReceiveTransmit (
// Send RTS // Send RTS
// //
Mcr.Data = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress); Mcr.Data = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);
Mcr.Bits.RTS |= 1; Mcr.Bits.Rts |= 1;
WRITE_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Mcr.Data); WRITE_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Mcr.Data);
// //
// Wait for CTS // Wait for CTS
// //
TimeOut = 0; TimeOut = 0;
Msr.Data = READ_MSR (SerialDevice->IsaIo, SerialDevice->BaseAddress); Msr.Data = READ_MSR (SerialDevice->IsaIo, SerialDevice->BaseAddress);
while (!Msr.Bits.CTS) { while (Msr.Bits.Cts == 0) {
gBS->Stall (TIMEOUT_STALL_INTERVAL); gBS->Stall (TIMEOUT_STALL_INTERVAL);
TimeOut++; TimeOut++;
if (TimeOut > 5) { if (TimeOut > 5) {
@ -882,7 +881,7 @@ IsaSerialReceiveTransmit (
Msr.Data = READ_MSR (SerialDevice->IsaIo, SerialDevice->BaseAddress); Msr.Data = READ_MSR (SerialDevice->IsaIo, SerialDevice->BaseAddress);
} }
if (Msr.Bits.CTS) { if (Msr.Bits.Cts == 1) {
IsaSerialFifoRemove (&SerialDevice->Transmit, &Data); IsaSerialFifoRemove (&SerialDevice->Transmit, &Data);
WRITE_THR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Data); WRITE_THR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Data);
} }
@ -902,11 +901,11 @@ IsaSerialReceiveTransmit (
// Assert RTS // Assert RTS
// //
Mcr.Data = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress); Mcr.Data = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);
Mcr.Bits.RTS &= 0; Mcr.Bits.Rts &= 0;
WRITE_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Mcr.Data); WRITE_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Mcr.Data);
} }
} }
} while (Lsr.Bits.THRE && !IsaSerialFifoEmpty (&SerialDevice->Transmit)); } while (Lsr.Bits.Thre == 1 && !IsaSerialFifoEmpty (&SerialDevice->Transmit));
} }
return EFI_SUCCESS; return EFI_SUCCESS;
@ -916,12 +915,12 @@ IsaSerialReceiveTransmit (
// Interface Functions // Interface Functions
// //
/** /**
Reset serial device Reset serial device.
@param This - Pointer to EFI_SERIAL_IO_PROTOCOL @param This Pointer to EFI_SERIAL_IO_PROTOCOL
@retval EFI_SUCCESS - Reset successfully @retval EFI_SUCCESS Reset successfully
@retval EFI_DEVICE_ERROR - Failed to reset @retval EFI_DEVICE_ERROR Failed to reset
**/ **/
EFI_STATUS EFI_STATUS
@ -955,32 +954,32 @@ IsaSerialReset (
// Make sure DLAB is 0. // Make sure DLAB is 0.
// //
Lcr.Data = READ_LCR (SerialDevice->IsaIo, SerialDevice->BaseAddress); Lcr.Data = READ_LCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);
Lcr.Bits.DLAB = 0; Lcr.Bits.DLab = 0;
WRITE_LCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Lcr.Data); WRITE_LCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Lcr.Data);
// //
// Turn off all interrupts // Turn off all interrupts
// //
Ier.Data = READ_IER (SerialDevice->IsaIo, SerialDevice->BaseAddress); Ier.Data = READ_IER (SerialDevice->IsaIo, SerialDevice->BaseAddress);
Ier.Bits.RAVIE = 0; Ier.Bits.Ravie = 0;
Ier.Bits.THEIE = 0; Ier.Bits.Theie = 0;
Ier.Bits.RIE = 0; Ier.Bits.Rie = 0;
Ier.Bits.MIE = 0; Ier.Bits.Mie = 0;
WRITE_IER (SerialDevice->IsaIo, SerialDevice->BaseAddress, Ier.Data); WRITE_IER (SerialDevice->IsaIo, SerialDevice->BaseAddress, Ier.Data);
// //
// Disable the FIFO. // Disable the FIFO.
// //
Fcr.Bits.TRFIFOE = 0; Fcr.Bits.TrFIFOE = 0;
WRITE_FCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Fcr.Data); WRITE_FCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Fcr.Data);
// //
// Turn off loopback and disable device interrupt. // Turn off loopback and disable device interrupt.
// //
Mcr.Data = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress); Mcr.Data = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);
Mcr.Bits.OUT1 = 0; Mcr.Bits.Out1 = 0;
Mcr.Bits.OUT2 = 0; Mcr.Bits.Out2 = 0;
Mcr.Bits.LME = 0; Mcr.Bits.Lme = 0;
WRITE_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Mcr.Data); WRITE_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Mcr.Data);
// //
@ -1020,9 +1019,9 @@ IsaSerialReset (
// //
// for 16550A enable FIFO, 16550 disable FIFO // for 16550A enable FIFO, 16550 disable FIFO
// //
Fcr.Bits.TRFIFOE = 1; Fcr.Bits.TrFIFOE = 1;
Fcr.Bits.RESETRF = 1; Fcr.Bits.ResetRF = 1;
Fcr.Bits.RESETTF = 1; Fcr.Bits.ResetTF = 1;
WRITE_FCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Fcr.Data); WRITE_FCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Fcr.Data);
// //
@ -1044,20 +1043,20 @@ IsaSerialReset (
} }
/** /**
Set new attributes to a serial device Set new attributes to a serial device.
@param This - Pointer to EFI_SERIAL_IO_PROTOCOL @param This Pointer to EFI_SERIAL_IO_PROTOCOL
@param BaudRate - The baudrate of the serial device @param BaudRate The baudrate of the serial device
@param ReceiveFifoDepth - The depth of receive FIFO buffer @param ReceiveFifoDepth The depth of receive FIFO buffer
@param Timeout - The request timeout for a single char @param Timeout The request timeout for a single char
@param Parity - The type of parity used in serial device @param Parity The type of parity used in serial device
@param DataBits - Number of databits used in serial device @param DataBits Number of databits used in serial device
@param StopBits - Number of stopbits used in serial device @param StopBits Number of stopbits used in serial device
@retval EFI_SUCCESS - The new attributes were set @retval EFI_SUCCESS The new attributes were set
@retval EFI_INVALID_PARAMETERS - One or more attributes have an unsupported value @retval EFI_INVALID_PARAMETERS One or more attributes have an unsupported value
@retval EFI_UNSUPPORTED - Data Bits can not set to 5 or 6 @retval EFI_UNSUPPORTED Data Bits can not set to 5 or 6
@retval EFI_DEVICE_ERROR - The serial device is not functioning correctly (no return) @retval EFI_DEVICE_ERROR The serial device is not functioning correctly (no return)
**/ **/
EFI_STATUS EFI_STATUS
@ -1205,11 +1204,11 @@ IsaSerialSetAttributes (
((UINT32) BaudRate * 16), ((UINT32) BaudRate * 16),
&Remained &Remained
); );
if (Remained) { if (Remained != 0) {
Divisor += 1; Divisor += 1;
} }
if ((Divisor == 0) || (Divisor & 0xffff0000)) { if ((Divisor == 0) || ((Divisor & 0xffff0000) != 0)) {
return EFI_INVALID_PARAMETER; return EFI_INVALID_PARAMETER;
} }
@ -1224,7 +1223,7 @@ IsaSerialSetAttributes (
// Put serial port on Divisor Latch Mode // Put serial port on Divisor Latch Mode
// //
Lcr.Data = READ_LCR (SerialDevice->IsaIo, SerialDevice->BaseAddress); Lcr.Data = READ_LCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);
Lcr.Bits.DLAB = 1; Lcr.Bits.DLab = 1;
WRITE_LCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Lcr.Data); WRITE_LCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Lcr.Data);
// //
@ -1236,37 +1235,37 @@ IsaSerialSetAttributes (
// //
// Put serial port back in normal mode and set remaining attributes. // Put serial port back in normal mode and set remaining attributes.
// //
Lcr.Bits.DLAB = 0; Lcr.Bits.DLab = 0;
switch (Parity) { switch (Parity) {
case NoParity: case NoParity:
Lcr.Bits.PAREN = 0; Lcr.Bits.ParEn = 0;
Lcr.Bits.EVENPAR = 0; Lcr.Bits.EvenPar = 0;
Lcr.Bits.STICPAR = 0; Lcr.Bits.SticPar = 0;
break; break;
case EvenParity: case EvenParity:
Lcr.Bits.PAREN = 1; Lcr.Bits.ParEn = 1;
Lcr.Bits.EVENPAR = 1; Lcr.Bits.EvenPar = 1;
Lcr.Bits.STICPAR = 0; Lcr.Bits.SticPar = 0;
break; break;
case OddParity: case OddParity:
Lcr.Bits.PAREN = 1; Lcr.Bits.ParEn = 1;
Lcr.Bits.EVENPAR = 0; Lcr.Bits.EvenPar = 0;
Lcr.Bits.STICPAR = 0; Lcr.Bits.SticPar = 0;
break; break;
case SpaceParity: case SpaceParity:
Lcr.Bits.PAREN = 1; Lcr.Bits.ParEn = 1;
Lcr.Bits.EVENPAR = 1; Lcr.Bits.EvenPar = 1;
Lcr.Bits.STICPAR = 1; Lcr.Bits.SticPar = 1;
break; break;
case MarkParity: case MarkParity:
Lcr.Bits.PAREN = 1; Lcr.Bits.ParEn = 1;
Lcr.Bits.EVENPAR = 0; Lcr.Bits.EvenPar = 0;
Lcr.Bits.STICPAR = 1; Lcr.Bits.SticPar = 1;
break; break;
default: default:
@ -1275,12 +1274,12 @@ IsaSerialSetAttributes (
switch (StopBits) { switch (StopBits) {
case OneStopBit: case OneStopBit:
Lcr.Bits.STOPB = 0; Lcr.Bits.StopB = 0;
break; break;
case OneFiveStopBits: case OneFiveStopBits:
case TwoStopBits: case TwoStopBits:
Lcr.Bits.STOPB = 1; Lcr.Bits.StopB = 1;
break; break;
default: default:
@ -1289,7 +1288,7 @@ IsaSerialSetAttributes (
// //
// DataBits // DataBits
// //
Lcr.Bits.SERIALDB = (UINT8) ((DataBits - 5) & 0x03); Lcr.Bits.SerialDB = (UINT8) ((DataBits - 5) & 0x03);
WRITE_LCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Lcr.Data); WRITE_LCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Lcr.Data);
// //
@ -1343,7 +1342,7 @@ IsaSerialSetAttributes (
} }
} }
if (SerialDevice->DevicePath) { if (SerialDevice->DevicePath != NULL) {
gBS->FreePool (SerialDevice->DevicePath); gBS->FreePool (SerialDevice->DevicePath);
} }
@ -1355,13 +1354,13 @@ IsaSerialSetAttributes (
} }
/** /**
Set Control Bits Set Control Bits.
@param This - Pointer to EFI_SERIAL_IO_PROTOCOL @param This Pointer to EFI_SERIAL_IO_PROTOCOL
@param Control - Control bits that can be settable @param Control Control bits that can be settable
@retval EFI_SUCCESS - New Control bits were set successfully @retval EFI_SUCCESS New Control bits were set successfully
@retval EFI_UNSUPPORTED - The Control bits wanted to set are not supported @retval EFI_UNSUPPORTED The Control bits wanted to set are not supported
**/ **/
EFI_STATUS EFI_STATUS
@ -1387,38 +1386,38 @@ IsaSerialSetControl (
// //
// first determine the parameter is invalid // first determine the parameter is invalid
// //
if (Control & 0xffff8ffc) { if ((Control & 0xffff8ffc) != 0) {
return EFI_UNSUPPORTED; return EFI_UNSUPPORTED;
} }
Tpl = gBS->RaiseTPL (TPL_NOTIFY); Tpl = gBS->RaiseTPL (TPL_NOTIFY);
Mcr.Data = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress); Mcr.Data = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);
Mcr.Bits.DTRC = 0; Mcr.Bits.DtrC = 0;
Mcr.Bits.RTS = 0; Mcr.Bits.Rts = 0;
Mcr.Bits.LME = 0; Mcr.Bits.Lme = 0;
SerialDevice->SoftwareLoopbackEnable = FALSE; SerialDevice->SoftwareLoopbackEnable = FALSE;
SerialDevice->HardwareFlowControl = FALSE; SerialDevice->HardwareFlowControl = FALSE;
if (Control & EFI_SERIAL_DATA_TERMINAL_READY) { if ((Control & EFI_SERIAL_DATA_TERMINAL_READY) == EFI_SERIAL_DATA_TERMINAL_READY) {
Mcr.Bits.DTRC = 1; Mcr.Bits.DtrC = 1;
} }
if (Control & EFI_SERIAL_REQUEST_TO_SEND) { if ((Control & EFI_SERIAL_REQUEST_TO_SEND) == EFI_SERIAL_REQUEST_TO_SEND) {
Mcr.Bits.RTS = 1; Mcr.Bits.Rts = 1;
} }
if (Control & EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE) { if ((Control & EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE) == EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE) {
Mcr.Bits.LME = 1; Mcr.Bits.Lme = 1;
} }
if (Control & EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE) { if ((Control & EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE) == EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE) {
SerialDevice->HardwareFlowControl = TRUE; SerialDevice->HardwareFlowControl = TRUE;
} }
WRITE_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Mcr.Data); WRITE_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Mcr.Data);
if (Control & EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE) { if ((Control & EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE) == EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE) {
SerialDevice->SoftwareLoopbackEnable = TRUE; SerialDevice->SoftwareLoopbackEnable = TRUE;
} }
@ -1428,12 +1427,12 @@ IsaSerialSetControl (
} }
/** /**
Get ControlBits Get ControlBits.
@param This - Pointer to EFI_SERIAL_IO_PROTOCOL @param This Pointer to EFI_SERIAL_IO_PROTOCOL
@param Control - Control signals of the serial device @param Control Control signals of the serial device
@retval EFI_SUCCESS - Get Control signals successfully @retval EFI_SUCCESS Get Control signals successfully
**/ **/
EFI_STATUS EFI_STATUS
@ -1459,19 +1458,19 @@ IsaSerialGetControl (
// //
Msr.Data = READ_MSR (SerialDevice->IsaIo, SerialDevice->BaseAddress); Msr.Data = READ_MSR (SerialDevice->IsaIo, SerialDevice->BaseAddress);
if (Msr.Bits.CTS) { if (Msr.Bits.Cts == 1) {
*Control |= EFI_SERIAL_CLEAR_TO_SEND; *Control |= EFI_SERIAL_CLEAR_TO_SEND;
} }
if (Msr.Bits.DSR) { if (Msr.Bits.Dsr == 1) {
*Control |= EFI_SERIAL_DATA_SET_READY; *Control |= EFI_SERIAL_DATA_SET_READY;
} }
if (Msr.Bits.RI) { if (Msr.Bits.Ri == 1) {
*Control |= EFI_SERIAL_RING_INDICATE; *Control |= EFI_SERIAL_RING_INDICATE;
} }
if (Msr.Bits.DCD) { if (Msr.Bits.Dcd == 1) {
*Control |= EFI_SERIAL_CARRIER_DETECT; *Control |= EFI_SERIAL_CARRIER_DETECT;
} }
// //
@ -1479,15 +1478,15 @@ IsaSerialGetControl (
// //
Mcr.Data = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress); Mcr.Data = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);
if (Mcr.Bits.DTRC) { if (Mcr.Bits.DtrC == 1) {
*Control |= EFI_SERIAL_DATA_TERMINAL_READY; *Control |= EFI_SERIAL_DATA_TERMINAL_READY;
} }
if (Mcr.Bits.RTS) { if (Mcr.Bits.Rts == 1) {
*Control |= EFI_SERIAL_REQUEST_TO_SEND; *Control |= EFI_SERIAL_REQUEST_TO_SEND;
} }
if (Mcr.Bits.LME) { if (Mcr.Bits.Lme == 1) {
*Control |= EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE; *Control |= EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE;
} }
@ -1521,16 +1520,16 @@ IsaSerialGetControl (
} }
/** /**
Write the specified number of bytes to serial device Write the specified number of bytes to serial device.
@param This - Pointer to EFI_SERIAL_IO_PROTOCOL @param This Pointer to EFI_SERIAL_IO_PROTOCOL
@param BufferSize - On input the size of Buffer, on output the amount of @param BufferSize On input the size of Buffer, on output the amount of
data actually written data actually written
@param Buffer - The buffer of data to write @param Buffer The buffer of data to write
@retval EFI_SUCCESS - The data were written successfully @retval EFI_SUCCESS The data were written successfully
@retval EFI_DEVICE_ERROR - The device reported an error @retval EFI_DEVICE_ERROR The device reported an error
@retval EFI_TIMEOUT - The write operation was stopped due to timeout @retval EFI_TIMEOUT The write operation was stopped due to timeout
**/ **/
EFI_STATUS EFI_STATUS
@ -1556,7 +1555,7 @@ IsaSerialWrite (
return EFI_SUCCESS; return EFI_SUCCESS;
} }
if (!Buffer) { if (Buffer == NULL) {
REPORT_STATUS_CODE_WITH_DEVICE_PATH ( REPORT_STATUS_CODE_WITH_DEVICE_PATH (
EFI_ERROR_CODE, EFI_ERROR_CODE,
EFI_P_EC_OUTPUT_ERROR | EFI_PERIPHERAL_SERIAL_PORT, EFI_P_EC_OUTPUT_ERROR | EFI_PERIPHERAL_SERIAL_PORT,
@ -1602,16 +1601,16 @@ IsaSerialWrite (
} }
/** /**
Read the specified number of bytes from serial device Read the specified number of bytes from serial device.
@param This - Pointer to EFI_SERIAL_IO_PROTOCOL @param This Pointer to EFI_SERIAL_IO_PROTOCOL
@param BufferSize - On input the size of Buffer, on output the amount of @param BufferSize On input the size of Buffer, on output the amount of
data returned in buffer data returned in buffer
@param Buffer - The buffer to return the data into @param Buffer The buffer to return the data into
@retval EFI_SUCCESS - The data were read successfully @retval EFI_SUCCESS The data were read successfully
@retval EFI_DEVICE_ERROR - The device reported an error @retval EFI_DEVICE_ERROR The device reported an error
@retval EFI_TIMEOUT - The read operation was stopped due to timeout @retval EFI_TIMEOUT The read operation was stopped due to timeout
**/ **/
EFI_STATUS EFI_STATUS
@ -1636,7 +1635,7 @@ IsaSerialRead (
return EFI_SUCCESS; return EFI_SUCCESS;
} }
if (!Buffer) { if (Buffer == NULL) {
return EFI_DEVICE_ERROR; return EFI_DEVICE_ERROR;
} }
@ -1696,9 +1695,9 @@ IsaSerialRead (
} }
/** /**
Use scratchpad register to test if this serial port is present Use scratchpad register to test if this serial port is present.
@param SerialDevice - Pointer to serial device structure @param SerialDevice Pointer to serial device structure
@return if this serial port is present @return if this serial port is present
**/ **/
@ -1736,11 +1735,11 @@ IsaSerialPortPresent (
} }
/** /**
Use IsaIo protocol to read serial port Use IsaIo protocol to read serial port.
@param IsaIo - Pointer to EFI_ISA_IO_PROTOCOL instance @param IsaIo Pointer to EFI_ISA_IO_PROTOCOL instance
@param BaseAddress - Serial port register group base address @param BaseAddress Serial port register group base address
@param Offset - Offset in register group @param Offset Offset in register group
@return Data read from serial port @return Data read from serial port
@ -1768,12 +1767,12 @@ IsaSerialReadPort (
} }
/** /**
Use IsaIo protocol to write serial port Use IsaIo protocol to write serial port.
@param IsaIo - Pointer to EFI_ISA_IO_PROTOCOL instance @param IsaIo Pointer to EFI_ISA_IO_PROTOCOL instance
@param BaseAddress - Serial port register group base address @param BaseAddress Serial port register group base address
@param Offset - Offset in register group @param Offset Offset in register group
@param Data - data which is to be written to some serial port register @param Data data which is to be written to some serial port register
**/ **/
VOID VOID

View File

@ -1,7 +1,7 @@
/** @file /** @file
Include for Serial Driver Include for Serial Driver
Copyright (c) 2006 - 2007, Intel Corporation.<BR> Copyright (c) 2006 - 2009, Intel Corporation.<BR>
All rights reserved. This program and the accompanying materials All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at which accompanies this distribution. The full text of the license may be found at
@ -12,8 +12,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/ **/
#ifndef _SERIAL_H #ifndef _SERIAL_H_
#define _SERIAL_H #define _SERIAL_H_
#include <PiDxe.h> #include <PiDxe.h>
@ -33,6 +33,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#include <Library/UefiBootServicesTableLib.h> #include <Library/UefiBootServicesTableLib.h>
#include <Library/ReportStatusCodeLib.h> #include <Library/ReportStatusCodeLib.h>
#include <Library/PcdLib.h> #include <Library/PcdLib.h>
// //
// Driver Binding Externs // Driver Binding Externs
// //
@ -65,10 +66,10 @@ typedef struct {
} SERIAL_DEV_FIFO; } SERIAL_DEV_FIFO;
typedef enum { typedef enum {
UART8250 = 0, Uart8250 = 0,
UART16450 = 1, Uart16450 = 1,
UART16550 = 2, Uart16550 = 2,
UART16550A= 3 Uart16550A= 3
} EFI_UART_TYPE; } EFI_UART_TYPE;
// //
@ -110,23 +111,13 @@ typedef struct {
EFI_UNICODE_STRING_TABLE *ControllerNameTable; EFI_UNICODE_STRING_TABLE *ControllerNameTable;
} SERIAL_DEV; } SERIAL_DEV;
#include "ComponentName.h"
#define SERIAL_DEV_FROM_THIS(a) CR (a, SERIAL_DEV, SerialIo, SERIAL_DEV_SIGNATURE) #define SERIAL_DEV_FROM_THIS(a) CR (a, SERIAL_DEV, SerialIo, SERIAL_DEV_SIGNATURE)
// //
// Serial Driver Defaults // Serial Driver Defaults
// //
#define SERIAL_PORT_DEFAULT_RECEIVE_FIFO_DEPTH 1 #define SERIAL_PORT_DEFAULT_RECEIVE_FIFO_DEPTH 1
#define SERIAL_PORT_DEFAULT_TIMEOUT 1000000 #define SERIAL_PORT_DEFAULT_TIMEOUT 1000000
/*
#define SERIAL_PORT_DEFAULT_BAUD_RATE 115200
#define SERIAL_PORT_DEFAULT_PARITY NoParity
#define SERIAL_PORT_DEFAULT_DATA_BITS 8
#define SERIAL_PORT_DEFAULT_STOP_BITS 1
*/
#define SERIAL_PORT_DEFAULT_CONTROL_MASK 0 #define SERIAL_PORT_DEFAULT_CONTROL_MASK 0
@ -165,17 +156,17 @@ typedef struct {
// Purpose: Define each bit in Interrupt Enable Register // Purpose: Define each bit in Interrupt Enable Register
// Context: // Context:
// Fields: // Fields:
// RAVIE Bit0: Receiver Data Available Interrupt Enable // Ravie Bit0: Receiver Data Available Interrupt Enable
// THEIE Bit1: Transmistter Holding Register Empty Interrupt Enable // Theie Bit1: Transmistter Holding Register Empty Interrupt Enable
// RIE Bit2: Receiver Interrupt Enable // Rie Bit2: Receiver Interrupt Enable
// MIE Bit3: Modem Interrupt Enable // Mie Bit3: Modem Interrupt Enable
// Reserved Bit4-Bit7: Reserved // Reserved Bit4-Bit7: Reserved
// //
typedef struct { typedef struct {
UINT8 RAVIE : 1; UINT8 Ravie : 1;
UINT8 THEIE : 1; UINT8 Theie : 1;
UINT8 RIE : 1; UINT8 Rie : 1;
UINT8 MIE : 1; UINT8 Mie : 1;
UINT8 Reserved : 4; UINT8 Reserved : 4;
} SERIAL_PORT_IER_BITS; } SERIAL_PORT_IER_BITS;
@ -192,55 +183,25 @@ typedef union {
UINT8 Data; UINT8 Data;
} SERIAL_PORT_IER; } SERIAL_PORT_IER;
//
// Name: SERIAL_PORT_IIR_BITS
// Purpose: Define each bit in Interrupt Identification Register
// Context:
// Fields:
// IPS Bit0: Interrupt Pending Status
// IIB Bit1-Bit3: Interrupt ID Bits
// Reserved Bit4-Bit5: Reserved
// FIFOES Bit6-Bit7: FIFO Mode Enable Status
//
typedef struct {
UINT8 IPS : 1;
UINT8 IIB : 3;
UINT8 Reserved : 2;
UINT8 FIFOES : 2;
} SERIAL_PORT_IIR_BITS;
//
// Name: SERIAL_PORT_IIR
// Purpose:
// Context:
// Fields:
// Bits SERIAL_PORT_IIR_BITS: Bits of the IIR
// Data UINT8: the value of the IIR
//
typedef union {
SERIAL_PORT_IIR_BITS Bits;
UINT8 Data;
} SERIAL_PORT_IIR;
// //
// Name: SERIAL_PORT_FCR_BITS // Name: SERIAL_PORT_FCR_BITS
// Purpose: Define each bit in FIFO Control Register // Purpose: Define each bit in FIFO Control Register
// Context: // Context:
// Fields: // Fields:
// TRFIFOE Bit0: Transmit and Receive FIFO Enable // TrFIFOE Bit0: Transmit and Receive FIFO Enable
// RESETRF Bit1: Reset Reciever FIFO // ResetRF Bit1: Reset Reciever FIFO
// RESETTF Bit2: Reset Transmistter FIFO // ResetTF Bit2: Reset Transmistter FIFO
// DMS Bit3: DMA Mode Select // Dms Bit3: DMA Mode Select
// Reserved Bit4-Bit5: Reserved // Reserved Bit4-Bit5: Reserved
// RTB Bit6-Bit7: Receive Trigger Bits // Rtb Bit6-Bit7: Receive Trigger Bits
// //
typedef struct { typedef struct {
UINT8 TRFIFOE : 1; UINT8 TrFIFOE : 1;
UINT8 RESETRF : 1; UINT8 ResetRF : 1;
UINT8 RESETTF : 1; UINT8 ResetTF : 1;
UINT8 DMS : 1; UINT8 Dms : 1;
UINT8 Reserved : 2; UINT8 Reserved : 2;
UINT8 RTB : 2; UINT8 Rtb : 2;
} SERIAL_PORT_FCR_BITS; } SERIAL_PORT_FCR_BITS;
// //
@ -261,22 +222,22 @@ typedef union {
// Purpose: Define each bit in Line Control Register // Purpose: Define each bit in Line Control Register
// Context: // Context:
// Fields: // Fields:
// SERIALDB Bit0-Bit1: Number of Serial Data Bits // SerialDB Bit0-Bit1: Number of Serial Data Bits
// STOPB Bit2: Number of Stop Bits // StopB Bit2: Number of Stop Bits
// PAREN Bit3: Parity Enable // ParEn Bit3: Parity Enable
// EVENPAR Bit4: Even Parity Select // EvenPar Bit4: Even Parity Select
// STICPAR Bit5: Sticky Parity // SticPar Bit5: Sticky Parity
// BRCON Bit6: Break Control // BrCon Bit6: Break Control
// DLAB Bit7: Divisor Latch Access Bit // DLab Bit7: Divisor Latch Access Bit
// //
typedef struct { typedef struct {
UINT8 SERIALDB : 2; UINT8 SerialDB : 2;
UINT8 STOPB : 1; UINT8 StopB : 1;
UINT8 PAREN : 1; UINT8 ParEn : 1;
UINT8 EVENPAR : 1; UINT8 EvenPar : 1;
UINT8 STICPAR : 1; UINT8 SticPar : 1;
UINT8 BRCON : 1; UINT8 BrCon : 1;
UINT8 DLAB : 1; UINT8 DLab : 1;
} SERIAL_PORT_LCR_BITS; } SERIAL_PORT_LCR_BITS;
// //
@ -297,19 +258,19 @@ typedef union {
// Purpose: Define each bit in Modem Control Register // Purpose: Define each bit in Modem Control Register
// Context: // Context:
// Fields: // Fields:
// DTRC Bit0: Data Terminal Ready Control // DtrC Bit0: Data Terminal Ready Control
// RTS Bit1: Request To Send Control // Rts Bit1: Request To Send Control
// OUT1 Bit2: Output1 // Out1 Bit2: Output1
// OUT2 Bit3: Output2, used to disable interrupt // Out2 Bit3: Output2, used to disable interrupt
// LME; Bit4: Loopback Mode Enable // Lme; Bit4: Loopback Mode Enable
// Reserved Bit5-Bit7: Reserved // Reserved Bit5-Bit7: Reserved
// //
typedef struct { typedef struct {
UINT8 DTRC : 1; UINT8 DtrC : 1;
UINT8 RTS : 1; UINT8 Rts : 1;
UINT8 OUT1 : 1; UINT8 Out1 : 1;
UINT8 OUT2 : 1; UINT8 Out2 : 1;
UINT8 LME : 1; UINT8 Lme : 1;
UINT8 Reserved : 3; UINT8 Reserved : 3;
} SERIAL_PORT_MCR_BITS; } SERIAL_PORT_MCR_BITS;
@ -331,24 +292,24 @@ typedef union {
// Purpose: Define each bit in Line Status Register // Purpose: Define each bit in Line Status Register
// Context: // Context:
// Fields: // Fields:
// DR Bit0: Receiver Data Ready Status // Dr Bit0: Receiver Data Ready Status
// OE Bit1: Overrun Error Status // Oe Bit1: Overrun Error Status
// PE Bit2: Parity Error Status // Pe Bit2: Parity Error Status
// FE Bit3: Framing Error Status // Fe Bit3: Framing Error Status
// BI Bit4: Break Interrupt Status // Bi Bit4: Break Interrupt Status
// THRE Bit5: Transmistter Holding Register Status // Thre Bit5: Transmistter Holding Register Status
// TEMT Bit6: Transmitter Empty Status // Temt Bit6: Transmitter Empty Status
// FIFOE Bit7: FIFO Error Status // FIFOe Bit7: FIFO Error Status
// //
typedef struct { typedef struct {
UINT8 DR : 1; UINT8 Dr : 1;
UINT8 OE : 1; UINT8 Oe : 1;
UINT8 PE : 1; UINT8 Pe : 1;
UINT8 FE : 1; UINT8 Fe : 1;
UINT8 BI : 1; UINT8 Bi : 1;
UINT8 THRE : 1; UINT8 Thre : 1;
UINT8 TEMT : 1; UINT8 Temt : 1;
UINT8 FIFOE : 1; UINT8 FIFOe : 1;
} SERIAL_PORT_LSR_BITS; } SERIAL_PORT_LSR_BITS;
// //
@ -373,20 +334,20 @@ typedef union {
// DeltaDSR Bit1: Delta Data Set Ready Status // DeltaDSR Bit1: Delta Data Set Ready Status
// TrailingEdgeRI Bit2: Trailing Edge of Ring Indicator Status // TrailingEdgeRI Bit2: Trailing Edge of Ring Indicator Status
// DeltaDCD Bit3: Delta Data Carrier Detect Status // DeltaDCD Bit3: Delta Data Carrier Detect Status
// CTS Bit4: Clear To Send Status // Cts Bit4: Clear To Send Status
// DSR Bit5: Data Set Ready Status // Dsr Bit5: Data Set Ready Status
// RI Bit6: Ring Indicator Status // Ri Bit6: Ring Indicator Status
// DCD Bit7: Data Carrier Detect Status // Dcd Bit7: Data Carrier Detect Status
// //
typedef struct { typedef struct {
UINT8 DeltaCTS : 1; UINT8 DeltaCTS : 1;
UINT8 DeltaDSR : 1; UINT8 DeltaDSR : 1;
UINT8 TrailingEdgeRI : 1; UINT8 TrailingEdgeRI : 1;
UINT8 DeltaDCD : 1; UINT8 DeltaDCD : 1;
UINT8 CTS : 1; UINT8 Cts : 1;
UINT8 DSR : 1; UINT8 Dsr : 1;
UINT8 RI : 1; UINT8 Ri : 1;
UINT8 DCD : 1; UINT8 Dcd : 1;
} SERIAL_PORT_MSR_BITS; } SERIAL_PORT_MSR_BITS;
// //
@ -432,7 +393,16 @@ typedef union {
// Prototypes // Prototypes
// Driver model protocol interface // Driver model protocol interface
// //
/**
Check to see if this driver supports the given controller
@param This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
@param Controller The handle of the controller to test.
@param RemainingDevicePath A pointer to the remaining portion of a device path.
@return EFI_SUCCESS This driver can support the given controller
**/
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
SerialControllerDriverSupported ( SerialControllerDriverSupported (
@ -441,6 +411,15 @@ SerialControllerDriverSupported (
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
); );
/**
Start to management the controller passed in
@param This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
@param Controller The handle of the controller to test.
@param RemainingDevicePath A pointer to the remaining portion of a device path.
@return EFI_SUCCESS Driver is started successfully
**/
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
SerialControllerDriverStart ( SerialControllerDriverStart (
@ -449,6 +428,18 @@ SerialControllerDriverStart (
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
); );
/**
Disconnect this driver with the controller, uninstall related protocol instance
@param This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
@param Controller The handle of the controller to test.
@param NumberOfChildren Number of child device.
@param ChildHandleBuffer A pointer to the remaining portion of a device path.
@retval EFI_SUCCESS Operation successfully
@retval EFI_DEVICE_ERROR Cannot stop the driver successfully
**/
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
SerialControllerDriverStop ( SerialControllerDriverStop (
@ -461,12 +452,38 @@ SerialControllerDriverStop (
// //
// Serial I/O Protocol Interface // Serial I/O Protocol Interface
// //
/**
Reset serial device.
@param This Pointer to EFI_SERIAL_IO_PROTOCOL
@retval EFI_SUCCESS Reset successfully
@retval EFI_DEVICE_ERROR Failed to reset
**/
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
IsaSerialReset ( IsaSerialReset (
IN EFI_SERIAL_IO_PROTOCOL *This IN EFI_SERIAL_IO_PROTOCOL *This
); );
/**
Set new attributes to a serial device.
@param This Pointer to EFI_SERIAL_IO_PROTOCOL
@param BaudRate The baudrate of the serial device
@param ReceiveFifoDepth The depth of receive FIFO buffer
@param Timeout The request timeout for a single char
@param Parity The type of parity used in serial device
@param DataBits Number of databits used in serial device
@param StopBits Number of stopbits used in serial device
@retval EFI_SUCCESS The new attributes were set
@retval EFI_INVALID_PARAMETERS One or more attributes have an unsupported value
@retval EFI_UNSUPPORTED Data Bits can not set to 5 or 6
@retval EFI_DEVICE_ERROR The serial device is not functioning correctly (no return)
**/
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
IsaSerialSetAttributes ( IsaSerialSetAttributes (
@ -479,6 +496,16 @@ IsaSerialSetAttributes (
IN EFI_STOP_BITS_TYPE StopBits IN EFI_STOP_BITS_TYPE StopBits
); );
/**
Set Control Bits.
@param This Pointer to EFI_SERIAL_IO_PROTOCOL
@param Control Control bits that can be settable
@retval EFI_SUCCESS New Control bits were set successfully
@retval EFI_UNSUPPORTED The Control bits wanted to set are not supported
**/
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
IsaSerialSetControl ( IsaSerialSetControl (
@ -486,6 +513,15 @@ IsaSerialSetControl (
IN UINT32 Control IN UINT32 Control
); );
/**
Get ControlBits.
@param This Pointer to EFI_SERIAL_IO_PROTOCOL
@param Control Control signals of the serial device
@retval EFI_SUCCESS Get Control signals successfully
**/
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
IsaSerialGetControl ( IsaSerialGetControl (
@ -493,6 +529,19 @@ IsaSerialGetControl (
OUT UINT32 *Control OUT UINT32 *Control
); );
/**
Write the specified number of bytes to serial device.
@param This Pointer to EFI_SERIAL_IO_PROTOCOL
@param BufferSize On input the size of Buffer, on output the amount of
data actually written
@param Buffer The buffer of data to write
@retval EFI_SUCCESS The data were written successfully
@retval EFI_DEVICE_ERROR The device reported an error
@retval EFI_TIMEOUT The write operation was stopped due to timeout
**/
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
IsaSerialWrite ( IsaSerialWrite (
@ -501,6 +550,19 @@ IsaSerialWrite (
IN VOID *Buffer IN VOID *Buffer
); );
/**
Read the specified number of bytes from serial device.
@param This Pointer to EFI_SERIAL_IO_PROTOCOL
@param BufferSize On input the size of Buffer, on output the amount of
data returned in buffer
@param Buffer The buffer to return the data into
@retval EFI_SUCCESS The data were read successfully
@retval EFI_DEVICE_ERROR The device reported an error
@retval EFI_TIMEOUT The read operation was stopped due to timeout
**/
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
IsaSerialRead ( IsaSerialRead (
@ -512,38 +574,101 @@ IsaSerialRead (
// //
// Internal Functions // Internal Functions
// //
/**
Use scratchpad register to test if this serial port is present.
@param SerialDevice Pointer to serial device structure
@return if this serial port is present
**/
BOOLEAN BOOLEAN
IsaSerialPortPresent ( IsaSerialPortPresent (
IN SERIAL_DEV *SerialDevice IN SERIAL_DEV *SerialDevice
); );
/**
Detect whether specific FIFO is full or not.
@param Fifo A pointer to the Data Structure SERIAL_DEV_FIFO
@return whether specific FIFO is full or not
**/
BOOLEAN BOOLEAN
IsaSerialFifoFull ( IsaSerialFifoFull (
IN SERIAL_DEV_FIFO *Fifo IN SERIAL_DEV_FIFO *Fifo
); );
/**
Detect whether specific FIFO is empty or not.
@param Fifo A pointer to the Data Structure SERIAL_DEV_FIFO
@return whether specific FIFO is empty or not
**/
BOOLEAN BOOLEAN
IsaSerialFifoEmpty ( IsaSerialFifoEmpty (
IN SERIAL_DEV_FIFO *Fifo IN SERIAL_DEV_FIFO *Fifo
); );
/**
Add data to specific FIFO.
@param Fifo A pointer to the Data Structure SERIAL_DEV_FIFO
@param Data the data added to FIFO
@retval EFI_SUCCESS Add data to specific FIFO successfully
@retval EFI_OUT_OF_RESOURCE Failed to add data because FIFO is already full
**/
EFI_STATUS EFI_STATUS
IsaSerialFifoAdd ( IsaSerialFifoAdd (
IN SERIAL_DEV_FIFO *Fifo, IN SERIAL_DEV_FIFO *Fifo,
IN UINT8 Data IN UINT8 Data
); );
/**
Remove data from specific FIFO.
@param Fifo A pointer to the Data Structure SERIAL_DEV_FIFO
@param Data the data removed from FIFO
@retval EFI_SUCCESS Remove data from specific FIFO successfully
@retval EFI_OUT_OF_RESOURCE Failed to remove data because FIFO is empty
**/
EFI_STATUS EFI_STATUS
IsaSerialFifoRemove ( IsaSerialFifoRemove (
IN SERIAL_DEV_FIFO *Fifo, IN SERIAL_DEV_FIFO *Fifo,
OUT UINT8 *Data OUT UINT8 *Data
); );
/**
Reads and writes all avaliable data.
@param SerialDevice The device to flush
@retval EFI_SUCCESS Data was read/written successfully.
@retval EFI_OUT_OF_RESOURCE Failed because software receive FIFO is full. Note, when
this happens, pending writes are not done.
**/
EFI_STATUS EFI_STATUS
IsaSerialReceiveTransmit ( IsaSerialReceiveTransmit (
IN SERIAL_DEV *SerialDevice IN SERIAL_DEV *SerialDevice
); );
/**
Use IsaIo protocol to read serial port.
@param IsaIo Pointer to EFI_ISA_IO_PROTOCOL instance
@param BaseAddress Serial port register group base address
@param Offset Offset in register group
@return Data read from serial port
**/
UINT8 UINT8
IsaSerialReadPort ( IsaSerialReadPort (
IN EFI_ISA_IO_PROTOCOL *IsaIo, IN EFI_ISA_IO_PROTOCOL *IsaIo,
@ -551,6 +676,15 @@ IsaSerialReadPort (
IN UINT32 Offset IN UINT32 Offset
); );
/**
Use IsaIo protocol to write serial port.
@param IsaIo Pointer to EFI_ISA_IO_PROTOCOL instance
@param BaseAddress Serial port register group base address
@param Offset Offset in register group
@param Data data which is to be written to some serial port register
**/
VOID VOID
IsaSerialWritePort ( IsaSerialWritePort (
IN EFI_ISA_IO_PROTOCOL *IsaIo, IN EFI_ISA_IO_PROTOCOL *IsaIo,
@ -559,4 +693,148 @@ IsaSerialWritePort (
IN UINT8 Data IN UINT8 Data
); );
//
// EFI Component Name Functions
//
/**
Retrieves a Unicode string that is the user readable name of the driver.
This function retrieves the user readable name of a driver in the form of a
Unicode string. If the driver specified by This has a user readable name in
the language specified by Language, then a pointer to the driver name is
returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
by This does not support the language specified by Language,
then EFI_UNSUPPORTED is returned.
@param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
EFI_COMPONENT_NAME_PROTOCOL instance.
@param Language[in] A pointer to a Null-terminated ASCII string
array indicating the language. This is the
language of the driver name that the caller is
requesting, and it must match one of the
languages specified in SupportedLanguages. The
number of languages supported by a driver is up
to the driver writer. Language is specified
in RFC 4646 or ISO 639-2 language code format.
@param DriverName[out] A pointer to the Unicode string to return.
This Unicode string is the name of the
driver specified by This in the language
specified by Language.
@retval EFI_SUCCESS The Unicode string for the Driver specified by
This and the language specified by Language was
returned in DriverName.
@retval EFI_INVALID_PARAMETER Language is NULL.
@retval EFI_INVALID_PARAMETER DriverName is NULL.
@retval EFI_UNSUPPORTED The driver specified by This does not support
the language specified by Language.
**/
EFI_STATUS
EFIAPI
IsaSerialComponentNameGetDriverName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN CHAR8 *Language,
OUT CHAR16 **DriverName
);
/**
Retrieves a Unicode string that is the user readable name of the controller
that is being managed by a driver.
This function retrieves the user readable name of the controller specified by
ControllerHandle and ChildHandle in the form of a Unicode string. If the
driver specified by This has a user readable name in the language specified by
Language, then a pointer to the controller name is returned in ControllerName,
and EFI_SUCCESS is returned. If the driver specified by This is not currently
managing the controller specified by ControllerHandle and ChildHandle,
then EFI_UNSUPPORTED is returned. If the driver specified by This does not
support the language specified by Language, then EFI_UNSUPPORTED is returned.
@param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
EFI_COMPONENT_NAME_PROTOCOL instance.
@param ControllerHandle[in] The handle of a controller that the driver
specified by This is managing. This handle
specifies the controller whose name is to be
returned.
@param ChildHandle[in] The handle of the child controller to retrieve
the name of. This is an optional parameter that
may be NULL. It will be NULL for device
drivers. It will also be NULL for a bus drivers
that wish to retrieve the name of the bus
controller. It will not be NULL for a bus
driver that wishes to retrieve the name of a
child controller.
@param Language[in] A pointer to a Null-terminated ASCII string
array indicating the language. This is the
language of the driver name that the caller is
requesting, and it must match one of the
languages specified in SupportedLanguages. The
number of languages supported by a driver is up
to the driver writer. Language is specified in
RFC 4646 or ISO 639-2 language code format.
@param ControllerName[out] A pointer to the Unicode string to return.
This Unicode string is the name of the
controller specified by ControllerHandle and
ChildHandle in the language specified by
Language from the point of view of the driver
specified by This.
@retval EFI_SUCCESS The Unicode string for the user readable name in
the language specified by Language for the
driver specified by This was returned in
DriverName.
@retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
@retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
EFI_HANDLE.
@retval EFI_INVALID_PARAMETER Language is NULL.
@retval EFI_INVALID_PARAMETER ControllerName is NULL.
@retval EFI_UNSUPPORTED The driver specified by This is not currently
managing the controller specified by
ControllerHandle and ChildHandle.
@retval EFI_UNSUPPORTED The driver specified by This does not support
the language specified by Language.
**/
EFI_STATUS
EFIAPI
IsaSerialComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
);
/**
Add the component name for the serial io device
@param SerialDevice A pointer to the SERIAL_DEV instance.
@param IsaIo A pointer to the EFI_ISA_IO_PROTOCOL instance.
**/
VOID
AddName (
IN SERIAL_DEV *SerialDevice,
IN EFI_ISA_IO_PROTOCOL *IsaIo
);
#endif #endif

View File

@ -835,7 +835,7 @@ EFIAPI
UefiDecompress ( UefiDecompress (
IN CONST VOID *Source, IN CONST VOID *Source,
IN OUT VOID *Destination, IN OUT VOID *Destination,
IN OUT VOID *Scratch IN OUT VOID *Scratch OPTIONAL
) )
{ {
return UefiTianoDecompress (Source, Destination, Scratch, 1); return UefiTianoDecompress (Source, Destination, Scratch, 1);

View File

@ -808,7 +808,7 @@ CreateChildNode (
// Make sure we initialize the new stream with the correct // Make sure we initialize the new stream with the correct
// authentication status for both aggregate and local status fields. // authentication status for both aggregate and local status fields.
// //
if ((GuidedHeader->Attributes & EFI_GUIDED_SECTION_AUTH_STATUS_VALID) != 0) { if ((GuidedHeader->Attributes & EFI_GUIDED_SECTION_AUTH_STATUS_VALID) == EFI_GUIDED_SECTION_AUTH_STATUS_VALID) {
// //
// OR in the parent stream's aggregate status. // OR in the parent stream's aggregate status.
// //
@ -837,7 +837,7 @@ CreateChildNode (
// //
// There's no GUIDed section extraction protocol available. // There's no GUIDed section extraction protocol available.
// //
if ((GuidedHeader->Attributes & EFI_GUIDED_SECTION_PROCESSING_REQUIRED) != 0) { if ((GuidedHeader->Attributes & EFI_GUIDED_SECTION_PROCESSING_REQUIRED) == EFI_GUIDED_SECTION_PROCESSING_REQUIRED) {
// //
// If the section REQUIRES an extraction protocol, then we're toast // If the section REQUIRES an extraction protocol, then we're toast
// //
@ -849,7 +849,7 @@ CreateChildNode (
// Figure out the proper authentication status // Figure out the proper authentication status
// //
AuthenticationStatus = Stream->AuthenticationStatus; AuthenticationStatus = Stream->AuthenticationStatus;
if (GuidedHeader->Attributes & EFI_GUIDED_SECTION_AUTH_STATUS_VALID) { if ((GuidedHeader->Attributes & EFI_GUIDED_SECTION_AUTH_STATUS_VALID) == EFI_GUIDED_SECTION_AUTH_STATUS_VALID) {
// //
// The local status of the new stream is contained in // The local status of the new stream is contained in
// AuthenticaionStatus. This value needs to be ORed into the // AuthenticaionStatus. This value needs to be ORed into the