2008-12-02 03:56:38 +01:00
|
|
|
/*
|
|
|
|
* This file is part of the coreboot project.
|
|
|
|
*
|
|
|
|
* Copyright (C) 2008 Advanced Micro Devices, Inc.
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; version 2 of the License.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
DefinitionBlock (
|
|
|
|
"DSDT.AML",
|
|
|
|
"DSDT",
|
|
|
|
0x01,
|
|
|
|
"XXXXXX",
|
|
|
|
"XXXXXXXX",
|
|
|
|
0x00010001
|
|
|
|
)
|
|
|
|
{
|
2010-02-08 16:46:37 +01:00
|
|
|
#include "debug.asl"
|
2008-12-02 03:56:38 +01:00
|
|
|
}
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
* 0x80: POST_BASE
|
|
|
|
* 0x3F8: DEBCOM_BASE
|
|
|
|
* X80: POST_REGION
|
|
|
|
* P80: PORT80
|
|
|
|
*
|
|
|
|
* CREG: DEBCOM_REGION
|
|
|
|
* CUAR: DEBCOM_UART
|
|
|
|
* CDAT: DEBCOM_DATA
|
|
|
|
* CDLM: DEBCOM_DLM
|
|
|
|
* DLCR: DEBCOM_LCR
|
|
|
|
* CMCR: DEBCOM_MCR
|
|
|
|
* CLSR: DEBCOM_LSR
|
|
|
|
*
|
|
|
|
* DEBUG_INIT DINI
|
|
|
|
*/
|
|
|
|
|
|
|
|
OperationRegion(X80, SystemIO, 0x80, 1)
|
|
|
|
Field(X80, ByteAcc, NoLock, Preserve)
|
|
|
|
{
|
|
|
|
P80, 8
|
|
|
|
}
|
|
|
|
|
|
|
|
OperationRegion(CREG, SystemIO, 0x3F8, 8)
|
|
|
|
Field(CREG, ByteAcc, NoLock, Preserve)
|
|
|
|
{
|
|
|
|
CDAT, 8,
|
|
|
|
CDLM, 8,, 8, DLCR, 8, CMCR, 8, CLSR, 8
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* DINI
|
|
|
|
* Initialize the COM port to 115,200 8-N-1
|
|
|
|
*/
|
|
|
|
Method(DINI)
|
|
|
|
{
|
|
|
|
store(0x83, DLCR)
|
|
|
|
store(0x01, CDAT) /* 115200 baud (low) */
|
|
|
|
store(0x00, CDLM) /* 115200 baud (high) */
|
|
|
|
store(0x03, DLCR) /* word=8 stop=1 parity=none */
|
|
|
|
store(0x03, CMCR) /* DTR=1 RTS=1 Out2=Off Loop=Off */
|
|
|
|
store(0x00, CDLM) /* turn off interrupts */
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* THRE
|
|
|
|
* Wait for COM port transmitter holding register to go empty
|
|
|
|
*/
|
|
|
|
Method(THRE)
|
|
|
|
{
|
|
|
|
and(CLSR, 0x20, local0)
|
|
|
|
while (Lequal(local0, Zero)) {
|
|
|
|
and(CLSR, 0x20, local0)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* OUTX
|
|
|
|
* Send a single raw character
|
|
|
|
*/
|
|
|
|
Method(OUTX, 1)
|
|
|
|
{
|
|
|
|
THRE()
|
|
|
|
store(Arg0, CDAT)
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* OUTC
|
|
|
|
* Send a single character, expanding LF into CR/LF
|
|
|
|
*/
|
|
|
|
Method(OUTC, 1)
|
|
|
|
{
|
|
|
|
if (LEqual(Arg0, 0x0a)) {
|
|
|
|
OUTX(0x0d)
|
|
|
|
}
|
|
|
|
OUTX(Arg0)
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* DBGN
|
|
|
|
* Send a single hex nibble
|
|
|
|
*/
|
|
|
|
Method(DBGN, 1)
|
|
|
|
{
|
|
|
|
and(Arg0, 0x0f, Local0)
|
|
|
|
if (LLess(Local0, 10)) {
|
|
|
|
add(Local0, 0x30, Local0)
|
|
|
|
} else {
|
|
|
|
add(Local0, 0x37, Local0)
|
|
|
|
}
|
|
|
|
OUTC(Local0)
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* DBGB
|
|
|
|
* Send a hex byte
|
|
|
|
*/
|
|
|
|
Method(DBGB, 1)
|
|
|
|
{
|
|
|
|
ShiftRight(Arg0, 4, Local0)
|
|
|
|
DBGN(Local0)
|
|
|
|
DBGN(Arg0)
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* DBGW
|
|
|
|
* Send a hex word
|
|
|
|
*/
|
|
|
|
Method(DBGW, 1)
|
|
|
|
{
|
|
|
|
ShiftRight(Arg0, 8, Local0)
|
|
|
|
DBGB(Local0)
|
|
|
|
DBGB(Arg0)
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* DBGD
|
|
|
|
* Send a hex Dword
|
|
|
|
*/
|
|
|
|
Method(DBGD, 1)
|
|
|
|
{
|
|
|
|
ShiftRight(Arg0, 16, Local0)
|
|
|
|
DBGW(Local0)
|
|
|
|
DBGW(Arg0)
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* DBGO
|
|
|
|
* Send either a string or an integer
|
|
|
|
*/
|
|
|
|
Method(DBGO, 1)
|
|
|
|
{
|
|
|
|
/* DINI() */
|
|
|
|
if (LEqual(ObjectType(Arg0), 1)) {
|
|
|
|
if (LGreater(Arg0, 0xffff)) {
|
|
|
|
DBGD(Arg0)
|
|
|
|
} else {
|
|
|
|
if (LGreater(Arg0, 0xff)) {
|
|
|
|
DBGW(Arg0)
|
|
|
|
} else {
|
|
|
|
DBGB(Arg0)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
Name(BDBG, Buffer(80) {})
|
|
|
|
store(Arg0, BDBG)
|
|
|
|
store(0, Local1)
|
|
|
|
while (One) {
|
|
|
|
store(GETC(BDBG, Local1), Local0)
|
|
|
|
if (LEqual(Local0, 0)) {
|
|
|
|
return (0)
|
|
|
|
}
|
|
|
|
OUTC(Local0)
|
|
|
|
Increment(Local1)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return (0)
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Get a char from a string */
|
|
|
|
Method(GETC, 2)
|
|
|
|
{
|
|
|
|
CreateByteField(Arg0, Arg1, DBGC)
|
|
|
|
return (DBGC)
|
|
|
|
}
|