176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef _EFI_SER_H
276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define _EFI_SER_H
376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/*++
576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
676d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanCopyright (c) 1998  Intel Corporation
776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
876d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanModule Name:
976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    efiser.h
1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1276d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanAbstract:
1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI serial protocol
1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1676d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanRevision History
1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman--*/
1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//
2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// Serial protocol
2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//
2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SERIAL_IO_PROTOCOL \
2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    { 0xBB25CF6F, 0xF1D4, 0x11D2, {0x9A, 0x0C, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0xFD} }
2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2776d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanINTERFACE_DECL(_SERIAL_IO_INTERFACE);
2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef enum {
3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    DefaultParity,
3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    NoParity,
3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EvenParity,
3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    OddParity,
3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    MarkParity,
3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    SpaceParity
3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_PARITY_TYPE;
3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef enum {
3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    DefaultStopBits,
4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    OneStopBit,         // 1 stop bit
4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    OneFiveStopBits,    // 1.5 stop bits
4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    TwoStopBits         // 2 stop bits
4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_STOP_BITS_TYPE;
4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SERIAL_CLEAR_TO_SEND                   0x0010  // RO
4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SERIAL_DATA_SET_READY                  0x0020  // RO
4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SERIAL_RING_INDICATE                   0x0040  // RO
4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SERIAL_CARRIER_DETECT                  0x0080  // RO
4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SERIAL_REQUEST_TO_SEND                 0x0002  // WO
5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SERIAL_DATA_TERMINAL_READY             0x0001  // WO
5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SERIAL_INPUT_BUFFER_EMPTY              0x0100  // RO
5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SERIAL_OUTPUT_BUFFER_EMPTY             0x0200  // RO
5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE        0x1000  // RW
5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE        0x2000  // RW
5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE    0x4000  // RW
5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
5876d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_SERIAL_RESET) (
6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _SERIAL_IO_INTERFACE  *This
6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
6476d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_SERIAL_SET_ATTRIBUTES) (
6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _SERIAL_IO_INTERFACE  *This,
6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN UINT64                       BaudRate,
6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN UINT32                       ReceiveFifoDepth,
6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN UINT32                       Timeout,
7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN EFI_PARITY_TYPE              Parity,
7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN UINT8                        DataBits,
7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN EFI_STOP_BITS_TYPE           StopBits
7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
7676d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_SERIAL_SET_CONTROL_BITS) (
7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _SERIAL_IO_INTERFACE  *This,
7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN UINT32                       Control
8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
8376d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_SERIAL_GET_CONTROL_BITS) (
8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _SERIAL_IO_INTERFACE  *This,
8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    OUT UINT32                      *Control
8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
9076d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_SERIAL_WRITE) (
9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _SERIAL_IO_INTERFACE  *This,
9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN OUT UINTN                    *BufferSize,
9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN VOID                         *Buffer
9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
9876d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_SERIAL_READ) (
10076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _SERIAL_IO_INTERFACE  *This,
10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN OUT UINTN                    *BufferSize,
10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    OUT VOID                        *Buffer
10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32                  ControlMask;
10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
10876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    // current Attributes
10976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32                  Timeout;
11076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT64                  BaudRate;
11176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32                  ReceiveFifoDepth;
11276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32                  DataBits;
11376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32                  Parity;
11476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32                  StopBits;
11576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} SERIAL_IO_MODE;
11676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
11776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SERIAL_IO_INTERFACE_REVISION    0x00010000
11876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
11976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _SERIAL_IO_INTERFACE {
12076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32                       Revision;
12176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_SERIAL_RESET             Reset;
12276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_SERIAL_SET_ATTRIBUTES    SetAttributes;
12376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_SERIAL_SET_CONTROL_BITS  SetControl;
12476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_SERIAL_GET_CONTROL_BITS  GetControl;
12576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_SERIAL_WRITE             Write;
12676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_SERIAL_READ              Read;
12776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
12876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    SERIAL_IO_MODE               *Mode;
12976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} SERIAL_IO_INTERFACE;
13076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
13176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif
13276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
133