ReactOS 0.4.15-dev-5865-g640e228
legacy.c
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: Serial port driver
4 * FILE: drivers/bus/serial/legacy.c
5 * PURPOSE: Legacy serial port enumeration
6 *
7 * PROGRAMMERS: Herv Poussineau (hpoussin@reactos.org)
8 * Mark Junker (mjscod@gmx.de)
9 */
10
11#include "serial.h"
12
13#include <debug.h>
14
18{
19 UCHAR Lcr, TestLcr;
20 UCHAR OldScr, Scr5A, ScrA5;
22 UCHAR NewFifoStatus;
23
26 TestLcr = READ_PORT_UCHAR(SER_LCR(BaseAddress)) ^ 0xFF;
28
29 /* Accessing the LCR must work for a usable serial port */
30 if (TestLcr != Lcr)
31 return UartUnknown;
32
33 /* Ensure that all following accesses are done as required */
42
43 /* Test scratch pad */
50
51 /* When non-functional, we have a 8250 */
52 if (Scr5A != 0x5A || ScrA5 != 0xA5)
53 return Uart8250;
54
55 /* Test FIFO type */
58 NewFifoStatus = READ_PORT_UCHAR(SER_IIR(BaseAddress)) & 0xC0;
59 if (!FifoEnabled)
61 switch (NewFifoStatus)
62 {
63 case 0x00:
64 return Uart16450;
65 case 0x40:
66 case 0x80:
67 /* Not sure about this but the documentation says that 0x40
68 * indicates an unusable FIFO but my tests only worked
69 * with 0x80 */
70 return Uart16550;
71 }
72
73 /* FIFO is only functional for 16550A+ */
74 return Uart16550A;
75}
unsigned char BOOLEAN
BOOLEAN FifoEnabled
Definition: cport_pc98.c:29
UART_TYPE SerialDetectUartType(IN PUCHAR BaseAddress)
Definition: legacy.c:16
UART_TYPE
Definition: serial.h:30
@ Uart16550
Definition: serial.h:34
@ Uart16550A
Definition: serial.h:35
@ UartUnknown
Definition: serial.h:31
@ Uart16450
Definition: serial.h:33
@ Uart8250
Definition: serial.h:32
#define SER_SCR(x)
Definition: serial.h:170
#define SER_MSR(x)
Definition: serial.h:161
#define SR_FCR_ENABLE_FIFO
Definition: serial.h:128
#define SER_IIR(x)
Definition: serial.h:120
#define SER_FCR(x)
Definition: serial.h:127
#define SER_IER(x)
Definition: serial.h:112
#define SER_RBR(x)
Definition: serial.h:109
#define SER_MCR(x)
Definition: serial.h:149
#define SER_LCR(x)
Definition: serial.h:135
#define SER_LSR(x)
Definition: serial.h:152
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
Definition: mmfuncs.h:404
#define READ_PORT_UCHAR(p)
Definition: pc98vid.h:22
#define WRITE_PORT_UCHAR(p, d)
Definition: pc98vid.h:21
#define IN
Definition: typedefs.h:39
unsigned char * PUCHAR
Definition: typedefs.h:53
unsigned char UCHAR
Definition: xmlstorage.h:181