]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/Serial.c
Replace Fixed PCD with Feature PCD for useHalfHandshake to reduce code size.
[mirror_edk2.git] / IntelFrameworkModulePkg / Bus / Isa / IsaSerialDxe / Serial.c
index ac208dbe09c81f41c6fb1d71988ada75ef311c0c..4a86257e73266d55186fe3f68b87d5e052c6d7a7 100644 (file)
@@ -1,14 +1,14 @@
-/**@file\r
+/** @file\r
   Serial driver for standard UARTS on an ISA bus.\r
 \r
-  Copyright (c) 2006 - 2007, Intel Corporation<BR>\r
-  All rights reserved. This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php\r
+Copyright (c) 2006 - 2009, Intel Corporation<BR>\r
+All rights reserved. This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution.  The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
 \r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 \r
 **/\r
 \r
@@ -82,7 +82,7 @@ SERIAL_DEV  gSerialDevTempate = {
   },\r
   FALSE,\r
   FALSE,\r
-  UART16550A,\r
+  Uart16550A,\r
   NULL\r
 };\r
 \r
@@ -125,11 +125,11 @@ InitializeIsaSerial (
 /**\r
   Check to see if this driver supports the given controller\r
 \r
-  @param  This - A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
-  @param  Controller - The handle of the controller to test.\r
-  @param  RemainingDevicePath - A pointer to the remaining portion of a device path.\r
+  @param  This                 A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
+  @param  Controller           The handle of the controller to test.\r
+  @param  RemainingDevicePath  A pointer to the remaining portion of a device path.\r
 \r
-  @return EFI_SUCCESS - This driver can support the given controller\r
+  @return EFI_SUCCESS          This driver can support the given controller\r
 \r
 **/\r
 EFI_STATUS\r
@@ -261,11 +261,11 @@ Error:
 /**\r
   Start to management the controller passed in\r
 \r
-  @param  This - A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
-  @param  Controller - The handle of the controller to test.\r
-  @param  RemainingDevicePath - A pointer to the remaining portion of a device path.\r
+  @param  This                 A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
+  @param  Controller           The handle of the controller to test.\r
+  @param  RemainingDevicePath  A pointer to the remaining portion of a device path.\r
 \r
-  @return EFI_SUCCESS - Driver is started successfully\r
+  @return EFI_SUCCESS   Driver is started successfully\r
 \r
 **/\r
 EFI_STATUS\r
@@ -388,7 +388,7 @@ SerialControllerDriverStart (
   SerialDevice->IsaIo               = IsaIo;\r
   SerialDevice->ParentDevicePath    = ParentDevicePath;\r
 \r
-  ADD_SERIAL_NAME (SerialDevice, IsaIo);\r
+  AddName (SerialDevice, IsaIo);\r
 \r
   for (Index = 0; SerialDevice->IsaIo->ResourceList->ResourceItem[Index].Type != EfiIsaAcpiResourceEndOfList; Index++) {\r
     if (SerialDevice->IsaIo->ResourceList->ResourceItem[Index].Type == EfiIsaAcpiResourceIo) {\r
@@ -501,8 +501,8 @@ Error:
            This->DriverBindingHandle,\r
            Controller\r
            );\r
-    if (SerialDevice) {\r
-      if (SerialDevice->DevicePath) {\r
+    if (SerialDevice != NULL) {\r
+      if (SerialDevice->DevicePath != NULL) {\r
         gBS->FreePool (SerialDevice->DevicePath);\r
       }\r
 \r
@@ -517,13 +517,13 @@ Error:
 /**\r
   Disconnect this driver with the controller, uninstall related protocol instance\r
 \r
-  @param  This                - A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
-  @param  Controller          - The handle of the controller to test.\r
-  @param  NumberOfChildren    - Number of child device.\r
-  @param  RemainingDevicePath - A pointer to the remaining portion of a device path.\r
+  @param  This                  A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
+  @param  Controller            The handle of the controller to test.\r
+  @param  NumberOfChildren      Number of child device.\r
+  @param  ChildHandleBuffer     A pointer to the remaining portion of a device path.\r
 \r
-  @retval EFI_SUCCESS         - Operation successfully\r
-  @retval EFI_DEVICE_ERROR    - Cannot stop the driver successfully\r
+  @retval EFI_SUCCESS           Operation successfully\r
+  @retval EFI_DEVICE_ERROR      Cannot stop the driver successfully\r
 \r
 **/\r
 EFI_STATUS\r
@@ -624,7 +624,7 @@ SerialControllerDriverStop (
                EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
                );\r
       } else {\r
-        if (SerialDevice->DevicePath) {\r
+        if (SerialDevice->DevicePath != NULL) {\r
           gBS->FreePool (SerialDevice->DevicePath);\r
         }\r
 \r
@@ -646,9 +646,9 @@ SerialControllerDriverStop (
 }\r
 \r
 /**\r
-  Detect whether specific FIFO is full or not\r
+  Detect whether specific FIFO is full or not.\r
 \r
-  @param Fifo  - A pointer to the Data Structure SERIAL_DEV_FIFO\r
+  @param Fifo    A pointer to the Data Structure SERIAL_DEV_FIFO\r
 \r
   @return whether specific FIFO is full or not\r
 \r
@@ -667,10 +667,9 @@ IsaSerialFifoFull (
 }\r
 \r
 /**\r
-  Detect whether specific FIFO is empty or not\r
-\r
+  Detect whether specific FIFO is empty or not.\r
  \r
-  @param  Fifo  - A pointer to the Data Structure SERIAL_DEV_FIFO\r
+  @param  Fifo    A pointer to the Data Structure SERIAL_DEV_FIFO\r
 \r
   @return whether specific FIFO is empty or not\r
 \r
@@ -689,13 +688,13 @@ IsaSerialFifoEmpty (
 }\r
 \r
 /**\r
-  Add data to specific FIFO\r
+  Add data to specific FIFO.\r
 \r
-  @param Fifo                - A pointer to the Data Structure SERIAL_DEV_FIFO\r
-  @param Data                - the data added to FIFO\r
+  @param Fifo                  A pointer to the Data Structure SERIAL_DEV_FIFO\r
+  @param Data                  the data added to FIFO\r
 \r
-  @retval EFI_SUCCESS         - Add data to specific FIFO successfully\r
-  @retval EFI_OUT_OF_RESOURCE - Failed to add data because FIFO is already full\r
+  @retval EFI_SUCCESS           Add data to specific FIFO successfully\r
+  @retval EFI_OUT_OF_RESOURCE   Failed to add data because FIFO is already full\r
 \r
 **/\r
 EFI_STATUS\r
@@ -725,13 +724,13 @@ IsaSerialFifoAdd (
 }\r
 \r
 /**\r
-  Remove data from specific FIFO\r
+  Remove data from specific FIFO.\r
 \r
-  @param Fifo                - A pointer to the Data Structure SERIAL_DEV_FIFO\r
-  @param Data                - the data removed from FIFO\r
+  @param Fifo                  A pointer to the Data Structure SERIAL_DEV_FIFO\r
+  @param Data                  the data removed from FIFO\r
 \r
-  @retval EFI_SUCCESS         - Remove data from specific FIFO successfully\r
-  @retval EFI_OUT_OF_RESOURCE - Failed to remove data because FIFO is empty\r
+  @retval EFI_SUCCESS           Remove data from specific FIFO successfully\r
+  @retval EFI_OUT_OF_RESOURCE   Failed to remove data because FIFO is empty\r
 \r
 **/\r
 EFI_STATUS\r
@@ -763,10 +762,10 @@ IsaSerialFifoRemove (
 /**\r
   Reads and writes all avaliable data.\r
 \r
-  @param SerialDevice         - The device to flush\r
+  @param SerialDevice           The device to flush\r
 \r
-  @retval EFI_SUCCESS         - Data was read/written successfully.\r
-  @retval EFI_OUT_OF_RESOURCE - Failed because software receive FIFO is full.  Note, when\r
+  @retval EFI_SUCCESS           Data was read/written successfully.\r
+  @retval EFI_OUT_OF_RESOURCE   Failed because software receive FIFO is full.  Note, when\r
                                 this happens, pending writes are not done.\r
 \r
 **/\r
@@ -802,55 +801,56 @@ IsaSerialReceiveTransmit (
     } while (!IsaSerialFifoEmpty (&SerialDevice->Transmit));\r
   } else {\r
     ReceiveFifoFull = IsaSerialFifoFull (&SerialDevice->Receive);\r
+    //\r
+    // For full handshake flow control, tell the peer to send data\r
+    // if receive buffer is available.\r
+    //\r
+    if (SerialDevice->HardwareFlowControl &&\r
+        !FeaturePcdGet(PcdIsaBusSerialUseHalfHandshake)&&\r
+        !ReceiveFifoFull\r
+        ) {\r
+      Mcr.Data     = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);\r
+      Mcr.Bits.Rts = 1;\r
+      WRITE_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Mcr.Data);\r
+    }\r
     do {\r
       Lsr.Data = READ_LSR (SerialDevice->IsaIo, SerialDevice->BaseAddress);\r
 \r
-      if (FeaturePcdGet (PcdNtEmulatorEnable)) {\r
-        //\r
-        // This is required for NT to avoid a forever-spin...\r
-        // This would be better if READ_LSR was a polling operation\r
-        // that would timeout.\r
-        //\r
-        Lsr.Bits.THRE = 1;\r
-      }\r
       //\r
       // Flush incomming data to prevent a an overrun during a long write\r
       //\r
-      if (Lsr.Bits.DR && !ReceiveFifoFull) {\r
+      if ((Lsr.Bits.Dr == 1) && !ReceiveFifoFull) {\r
         ReceiveFifoFull = IsaSerialFifoFull (&SerialDevice->Receive);\r
         if (!ReceiveFifoFull) {\r
-          if (Lsr.Bits.FIFOE || Lsr.Bits.OE || Lsr.Bits.PE || Lsr.Bits.FE || Lsr.Bits.BI) {\r
+          if (Lsr.Bits.FIFOe == 1 || Lsr.Bits.Oe == 1 || Lsr.Bits.Pe == 1 || Lsr.Bits.Fe == 1 || Lsr.Bits.Bi == 1) {\r
             REPORT_STATUS_CODE_WITH_DEVICE_PATH (\r
               EFI_ERROR_CODE,\r
               EFI_P_EC_INPUT_ERROR | EFI_PERIPHERAL_SERIAL_PORT,\r
               SerialDevice->DevicePath\r
               );\r
-            if (Lsr.Bits.FIFOE || Lsr.Bits.PE || Lsr.Bits.FE || Lsr.Bits.BI) {\r
+            if (Lsr.Bits.FIFOe == 1 || Lsr.Bits.Pe == 1|| Lsr.Bits.Fe == 1 || Lsr.Bits.Bi == 1) {\r
               Data = READ_RBR (SerialDevice->IsaIo, SerialDevice->BaseAddress);\r
               continue;\r
             }\r
           }\r
-          //\r
-          // Make sure the receive data will not be missed, Assert DTR\r
-          //\r
-          if (SerialDevice->HardwareFlowControl) {\r
-            Mcr.Data = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);\r
-            Mcr.Bits.DTRC &= 0;\r
-            WRITE_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Mcr.Data);\r
-          }\r
 \r
           Data = READ_RBR (SerialDevice->IsaIo, SerialDevice->BaseAddress);\r
 \r
+          IsaSerialFifoAdd (&SerialDevice->Receive, Data);\r
+          \r
           //\r
-          // Deassert DTR\r
+          // For full handshake flow control, if receive buffer full\r
+          // tell the peer to stop sending data.\r
           //\r
-          if (SerialDevice->HardwareFlowControl) {\r
-            Mcr.Data = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);\r
-            Mcr.Bits.DTRC |= 1;\r
+          if (SerialDevice->HardwareFlowControl &&\r
+              !FeaturePcdGet(PcdIsaBusSerialUseHalfHandshake)   &&\r
+              IsaSerialFifoFull (&SerialDevice->Receive)\r
+              ) {\r
+            Mcr.Data     = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);\r
+            Mcr.Bits.Rts = 0;\r
             WRITE_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Mcr.Data);\r
           }\r
 \r
-          IsaSerialFifoAdd (&SerialDevice->Receive, Data);\r
 \r
           continue;\r
         } else {\r
@@ -864,23 +864,25 @@ IsaSerialReceiveTransmit (
       //\r
       // Do the write\r
       //\r
-      if (Lsr.Bits.THRE && !IsaSerialFifoEmpty (&SerialDevice->Transmit)) {\r
+      if (Lsr.Bits.Thre == 1 && !IsaSerialFifoEmpty (&SerialDevice->Transmit)) {\r
         //\r
         // Make sure the transmit data will not be missed\r
         //\r
         if (SerialDevice->HardwareFlowControl) {\r
           //\r
-          // Send RTS\r
+          // For half handshake flow control assert RTS before sending.\r
           //\r
-          Mcr.Data = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);\r
-          Mcr.Bits.RTS |= 1;\r
-          WRITE_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Mcr.Data);\r
+          if (FeaturePcdGet(PcdIsaBusSerialUseHalfHandshake)) {\r
+            Mcr.Data     = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);\r
+            Mcr.Bits.Rts= 0;\r
+            WRITE_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Mcr.Data);\r
+          }\r
           //\r
           // Wait for CTS\r
           //\r
           TimeOut   = 0;\r
           Msr.Data  = READ_MSR (SerialDevice->IsaIo, SerialDevice->BaseAddress);\r
-          while (!Msr.Bits.CTS) {\r
+          while (Msr.Bits.Dcd == 1 && (!Msr.Bits.Cts ^ FeaturePcdGet(PcdIsaBusSerialUseHalfHandshake))) {\r
             gBS->Stall (TIMEOUT_STALL_INTERVAL);\r
             TimeOut++;\r
             if (TimeOut > 5) {\r
@@ -890,31 +892,25 @@ IsaSerialReceiveTransmit (
             Msr.Data = READ_MSR (SerialDevice->IsaIo, SerialDevice->BaseAddress);\r
           }\r
 \r
-          if (Msr.Bits.CTS) {\r
+          if (Msr.Bits.Dcd== 0 || (Msr.Bits.Cts ^ FeaturePcdGet(PcdIsaBusSerialUseHalfHandshake))) {\r
             IsaSerialFifoRemove (&SerialDevice->Transmit, &Data);\r
             WRITE_THR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Data);\r
           }\r
-        }\r
-        //\r
-        // write the data out\r
-        //\r
-        if (!SerialDevice->HardwareFlowControl) {\r
-          IsaSerialFifoRemove (&SerialDevice->Transmit, &Data);\r
-          WRITE_THR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Data);\r
-        }\r
-        //\r
-        // Make sure the transmit data will not be missed\r
-        //\r
-        if (SerialDevice->HardwareFlowControl) {\r
+\r
           //\r
-          // Assert RTS\r
+          // For half handshake flow control, tell DCE we are done.\r
           //\r
-          Mcr.Data = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);\r
-          Mcr.Bits.RTS &= 0;\r
-          WRITE_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Mcr.Data);\r
+          if (FeaturePcdGet(PcdIsaBusSerialUseHalfHandshake)) {\r
+            Mcr.Data = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);\r
+            Mcr.Bits.Rts = 1;\r
+            WRITE_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Mcr.Data);\r
+          }\r
+        } else {\r
+          IsaSerialFifoRemove (&SerialDevice->Transmit, &Data);\r
+          WRITE_THR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Data);\r
         }\r
       }\r
-    } while (Lsr.Bits.THRE && !IsaSerialFifoEmpty (&SerialDevice->Transmit));\r
+    } while (Lsr.Bits.Thre == 1 && !IsaSerialFifoEmpty (&SerialDevice->Transmit));\r
   }\r
 \r
   return EFI_SUCCESS;\r
