]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/Serial.h
PcdIoBlockBaseAddressForIpf is required by IPF platform so need add it back
[mirror_edk2.git] / IntelFrameworkModulePkg / Bus / Isa / IsaSerialDxe / Serial.h
CommitLineData
637ff819 1/*++\r
2\r
366565e0 3 Copyright (c) 2006 - 2007, Intel Corporation<BR>\r
4 All rights reserved. This program and the accompanying materials\r
5 are licensed and made available under the terms and conditions of the BSD License\r
6 which accompanies this distribution. The full text of the license may be found at\r
7 http://opensource.org/licenses/bsd-license.php\r
8\r
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
637ff819 11\r
12\r
13Module Name:\r
14\r
15 serial.h\r
16\r
17Abstract:\r
18\r
19 Include for Serial Driver\r
20\r
21Revision History:\r
22\r
23--*/\r
24\r
25#ifndef _SERIAL_H\r
26#define _SERIAL_H\r
27\r
28//\r
29// The package level header files this module uses\r
30//\r
31#include <PiDxe.h>\r
32#include <FrameworkPei.h>\r
33//\r
34// The protocols, PPI and GUID defintions for this module\r
35//\r
36#include <Protocol/IsaIo.h>\r
37#include <Protocol/SerialIo.h>\r
38#include <Protocol/DevicePath.h>\r
39//\r
40// The Library classes this module consumes\r
41//\r
42#include <Library/DebugLib.h>\r
43#include <Library/UefiDriverEntryPoint.h>\r
44#include <Library/BaseLib.h>\r
45#include <Library/UefiLib.h>\r
46#include <Library/DevicePathLib.h>\r
47#include <Library/BaseMemoryLib.h>\r
48#include <Library/MemoryAllocationLib.h>\r
49#include <Library/UefiBootServicesTableLib.h>\r
50#include <Library/ReportStatusCodeLib.h>\r
51#include <Library/PcdLib.h>\r
52//\r
53// Driver Binding Externs\r
54//\r
55extern EFI_DRIVER_BINDING_PROTOCOL gSerialControllerDriver;\r
56extern EFI_COMPONENT_NAME_PROTOCOL gIsaSerialComponentName;\r
57\r
58//\r
59// Internal Data Structures\r
60//\r
61#define SERIAL_DEV_SIGNATURE EFI_SIGNATURE_32 ('s', 'e', 'r', 'd')\r
62#define SERIAL_MAX_BUFFER_SIZE 16\r
63#define TIMEOUT_STALL_INTERVAL 10\r
64\r
65//\r
66// Name: SERIAL_DEV_FIFO\r
67// Purpose: To define Receive FIFO and Transmit FIFO\r
68// Context: Used by serial data transmit and receive\r
69// Fields:\r
70// First UINT32: The index of the first data in array Data[]\r
71// Last UINT32: The index, which you can put a new data into array Data[]\r
72// Surplus UINT32: Identify how many data you can put into array Data[]\r
73// Data[] UINT8 : An array, which used to store data\r
74//\r
75typedef struct {\r
76 UINT32 First;\r
77 UINT32 Last;\r
78 UINT32 Surplus;\r
79 UINT8 Data[SERIAL_MAX_BUFFER_SIZE];\r
80} SERIAL_DEV_FIFO;\r
81\r
82typedef enum {\r
83 UART8250 = 0,\r
84 UART16450 = 1,\r
85 UART16550 = 2,\r
86 UART16550A= 3\r
87} EFI_UART_TYPE;\r
88\r
89//\r
90// Name: SERIAL_DEV\r
91// Purpose: To provide device specific information\r
92// Context:\r
93// Fields:\r
94// Signature UINTN: The identity of the serial device\r
95// SerialIo SERIAL_IO_PROTOCOL: Serial I/O protocol interface\r
96// SerialMode SERIAL_IO_MODE:\r
97// DevicePath EFI_DEVICE_PATH_PROTOCOL *: Device path of the serial device\r
98// Handle EFI_HANDLE: The handle instance attached to serial device\r
99// BaseAddress UINT16: The base address of specific serial device\r
100// Receive SERIAL_DEV_FIFO: The FIFO used to store data,\r
101// which is received by UART\r
102// Transmit SERIAL_DEV_FIFO: The FIFO used to store data,\r
103// which you want to transmit by UART\r
104// SoftwareLoopbackEnable BOOLEAN:\r
105// Type EFI_UART_TYPE: Specify the UART type of certain serial device\r
106//\r
107typedef struct {\r
108 UINTN Signature;\r
109\r
110 EFI_HANDLE Handle;\r
111 EFI_SERIAL_IO_PROTOCOL SerialIo;\r
112 EFI_SERIAL_IO_MODE SerialMode;\r
113 EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
114\r
115 EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;\r
116 UART_DEVICE_PATH UartDevicePath;\r
117 EFI_ISA_IO_PROTOCOL *IsaIo;\r
118\r
119 UINT16 BaseAddress;\r
120 SERIAL_DEV_FIFO Receive;\r
121 SERIAL_DEV_FIFO Transmit;\r
122 BOOLEAN SoftwareLoopbackEnable;\r
123 BOOLEAN HardwareFlowControl;\r
124 EFI_UART_TYPE Type;\r
125 EFI_UNICODE_STRING_TABLE *ControllerNameTable;\r
126} SERIAL_DEV;\r
127\r
128#include "ComponentName.h"\r
129\r
130#define SERIAL_DEV_FROM_THIS(a) CR (a, SERIAL_DEV, SerialIo, SERIAL_DEV_SIGNATURE)\r
131\r
132//\r
133// Globale Variables\r
134//\r
135extern EFI_DRIVER_BINDING_PROTOCOL gSerialControllerDriver;\r
136\r
137//\r
138// Serial Driver Defaults\r
139//\r
140#define SERIAL_PORT_DEFAULT_BAUD_RATE 115200\r
141#define SERIAL_PORT_DEFAULT_RECEIVE_FIFO_DEPTH 1\r
142#define SERIAL_PORT_DEFAULT_TIMEOUT 1000000\r
143#define SERIAL_PORT_DEFAULT_PARITY NoParity\r
144#define SERIAL_PORT_DEFAULT_DATA_BITS 8\r
145#define SERIAL_PORT_DEFAULT_STOP_BITS 1\r
146#define SERIAL_PORT_DEFAULT_CONTROL_MASK 0\r
147\r
148//\r
149// (24000000/13)MHz input clock\r
150//\r
151#define SERIAL_PORT_INPUT_CLOCK 1843200\r
152\r
153//\r
154// 115200 baud with rounding errors\r
155//\r
156#define SERIAL_PORT_MAX_BAUD_RATE 115400\r
157#define SERIAL_PORT_MIN_BAUD_RATE 50\r
158\r
159#define SERIAL_PORT_MAX_RECEIVE_FIFO_DEPTH 16\r
160#define SERIAL_PORT_MIN_TIMEOUT 1 // 1 uS\r
161#define SERIAL_PORT_MAX_TIMEOUT 100000000 // 100 seconds\r
162//\r
163// UART Registers\r
164//\r
165#define SERIAL_REGISTER_THR 0 // WO Transmit Holding Register\r
166#define SERIAL_REGISTER_RBR 0 // RO Receive Buffer Register\r
167#define SERIAL_REGISTER_DLL 0 // R/W Divisor Latch LSB\r
168#define SERIAL_REGISTER_DLM 1 // R/W Divisor Latch MSB\r
169#define SERIAL_REGISTER_IER 1 // R/W Interrupt Enable Register\r
170#define SERIAL_REGISTER_IIR 2 // RO Interrupt Identification Register\r
171#define SERIAL_REGISTER_FCR 2 // WO FIFO Cotrol Register\r
172#define SERIAL_REGISTER_LCR 3 // R/W Line Control Register\r
173#define SERIAL_REGISTER_MCR 4 // R/W Modem Control Register\r
174#define SERIAL_REGISTER_LSR 5 // R/W Line Status Register\r
175#define SERIAL_REGISTER_MSR 6 // R/W Modem Status Register\r
176#define SERIAL_REGISTER_SCR 7 // R/W Scratch Pad Register\r
177#pragma pack(1)\r
178//\r
179// Name: SERIAL_PORT_IER_BITS\r
180// Purpose: Define each bit in Interrupt Enable Register\r
181// Context:\r
182// Fields:\r
183// RAVIE Bit0: Receiver Data Available Interrupt Enable\r
184// THEIE Bit1: Transmistter Holding Register Empty Interrupt Enable\r
185// RIE Bit2: Receiver Interrupt Enable\r
186// MIE Bit3: Modem Interrupt Enable\r
187// Reserved Bit4-Bit7: Reserved\r
188//\r
189typedef struct {\r
190 UINT8 RAVIE : 1;\r
191 UINT8 THEIE : 1;\r
192 UINT8 RIE : 1;\r
193 UINT8 MIE : 1;\r
194 UINT8 Reserved : 4;\r
195} SERIAL_PORT_IER_BITS;\r
196\r
197//\r
198// Name: SERIAL_PORT_IER\r
199// Purpose:\r
200// Context:\r
201// Fields:\r
202// Bits SERIAL_PORT_IER_BITS: Bits of the IER\r
203// Data UINT8: the value of the IER\r
204//\r
205typedef union {\r
206 SERIAL_PORT_IER_BITS Bits;\r
207 UINT8 Data;\r
208} SERIAL_PORT_IER;\r
209\r
210//\r
211// Name: SERIAL_PORT_IIR_BITS\r
212// Purpose: Define each bit in Interrupt Identification Register\r
213// Context:\r
214// Fields:\r
215// IPS Bit0: Interrupt Pending Status\r
216// IIB Bit1-Bit3: Interrupt ID Bits\r
217// Reserved Bit4-Bit5: Reserved\r
218// FIFOES Bit6-Bit7: FIFO Mode Enable Status\r
219//\r
220typedef struct {\r
221 UINT8 IPS : 1;\r
222 UINT8 IIB : 3;\r
223 UINT8 Reserved : 2;\r
224 UINT8 FIFOES : 2;\r
225} SERIAL_PORT_IIR_BITS;\r
226\r
227//\r
228// Name: SERIAL_PORT_IIR\r
229// Purpose:\r
230// Context:\r
231// Fields:\r
232// Bits SERIAL_PORT_IIR_BITS: Bits of the IIR\r
233// Data UINT8: the value of the IIR\r
234//\r
235typedef union {\r
236 SERIAL_PORT_IIR_BITS Bits;\r
237 UINT8 Data;\r
238} SERIAL_PORT_IIR;\r
239\r
240//\r
241// Name: SERIAL_PORT_FCR_BITS\r
242// Purpose: Define each bit in FIFO Control Register\r
243// Context:\r
244// Fields:\r
245// TRFIFOE Bit0: Transmit and Receive FIFO Enable\r
246// RESETRF Bit1: Reset Reciever FIFO\r
247// RESETTF Bit2: Reset Transmistter FIFO\r
248// DMS Bit3: DMA Mode Select\r
249// Reserved Bit4-Bit5: Reserved\r
250// RTB Bit6-Bit7: Receive Trigger Bits\r
251//\r
252typedef struct {\r
253 UINT8 TRFIFOE : 1;\r
254 UINT8 RESETRF : 1;\r
255 UINT8 RESETTF : 1;\r
256 UINT8 DMS : 1;\r
257 UINT8 Reserved : 2;\r
258 UINT8 RTB : 2;\r
259} SERIAL_PORT_FCR_BITS;\r
260\r
261//\r
262// Name: SERIAL_PORT_FCR\r
263// Purpose:\r
264// Context:\r
265// Fields:\r
266// Bits SERIAL_PORT_FCR_BITS: Bits of the FCR\r
267// Data UINT8: the value of the FCR\r
268//\r
269typedef union {\r
270 SERIAL_PORT_FCR_BITS Bits;\r
271 UINT8 Data;\r
272} SERIAL_PORT_FCR;\r
273\r
274//\r
275// Name: SERIAL_PORT_LCR_BITS\r
276// Purpose: Define each bit in Line Control Register\r
277// Context:\r
278// Fields:\r
279// SERIALDB Bit0-Bit1: Number of Serial Data Bits\r
280// STOPB Bit2: Number of Stop Bits\r
281// PAREN Bit3: Parity Enable\r
282// EVENPAR Bit4: Even Parity Select\r
283// STICPAR Bit5: Sticky Parity\r
284// BRCON Bit6: Break Control\r
285// DLAB Bit7: Divisor Latch Access Bit\r
286//\r
287typedef struct {\r
288 UINT8 SERIALDB : 2;\r
289 UINT8 STOPB : 1;\r
290 UINT8 PAREN : 1;\r
291 UINT8 EVENPAR : 1;\r
292 UINT8 STICPAR : 1;\r
293 UINT8 BRCON : 1;\r
294 UINT8 DLAB : 1;\r
295} SERIAL_PORT_LCR_BITS;\r
296\r
297//\r
298// Name: SERIAL_PORT_LCR\r
299// Purpose:\r
300// Context:\r
301// Fields:\r
302// Bits SERIAL_PORT_LCR_BITS: Bits of the LCR\r
303// Data UINT8: the value of the LCR\r
304//\r
305typedef union {\r
306 SERIAL_PORT_LCR_BITS Bits;\r
307 UINT8 Data;\r
308} SERIAL_PORT_LCR;\r
309\r
310//\r
311// Name: SERIAL_PORT_MCR_BITS\r
312// Purpose: Define each bit in Modem Control Register\r
313// Context:\r
314// Fields:\r
315// DTRC Bit0: Data Terminal Ready Control\r
316// RTS Bit1: Request To Send Control\r
317// OUT1 Bit2: Output1\r
318// OUT2 Bit3: Output2, used to disable interrupt\r
319// LME; Bit4: Loopback Mode Enable\r
320// Reserved Bit5-Bit7: Reserved\r
321//\r
322typedef struct {\r
323 UINT8 DTRC : 1;\r
324 UINT8 RTS : 1;\r
325 UINT8 OUT1 : 1;\r
326 UINT8 OUT2 : 1;\r
327 UINT8 LME : 1;\r
328 UINT8 Reserved : 3;\r
329} SERIAL_PORT_MCR_BITS;\r
330\r
331//\r
332// Name: SERIAL_PORT_MCR\r
333// Purpose:\r
334// Context:\r
335// Fields:\r
336// Bits SERIAL_PORT_MCR_BITS: Bits of the MCR\r
337// Data UINT8: the value of the MCR\r
338//\r
339typedef union {\r
340 SERIAL_PORT_MCR_BITS Bits;\r
341 UINT8 Data;\r
342} SERIAL_PORT_MCR;\r
343\r
344//\r
345// Name: SERIAL_PORT_LSR_BITS\r
346// Purpose: Define each bit in Line Status Register\r
347// Context:\r
348// Fields:\r
349// DR Bit0: Receiver Data Ready Status\r
350// OE Bit1: Overrun Error Status\r
351// PE Bit2: Parity Error Status\r
352// FE Bit3: Framing Error Status\r
353// BI Bit4: Break Interrupt Status\r
354// THRE Bit5: Transmistter Holding Register Status\r
355// TEMT Bit6: Transmitter Empty Status\r
356// FIFOE Bit7: FIFO Error Status\r
357//\r
358typedef struct {\r
359 UINT8 DR : 1;\r
360 UINT8 OE : 1;\r
361 UINT8 PE : 1;\r
362 UINT8 FE : 1;\r
363 UINT8 BI : 1;\r
364 UINT8 THRE : 1;\r
365 UINT8 TEMT : 1;\r
366 UINT8 FIFOE : 1;\r
367} SERIAL_PORT_LSR_BITS;\r
368\r
369//\r
370// Name: SERIAL_PORT_LSR\r
371// Purpose:\r
372// Context:\r
373// Fields:\r
374// Bits SERIAL_PORT_LSR_BITS: Bits of the LSR\r
375// Data UINT8: the value of the LSR\r
376//\r
377typedef union {\r
378 SERIAL_PORT_LSR_BITS Bits;\r
379 UINT8 Data;\r
380} SERIAL_PORT_LSR;\r
381\r
382//\r
383// Name: SERIAL_PORT_MSR_BITS\r
384// Purpose: Define each bit in Modem Status Register\r
385// Context:\r
386// Fields:\r
387// DeltaCTS Bit0: Delta Clear To Send Status\r
388// DeltaDSR Bit1: Delta Data Set Ready Status\r
389// TrailingEdgeRI Bit2: Trailing Edge of Ring Indicator Status\r
390// DeltaDCD Bit3: Delta Data Carrier Detect Status\r
391// CTS Bit4: Clear To Send Status\r
392// DSR Bit5: Data Set Ready Status\r
393// RI Bit6: Ring Indicator Status\r
394// DCD Bit7: Data Carrier Detect Status\r
395//\r
396typedef struct {\r
397 UINT8 DeltaCTS : 1;\r
398 UINT8 DeltaDSR : 1;\r
399 UINT8 TrailingEdgeRI : 1;\r
400 UINT8 DeltaDCD : 1;\r
401 UINT8 CTS : 1;\r
402 UINT8 DSR : 1;\r
403 UINT8 RI : 1;\r
404 UINT8 DCD : 1;\r
405} SERIAL_PORT_MSR_BITS;\r
406\r
407//\r
408// Name: SERIAL_PORT_MSR\r
409// Purpose:\r
410// Context:\r
411// Fields:\r
412// Bits SERIAL_PORT_MSR_BITS: Bits of the MSR\r
413// Data UINT8: the value of the MSR\r
414//\r
415typedef union {\r
416 SERIAL_PORT_MSR_BITS Bits;\r
417 UINT8 Data;\r
418} SERIAL_PORT_MSR;\r
419\r
420#pragma pack()\r
421//\r
422// Define serial register I/O macros\r
423//\r
424#define READ_RBR(IO, B) IsaSerialReadPort (IO, B, SERIAL_REGISTER_RBR)\r
425#define READ_DLL(IO, B) IsaSerialReadPort (IO, B, SERIAL_REGISTER_DLL)\r
426#define READ_DLM(IO, B) IsaSerialReadPort (IO, B, SERIAL_REGISTER_DLM)\r
427#define READ_IER(IO, B) IsaSerialReadPort (IO, B, SERIAL_REGISTER_IER)\r
428#define READ_IIR(IO, B) IsaSerialReadPort (IO, B, SERIAL_REGISTER_IIR)\r
429#define READ_LCR(IO, B) IsaSerialReadPort (IO, B, SERIAL_REGISTER_LCR)\r
430#define READ_MCR(IO, B) IsaSerialReadPort (IO, B, SERIAL_REGISTER_MCR)\r
431#define READ_LSR(IO, B) IsaSerialReadPort (IO, B, SERIAL_REGISTER_LSR)\r
432#define READ_MSR(IO, B) IsaSerialReadPort (IO, B, SERIAL_REGISTER_MSR)\r
433#define READ_SCR(IO, B) IsaSerialReadPort (IO, B, SERIAL_REGISTER_SCR)\r
434\r
435#define WRITE_THR(IO, B, D) IsaSerialWritePort (IO, B, SERIAL_REGISTER_THR, D)\r
436#define WRITE_DLL(IO, B, D) IsaSerialWritePort (IO, B, SERIAL_REGISTER_DLL, D)\r
437#define WRITE_DLM(IO, B, D) IsaSerialWritePort (IO, B, SERIAL_REGISTER_DLM, D)\r
438#define WRITE_IER(IO, B, D) IsaSerialWritePort (IO, B, SERIAL_REGISTER_IER, D)\r
439#define WRITE_FCR(IO, B, D) IsaSerialWritePort (IO, B, SERIAL_REGISTER_FCR, D)\r
440#define WRITE_LCR(IO, B, D) IsaSerialWritePort (IO, B, SERIAL_REGISTER_LCR, D)\r
441#define WRITE_MCR(IO, B, D) IsaSerialWritePort (IO, B, SERIAL_REGISTER_MCR, D)\r
442#define WRITE_LSR(IO, B, D) IsaSerialWritePort (IO, B, SERIAL_REGISTER_LSR, D)\r
443#define WRITE_MSR(IO, B, D) IsaSerialWritePort (IO, B, SERIAL_REGISTER_MSR, D)\r
444#define WRITE_SCR(IO, B, D) IsaSerialWritePort (IO, B, SERIAL_REGISTER_SCR, D)\r
445\r
446//\r
447// Prototypes\r
448// Driver model protocol interface\r
449//\r
450\r
451EFI_STATUS\r
452EFIAPI\r
453SerialControllerDriverSupported (\r
454 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
455 IN EFI_HANDLE Controller,\r
456 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
457 );\r
458\r
459EFI_STATUS\r
460EFIAPI\r
461SerialControllerDriverStart (\r
462 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
463 IN EFI_HANDLE Controller,\r
464 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
465 );\r
466\r
467EFI_STATUS\r
468EFIAPI\r
469SerialControllerDriverStop (\r
470 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
471 IN EFI_HANDLE Controller,\r
472 IN UINTN NumberOfChildren,\r
473 IN EFI_HANDLE *ChildHandleBuffer\r
474 );\r
475\r
476//\r
477// Serial I/O Protocol Interface\r
478//\r
479EFI_STATUS\r
480EFIAPI\r
481IsaSerialReset (\r
482 IN EFI_SERIAL_IO_PROTOCOL *This\r
483 );\r
484\r
485EFI_STATUS\r
486EFIAPI\r
487IsaSerialSetAttributes (\r
488 IN EFI_SERIAL_IO_PROTOCOL *This,\r
489 IN UINT64 BaudRate,\r
490 IN UINT32 ReceiveFifoDepth,\r
491 IN UINT32 Timeout,\r
492 IN EFI_PARITY_TYPE Parity,\r
493 IN UINT8 DataBits,\r
494 IN EFI_STOP_BITS_TYPE StopBits\r
495 );\r
496\r
497EFI_STATUS\r
498EFIAPI\r
499IsaSerialSetControl (\r
500 IN EFI_SERIAL_IO_PROTOCOL *This,\r
501 IN UINT32 Control\r
502 );\r
503\r
504EFI_STATUS\r
505EFIAPI\r
506IsaSerialGetControl (\r
507 IN EFI_SERIAL_IO_PROTOCOL *This,\r
508 OUT UINT32 *Control\r
509 );\r
510\r
511EFI_STATUS\r
512EFIAPI\r
513IsaSerialWrite (\r
514 IN EFI_SERIAL_IO_PROTOCOL *This,\r
515 IN OUT UINTN *BufferSize,\r
516 IN VOID *Buffer\r
517 );\r
518\r
519EFI_STATUS\r
520EFIAPI\r
521IsaSerialRead (\r
522 IN EFI_SERIAL_IO_PROTOCOL *This,\r
523 IN OUT UINTN *BufferSize,\r
524 OUT VOID *Buffer\r
525 );\r
526\r
527//\r
528// Internal Functions\r
529//\r
530BOOLEAN\r
531IsaSerialPortPresent (\r
532 IN SERIAL_DEV *SerialDevice\r
533 );\r
534\r
535BOOLEAN\r
536IsaSerialFifoFull (\r
537 IN SERIAL_DEV_FIFO *Fifo\r
538 );\r
539\r
540BOOLEAN\r
541IsaSerialFifoEmpty (\r
542 IN SERIAL_DEV_FIFO *Fifo\r
543 );\r
544\r
545EFI_STATUS\r
546IsaSerialFifoAdd (\r
547 IN SERIAL_DEV_FIFO *Fifo,\r
548 IN UINT8 Data\r
549 );\r
550\r
551EFI_STATUS\r
552IsaSerialFifoRemove (\r
553 IN SERIAL_DEV_FIFO *Fifo,\r
554 OUT UINT8 *Data\r
555 );\r
556\r
557EFI_STATUS\r
558IsaSerialReceiveTransmit (\r
559 IN SERIAL_DEV *SerialDevice\r
560 );\r
561\r
562UINT8\r
563IsaSerialReadPort (\r
564 IN EFI_ISA_IO_PROTOCOL *IsaIo,\r
565 IN UINT16 BaseAddress,\r
566 IN UINT32 Offset\r
567 );\r
568\r
569VOID\r
570IsaSerialWritePort (\r
571 IN EFI_ISA_IO_PROTOCOL *IsaIo,\r
572 IN UINT16 BaseAddress,\r
573 IN UINT32 Offset,\r
574 IN UINT8 Data\r
575 );\r
576\r
577#endif\r