diff options
Diffstat (limited to 'usr.sbin')
-rw-r--r-- | usr.sbin/bhyve/acpi.c | 32 | ||||
-rw-r--r-- | usr.sbin/bhyve/basl.h | 23 |
2 files changed, 55 insertions, 0 deletions
diff --git a/usr.sbin/bhyve/acpi.c b/usr.sbin/bhyve/acpi.c index 30b0a814c9d5..6cfd4462526a 100644 --- a/usr.sbin/bhyve/acpi.c +++ b/usr.sbin/bhyve/acpi.c @@ -693,6 +693,37 @@ build_rsdt(struct vmctx *const ctx) } static int +build_spcr(struct vmctx *const ctx) +{ + ACPI_TABLE_SPCR spcr; + struct basl_table *table; + + BASL_EXEC(basl_table_create(&table, ctx, ACPI_SIG_SPCR, + BASL_TABLE_ALIGNMENT)); + + memset(&spcr, 0, sizeof(spcr)); + BASL_EXEC(basl_table_append_header(table, ACPI_SIG_SPCR, 1, 1)); + spcr.InterfaceType = ACPI_DBG2_16550_COMPATIBLE; + basl_fill_gas(&spcr.SerialPort, ACPI_ADR_SPACE_SYSTEM_IO, 8, 0, + ACPI_GAS_ACCESS_WIDTH_LEGACY, 0x3F8); + spcr.InterruptType = ACPI_SPCR_INTERRUPT_TYPE_8259; + spcr.PcInterrupt = 4; + spcr.BaudRate = ACPI_SPCR_BAUD_RATE_115200; + spcr.Parity = ACPI_SPCR_PARITY_NO_PARITY; + spcr.StopBits = ACPI_SPCR_STOP_BITS_1; + spcr.FlowControl = 3; /* RTS/CTS | DCD */ + spcr.TerminalType = ACPI_SPCR_TERMINAL_TYPE_VT_UTF8; + BASL_EXEC(basl_table_append_content(table, &spcr, sizeof(spcr))); + + BASL_EXEC(basl_table_append_pointer(rsdt, ACPI_SIG_SPCR, + ACPI_RSDT_ENTRY_SIZE)); + BASL_EXEC(basl_table_append_pointer(xsdt, ACPI_SIG_SPCR, + ACPI_XSDT_ENTRY_SIZE)); + + return (0); +} + +static int build_xsdt(struct vmctx *const ctx) { BASL_EXEC( @@ -749,6 +780,7 @@ acpi_build(struct vmctx *ctx, int ncpu) BASL_EXEC(build_hpet(ctx)); BASL_EXEC(build_mcfg(ctx)); BASL_EXEC(build_facs(ctx)); + BASL_EXEC(build_spcr(ctx)); BASL_EXEC(build_dsdt(ctx)); BASL_EXEC(basl_finish()); diff --git a/usr.sbin/bhyve/basl.h b/usr.sbin/bhyve/basl.h index fba921a46882..c4d0d9d26c0d 100644 --- a/usr.sbin/bhyve/basl.h +++ b/usr.sbin/bhyve/basl.h @@ -15,6 +15,29 @@ #define ACPI_GAS_ACCESS_WIDTH_DWORD 3 #define ACPI_GAS_ACCESS_WIDTH_QWORD 4 +#define ACPI_SPCR_INTERRUPT_TYPE_8259 0x1 +#define ACPI_SPCR_INTERRUPT_TYPE_APIC 0x2 +#define ACPI_SPCR_INTERRUPT_TYPE_SAPIC 0x4 +#define ACPI_SPCR_INTERRUPT_TYPE_GIC 0x8 + +#define ACPI_SPCR_BAUD_RATE_9600 3 +#define ACPI_SPCR_BAUD_RATE_19200 4 +#define ACPI_SPCR_BAUD_RATE_57600 6 +#define ACPI_SPCR_BAUD_RATE_115200 7 + +#define ACPI_SPCR_PARITY_NO_PARITY 0 + +#define ACPI_SPCR_STOP_BITS_1 1 + +#define ACPI_SPCR_FLOW_CONTROL_DCD 0x1 +#define ACPI_SPCR_FLOW_CONTROL_RTS_CTS 0x2 +#define ACPI_SPCR_FLOW_CONTROL_XON_XOFF 0x4 + +#define ACPI_SPCR_TERMINAL_TYPE_VT100 0 +#define ACPI_SPCR_TERMINAL_TYPE_VT100_PLUS 1 +#define ACPI_SPCR_TERMINAL_TYPE_VT_UTF8 2 +#define ACPI_SPCR_TERMINAL_TYPE_ANSI 3 + #define BHYVE_ACPI_BASE 0xf2400 #define BASL_TABLE_ALIGNMENT 0x10 |