EmbeddedPkg/SerialPortExtLib.h: Changed SerialPortSetAttributes() prototype to return...
authoroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 15 May 2013 08:44:59 +0000 (08:44 +0000)
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 15 May 2013 08:44:59 +0000 (08:44 +0000)
To be compliant with the UEFI specification it is required to update SERIAL_IO_MODE with the values set.
This prototype change allows to get the value used inside SerialPortSetAttributes().

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <Olivier.martin@arm.com>
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14365 6f19259b-4bc3-4df7-8a09-765794883524

ArmPlatformPkg/Drivers/PL011Uart/PL011Uart.c
ArmPlatformPkg/Include/Drivers/PL011Uart.h
ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortExtLib.c
ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.c
EmbeddedPkg/Include/Library/SerialPortExtLib.h
EmbeddedPkg/Library/TemplateSerialPortExtLib/TemplateSerialPortExtLib.c
EmbeddedPkg/SerialDxe/SerialIo.c

index d9280cd..fdb9ff4 100644 (file)
 RETURN_STATUS\r
 EFIAPI\r
 PL011UartInitializePort (\r
-  IN UINTN               UartBase,\r
-  IN UINT64              BaudRate,\r
-  IN UINT32              ReceiveFifoDepth,\r
-  IN EFI_PARITY_TYPE     Parity,\r
-  IN UINT8               DataBits,\r
-  IN EFI_STOP_BITS_TYPE  StopBits\r
+  IN OUT UINTN               UartBase,\r
+  IN OUT UINT64              *BaudRate,\r
+  IN OUT UINT32              *ReceiveFifoDepth,\r
+  IN OUT EFI_PARITY_TYPE     *Parity,\r
+  IN OUT UINT8               *DataBits,\r
+  IN OUT EFI_STOP_BITS_TYPE  *StopBits\r
   )\r
 {\r
   UINT32      LineControl;\r
@@ -47,19 +47,21 @@ PL011UartInitializePort (
   // The PL011 supports a buffer of either 1 or 32 chars. Therefore we can accept\r
   // 1 char buffer as the minimum fifo size. Because everything can be rounded down,\r
   // there is no maximum fifo size.\r
-  if (ReceiveFifoDepth == 0) {\r
+  if ((*ReceiveFifoDepth == 0) || (*ReceiveFifoDepth >= 32)) {\r
     LineControl |= PL011_UARTLCR_H_FEN;\r
-  } else if (ReceiveFifoDepth < 32) {\r
+    *ReceiveFifoDepth = 32;\r
+  } else {\r
+    ASSERT (*ReceiveFifoDepth < 32);\r
     // Nothing else to do. 1 byte fifo is default.\r
-  } else if (ReceiveFifoDepth >= 32) {\r
-    LineControl |= PL011_UARTLCR_H_FEN;\r
+    *ReceiveFifoDepth = 1;\r
   }\r
 \r
   //\r
   // Parity\r
   //\r
-  switch (Parity) {\r
+  switch (*Parity) {\r
   case DefaultParity:\r
+    *Parity = NoParity;\r
   case NoParity:\r
     // Nothing to do. Parity is disabled by default.\r
     break;\r
@@ -82,8 +84,9 @@ PL011UartInitializePort (
   //\r
   // Data Bits\r
   //\r
-  switch (DataBits) {\r
+  switch (*DataBits) {\r
   case 0:\r
+    *DataBits = 8;\r
   case 8:\r
     LineControl |= PL011_UARTLCR_H_WLEN_8;\r
     break;\r
@@ -103,8 +106,9 @@ PL011UartInitializePort (
   //\r
   // Stop Bits\r
   //\r
-  switch (StopBits) {\r
+  switch (*StopBits) {\r
   case DefaultStopBits:\r
+    *StopBits = OneStopBit;\r
   case OneStopBit:\r
     // Nothing to do. One stop bit is enabled by default.\r
     break;\r
@@ -132,14 +136,14 @@ PL011UartInitializePort (
       MmioWrite32 (UartBase + UARTIBRD, PcdGet32 (PL011UartInteger));\r
       MmioWrite32 (UartBase + UARTFBRD, PcdGet32 (PL011UartFractional));\r
     } else {\r
-      BaudRate = PcdGet32 (PcdSerialBaudRate);\r
-      ASSERT (BaudRate != 0);\r
+      *BaudRate = PcdGet32 (PcdSerialBaudRate);\r
+      ASSERT (*BaudRate != 0);\r
     }\r
   }\r
 \r
   // If BaudRate != 0 then we must calculate the divisor from the value\r
-  if (BaudRate != 0) {\r
-    Divisor = (PcdGet32 (PL011UartClkInHz) * 4) / BaudRate;\r
+  if (*BaudRate != 0) {\r
+    Divisor = (PcdGet32 (PL011UartClkInHz) * 4) / *BaudRate;\r
     MmioWrite32 (UartBase + UARTIBRD, Divisor >> 6);\r
     MmioWrite32 (UartBase + UARTFBRD, Divisor & 0x3F);\r
   }\r
index 354f111..23e9a94 100644 (file)
 RETURN_STATUS\r
 EFIAPI\r
 PL011UartInitializePort (\r
-  IN UINTN               UartBase,\r
-  IN UINT64              BaudRate,\r
-  IN UINT32              ReceiveFifoDepth,\r
-  IN EFI_PARITY_TYPE     Parity,\r
-  IN UINT8               DataBits,\r
-  IN EFI_STOP_BITS_TYPE  StopBits\r
+  IN OUT UINTN               UartBase,\r
+  IN OUT UINT64              *BaudRate,\r
+  IN OUT UINT32              *ReceiveFifoDepth,\r
+  IN OUT EFI_PARITY_TYPE     *Parity,\r
+  IN OUT UINT8               *DataBits,\r
+  IN OUT EFI_STOP_BITS_TYPE  *StopBits\r
   );\r
 \r
 /**\r
index 9bfe42e..57f3fa0 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Serial I/O Port library functions with no library constructor/destructor\r
 \r
-  Copyright (c) 2012, ARM Ltd. All rights reserved.<BR>\r
+  Copyright (c) 2012-2013, ARM Ltd. All rights reserved.<BR>\r
   \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
 RETURN_STATUS\r
 EFIAPI\r
 SerialPortSetAttributes (\r
-  IN UINT64              BaudRate,\r
-  IN UINT32              ReceiveFifoDepth,\r
-  IN UINT32              Timeout,\r
-  IN EFI_PARITY_TYPE     Parity,\r
-  IN UINT8               DataBits,\r
-  IN EFI_STOP_BITS_TYPE  StopBits\r
+  IN OUT UINT64              *BaudRate,\r
+  IN OUT UINT32              *ReceiveFifoDepth,\r
+  IN OUT UINT32              *Timeout,\r
+  IN OUT EFI_PARITY_TYPE     *Parity,\r
+  IN OUT UINT8               *DataBits,\r
+  IN OUT EFI_STOP_BITS_TYPE  *StopBits\r
   )\r
 {\r
   return PL011UartInitializePort (\r
index 09033db..4f62808 100644 (file)
@@ -2,7 +2,7 @@
   Serial I/O Port library functions with no library constructor/destructor\r
 \r
   Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>\r
-  Copyright (c) 2012, ARM Ltd. All rights reserved.<BR>\r
+  Copyright (c) 2012 - 2013, ARM Ltd. All rights reserved.<BR>\r
   \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -37,13 +37,21 @@ SerialPortInitialize (
   VOID\r
   )\r
 {\r
+  UINT64              BaudRate;\r
+  UINT32              ReceiveFifoDepth;\r
+  EFI_PARITY_TYPE     Parity;\r
+  UINT8               DataBits;\r
+  EFI_STOP_BITS_TYPE  StopBits;\r
+\r
+  BaudRate = (UINTN)PcdGet64 (PcdUartDefaultBaudRate);\r
+  ReceiveFifoDepth = 0; // Use the default value for Fifo depth\r
+  Parity = (EFI_PARITY_TYPE)PcdGet8 (PcdUartDefaultParity);\r
+  DataBits = PcdGet8 (PcdUartDefaultDataBits);\r
+  StopBits = (EFI_STOP_BITS_TYPE) PcdGet8 (PcdUartDefaultStopBits);\r
+\r
   return PL011UartInitializePort (\r
       (UINTN)PcdGet64 (PcdSerialRegisterBase),\r
-      (UINTN)PcdGet64 (PcdUartDefaultBaudRate),\r
-      0, // Use the default value for Fifo depth\r
-      (EFI_PARITY_TYPE)PcdGet8 (PcdUartDefaultParity),\r
-      PcdGet8 (PcdUartDefaultDataBits),\r
-      (EFI_STOP_BITS_TYPE) PcdGet8 (PcdUartDefaultStopBits));\r
+      &BaudRate, &ReceiveFifoDepth, &Parity, &DataBits, &StopBits);\r
 }\r
 \r
 /**\r
index a12847c..a32365b 100644 (file)
@@ -54,12 +54,12 @@ SerialPortGetControl (
 RETURN_STATUS\r
 EFIAPI\r
 SerialPortSetAttributes (\r
-  IN UINT64              BaudRate,\r
-  IN UINT32              ReceiveFifoDepth,\r
-  IN UINT32              Timeout,\r
-  IN EFI_PARITY_TYPE     Parity,\r
-  IN UINT8               DataBits,\r
-  IN EFI_STOP_BITS_TYPE  StopBits\r
+  IN OUT UINT64              *BaudRate,\r
+  IN OUT UINT32              *ReceiveFifoDepth,\r
+  IN OUT UINT32              *Timeout,\r
+  IN OUT EFI_PARITY_TYPE     *Parity,\r
+  IN OUT UINT8               *DataBits,\r
+  IN OUT EFI_STOP_BITS_TYPE  *StopBits\r
   );\r
 \r
 #endif\r
index 5a007c2..f993cbf 100644 (file)
@@ -66,12 +66,12 @@ SerialPortGetControl (
 RETURN_STATUS\r
 EFIAPI\r
 SerialPortSetAttributes (\r
-  IN UINT64              BaudRate,\r
-  IN UINT32              ReceiveFifoDepth,\r
-  IN UINT32              Timeout,\r
-  IN EFI_PARITY_TYPE     Parity,\r
-  IN UINT8               DataBits,\r
-  IN EFI_STOP_BITS_TYPE  StopBits\r
+  IN OUT UINT64              *BaudRate,\r
+  IN OUT UINT32              *ReceiveFifoDepth,\r
+  IN OUT UINT32              *Timeout,\r
+  IN OUT EFI_PARITY_TYPE     *Parity,\r
+  IN OUT UINT8               *DataBits,\r
+  IN OUT EFI_STOP_BITS_TYPE  *StopBits\r
   )\r
 {\r
   return RETURN_UNSUPPORTED;\r
index a94baca..288f353 100644 (file)
@@ -7,6 +7,7 @@
   \r
 \r
   Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
+  Copyright (c) 2013, ARM Ltd. All rights reserved.<BR>\r
   \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -165,7 +166,7 @@ SerialSetAttributes (
   EFI_STATUS  Status;\r
   EFI_TPL     Tpl;\r
 \r
-  Status = SerialPortSetAttributes (BaudRate, ReceiveFifoDepth, Timeout, Parity, DataBits, StopBits);\r
+  Status = SerialPortSetAttributes (&BaudRate, &ReceiveFifoDepth, &Timeout, &Parity, &DataBits, &StopBits);\r
   if (EFI_ERROR(Status)) {\r
     return Status;\r
   }\r