| /* SPDX-License-Identifier: GPL-2.0 */ |
| #ifndef BOOT_IO_H |
| #define BOOT_IO_H |
| |
| #include <asm/shared/io.h> |
| |
| #undef inb |
| #undef inw |
| #undef inl |
| #undef outb |
| #undef outw |
| #undef outl |
| |
| struct port_io_ops { |
| u8 (*f_inb)(u16 port); |
| void (*f_outb)(u8 v, u16 port); |
| void (*f_outw)(u16 v, u16 port); |
| }; |
| |
| extern struct port_io_ops pio_ops; |
| |
| /* |
| * Use the normal I/O instructions by default. |
| * TDX guests override these to use hypercalls. |
| */ |
| static inline void init_default_io_ops(void) |
| { |
| pio_ops.f_inb = __inb; |
| pio_ops.f_outb = __outb; |
| pio_ops.f_outw = __outw; |
| } |
| |
| /* |
| * Redirect port I/O operations via pio_ops callbacks. |
| * TDX guests override these callbacks with TDX-specific helpers. |
| */ |
| #define inb pio_ops.f_inb |
| #define outb pio_ops.f_outb |
| #define outw pio_ops.f_outw |
| |
| #endif |