1/*	$NetBSD: efiser.h,v 1.1 2006/04/07 14:21:29 cherry Exp $	*/
2/* $FreeBSD: src/sys/boot/efi/include/efiser.h,v 1.2 2002/05/19 03:17:21 marcel Exp $ */
3
4#ifndef _EFI_SER_H
5#define _EFI_SER_H
6
7/*++
8
9Copyright (c) 1998  Intel Corporation
10
11Module Name:
12
13    efiser.h
14
15Abstract:
16
17    EFI serial protocol
18
19Revision History
20
21--*/
22
23/*
24 * Serial protocol
25 */
26
27#define SERIAL_IO_PROTOCOL \
28    { 0xBB25CF6F, 0xF1D4, 0x11D2, 0x9A, 0x0C, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0xFD }
29
30INTERFACE_DECL(_SERIAL_IO_INTERFACE);
31
32typedef enum {
33    DefaultParity,
34    NoParity,
35    EvenParity,
36    OddParity,
37    MarkParity,
38    SpaceParity
39} EFI_PARITY_TYPE;
40
41typedef enum {
42	DefaultStopBits,
43	OneStopBit,
44	OneFiveStopBits,
45	TwoStopBits
46} EFI_STOP_BITS_TYPE;
47
48#define EFI_SERIAL_CLEAR_TO_SEND                   0x0010
49#define EFI_SERIAL_DATA_SET_READY                  0x0020
50#define EFI_SERIAL_RING_INDICATE                   0x0040
51#define EFI_SERIAL_CARRIER_DETECT                  0x0080
52#define EFI_SERIAL_REQUEST_TO_SEND                 0x0002
53#define EFI_SERIAL_DATA_TERMINAL_READY             0x0001
54#define EFI_SERIAL_INPUT_BUFFER_EMPTY              0x0100
55#define EFI_SERIAL_OUTPUT_BUFFER_EMPTY             0x0200
56#define EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE        0x1000
57#define EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE        0x2000
58#define EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE    0x4000
59
60typedef
61EFI_STATUS
62(EFIAPI *EFI_SERIAL_RESET) (
63    IN struct _SERIAL_IO_INTERFACE  *This
64    );
65
66typedef
67EFI_STATUS
68(EFIAPI *EFI_SERIAL_SET_ATTRIBUTES) (
69    IN struct _SERIAL_IO_INTERFACE  *This,
70    IN UINT64                       BaudRate,
71    IN UINT32                       ReceiveFifoDepth,
72    IN UINT32                       Timeout,
73    IN EFI_PARITY_TYPE              Parity,
74    IN UINT8                        DataBits,
75    IN EFI_STOP_BITS_TYPE           StopBits
76    );
77
78typedef
79EFI_STATUS
80(EFIAPI *EFI_SERIAL_SET_CONTROL_BITS) (
81    IN struct _SERIAL_IO_INTERFACE  *This,
82    IN UINT32                       Control
83    );
84
85typedef
86EFI_STATUS
87(EFIAPI *EFI_SERIAL_GET_CONTROL_BITS) (
88    IN struct _SERIAL_IO_INTERFACE  *This,
89    OUT UINT32                      *Control
90    );
91
92typedef
93EFI_STATUS
94(EFIAPI *EFI_SERIAL_WRITE) (
95    IN struct _SERIAL_IO_INTERFACE  *This,
96    IN OUT UINTN                    *BufferSize,
97    IN VOID                         *Buffer
98    );
99
100typedef
101EFI_STATUS
102(EFIAPI *EFI_SERIAL_READ) (
103    IN struct _SERIAL_IO_INTERFACE  *This,
104    IN OUT UINTN                    *BufferSize,
105    OUT VOID                        *Buffer
106    );
107
108typedef struct {
109    UINT32                  ControlMask;
110
111	/* current Attributes. */
112    UINT32                  Timeout;
113    UINT64                  BaudRate;
114    UINT32                  ReceiveFifoDepth;
115    UINT32                  DataBits;
116    UINT32                  Parity;
117    UINT32                  StopBits;
118} SERIAL_IO_MODE;
119
120#define SERIAL_IO_INTERFACE_REVISION    0x00010000
121
122typedef struct _SERIAL_IO_INTERFACE {
123    UINT32                       Revision;
124    EFI_SERIAL_RESET             Reset;
125    EFI_SERIAL_SET_ATTRIBUTES    SetAttributes;
126    EFI_SERIAL_SET_CONTROL_BITS  SetControl;
127    EFI_SERIAL_GET_CONTROL_BITS  GetControl;
128    EFI_SERIAL_WRITE             Write;
129    EFI_SERIAL_READ              Read;
130
131    SERIAL_IO_MODE               *Mode;
132} SERIAL_IO_INTERFACE;
133
134#endif
135