mirror of https://github.com/acidanthera/audk.git
115 lines
3.1 KiB
NASM
115 lines
3.1 KiB
NASM
;------------------------------------------------------------------------------
|
|
;
|
|
; 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
|
|
|