Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | /* SPDX-License-Identifier: GPL-2.0+ */ /* * Copyright (C) 2008 Advanced Micro Devices, Inc. * Copyright (C) 2016 Bin Meng <bmeng.cn@gmail.com> * * Modified from coreboot src/arch/x86/acpi/debug.asl */ /* POST register region */ OperationRegion(X80, SystemIO, 0x80, 1) Field(X80, ByteAcc, NoLock, Preserve) { P80, 8 } /* Legacy serial port register region */ OperationRegion(CREG, SystemIO, 0x3F8, 8) Field(CREG, ByteAcc, NoLock, Preserve) { CDAT, 8, CDLM, 8, , 8, CLCR, 8, CMCR, 8, CLSR, 8 } /* DINI - Initialize the serial port to 115200 8-N-1 */ Method(DINI) { Store(0x83, CLCR) Store(0x01, CDAT) /* 115200 baud (low) */ Store(0x00, CDLM) /* 115200 baud (high) */ Store(0x03, CLCR) /* word=8 stop=1 parity=none */ Store(0x03, CMCR) /* DTR=1 RTS=1 out1/2=Off loop=Off */ Store(0x00, CDLM) /* turn off interrupts */ } /* THRE - Wait for serial 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) } /* Get a char from a string */ Method(GETC, 2) { CreateByteField(Arg0, Arg1, DBGC) Return (DBGC) } /* DBGO - Send either a string or an integer */ Method(DBGO, 1, Serialized) { 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 (Zero) } OUTC(Local0) Increment(Local1) } } Return (Zero) } |