1#ifndef _EFI_SER_H
2#define _EFI_SER_H
3
4/*++
5
6Copyright (c)  1999 - 2002 Intel Corporation. All rights reserved
7This software and associated documentation (if any) is furnished
8under a license and may only be used or copied in accordance
9with the terms of the license. Except as permitted by such
10license, no part of this software or documentation may be
11reproduced, stored in a retrieval system, or transmitted in any
12form or by any means without the express written consent of
13Intel Corporation.
14
15Module Name:
16
17    efiser.h
18
19Abstract:
20
21    EFI serial protocol
22
23Revision History
24
25--*/
26
27//
28// Serial protocol
29//
30
31#define SERIAL_IO_PROTOCOL \
32    { 0xBB25CF6F, 0xF1D4, 0x11D2, {0x9A, 0x0C, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0xFD} }
33
34INTERFACE_DECL(_SERIAL_IO_INTERFACE);
35
36typedef enum {
37    DefaultParity,
38    NoParity,
39    EvenParity,
40    OddParity,
41    MarkParity,
42    SpaceParity
43} EFI_PARITY_TYPE;
44
45typedef enum {
46    DefaultStopBits,
47    OneStopBit,         // 1 stop bit
48    OneFiveStopBits,    // 1.5 stop bits
49    TwoStopBits         // 2 stop bits
50} EFI_STOP_BITS_TYPE;
51
52#define EFI_SERIAL_CLEAR_TO_SEND                   0x0010  // RO
53#define EFI_SERIAL_DATA_SET_READY                  0x0020  // RO
54#define EFI_SERIAL_RING_INDICATE                   0x0040  // RO
55#define EFI_SERIAL_CARRIER_DETECT                  0x0080  // RO
56#define EFI_SERIAL_REQUEST_TO_SEND                 0x0002  // WO
57#define EFI_SERIAL_DATA_TERMINAL_READY             0x0001  // WO
58#define EFI_SERIAL_INPUT_BUFFER_EMPTY              0x0100  // RO
59#define EFI_SERIAL_OUTPUT_BUFFER_EMPTY             0x0200  // RO
60#define EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE        0x1000  // RW
61#define EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE        0x2000  // RW
62#define EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE    0x4000  // RW
63
64typedef
65EFI_STATUS
66(EFIAPI *EFI_SERIAL_RESET) (
67    IN struct _SERIAL_IO_INTERFACE  *This
68    );
69
70typedef
71EFI_STATUS
72(EFIAPI *EFI_SERIAL_SET_ATTRIBUTES) (
73    IN struct _SERIAL_IO_INTERFACE  *This,
74    IN UINT64                       BaudRate,
75    IN UINT32                       ReceiveFifoDepth,
76    IN UINT32                       Timeout,
77    IN EFI_PARITY_TYPE              Parity,
78    IN UINT8                        DataBits,
79    IN EFI_STOP_BITS_TYPE           StopBits
80    );
81
82typedef
83EFI_STATUS
84(EFIAPI *EFI_SERIAL_SET_CONTROL_BITS) (
85    IN struct _SERIAL_IO_INTERFACE  *This,
86    IN UINT32                       Control
87    );
88
89typedef
90EFI_STATUS
91(EFIAPI *EFI_SERIAL_GET_CONTROL_BITS) (
92    IN struct _SERIAL_IO_INTERFACE  *This,
93    OUT UINT32                      *Control
94    );
95
96typedef
97EFI_STATUS
98(EFIAPI *EFI_SERIAL_WRITE) (
99    IN struct _SERIAL_IO_INTERFACE  *This,
100    IN OUT UINTN                    *BufferSize,
101    IN VOID                         *Buffer
102    );
103
104typedef
105EFI_STATUS
106(EFIAPI *EFI_SERIAL_READ) (
107    IN struct _SERIAL_IO_INTERFACE  *This,
108    IN OUT UINTN                    *BufferSize,
109    OUT VOID                        *Buffer
110    );
111
112typedef struct {
113    UINT32                  ControlMask;
114
115    // current Attributes
116    UINT32                  Timeout;
117    UINT64                  BaudRate;
118    UINT32                  ReceiveFifoDepth;
119    UINT32                  DataBits;
120    UINT32                  Parity;
121    UINT32                  StopBits;
122} SERIAL_IO_MODE;
123
124#define SERIAL_IO_INTERFACE_REVISION    0x00010000
125
126typedef struct _SERIAL_IO_INTERFACE {
127    UINT32                       Revision;
128    EFI_SERIAL_RESET             Reset;
129    EFI_SERIAL_SET_ATTRIBUTES    SetAttributes;
130    EFI_SERIAL_SET_CONTROL_BITS  SetControl;
131    EFI_SERIAL_GET_CONTROL_BITS  GetControl;
132    EFI_SERIAL_WRITE             Write;
133    EFI_SERIAL_READ              Read;
134
135    SERIAL_IO_MODE               *Mode;
136} SERIAL_IO_INTERFACE;
137
138#endif
139