]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - usr.sbin/bhyve/basl.h
libpcap: Update to 1.10.3
[FreeBSD/FreeBSD.git] / usr.sbin / bhyve / basl.h
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause
3  *
4  * Copyright (c) 2022 Beckhoff Automation GmbH & Co. KG
5  */
6
7 #pragma once
8
9 #pragma GCC diagnostic push
10 #pragma GCC diagnostic ignored "-Wunused-parameter"
11 #include <contrib/dev/acpica/include/acpi.h>
12 #pragma GCC diagnostic pop
13
14 #define ACPI_GAS_ACCESS_WIDTH_LEGACY 0
15 #define ACPI_GAS_ACCESS_WIDTH_UNDEFINED 0
16 #define ACPI_GAS_ACCESS_WIDTH_BYTE 1
17 #define ACPI_GAS_ACCESS_WIDTH_WORD 2
18 #define ACPI_GAS_ACCESS_WIDTH_DWORD 3
19 #define ACPI_GAS_ACCESS_WIDTH_QWORD 4
20
21 #define ACPI_SPCR_INTERRUPT_TYPE_8259 0x1
22 #define ACPI_SPCR_INTERRUPT_TYPE_APIC 0x2
23 #define ACPI_SPCR_INTERRUPT_TYPE_SAPIC 0x4
24 #define ACPI_SPCR_INTERRUPT_TYPE_GIC 0x8
25
26 #define ACPI_SPCR_BAUD_RATE_9600 3
27 #define ACPI_SPCR_BAUD_RATE_19200 4
28 #define ACPI_SPCR_BAUD_RATE_57600 6
29 #define ACPI_SPCR_BAUD_RATE_115200 7
30
31 #define ACPI_SPCR_PARITY_NO_PARITY 0
32
33 #define ACPI_SPCR_STOP_BITS_1 1
34
35 #define ACPI_SPCR_FLOW_CONTROL_DCD 0x1
36 #define ACPI_SPCR_FLOW_CONTROL_RTS_CTS 0x2
37 #define ACPI_SPCR_FLOW_CONTROL_XON_XOFF 0x4
38
39 #define ACPI_SPCR_TERMINAL_TYPE_VT100 0
40 #define ACPI_SPCR_TERMINAL_TYPE_VT100_PLUS 1
41 #define ACPI_SPCR_TERMINAL_TYPE_VT_UTF8 2
42 #define ACPI_SPCR_TERMINAL_TYPE_ANSI 3
43
44 #define BHYVE_ACPI_BASE 0xf2400
45
46 #define BASL_TABLE_ALIGNMENT 0x10
47 #define BASL_TABLE_ALIGNMENT_FACS 0x40
48
49 #define BASL_TABLE_CHECKSUM_LEN_FULL_TABLE (-1U)
50
51 #define BASL_EXEC(x)                                                         \
52         do {                                                                 \
53                 const int error = (x);                                       \
54                 if (error) {                                                 \
55                         warnc(error,                                         \
56                             "BASL failed @ %s:%d\n    Failed to execute %s", \
57                             __func__, __LINE__, #x);                         \
58                         return (error);                                      \
59                 }                                                            \
60         } while (0)
61
62 #define QEMU_FWCFG_MAX_NAME 56
63
64 struct basl_table;
65
66 void basl_fill_gas(ACPI_GENERIC_ADDRESS *gas, uint8_t space_id,
67     uint8_t bit_width, uint8_t bit_offset, uint8_t access_width,
68     uint64_t address);
69 int basl_finish(void);
70 int basl_init(void);
71 int basl_table_add_checksum(struct basl_table *const table, const uint32_t off,
72     const uint32_t start, const uint32_t len);
73 int basl_table_add_length(struct basl_table *const table, const uint32_t off,
74     const uint8_t size);
75 int basl_table_add_pointer(struct basl_table *const table,
76     const uint8_t src_signature[ACPI_NAMESEG_SIZE], const uint32_t off,
77     const uint8_t size);
78 int basl_table_append_bytes(struct basl_table *table, const void *bytes,
79     uint32_t len);
80 int basl_table_append_checksum(struct basl_table *table, uint32_t start,
81     uint32_t len);
82 /* Add an ACPI_TABLE_* to basl without its header. */
83 int basl_table_append_content(struct basl_table *table, void *data,
84     uint32_t len);
85 int basl_table_append_gas(struct basl_table *table, uint8_t space_id,
86     uint8_t bit_width, uint8_t bit_offset, uint8_t access_width,
87     uint64_t address);
88 int basl_table_append_header(struct basl_table *table,
89     const uint8_t signature[ACPI_NAMESEG_SIZE], uint8_t revision,
90     uint32_t oem_revision);
91 int basl_table_append_int(struct basl_table *table, uint64_t val, uint8_t size);
92 int basl_table_append_length(struct basl_table *table, uint8_t size);
93 int basl_table_append_pointer(struct basl_table *table,
94     const uint8_t src_signature[ACPI_NAMESEG_SIZE], uint8_t size);
95 int basl_table_create(struct basl_table **table, struct vmctx *ctx,
96     const uint8_t *name, uint32_t alignment);