/* SPDX-License-Identifier: GPL-2.0-only */ /* * 0x3F8: DEBCOM_BASE * * 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(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) { DLCR = 0x83 CDAT = 1 /* 115200 baud (low) */ CDLM = 0 /* 115200 baud (high) */ DLCR = 3 /* word=8 stop=1 parity=none */ CMCR = 3 /* DTR=1 RTS=1 Out2=Off Loop=Off */ CDLM = 0 /* turn off interrupts */ } /* * THRE * Wait for COM port transmitter holding register to go empty */ Method(THRE) { local0 = CLSR & 0x20 while (local0 == 0) { local0 = CLSR & 0x20 } } /* * OUTX * Send a single raw character */ Method(OUTX, 1) { THRE() CDAT = Arg0 } /* * OUTC * Send a single character, expanding LF into CR/LF */ Method(OUTC, 1) { if (Arg0 == 0x0a) { OUTX(0x0d) } OUTX(Arg0) } /* * DBGN * Send a single hex nibble */ Method(DBGN, 1) { Local0 = Arg0 & 0x0f if (Local0 < 10) { Local0 += 0x30 } else { Local0 += 0x37 } OUTC(Local0) } /* * DBGB * Send a hex byte */ Method(DBGB, 1) { Local0 = Arg0 >> 4 DBGN(Local0) DBGN(Arg0) } /* * DBGW * Send a hex word */ Method(DBGW, 1) { Local0 = Arg0 >> 8 DBGB(Local0) DBGB(Arg0) } /* * DBGD * Send a hex Dword */ Method(DBGD, 1) { Local0 = Arg0 >> 16 DBGW(Local0) DBGW(Arg0) } /* * DBGO * Send either a string or an integer */ Method(DBGO, 1) { /* DINI() */ if (ObjectType(Arg0) == 1) { if (Arg0 > 0xffff) { DBGD(Arg0) } else { if (Arg0 > 0xff) { DBGW(Arg0) } else { DBGB(Arg0) } } } else { Name(BDBG, Buffer(80) {}) BDBG = Arg0 Local1 = 0 while (1) { Local0 = GETC(BDBG, Local1) if (Local0 == 0) { return (0) } OUTC(Local0) Local1++ } } return (0) } /* Get a char from a string */ Method(GETC, 2) { CreateByteField(Arg0, Arg1, DBGC) return (DBGC) }