]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkNt32Pkg/Dxe/WinNtThunk/Bus/SerialIo/UnixSerialIo.h
Add UnixSerialIo device driver
[mirror_edk2.git] / EdkNt32Pkg / Dxe / WinNtThunk / Bus / SerialIo / UnixSerialIo.h
diff --git a/EdkNt32Pkg/Dxe/WinNtThunk/Bus/SerialIo/UnixSerialIo.h b/EdkNt32Pkg/Dxe/WinNtThunk/Bus/SerialIo/UnixSerialIo.h
new file mode 100644 (file)
index 0000000..30109e2
--- /dev/null
@@ -0,0 +1,507 @@
+/*++\r
+\r
+Copyright (c) 2006, Intel Corporation                                                         \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
+\r
+Module Name:\r
+\r
+  UnixSerialIo.h\r
+\r
+Abstract:\r
+\r
+\r
+--*/\r
+\r
+#ifndef _UNIXPKG_SERIAL_IO_\r
+#define _UNIXPKG_SERIAL_IO_\r
+#include <sys/types.h>\r
+#include <sys/stat.h>\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <termio.h>\r
+#include <fcntl.h>\r
+#include <errno.h>\r
+\r
+#define SERIAL_MAX_BUFFER_SIZE  256\r
+#define TIMEOUT_STALL_INTERVAL  10\r
+\r
+typedef struct {\r
+  UINT32  First;\r
+  UINT32  Last;\r
+  UINT32  Surplus;\r
+  UINT8   Data[SERIAL_MAX_BUFFER_SIZE];\r
+} SERIAL_DEV_FIFO;\r
+\r
+#define UNIX_SERIAL_IO_PRIVATE_DATA_SIGNATURE EFI_SIGNATURE_32 ('U', 'N', 's', 'i')\r
+typedef struct {\r
+  UINT64                    Signature;\r
+\r
+  //\r
+  // Protocol data for the new handle we are going to add\r
+  //\r
+  EFI_HANDLE                Handle;\r
+  EFI_SERIAL_IO_PROTOCOL    SerialIo;\r
+  EFI_SERIAL_IO_MODE        SerialIoMode;\r
+  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
+\r
+  //\r
+  // Private Data\r
+  //\r
+  EFI_HANDLE                ControllerHandle;\r
+  EFI_DEVICE_PATH_PROTOCOL  *ParentDevicePath;\r
+  UART_DEVICE_PATH          UartDevicePath;\r
+  EFI_UNIX_THUNK_PROTOCOL   *UnixThunk;\r
+\r
+  EFI_UNICODE_STRING_TABLE  *ControllerNameTable;\r
+\r
+  //\r
+  // Private NT type Data;\r
+  //\r
+  UINTN                       UnixHandle;\r
+  struct termios              UnixTermios;\r
+\r
+  BOOLEAN                   SoftwareLoopbackEnable;\r
+  BOOLEAN                   HardwareFlowControl;\r
+  BOOLEAN                   HardwareLoopbackEnable;\r
+\r
+  SERIAL_DEV_FIFO           Fifo;\r
+\r
+} UNIX_SERIAL_IO_PRIVATE_DATA;\r
+\r
+#define UNIX_SERIAL_IO_PRIVATE_DATA_FROM_THIS(a) \\r
+         CR(a, UNIX_SERIAL_IO_PRIVATE_DATA, SerialIo, UNIX_SERIAL_IO_PRIVATE_DATA_SIGNATURE)\r
+\r
+//\r
+// Global Protocol Variables\r
+//\r
+extern EFI_DRIVER_BINDING_PROTOCOL  gUnixSerialIoDriverBinding;\r
+extern EFI_COMPONENT_NAME_PROTOCOL  gUnixSerialIoComponentName;\r
+\r
+//\r
+// Macros to convert EFI serial types to NT serial types.\r
+//\r
+\r
+//\r
+// one second\r
+//\r
+#define SERIAL_TIMEOUT_DEFAULT  (1000 * 1000) \r
+#define SERIAL_BAUD_DEFAULT     115200\r
+#define SERIAL_FIFO_DEFAULT     14\r
+#define SERIAL_DATABITS_DEFAULT 8\r
+#define SERIAL_PARITY_DEFAULT   DefaultParity\r
+#define SERIAL_STOPBITS_DEFAULT DefaultStopBits\r
+\r
+#define SERIAL_CONTROL_MASK     (EFI_SERIAL_CLEAR_TO_SEND       | \\r
+                                 EFI_SERIAL_DATA_SET_READY      | \\r
+                                 EFI_SERIAL_RING_INDICATE       | \\r
+                                 EFI_SERIAL_CARRIER_DETECT      | \\r
+                                 EFI_SERIAL_REQUEST_TO_SEND     | \\r
+                                 EFI_SERIAL_DATA_TERMINAL_READY | \\r
+                                 EFI_SERIAL_INPUT_BUFFER_EMPTY)\r
+\r
+#define ConvertBaud2Nt(x)       (DWORD) x\r
+#define ConvertData2Nt(x)       (BYTE) x\r
+\r
+#define ConvertParity2Nt(x)              \\r
+    (BYTE) (                             \\r
+    x == DefaultParity ? NOPARITY    :   \\r
+    x == NoParity      ? NOPARITY    :   \\r
+    x == EvenParity    ? EVENPARITY  :   \\r
+    x == OddParity     ? ODDPARITY   :   \\r
+    x == MarkParity    ? MARKPARITY  :   \\r
+    x == SpaceParity   ? SPACEPARITY : 0 \\r
+    )\r
+\r
+#define ConvertStop2Nt(x)                 \\r
+    (BYTE) (                                \\r
+    x == DefaultParity   ? ONESTOPBIT   :   \\r
+    x == OneFiveStopBits ? ONE5STOPBITS :   \\r
+    x == TwoStopBits     ? TWOSTOPBITS  : 0 \\r
+    )\r
+\r
+#define ConvertTime2Nt(x) ((x) / 1000)\r
+\r
+//\r
+// 115400 baud with rounding errors\r
+//\r
+#define SERIAL_PORT_MAX_BAUD_RATE 115400  \r
+\r
+//\r
+// Function Prototypes\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+InitializeUnixSerialIo (\r
+  IN EFI_HANDLE           ImageHandle,\r
+  IN EFI_SYSTEM_TABLE     *SystemTable\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  TODO: Add function description\r
+\r
+Arguments:\r
+\r
+  ImageHandle - TODO: add argument description\r
+  SystemTable - TODO: add argument description\r
+\r
+Returns:\r
+\r
+  TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+UnixSerialIoDriverBindingSupported (\r
+  IN  EFI_DRIVER_BINDING_PROTOCOL     *This,\r
+  IN  EFI_HANDLE                      Handle,\r
+  IN  EFI_DEVICE_PATH_PROTOCOL        *RemainingDevicePath\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  TODO: Add function description\r
+\r
+Arguments:\r
+\r
+  This                - TODO: add argument description\r
+  Handle              - TODO: add argument description\r
+  RemainingDevicePath - TODO: add argument description\r
+\r
+Returns:\r
+\r
+  TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+UnixSerialIoDriverBindingStart (\r
+  IN  EFI_DRIVER_BINDING_PROTOCOL     *This,\r
+  IN  EFI_HANDLE                      Handle,\r
+  IN  EFI_DEVICE_PATH_PROTOCOL        *RemainingDevicePath\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  TODO: Add function description\r
+\r
+Arguments:\r
+\r
+  This                - TODO: add argument description\r
+  Handle              - TODO: add argument description\r
+  RemainingDevicePath - TODO: add argument description\r
+\r
+Returns:\r
+\r
+  TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+UnixSerialIoDriverBindingStop (\r
+  IN  EFI_DRIVER_BINDING_PROTOCOL   *This,\r
+  IN  EFI_HANDLE                    Handle,\r
+  IN  UINTN                         NumberOfChildren,\r
+  IN  EFI_HANDLE                    *ChildHandleBuffer\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  TODO: Add function description\r
+\r
+Arguments:\r
+\r
+  This              - TODO: add argument description\r
+  Handle            - TODO: add argument description\r
+  NumberOfChildren  - TODO: add argument description\r
+  ChildHandleBuffer - TODO: add argument description\r
+\r
+Returns:\r
+\r
+  TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+UnixSerialIoReset (\r
+  IN EFI_SERIAL_IO_PROTOCOL *This\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  TODO: Add function description\r
+\r
+Arguments:\r
+\r
+  This  - TODO: add argument description\r
+\r
+Returns:\r
+\r
+  TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+UnixSerialIoSetAttributes (\r
+  IN EFI_SERIAL_IO_PROTOCOL *This,\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
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  TODO: Add function description\r
+\r
+Arguments:\r
+\r
+  This              - TODO: add argument description\r
+  BaudRate          - TODO: add argument description\r
+  ReceiveFifoDepth  - TODO: add argument description\r
+  Timeout           - TODO: add argument description\r
+  Parity            - TODO: add argument description\r
+  DataBits          - TODO: add argument description\r
+  StopBits          - TODO: add argument description\r
+\r
+Returns:\r
+\r
+  TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+UnixSerialIoSetControl (\r
+  IN EFI_SERIAL_IO_PROTOCOL *This,\r
+  IN UINT32                 Control\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  TODO: Add function description\r
+\r
+Arguments:\r
+\r
+  This    - TODO: add argument description\r
+  Control - TODO: add argument description\r
+\r
+Returns:\r
+\r
+  TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+UnixSerialIoGetControl (\r
+  IN  EFI_SERIAL_IO_PROTOCOL  *This,\r
+  OUT UINT32                  *Control\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  TODO: Add function description\r
+\r
+Arguments:\r
+\r
+  This    - TODO: add argument description\r
+  Control - TODO: add argument description\r
+\r
+Returns:\r
+\r
+  TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+UnixSerialIoWrite (\r
+  IN EFI_SERIAL_IO_PROTOCOL   *This,\r
+  IN OUT UINTN                *BufferSize,\r
+  IN VOID                     *Buffer\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  TODO: Add function description\r
+\r
+Arguments:\r
+\r
+  This        - TODO: add argument description\r
+  BufferSize  - TODO: add argument description\r
+  Buffer      - TODO: add argument description\r
+\r
+Returns:\r
+\r
+  TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+UnixSerialIoRead (\r
+  IN  EFI_SERIAL_IO_PROTOCOL  *This,\r
+  IN  OUT UINTN               *BufferSize,\r
+  OUT VOID                    *Buffer\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  TODO: Add function description\r
+\r
+Arguments:\r
+\r
+  This        - TODO: add argument description\r
+  BufferSize  - TODO: add argument description\r
+  Buffer      - TODO: add argument description\r
+\r
+Returns:\r
+\r
+  TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+BOOLEAN\r
+IsaSerialFifoFull (\r
+  IN SERIAL_DEV_FIFO *Fifo\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  TODO: Add function description\r
+\r
+Arguments:\r
+\r
+  Fifo  - TODO: add argument description\r
+\r
+Returns:\r
+\r
+  TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+BOOLEAN\r
+IsaSerialFifoEmpty (\r
+  IN SERIAL_DEV_FIFO *Fifo\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  TODO: Add function description\r
+\r
+Arguments:\r
+\r
+  Fifo  - TODO: add argument description\r
+\r
+Returns:\r
+\r
+  TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+IsaSerialFifoAdd (\r
+  IN SERIAL_DEV_FIFO *Fifo,\r
+  IN UINT8           Data\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  TODO: Add function description\r
+\r
+Arguments:\r
+\r
+  Fifo  - TODO: add argument description\r
+  Data  - TODO: add argument description\r
+\r
+Returns:\r
+\r
+  TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+IsaSerialFifoRemove (\r
+  IN  SERIAL_DEV_FIFO *Fifo,\r
+  OUT UINT8           *Data\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  TODO: Add function description\r
+\r
+Arguments:\r
+\r
+  Fifo  - TODO: add argument description\r
+  Data  - TODO: add argument description\r
+\r
+Returns:\r
+\r
+  TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+IsaSerialReceiveTransmit (\r
+  UNIX_SERIAL_IO_PRIVATE_DATA     *Private\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  TODO: Add function description\r
+\r
+Arguments:\r
+\r
+  Private - TODO: add argument description\r
+\r
+Returns:\r
+\r
+  TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+#endif\r