blob: 2959fa5450ee17e16101102c8fbab760662d9f47 [file] [log] [blame]
;------------------------------------------------------------------------------
;
; Copyright (c) 2008, Intel Corporation
; All rights reserved. This program and the accompanying materials
; are licensed and made available under the terms and conditions of the BSD License
; which accompanies this distribution. The full text of the license may be found at
; http://opensource.org/licenses/bsd-license.php
;
; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
;
; Module Name:
;
; SerialDebug.asm
;
; Abstract:
;
; Serial port support macros
;
;------------------------------------------------------------------------------
BITS 16
;//---------------------------------------------
;// UART Register Offsets
;//---------------------------------------------
%define BAUD_LOW_OFFSET 0x00
%define BAUD_HIGH_OFFSET 0x01
%define IER_OFFSET 0x01
%define LCR_SHADOW_OFFSET 0x01
%define FCR_SHADOW_OFFSET 0x02
%define IR_CONTROL_OFFSET 0x02
%define FCR_OFFSET 0x02
%define EIR_OFFSET 0x02
%define BSR_OFFSET 0x03
%define LCR_OFFSET 0x03
%define MCR_OFFSET 0x04
%define LSR_OFFSET 0x05
%define MSR_OFFSET 0x06
;//---------------------------------------------
;// UART Register Bit Defines
;//---------------------------------------------
%define LSR_TXRDY 0x20
%define LSR_RXDA 0x01
%define DLAB 0x01
; UINT16 gComBase = 0x3f8;
; UINTN gBps = 115200;
; UINT8 gData = 8;
; UINT8 gStop = 1;
; UINT8 gParity = 0;
; UINT8 gBreakSet = 0;
%define DEFAULT_COM_BASE 0x3f8
%define DEFAULT_BPS 115200
%define DEFAULT_DATA 8
%define DEFAULT_STOP 1
%define DEFAULT_PARITY 0
%define DEFAULT_BREAK_SET 0
%define SERIAL_DEFAULT_LCR ( \
(DEFAULT_BREAK_SET << 6) | \
(DEFAULT_PARITY << 3) | \
(DEFAULT_STOP << 2) | \
(DEFAULT_DATA - 5) \
)
%define SERIAL_PORT_IO_BASE_ADDRESS DEFAULT_COM_BASE
%macro inFromSerialPort 1
mov dx, (SERIAL_PORT_IO_BASE_ADDRESS + %1)
in al, dx
%endmacro
%macro waitForSerialTxReady 0
%%waitingForTx:
inFromSerialPort LSR_OFFSET
test al, LSR_TXRDY
jz %%waitingForTx
%endmacro
%macro outToSerialPort 2
mov dx, (SERIAL_PORT_IO_BASE_ADDRESS + %1)
mov al, %2
out dx, al
%endmacro
%macro writeToSerialPort 1
waitForSerialTxReady
outToSerialPort 0, %1
%endmacro
real16InitSerialPort:
;
; Set communications format
;
outToSerialPort LCR_OFFSET, ((DLAB << 7) | SERIAL_DEFAULT_LCR)
;
; Configure baud rate
;
outToSerialPort BAUD_HIGH_OFFSET, ((115200 / DEFAULT_BPS) >> 8)
outToSerialPort BAUD_LOW_OFFSET, ((115200 / DEFAULT_BPS) & 0xff)
;
; Switch back to bank 0
;
outToSerialPort LCR_OFFSET, SERIAL_DEFAULT_LCR
jmp real16SerialPortInitReturn