| /* 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 |