@@ -924,12 +920,12 @@ IsaSerialReceiveTransmit (
 // Interface Functions\r
 //\r
 /**\r
-  Reset serial device\r
+  Reset serial device.\r
 \r
-  @param This             - Pointer to EFI_SERIAL_IO_PROTOCOL\r
+  @param This               Pointer to EFI_SERIAL_IO_PROTOCOL\r
 \r
-  @retval EFI_SUCCESS      - Reset successfully\r
-  @retval EFI_DEVICE_ERROR - Failed to reset\r
+  @retval EFI_SUCCESS        Reset successfully\r
+  @retval EFI_DEVICE_ERROR   Failed to reset\r
 \r
 **/\r
 EFI_STATUS\r
@@ -963,32 +959,32 @@ IsaSerialReset (
   // Make sure DLAB is 0.\r
   //\r
   Lcr.Data      = READ_LCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);\r
-  Lcr.Bits.DLAB = 0;\r
+  Lcr.Bits.DLab = 0;\r
   WRITE_LCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Lcr.Data);\r
 \r
   //\r
   // Turn off all interrupts\r
   //\r
   Ier.Data        = READ_IER (SerialDevice->IsaIo, SerialDevice->BaseAddress);\r
-  Ier.Bits.RAVIE  = 0;\r
-  Ier.Bits.THEIE  = 0;\r
-  Ier.Bits.RIE    = 0;\r
-  Ier.Bits.MIE    = 0;\r
+  Ier.Bits.Ravie  = 0;\r
+  Ier.Bits.Theie  = 0;\r
+  Ier.Bits.Rie    = 0;\r
+  Ier.Bits.Mie    = 0;\r
   WRITE_IER (SerialDevice->IsaIo, SerialDevice->BaseAddress, Ier.Data);\r
 \r
   //\r
   // Disable the FIFO.\r
   //\r
