1;------------------------------------------------------------------------------ 2; @file 3; Serial port debug support macros 4; 5; Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR> 6; SPDX-License-Identifier: BSD-2-Clause-Patent 7; 8;------------------------------------------------------------------------------ 9 10;//--------------------------------------------- 11;// UART Register Offsets 12;//--------------------------------------------- 13%define BAUD_LOW_OFFSET 0x00 14%define BAUD_HIGH_OFFSET 0x01 15%define IER_OFFSET 0x01 16%define LCR_SHADOW_OFFSET 0x01 17%define FCR_SHADOW_OFFSET 0x02 18%define IR_CONTROL_OFFSET 0x02 19%define FCR_OFFSET 0x02 20%define EIR_OFFSET 0x02 21%define BSR_OFFSET 0x03 22%define LCR_OFFSET 0x03 23%define MCR_OFFSET 0x04 24%define LSR_OFFSET 0x05 25%define MSR_OFFSET 0x06 26 27;//--------------------------------------------- 28;// UART Register Bit Defines 29;//--------------------------------------------- 30%define LSR_TXRDY 0x20 31%define LSR_RXDA 0x01 32%define DLAB 0x01 33 34; UINT16 gComBase = 0x3f8; 35; UINTN gBps = 115200; 36; UINT8 gData = 8; 37; UINT8 gStop = 1; 38; UINT8 gParity = 0; 39; UINT8 gBreakSet = 0; 40 41%define DEFAULT_COM_BASE 0x3f8 42%define DEFAULT_BPS 115200 43%define DEFAULT_DATA 8 44%define DEFAULT_STOP 1 45%define DEFAULT_PARITY 0 46%define DEFAULT_BREAK_SET 0 47 48%define SERIAL_DEFAULT_LCR ( \ 49 (DEFAULT_BREAK_SET << 6) | \ 50 (DEFAULT_PARITY << 3) | \ 51 (DEFAULT_STOP << 2) | \ 52 (DEFAULT_DATA - 5) \ 53 ) 54 55%define SERIAL_PORT_IO_BASE_ADDRESS DEFAULT_COM_BASE 56 57%macro inFromSerialPort 1 58 mov dx, (SERIAL_PORT_IO_BASE_ADDRESS + %1) 59 in al, dx 60%endmacro 61 62%macro waitForSerialTxReady 0 63 64%%waitingForTx: 65 inFromSerialPort LSR_OFFSET 66 test al, LSR_TXRDY 67 jz %%waitingForTx 68 69%endmacro 70 71%macro outToSerialPort 2 72 mov dx, (SERIAL_PORT_IO_BASE_ADDRESS + %1) 73 mov al, %2 74 out dx, al 75%endmacro 76 77%macro debugShowCharacter 1 78 waitForSerialTxReady 79 outToSerialPort 0, %1 80%endmacro 81 82%macro debugShowHexDigit 1 83 %if (%1 < 0xa) 84 debugShowCharacter BYTE ('0' + (%1)) 85 %else 86 debugShowCharacter BYTE ('a' + ((%1) - 0xa)) 87 %endif 88%endmacro 89 90%macro debugNewline 0 91 debugShowCharacter `\r` 92 debugShowCharacter `\n` 93%endmacro 94 95%macro debugShowPostCode 1 96 debugShowHexDigit (((%1) >> 4) & 0xf) 97 debugShowHexDigit ((%1) & 0xf) 98 debugNewline 99%endmacro 100 101BITS 16 102 103%macro debugInitialize 0 104 jmp real16InitDebug 105real16InitDebugReturn: 106%endmacro 107 108real16InitDebug: 109 ; 110 ; Set communications format 111 ; 112 outToSerialPort LCR_OFFSET, ((DLAB << 7) | SERIAL_DEFAULT_LCR) 113 114 ; 115 ; Configure baud rate 116 ; 117 outToSerialPort BAUD_HIGH_OFFSET, ((115200 / DEFAULT_BPS) >> 8) 118 outToSerialPort BAUD_LOW_OFFSET, ((115200 / DEFAULT_BPS) & 0xff) 119 120 ; 121 ; Switch back to bank 0 122 ; 123 outToSerialPort LCR_OFFSET, SERIAL_DEFAULT_LCR 124 125 jmp real16InitDebugReturn 126 127