coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
mmio_util.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <types.h>
4 #include <arch/io.h>
5 #include <amdblocks/acpimmio.h>
6 
7 #if ENV_X86
9 #endif
10 
11 #if ENV_X86 && CONSTANT_ACPIMMIO_BASE_ADDRESS
12 #define DECLARE_ACPIMMIO(ptr, bank) \
13  uint8_t *const ptr = (void *)(uintptr_t)ACPIMMIO_BASE(bank)
14 #else
15 #define DECLARE_ACPIMMIO(ptr, bank) uint8_t *ptr
16 #endif
17 
22 
23 #if ENV_X86
41 #endif
42 
43 #undef DECLARE_ACPIMMIO
44 
46 {
47  uint32_t dw;
48 
52 }
53 
55 {
56  uint32_t dw;
57 
61 }
62 
64 {
66 }
67 
69 {
71 }
72 
74 {
77 }
78 
80 {
82 }
83 
85 {
87 }
88 
90 {
92  reg |= HPET_EN | HPET_MSI_EN;
93  reg &= ~HPET_WIDTH_SEL; /* 32 bit HPET */
95 }
96 
98 {
100 }
101 
102 /* PM registers are accessed a byte at a time via CD6/CD7 */
104 {
105  outb(reg, PM_INDEX);
106  return inb(PM_DATA);
107 }
108 
110 {
111  return (pm_io_read8(reg + sizeof(uint8_t)) << 8) | pm_io_read8(reg);
112 }
113 
115 {
116  return (pm_io_read16(reg + sizeof(uint16_t)) << 16) | pm_io_read16(reg);
117 }
118 
120 {
121  outb(reg, PM_INDEX);
122  outb(value, PM_DATA);
123 }
124 
126 {
127  pm_io_write8(reg, value & 0xff);
128  value >>= 8;
129  pm_io_write8(reg + sizeof(uint8_t), value & 0xff);
130 }
131 
133 {
134  pm_io_write16(reg, value & 0xffff);
135  value >>= 16;
136  pm_io_write16(reg + sizeof(uint16_t), value & 0xffff);
137 }
static void pm_write32(uint8_t reg, uint32_t value)
Definition: acpimmio.h:191
#define FCH_IOAPIC_EN
Definition: acpimmio.h:23
uint8_t *MAYBE_CONST acpimmio_acdc_tmr
uint8_t *MAYBE_CONST acpimmio_gpio_100
#define PM_24_ACPIMMIO_DECODE_EN
Definition: acpimmio.h:43
#define HPET_MSI_EN
Definition: acpimmio.h:18
uint8_t *MAYBE_CONST acpimmio_wdt
#define PM_INDEX
Definition: acpimmio.h:10
uint8_t *MAYBE_CONST acpimmio_aoac
uint8_t *MAYBE_CONST acpimmio_dpvga
static uint8_t pm_read8(uint8_t reg)
Definition: acpimmio.h:166
#define HPET_EN
Definition: acpimmio.h:22
#define HPET_WIDTH_SEL
Definition: acpimmio.h:19
#define ACPIMMIO_DECODE_REGISTER_24
Definition: acpimmio.h:42
#define PM_DECODE_EN
Definition: acpimmio.h:17
#define LEGACY_IO_EN
Definition: acpimmio.h:28
uint8_t *MAYBE_CONST acpimmio_biosram
uint8_t *MAYBE_CONST acpimmio_cmos
static uint32_t pm_read32(uint8_t reg)
Definition: acpimmio.h:176
uint8_t *MAYBE_CONST acpimmio_hpet
uint8_t *MAYBE_CONST acpimmio_smbus
uint8_t *MAYBE_CONST acpimmio_misc
uint8_t *MAYBE_CONST acpimmio_asf
uint8_t *MAYBE_CONST acpimmio_iomux
uint8_t *MAYBE_CONST acpimmio_pmio
uint8_t *MAYBE_CONST acpimmio_xhci_pm
uint8_t *MAYBE_CONST acpimmio_remote_gpio
#define KBRSTEN
Definition: acpimmio.h:33
static void pm_write8(uint8_t reg, uint8_t value)
Definition: acpimmio.h:181
uint8_t *MAYBE_CONST acpimmio_acpi
uint8_t *MAYBE_CONST acpimmio_smi
#define LEGACY_DMA_IO_80_EN
Definition: acpimmio.h:25
uint8_t *MAYBE_CONST acpimmio_gpio0
#define LEGACY_DMA_IO_EN
Definition: acpimmio.h:26
#define CF9_IO_EN
Definition: acpimmio.h:27
#define PM_RST_CTRL1
Definition: acpimmio.h:31
#define PM_04_ACPIMMIO_DECODE_EN
Definition: acpimmio.h:47
#define PM_DATA
Definition: acpimmio.h:11
uint8_t *MAYBE_CONST acpimmio_cmosram
uint8_t *MAYBE_CONST acpimmio_sm_pci
uint8_t *MAYBE_CONST acpimmio_pmio2
#define ACPIMMIO_DECODE_REGISTER_04
Definition: acpimmio.h:45
pte_t value
Definition: mmu.c:91
u8 inb(u16 port)
void outb(u8 val, u16 port)
@ HPET
Definition: acpi.h:75
@ SMBUS
Definition: acpigen.h:202
@ CMOS
Definition: acpigen.h:203
uint8_t pm_io_read8(uint8_t reg)
Definition: mmio_util.c:103
void pm_io_write16(uint8_t reg, uint16_t value)
Definition: mmio_util.c:125
#define DECLARE_ACPIMMIO(ptr, bank)
Definition: mmio_util.c:15
uint32_t pm_io_read32(uint8_t reg)
Definition: mmio_util.c:114
void fch_enable_cf9_io(void)
Definition: mmio_util.c:63
void enable_acpimmio_decode_pm24(void)
Definition: mmio_util.c:45
void fch_enable_ioapic_decode(void)
Definition: mmio_util.c:84
void pm_io_write8(uint8_t reg, uint8_t value)
Definition: mmio_util.c:119
void fch_enable_legacy_io(void)
Definition: mmio_util.c:68
void enable_acpimmio_decode_pm04(void)
Definition: mmio_util.c:54
void pm_io_write32(uint8_t reg, uint32_t value)
Definition: mmio_util.c:132
void fch_disable_kb_rst(void)
Definition: mmio_util.c:97
uint16_t pm_io_read16(uint8_t reg)
Definition: mmio_util.c:109
void fch_disable_legacy_dma_io(void)
Definition: mmio_util.c:73
void fch_io_enable_legacy_io(void)
Definition: mmio_util.c:79
void fch_configure_hpet(void)
Definition: mmio_util.c:89
#define GPIO_100
Definition: gpio.h:77
@ SMI
Definition: gpio.h:440
unsigned short uint16_t
Definition: stdint.h:11
unsigned int uint32_t
Definition: stdint.h:14
unsigned char uint8_t
Definition: stdint.h:8