-  Fcr.Bits.TRFIFOE = 0;\r
+  Fcr.Bits.TrFIFOE = 0;\r
   WRITE_FCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Fcr.Data);\r
 \r
   //\r
   // Turn off loopback and disable device interrupt.\r
   //\r
   Mcr.Data      = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);\r
-  Mcr.Bits.OUT1 = 0;\r
-  Mcr.Bits.OUT2 = 0;\r
-  Mcr.Bits.LME  = 0;\r
+  Mcr.Bits.Out1 = 0;\r
+  Mcr.Bits.Out2 = 0;\r
+  Mcr.Bits.Lme  = 0;\r
   WRITE_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Mcr.Data);\r
 \r
   //\r
@@ -1028,9 +1024,9 @@ IsaSerialReset (
   //\r
   // for 16550A enable FIFO, 16550 disable FIFO\r
   //\r
-  Fcr.Bits.TRFIFOE  = 1;\r
-  Fcr.Bits.RESETRF  = 1;\r
-  Fcr.Bits.RESETTF  = 1;\r
+  Fcr.Bits.TrFIFOE  = 1;\r
+  Fcr.Bits.ResetRF  = 1;\r
+  Fcr.Bits.ResetTF  = 1;\r
   WRITE_FCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Fcr.Data);\r
 \r
   //\r
