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