1;------------------------------------------------------------------------------ 2; @file 3; Serial port debug support macros 4; 5; Copyright (c) 2008 - 2009, Intel Corporation. All rights reserved.<BR> 6; This program and the accompanying materials 7; are licensed and made available under the terms and conditions of the BSD License 8; which accompanies this distribution. The full text of the license may be found at 9; http://opensource.org/licenses/bsd-license.php 10; 11; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13; 14;------------------------------------------------------------------------------ 15 16;//--------------------------------------------- 17;// UART Register Offsets 18;//--------------------------------------------- 19%define BAUD_LOW_OFFSET 0x00 20%define BAUD_HIGH_OFFSET 0x01 21%define IER_OFFSET 0x01 22%define LCR_SHADOW_OFFSET 0x01 23%define FCR_SHADOW_OFFSET 0x02 24%define IR_CONTROL_OFFSET 0x02 25%define FCR_OFFSET 0x02 26%define EIR_OFFSET 0x02 27%define BSR_OFFSET 0x03 28%define LCR_OFFSET 0x03 29%define MCR_OFFSET 0x04 30%define LSR_OFFSET 0x05 31%define MSR_OFFSET 0x06 32 33;//--------------------------------------------- 34;// UART Register Bit Defines 35;//--------------------------------------------- 36%define LSR_TXRDY 0x20 37%define LSR_RXDA 0x01 38%define DLAB 0x01 39 40; UINT16 gComBase = 0x3f8; 41; UINTN gBps = 115200; 42; UINT8 gData = 8; 43; UINT8 gStop = 1; 44; UINT8 gParity = 0; 45; UINT8 gBreakSet = 0; 46 47%define DEFAULT_COM_BASE 0x3f8 48%define DEFAULT_BPS 115200 49%define DEFAULT_DATA 8 50%define DEFAULT_STOP 1 51%define DEFAULT_PARITY 0 52%define DEFAULT_BREAK_SET 0 53 54%define SERIAL_DEFAULT_LCR ( \ 55 (DEFAULT_BREAK_SET << 6) | \ 56 (DEFAULT_PARITY << 3) | \ 57 (DEFAULT_STOP << 2) | \ 58 (DEFAULT_DATA - 5) \ 59 ) 60 61%define SERIAL_PORT_IO_BASE_ADDRESS DEFAULT_COM_BASE 62 63%macro inFromSerialPort 1 64 mov dx, (SERIAL_PORT_IO_BASE_ADDRESS + %1) 65 in al, dx 66%endmacro 67 68%macro waitForSerialTxReady 0 69 70%%waitingForTx: 71 inFromSerialPort LSR_OFFSET 72 test al, LSR_TXRDY 73 jz %%waitingForTx 74 75%endmacro 76 77%macro outToSerialPort 2 78 mov dx, (SERIAL_PORT_IO_BASE_ADDRESS + %1) 79 mov al, %2 80 out dx, al 81%endmacro 82 83%macro debugShowCharacter 1 84 waitForSerialTxReady 85 outToSerialPort 0, %1 86%endmacro 87 88%macro debugShowHexDigit 1 89 %if (%1 < 0xa) 90 debugShowCharacter BYTE ('0' + (%1)) 91 %else 92 debugShowCharacter BYTE ('a' + ((%1) - 0xa)) 93 %endif 94%endmacro 95 96%macro debugNewline 0 97 debugShowCharacter `\r` 98 debugShowCharacter `\n` 99%endmacro 100 101%macro debugShowPostCode 1 102 debugShowHexDigit (((%1) >> 4) & 0xf) 103 debugShowHexDigit ((%1) & 0xf) 104 debugNewline 105%endmacro 106 107BITS 16 108 109%macro debugInitialize 0 110 jmp real16InitDebug 111real16InitDebugReturn: 112%endmacro 113 114real16InitDebug: 115 ; 116 ; Set communications format 117 ; 118 outToSerialPort LCR_OFFSET, ((DLAB << 7) | SERIAL_DEFAULT_LCR) 119 120 ; 121 ; Configure baud rate 122 ; 123 outToSerialPort BAUD_HIGH_OFFSET, ((115200 / DEFAULT_BPS) >> 8) 124 outToSerialPort BAUD_LOW_OFFSET, ((115200 / DEFAULT_BPS) & 0xff) 125 126 ; 127 ; Switch back to bank 0 128 ; 129 outToSerialPort LCR_OFFSET, SERIAL_DEFAULT_LCR 130 131 jmp real16InitDebugReturn 132 133