@@ -1052,20 +1048,20 @@ IsaSerialReset (
 }\r
 \r
 /**\r
-  Set new attributes to a serial device\r
+  Set new attributes to a serial device.\r
 \r
-  @param This                   - Pointer to EFI_SERIAL_IO_PROTOCOL\r
-  @param  BaudRate               - The baudrate of the serial device\r
-  @param  ReceiveFifoDepth       - The depth of receive FIFO buffer\r
-  @param  Timeout                - The request timeout for a single char\r
-  @param  Parity                 - The type of parity used in serial device\r
-  @param  DataBits               - Number of databits used in serial device\r
-  @param  StopBits               - Number of stopbits used in serial device\r
+  @param This                     Pointer to EFI_SERIAL_IO_PROTOCOL\r
+  @param  BaudRate                 The baudrate of the serial device\r
+  @param  ReceiveFifoDepth         The depth of receive FIFO buffer\r
+  @param  Timeout                  The request timeout for a single char\r
+  @param  Parity                   The type of parity used in serial device\r
+  @param  DataBits                 Number of databits used in serial device\r
+  @param  StopBits                 Number of stopbits used in serial device\r
 \r
-  @retval  EFI_SUCCESS            - The new attributes were set\r
-  @retval  EFI_INVALID_PARAMETERS - One or more attributes have an unsupported value\r
-  @retval  EFI_UNSUPPORTED        - Data Bits can not set to 5 or 6\r
-  @retval  EFI_DEVICE_ERROR       - The serial device is not functioning correctly (no return)\r
+  @retval  EFI_SUCCESS              The new attributes were set\r
+  @retval  EFI_INVALID_PARAMETERS   One or more attributes have an unsupported value\r
+  @retval  EFI_UNSUPPORTED          Data Bits can not set to 5 or 6\r
+  @retval  EFI_DEVICE_ERROR         The serial device is not functioning correctly (no return)\r
 \r
 **/\r
 EFI_STATUS\r
