xref: /openbmc/linux/arch/x86/boot/io.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
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   */
init_default_io_ops(void)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