coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
io.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #ifndef _ASM_IO_H
4 #define _ASM_IO_H
5 
6 #include <stdint.h>
7 
8 /* Set MSB to 1 to ignore HRMOR */
9 #define MMIO_GROUP0_CHIP0_LPC_BASE_ADDR 0x8006030000000000
10 #define LPCHC_IO_SPACE 0xD0010000
11 #define FLASH_IO_SPACE 0xFC000000
12 #define LPC_BASE_ADDR (MMIO_GROUP0_CHIP0_LPC_BASE_ADDR + LPCHC_IO_SPACE)
13 #define FLASH_BASE_ADDR (MMIO_GROUP0_CHIP0_LPC_BASE_ADDR + FLASH_IO_SPACE)
14 #define MMIO_GROUP0_CHIP0_SCOM_BASE_ADDR 0x800603FC00000000
15 
16 /* Enforce In-order Execution of I/O */
17 static inline void eieio(void)
18 {
19  asm volatile("eieio" ::: "memory");
20 }
21 
22 static inline void outb(uint8_t value, uint16_t port)
23 {
24  asm volatile("stbcix %0, %1, %2" :: "r"(value), "b"(LPC_BASE_ADDR), "r"(port));
25  eieio();
26 }
27 
28 static inline void outw(uint16_t value, uint16_t port)
29 {
30  asm volatile("sthcix %0, %1, %2" :: "r"(value), "b"(LPC_BASE_ADDR), "r"(port));
31  eieio();
32 }
33 
34 static inline void outl(uint32_t value, uint16_t port)
35 {
36  asm volatile("stwcix %0, %1, %2" :: "r"(value), "b"(LPC_BASE_ADDR), "r"(port));
37  eieio();
38 }
39 
40 static inline uint8_t inb(uint16_t port)
41 {
43  asm volatile("lbzcix %0, %1, %2" : "=r"(buffer) : "b"(LPC_BASE_ADDR), "r"(port));
44  eieio();
45  return buffer;
46 }
47 
48 static inline uint16_t inw(uint16_t port)
49 {
51  asm volatile("lhzcix %0, %1, %2" : "=r"(buffer) : "b"(LPC_BASE_ADDR), "r"(port));
52  eieio();
53  return buffer;
54 }
55 
56 static inline uint32_t inl(uint16_t port)
57 {
59  asm volatile("lwzcix %0, %1, %2" : "=r"(buffer) : "b"(LPC_BASE_ADDR), "r"(port));
60  eieio();
61  return buffer;
62 }
63 
64 static inline void report_istep(uint8_t step, uint8_t substep)
65 {
66  outb(step, 0x81);
67  outb(substep, 0x82);
68 }
69 
70 #endif
pte_t value
Definition: mmu.c:91
static uint8_t inb(uint16_t port)
Definition: io.h:40
static void outb(uint8_t value, uint16_t port)
Definition: io.h:22
static void outw(uint16_t value, uint16_t port)
Definition: io.h:28
#define LPC_BASE_ADDR
Definition: io.h:12
static void eieio(void)
Definition: io.h:17
static uint32_t inl(uint16_t port)
Definition: io.h:56
static uint16_t inw(uint16_t port)
Definition: io.h:48
static void outl(uint32_t value, uint16_t port)
Definition: io.h:34
static void report_istep(uint8_t step, uint8_t substep)
Definition: io.h:64
port
Definition: i915.h:29
u8 buffer[C2P_BUFFER_MAXSIZE]
Definition: psp_smm.c:18
unsigned short uint16_t
Definition: stdint.h:11
unsigned int uint32_t
Definition: stdint.h:14
unsigned char uint8_t
Definition: stdint.h:8