@@ -1213,11 +1209,11 @@ IsaSerialSetAttributes (
                        ((UINT32) BaudRate * 16),\r
                        &Remained\r
                        );\r
-  if (Remained) {\r
+  if (Remained != 0) {\r
     Divisor += 1;\r
   }\r
 \r
-  if ((Divisor == 0) || (Divisor & 0xffff0000)) {\r
+  if ((Divisor == 0) || ((Divisor & 0xffff0000) != 0)) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
@@ -1232,7 +1228,7 @@ IsaSerialSetAttributes (
   // Put serial port on Divisor Latch Mode\r
   //\r
   Lcr.Data      = READ_LCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);\r
-  Lcr.Bits.DLAB = 1;\r
+  Lcr.Bits.DLab = 1;\r
   WRITE_LCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Lcr.Data);\r
 \r
   //\r
@@ -1244,37 +1240,37 @@ IsaSerialSetAttributes (
   //\r
   // Put serial port back in normal mode and set remaining attributes.\r
   //\r
-  Lcr.Bits.DLAB = 0;\r
+  Lcr.Bits.DLab = 0;\r
 \r
   switch (Parity) {\r
   case NoParity:\r
-    Lcr.Bits.PAREN    = 0;\r
-    Lcr.Bits.EVENPAR  = 0;\r
-    Lcr.Bits.STICPAR  = 0;\r
+    Lcr.Bits.ParEn    = 0;\r
+    Lcr.Bits.EvenPar  = 0;\r
+    Lcr.Bits.SticPar  = 0;\r
     break;\r
 \r
   case EvenParity:\r
-    Lcr.Bits.PAREN    = 1;\r
-    Lcr.Bits.EVENPAR  = 1;\r
-    Lcr.Bits.STICPAR  = 0;\r
+    Lcr.Bits.ParEn    = 1;\r
+    Lcr.Bits.EvenPar  = 1;\r
+    Lcr.Bits.SticPar  = 0;\r
     break;\r
 \r
   case OddParity:\r
-    Lcr.Bits.PAREN    = 1;\r
-    Lcr.Bits.EVENPAR  = 0;\r
-    Lcr.Bits.STICPAR  = 0;\r
+    Lcr.Bits.ParEn    = 1;\r
+    Lcr.Bits.EvenPar  = 0;\r
+    Lcr.Bits.SticPar  = 0;\r
     break;\r
 \r
   case SpaceParity:\r
-    Lcr.Bits.PAREN    = 1;\r
-    Lcr.Bits.EVENPAR  = 1;\r
-    Lcr.Bits.STICPAR  = 1;\r
+    Lcr.Bits.ParEn    = 1;\r
+    Lcr.Bits.EvenPar  = 1;\r
+    Lcr.Bits.SticPar  = 1;\r
     break;\r
 \r
   case MarkParity:\r
-    Lcr.Bits.PAREN    = 1;\r
-    Lcr.Bits.EVENPAR  = 0;\r
-    Lcr.Bits.STICPAR  = 1;\r
+    Lcr.Bits.ParEn    = 1;\r
+    Lcr.Bits.EvenPar  = 0;\r
+    Lcr.Bits.SticPar  = 1;\r
     break;\r
 \r
   default:\r
@@ -1283,12 +1279,12 @@ IsaSerialSetAttributes (
 \r
   switch (StopBits) {\r
   case OneStopBit:\r
-    Lcr.Bits.STOPB = 0;\r
+    Lcr.Bits.StopB = 0;\r
     break;\r
 \r
   case OneFiveStopBits:\r
   case TwoStopBits:\r
-    Lcr.Bits.STOPB = 1;\r
+    Lcr.Bits.StopB = 1;\r
     break;\r
 \r
   default:\r
@@ -1297,7 +1293,7 @@ IsaSerialSetAttributes (
   //\r
   // DataBits\r
   //\r
-  Lcr.Bits.SERIALDB = (UINT8) ((DataBits - 5) & 0x03);\r
+  Lcr.Bits.SerialDB = (UINT8) ((DataBits - 5) & 0x03);\r
   WRITE_LCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Lcr.Data);\r
 \r
   //\r
@@ -1351,7 +1347,7 @@ IsaSerialSetAttributes (
     }\r
   }\r
 \r
-  if (SerialDevice->DevicePath) {\r
+  if (SerialDevice->DevicePath != NULL) {\r
     gBS->FreePool (SerialDevice->DevicePath);\r
   }\r
 \r
@@ -1363,13 +1359,13 @@ IsaSerialSetAttributes (
 }\r
 \r
 /**\r
-  Set Control Bits\r
+  Set Control Bits.\r
 \r
-  @param This            - Pointer to EFI_SERIAL_IO_PROTOCOL\r
-  @param Control         - Control bits that can be settable\r
+  @param This              Pointer to EFI_SERIAL_IO_PROTOCOL\r
+  @param Control           Control bits that can be settable\r
 \r
-  @retval EFI_SUCCESS     - New Control bits were set successfully\r
-  @retval EFI_UNSUPPORTED - The Control bits wanted to set are not supported\r
+  @retval EFI_SUCCESS       New Control bits were set successfully\r
+  @retval EFI_UNSUPPORTED   The Control bits wanted to set are not supported\r
 \r
 **/\r
 EFI_STATUS\r
@@ -1395,38 +1391,38 @@ IsaSerialSetControl (
   //\r
   // first determine the parameter is invalid\r
   //\r
-  if (Control & 0xffff8ffc) {\r
+  if ((Control & 0xffff8ffc) != 0) {\r
     return EFI_UNSUPPORTED;\r
   }\r
 \r
   Tpl = gBS->RaiseTPL (TPL_NOTIFY);\r
 \r
   Mcr.Data = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);\r
-  Mcr.Bits.DTRC = 0;\r
-  Mcr.Bits.RTS = 0;\r
-  Mcr.Bits.LME = 0;\r
+  Mcr.Bits.DtrC = 0;\r
+  Mcr.Bits.Rts = 0;\r
+  Mcr.Bits.Lme = 0;\r
   SerialDevice->SoftwareLoopbackEnable = FALSE;\r
   SerialDevice->HardwareFlowControl = FALSE;\r
 \r
-  if (Control & EFI_SERIAL_DATA_TERMINAL_READY) {\r
-    Mcr.Bits.DTRC = 1;\r
+  if ((Control & EFI_SERIAL_DATA_TERMINAL_READY) == EFI_SERIAL_DATA_TERMINAL_READY) {\r
+    Mcr.Bits.DtrC = 1;\r
   }\r
 \r
-  if (Control & EFI_SERIAL_REQUEST_TO_SEND) {\r
-    Mcr.Bits.RTS = 1;\r
+  if ((Control & EFI_SERIAL_REQUEST_TO_SEND) == EFI_SERIAL_REQUEST_TO_SEND) {\r
+    Mcr.Bits.Rts = 1;\r
   }\r
 \r
-  if (Control & EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE) {\r
-    Mcr.Bits.LME = 1;\r
+  if ((Control & EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE) == EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE) {\r
+    Mcr.Bits.Lme = 1;\r
   }\r
 \r
-  if (Control & EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE) {\r
+  if ((Control & EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE) == EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE) {\r
     SerialDevice->HardwareFlowControl = TRUE;\r
   }\r
 \r
   WRITE_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, Mcr.Data);\r
 \r
-  if (Control & EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE) {\r
+  if ((Control & EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE) == EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE) {\r
     SerialDevice->SoftwareLoopbackEnable = TRUE;\r
   }\r
 \r
@@ -1436,12 +1432,12 @@ IsaSerialSetControl (
 }\r
 \r
 /**\r
-  Get ControlBits\r
+  Get ControlBits.\r
 \r
-  @param This        - Pointer to EFI_SERIAL_IO_PROTOCOL\r
-  @param Control     - Control signals of the serial device\r
+  @param This          Pointer to EFI_SERIAL_IO_PROTOCOL\r
+  @param Control       Control signals of the serial device\r
 \r
-  @retval EFI_SUCCESS - Get Control signals successfully\r
+  @retval EFI_SUCCESS   Get Control signals successfully\r
 \r
 **/\r
 EFI_STATUS\r
@@ -1467,19 +1463,19 @@ IsaSerialGetControl (
   //\r
   Msr.Data = READ_MSR (SerialDevice->IsaIo, SerialDevice->BaseAddress);\r
 \r
-  if (Msr.Bits.CTS) {\r
+  if (Msr.Bits.Cts == 1) {\r
     *Control |= EFI_SERIAL_CLEAR_TO_SEND;\r
   }\r
 \r
-  if (Msr.Bits.DSR) {\r
+  if (Msr.Bits.Dsr == 1) {\r
     *Control |= EFI_SERIAL_DATA_SET_READY;\r
   }\r
 \r
-  if (Msr.Bits.RI) {\r
+  if (Msr.Bits.Ri == 1) {\r
     *Control |= EFI_SERIAL_RING_INDICATE;\r
   }\r
 \r
-  if (Msr.Bits.DCD) {\r
+  if (Msr.Bits.Dcd == 1) {\r
     *Control |= EFI_SERIAL_CARRIER_DETECT;\r
   }\r
   //\r
@@ -1487,15 +1483,15 @@ IsaSerialGetControl (
   //\r
   Mcr.Data = READ_MCR (SerialDevice->IsaIo, SerialDevice->BaseAddress);\r
 \r
-  if (Mcr.Bits.DTRC) {\r
+  if (Mcr.Bits.DtrC == 1) {\r
     *Control |= EFI_SERIAL_DATA_TERMINAL_READY;\r
   }\r
 \r
-  if (Mcr.Bits.RTS) {\r
+  if (Mcr.Bits.Rts == 1) {\r
     *Control |= EFI_SERIAL_REQUEST_TO_SEND;\r
   }\r
 \r
-  if (Mcr.Bits.LME) {\r
+  if (Mcr.Bits.Lme == 1) {\r
     *Control |= EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE;\r
   }\r
 \r
@@ -1529,16 +1525,16 @@ IsaSerialGetControl (
 }\r
 \r
 /**\r
-  Write the specified number of bytes to serial device\r
+  Write the specified number of bytes to serial device.\r
 \r
-  @param This             - Pointer to EFI_SERIAL_IO_PROTOCOL\r
-  @param  BufferSize       - On input the size of Buffer, on output the amount of\r
+  @param This               Pointer to EFI_SERIAL_IO_PROTOCOL\r
+  @param  BufferSize         On input the size of Buffer, on output the amount of\r
                        data actually written\r
-  @param  Buffer           - The buffer of data to write\r
+  @param  Buffer             The buffer of data to write\r
 \r
-  @retval EFI_SUCCESS      - The data were written successfully\r
-  @retval EFI_DEVICE_ERROR - The device reported an error\r
-  @retval EFI_TIMEOUT      - The write operation was stopped due to timeout\r
+  @retval EFI_SUCCESS        The data were written successfully\r
+  @retval EFI_DEVICE_ERROR   The device reported an error\r
+  @retval EFI_TIMEOUT        The write operation was stopped due to timeout\r
 \r
 **/\r
 EFI_STATUS\r
@@ -1564,7 +1560,7 @@ IsaSerialWrite (
     return EFI_SUCCESS;\r
   }\r
 \r
-  if (!Buffer) {\r
+  if (Buffer == NULL) {\r
     REPORT_STATUS_CODE_WITH_DEVICE_PATH (\r
       EFI_ERROR_CODE,\r
       EFI_P_EC_OUTPUT_ERROR | EFI_PERIPHERAL_SERIAL_PORT,\r
@@ -1610,16 +1606,16 @@ IsaSerialWrite (
 }\r
 \r
 /**\r
-  Read the specified number of bytes from serial device\r
+  Read the specified number of bytes from serial device.\r
 \r
-  @param This             - Pointer to EFI_SERIAL_IO_PROTOCOL\r
-  @param BufferSize       - On input the size of Buffer, on output the amount of\r
-                       data returned in buffer\r
-  @param Buffer           -  The buffer to return the data into\r
+  @param This               Pointer to EFI_SERIAL_IO_PROTOCOL\r
+  @param BufferSize         On input the size of Buffer, on output the amount of\r
+                            data returned in buffer\r
+  @param Buffer             The buffer to return the data into\r
 \r
-  @retval EFI_SUCCESS      - The data were read successfully\r
-  @retval EFI_DEVICE_ERROR - The device reported an error\r
-  @retval EFI_TIMEOUT      - The read operation was stopped due to timeout\r
+  @retval EFI_SUCCESS        The data were read successfully\r
+  @retval EFI_DEVICE_ERROR   The device reported an error\r
+  @retval EFI_TIMEOUT        The read operation was stopped due to timeout\r
 \r
 **/\r
 EFI_STATUS\r
@@ -1644,7 +1640,7 @@ IsaSerialRead (
     return EFI_SUCCESS;\r
   }\r
 \r
-  if (!Buffer) {\r
+  if (Buffer == NULL) {\r
     return EFI_DEVICE_ERROR;\r
   }\r
 \r
@@ -1704,9 +1700,9 @@ IsaSerialRead (
 }\r
 \r
 /**\r
-  Use scratchpad register to test if this serial port is present\r
+  Use scratchpad register to test if this serial port is present.\r
 \r
-  @param SerialDevice - Pointer to serial device structure\r
+  @param SerialDevice   Pointer to serial device structure\r
 \r
   @return if this serial port is present\r
 **/\r
@@ -1728,17 +1724,13 @@ IsaSerialPortPresent (
   WRITE_SCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, 0xAA);\r
 \r
   if (READ_SCR (SerialDevice->IsaIo, SerialDevice->BaseAddress) != 0xAA) {\r
-    if (!FeaturePcdGet (PcdNtEmulatorEnable)) {\r
-      Status = FALSE;\r
-    }\r
+    Status = FALSE;\r
   }\r
 \r
   WRITE_SCR (SerialDevice->IsaIo, SerialDevice->BaseAddress, 0x55);\r
 \r
   if (READ_SCR (SerialDevice->IsaIo, SerialDevice->BaseAddress) != 0x55) {\r
-    if (!FeaturePcdGet (PcdNtEmulatorEnable)) {\r
-      Status = FALSE;\r
-    }\r
+    Status = FALSE;\r
   }\r
   //\r
   // Restore SCR\r
@@ -1748,11 +1740,11 @@ IsaSerialPortPresent (
 }\r
 \r
 /**\r
-  Use IsaIo protocol to read serial port\r
+  Use IsaIo protocol to read serial port.\r
 \r
-  @param IsaIo       - Pointer to EFI_ISA_IO_PROTOCOL instance\r
-  @param BaseAddress - Serial port register group base address\r
-  @param Offset      - Offset in register group\r
+  @param IsaIo         Pointer to EFI_ISA_IO_PROTOCOL instance\r
+  @param BaseAddress   Serial port register group base address\r
+  @param Offset        Offset in register group\r
 \r
   @return Data read from serial port\r
 \r
@@ -1780,12 +1772,12 @@ IsaSerialReadPort (
 }\r
 \r
 /**\r
-  Use IsaIo protocol to write serial port\r
+  Use IsaIo protocol to write serial port.\r
 \r
-  @param  IsaIo       - Pointer to EFI_ISA_IO_PROTOCOL instance\r
-  @param  BaseAddress - Serial port register group base address\r
-  @param  Offset      - Offset in register group\r
-  @param  Data        - data which is to be written to some serial port register\r
+  @param  IsaIo         Pointer to EFI_ISA_IO_PROTOCOL instance\r
+  @param  BaseAddress   Serial port register group base address\r
+  @param  Offset        Offset in register group\r
+  @param  Data          data which is to be written to some serial port register\r
 \r
 **/\r
 VOID\r