1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #ifndef BOOT_IO_H |
3 | #define BOOT_IO_H |
4 | |
5 | #include <asm/shared/io.h> |
6 | |
7 | #undef inb |
8 | #undef inw |
9 | #undef inl |
10 | #undef outb |
11 | #undef outw |
12 | #undef outl |
13 | |
14 | struct port_io_ops { |
15 | u8 (*f_inb)(u16 port); |
16 | void (*f_outb)(u8 v, u16 port); |
17 | void (*f_outw)(u16 v, u16 port); |
18 | }; |
19 | |
20 | extern struct port_io_ops pio_ops; |
21 | |
22 | /* |
23 | * Use the normal I/O instructions by default. |
24 | * TDX guests override these to use hypercalls. |
25 | */ |
26 | static inline void init_default_io_ops(void) |
27 | { |
28 | pio_ops.f_inb = __inb; |
29 | pio_ops.f_outb = __outb; |
30 | pio_ops.f_outw = __outw; |
31 | } |
32 | |
33 | /* |
34 | * Redirect port I/O operations via pio_ops callbacks. |
35 | * TDX guests override these callbacks with TDX-specific helpers. |
36 | */ |
37 | #define inb pio_ops.f_inb |
38 | #define outb pio_ops.f_outb |
39 | #define outw pio_ops.f_outw |
40 | |
41 | #endif |
42 | |