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