ReactOS  0.4.14-dev-297-g23e575c
inbvport.c
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS Kernel
3  * LICENSE: BSD - See COPYING.ARM in the top level directory
4  * FILE: ntoskrnl/inbv/inbvport.c
5  * PURPOSE: Serial Port Boot Driver for Headless Terminal Support
6  * PROGRAMMERS: ReactOS Portable Systems Group
7  */
8 
9 /* INCLUDES ******************************************************************/
10 
11 #include <ntoskrnl.h>
12 #include <debug.h>
13 
14 /* GLOBALS *******************************************************************/
15 
17 {
18  {NULL, 0, TRUE},
19  {NULL, 0, TRUE},
20  {NULL, 0, TRUE},
21  {NULL, 0, TRUE}
22 };
23 
24 /* FUNCTIONS *****************************************************************/
25 
26 BOOLEAN
27 NTAPI
29 {
30  UCHAR Dummy;
31 
32  /* Poll a byte from the port */
33  return CpGetByte(&Port[PortId], &Dummy, FALSE, TRUE) == CP_GET_SUCCESS;
34 }
35 
36 BOOLEAN
37 NTAPI
39  OUT PUCHAR Byte)
40 {
41  /* Read a byte from the port */
42  return CpGetByte(&Port[PortId], Byte, TRUE, FALSE) == CP_GET_SUCCESS;
43 }
44 
45 VOID
46 NTAPI
48  IN UCHAR Byte)
49 {
50  /* Send the byte */
51  CpPutByte(&Port[PortId], Byte);
52 }
53 
54 VOID
55 NTAPI
58 {
59  /* Set FIFO as requested */
60  CpEnableFifo(Port[PortId].Address, Enable);
61 }
62 
63 VOID
64 NTAPI
66 {
67  /* The port is now available */
68  Port[PortId].Address = NULL;
69 }
70 
71 BOOLEAN
72 NTAPI
75  IN PUCHAR PortAddress,
76  OUT PULONG PortId,
77  IN BOOLEAN IsMMIODevice)
78 {
79  /* Not yet supported */
80  ASSERT(IsMMIODevice == FALSE);
81 
82  /* Set default baud rate */
83  if (BaudRate == 0) BaudRate = 19200;
84 
85  /* Check if port or address given */
86  if (PortNumber)
87  {
88  /* Pick correct address for port */
89  if (!PortAddress)
90  {
91  switch (PortNumber)
92  {
93  case 1:
94  PortAddress = (PUCHAR)0x3F8;
95  break;
96 
97  case 2:
98  PortAddress = (PUCHAR)0x2F8;
99  break;
100 
101  case 3:
102  PortAddress = (PUCHAR)0x3E8;
103  break;
104 
105  default:
106  PortNumber = 4;
107  PortAddress = (PUCHAR)0x2E8;
108  }
109  }
110  }
111  else
112  {
113  /* Pick correct port for address */
114  PortAddress = (PUCHAR)0x2F8;
115  if (CpDoesPortExist(PortAddress))
116  {
117  PortNumber = 2;
118  }
119  else
120  {
121  PortAddress = (PUCHAR)0x3F8;
122  if (!CpDoesPortExist(PortAddress)) return FALSE;
123  PortNumber = 1;
124  }
125  }
126 
127  /* Initialize the port unless it's already up, and then return it */
128  if (Port[PortNumber - 1].Address) return FALSE;
129 
130  CpInitialize(&Port[PortNumber - 1], PortAddress, BaudRate);
131  *PortId = PortNumber - 1;
132 
133  return TRUE;
134 }
135 
136 /* EOF */
VOID NTAPI InbvPortPutByte(IN ULONG PortId, IN UCHAR Byte)
Definition: inbvport.c:47
#define IN
Definition: typedefs.h:38
#define TRUE
Definition: types.h:120
unsigned char Byte
Definition: zconf.h:391
unsigned char * PUCHAR
Definition: retypes.h:3
_In_ ULONGLONG _In_ ULONGLONG _In_ BOOLEAN Enable
Definition: ntddpcm.h:140
BOOLEAN NTAPI InbvPortGetByte(IN ULONG PortId, OUT PUCHAR Byte)
Definition: inbvport.c:38
USHORT NTAPI CpGetByte(IN PCPPORT Port, OUT PUCHAR Byte, IN BOOLEAN Wait, IN BOOLEAN Poll)
Definition: cport.c:256
BOOLEAN NTAPI CpDoesPortExist(IN PUCHAR Address)
Definition: cport.c:227
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
VOID NTAPI InbvPortEnableFifo(IN ULONG PortId, IN BOOLEAN Enable)
Definition: inbvport.c:56
ULONG PortNumber
Definition: storport.c:18
unsigned char BOOLEAN
smooth NULL
Definition: ftsmooth.c:416
static WCHAR Address[46]
Definition: ping.c:68
BOOLEAN NTAPI InbvPortInitialize(IN ULONG BaudRate, IN ULONG PortNumber, IN PUCHAR PortAddress, OUT PULONG PortId, IN BOOLEAN IsMMIODevice)
Definition: inbvport.c:73
VOID NTAPI CpEnableFifo(IN PUCHAR Address, IN BOOLEAN Enable)
Definition: cport.c:54
VOID NTAPI CpPutByte(IN PCPPORT Port, IN UCHAR Byte)
Definition: cport.c:306
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
unsigned char UCHAR
Definition: xmlstorage.h:181
CPPORT Port[4]
Definition: inbvport.c:16
NTSTATUS NTAPI CpInitialize(IN PCPPORT Port, IN PUCHAR Address, IN ULONG BaudRate)
Definition: cport.c:88
PUCHAR Address
Definition: cportlib.h:29
unsigned int * PULONG
Definition: retypes.h:1
#define CP_GET_SUCCESS
Definition: cportlib.h:18
VOID NTAPI InbvPortTerminate(IN ULONG PortId)
Definition: inbvport.c:65
#define OUT
Definition: typedefs.h:39
unsigned int ULONG
Definition: retypes.h:1
BOOLEAN NTAPI InbvPortPollOnly(IN ULONG PortId)
Definition: inbvport.c:28