coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
espi.h File Reference
#include <types.h>
Include dependency graph for espi.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  espi_config
 

Macros

#define ESPI_OFFSET_FROM_BAR   0x10000
 
#define ESPI_DECODE   0x40
 
#define ESPI_DECODE_MMIO_RANGE_EN(range)   (1 << (((range) & 3) + 12))
 
#define ESPI_DECODE_IO_RANGE_EN(range)   (1 << (((range) & 3) + 8))
 
#define ESPI_DECODE_IO_0x80_EN   (1 << 2)
 
#define ESPI_DECODE_IO_0X60_0X64_EN   (1 << 1)
 
#define ESPI_DECODE_IO_0X2E_0X2F_EN   (1 << 0)
 
#define ESPI_IO_BASE_REG0   0x44
 
#define ESPI_IO_BASE_REG1   0x48
 
#define ESPI_IO_SIZE0   0x4c
 
#define ESPI_MMIO_BASE_REG0   0x50
 
#define ESPI_MMIO_BASE_REG1   0x54
 
#define ESPI_MMIO_BASE_REG2   0x58
 
#define ESPI_MMIO_BASE_REG3   0x5c
 
#define ESPI_MMIO_SIZE_REG0   0x60
 
#define ESPI_MMIO_SIZE_REG1   0x64
 
#define ESPI_IO_RANGE_BASE(range)   (ESPI_IO_BASE_REG0 + ((range) & 3) * 2)
 
#define ESPI_IO_RANGE_SIZE(range)   (ESPI_IO_SIZE0 + ((range) & 3))
 
#define ESPI_MMIO_RANGE_BASE(range)   (ESPI_MMIO_BASE_REG0 + ((range) & 3) * 4)
 
#define ESPI_MMIO_RANGE_SIZE(range)   (ESPI_MMIO_SIZE_REG0 + ((range) & 3) * 2)
 
#define ESPI_GENERIC_IO_WIN_COUNT   4
 
#define ESPI_GENERIC_IO_MAX_WIN_SIZE   0x100
 
#define ESPI_GENERIC_MMIO_WIN_COUNT   4
 
#define ESPI_GENERIC_MMIO_MAX_WIN_SIZE   0x10000
 
#define ESPI_SLAVE0_CONFIG   0x68
 
#define ESPI_CRC_CHECKING_EN   (1 << 31)
 
#define ESPI_ALERT_MODE   (1 << 30)
 
#define ESPI_IO_MODE_SHIFT   28
 
#define ESPI_IO_MODE_MASK   (0x3 << ESPI_IO_MODE_SHIFT)
 
#define ESPI_IO_MODE_VALUE(x)   ((x) << ESPI_IO_MODE_SHIFT)
 
#define ESPI_OP_FREQ_SHIFT   25
 
#define ESPI_OP_FREQ_MASK   (0x7 << ESPI_OP_FREQ_SHIFT)
 
#define ESPI_OP_FREQ_VALUE(x)   ((x) << ESPI_OP_FREQ_SHIFT)
 
#define ESPI_PERIPH_CH_EN   (1 << 3)
 
#define ESPI_VW_CH_EN   (1 << 2)
 
#define ESPI_OOB_CH_EN   (1 << 1)
 
#define ESPI_FLASH_CH_EN   (1 << 0)
 
#define ESPI_VW_IRQ_LEVEL_HIGH(x)   (1 << (x))
 
#define ESPI_VW_IRQ_LEVEL_LOW(x)   (0 << (x))
 
#define ESPI_VW_IRQ_EDGE_HIGH(x)   (1 << (x))
 
#define ESPI_VW_IRQ_EDGE_LOW(x)   (0 << (x))
 

Enumerations

enum  espi_io_mode { ESPI_IO_MODE_SINGLE = ESPI_IO_MODE_VALUE(0) , ESPI_IO_MODE_DUAL = ESPI_IO_MODE_VALUE(1) , ESPI_IO_MODE_QUAD = ESPI_IO_MODE_VALUE(2) }
 
enum  espi_op_freq { ESPI_OP_FREQ_16_MHZ = ESPI_OP_FREQ_VALUE(0) , ESPI_OP_FREQ_33_MHZ = ESPI_OP_FREQ_VALUE(1) , ESPI_OP_FREQ_66_MHZ = ESPI_OP_FREQ_VALUE(2) }
 
enum  espi_alert_pin { ESPI_ALERT_PIN_IN_BAND , ESPI_ALERT_PIN_PUSH_PULL , ESPI_ALERT_PIN_OPEN_DRAIN }
 

Functions

enum cb_err espi_open_io_window (uint16_t base, size_t size)
 
enum cb_err espi_open_mmio_window (uint32_t base, size_t size)
 
void espi_update_static_bar (uintptr_t bar)
 
enum cb_err espi_setup (void)
 
void mb_set_up_early_espi (void)
 
void configure_espi_with_mb_hook (void)
 

Macro Definition Documentation

◆ ESPI_ALERT_MODE

#define ESPI_ALERT_MODE   (1 << 30)

Definition at line 40 of file espi.h.

◆ ESPI_CRC_CHECKING_EN

#define ESPI_CRC_CHECKING_EN   (1 << 31)

Definition at line 39 of file espi.h.

◆ ESPI_DECODE

#define ESPI_DECODE   0x40

Definition at line 11 of file espi.h.

◆ ESPI_DECODE_IO_0X2E_0X2F_EN

#define ESPI_DECODE_IO_0X2E_0X2F_EN   (1 << 0)

Definition at line 16 of file espi.h.

◆ ESPI_DECODE_IO_0X60_0X64_EN

#define ESPI_DECODE_IO_0X60_0X64_EN   (1 << 1)

Definition at line 15 of file espi.h.

◆ ESPI_DECODE_IO_0x80_EN

#define ESPI_DECODE_IO_0x80_EN   (1 << 2)

Definition at line 14 of file espi.h.

◆ ESPI_DECODE_IO_RANGE_EN

#define ESPI_DECODE_IO_RANGE_EN (   range)    (1 << (((range) & 3) + 8))

Definition at line 13 of file espi.h.

◆ ESPI_DECODE_MMIO_RANGE_EN

#define ESPI_DECODE_MMIO_RANGE_EN (   range)    (1 << (((range) & 3) + 12))

Definition at line 12 of file espi.h.

◆ ESPI_FLASH_CH_EN

#define ESPI_FLASH_CH_EN   (1 << 0)

Definition at line 53 of file espi.h.

◆ ESPI_GENERIC_IO_MAX_WIN_SIZE

#define ESPI_GENERIC_IO_MAX_WIN_SIZE   0x100

Definition at line 34 of file espi.h.

◆ ESPI_GENERIC_IO_WIN_COUNT

#define ESPI_GENERIC_IO_WIN_COUNT   4

Definition at line 33 of file espi.h.

◆ ESPI_GENERIC_MMIO_MAX_WIN_SIZE

#define ESPI_GENERIC_MMIO_MAX_WIN_SIZE   0x10000

Definition at line 36 of file espi.h.

◆ ESPI_GENERIC_MMIO_WIN_COUNT

#define ESPI_GENERIC_MMIO_WIN_COUNT   4

Definition at line 35 of file espi.h.

◆ ESPI_IO_BASE_REG0

#define ESPI_IO_BASE_REG0   0x44

Definition at line 18 of file espi.h.

◆ ESPI_IO_BASE_REG1

#define ESPI_IO_BASE_REG1   0x48

Definition at line 19 of file espi.h.

◆ ESPI_IO_MODE_MASK

#define ESPI_IO_MODE_MASK   (0x3 << ESPI_IO_MODE_SHIFT)

Definition at line 43 of file espi.h.

◆ ESPI_IO_MODE_SHIFT

#define ESPI_IO_MODE_SHIFT   28

Definition at line 42 of file espi.h.

◆ ESPI_IO_MODE_VALUE

#define ESPI_IO_MODE_VALUE (   x)    ((x) << ESPI_IO_MODE_SHIFT)

Definition at line 44 of file espi.h.

◆ ESPI_IO_RANGE_BASE

#define ESPI_IO_RANGE_BASE (   range)    (ESPI_IO_BASE_REG0 + ((range) & 3) * 2)

Definition at line 28 of file espi.h.

◆ ESPI_IO_RANGE_SIZE

#define ESPI_IO_RANGE_SIZE (   range)    (ESPI_IO_SIZE0 + ((range) & 3))

Definition at line 29 of file espi.h.

◆ ESPI_IO_SIZE0

#define ESPI_IO_SIZE0   0x4c

Definition at line 20 of file espi.h.

◆ ESPI_MMIO_BASE_REG0

#define ESPI_MMIO_BASE_REG0   0x50

Definition at line 21 of file espi.h.

◆ ESPI_MMIO_BASE_REG1

#define ESPI_MMIO_BASE_REG1   0x54

Definition at line 22 of file espi.h.

◆ ESPI_MMIO_BASE_REG2

#define ESPI_MMIO_BASE_REG2   0x58

Definition at line 23 of file espi.h.

◆ ESPI_MMIO_BASE_REG3

#define ESPI_MMIO_BASE_REG3   0x5c

Definition at line 24 of file espi.h.

◆ ESPI_MMIO_RANGE_BASE

#define ESPI_MMIO_RANGE_BASE (   range)    (ESPI_MMIO_BASE_REG0 + ((range) & 3) * 4)

Definition at line 30 of file espi.h.

◆ ESPI_MMIO_RANGE_SIZE

#define ESPI_MMIO_RANGE_SIZE (   range)    (ESPI_MMIO_SIZE_REG0 + ((range) & 3) * 2)

Definition at line 31 of file espi.h.

◆ ESPI_MMIO_SIZE_REG0

#define ESPI_MMIO_SIZE_REG0   0x60

Definition at line 25 of file espi.h.

◆ ESPI_MMIO_SIZE_REG1

#define ESPI_MMIO_SIZE_REG1   0x64

Definition at line 26 of file espi.h.

◆ ESPI_OFFSET_FROM_BAR

#define ESPI_OFFSET_FROM_BAR   0x10000

Definition at line 9 of file espi.h.

◆ ESPI_OOB_CH_EN

#define ESPI_OOB_CH_EN   (1 << 1)

Definition at line 52 of file espi.h.

◆ ESPI_OP_FREQ_MASK

#define ESPI_OP_FREQ_MASK   (0x7 << ESPI_OP_FREQ_SHIFT)

Definition at line 47 of file espi.h.

◆ ESPI_OP_FREQ_SHIFT

#define ESPI_OP_FREQ_SHIFT   25

Definition at line 46 of file espi.h.

◆ ESPI_OP_FREQ_VALUE

#define ESPI_OP_FREQ_VALUE (   x)    ((x) << ESPI_OP_FREQ_SHIFT)

Definition at line 48 of file espi.h.

◆ ESPI_PERIPH_CH_EN

#define ESPI_PERIPH_CH_EN   (1 << 3)

Definition at line 50 of file espi.h.

◆ ESPI_SLAVE0_CONFIG

#define ESPI_SLAVE0_CONFIG   0x68

Definition at line 38 of file espi.h.

◆ ESPI_VW_CH_EN

#define ESPI_VW_CH_EN   (1 << 2)

Definition at line 51 of file espi.h.

◆ ESPI_VW_IRQ_EDGE_HIGH

#define ESPI_VW_IRQ_EDGE_HIGH (   x)    (1 << (x))

Definition at line 60 of file espi.h.

◆ ESPI_VW_IRQ_EDGE_LOW

#define ESPI_VW_IRQ_EDGE_LOW (   x)    (0 << (x))

Definition at line 61 of file espi.h.

◆ ESPI_VW_IRQ_LEVEL_HIGH

#define ESPI_VW_IRQ_LEVEL_HIGH (   x)    (1 << (x))

Definition at line 58 of file espi.h.

◆ ESPI_VW_IRQ_LEVEL_LOW

#define ESPI_VW_IRQ_LEVEL_LOW (   x)    (0 << (x))

Definition at line 59 of file espi.h.

Enumeration Type Documentation

◆ espi_alert_pin

Enumerator
ESPI_ALERT_PIN_IN_BAND 
ESPI_ALERT_PIN_PUSH_PULL 
ESPI_ALERT_PIN_OPEN_DRAIN 

Definition at line 75 of file espi.h.

◆ espi_io_mode

Enumerator
ESPI_IO_MODE_SINGLE 
ESPI_IO_MODE_DUAL 
ESPI_IO_MODE_QUAD 

Definition at line 63 of file espi.h.

◆ espi_op_freq

Enumerator
ESPI_OP_FREQ_16_MHZ 
ESPI_OP_FREQ_33_MHZ 
ESPI_OP_FREQ_66_MHZ 

Definition at line 69 of file espi.h.

Function Documentation

◆ configure_espi_with_mb_hook()

void configure_espi_with_mb_hook ( void  )

Definition at line 1052 of file espi_util.c.

References espi_setup(), and mb_set_up_early_espi().

Referenced by fch_pre_init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ espi_open_io_window()

enum cb_err espi_open_io_window ( uint16_t  base,
size_t  size 
)

Definition at line 188 of file espi_util.c.

Referenced by configure_child_espi_windows().

Here is the caller graph for this function:

◆ espi_open_mmio_window()

enum cb_err espi_open_mmio_window ( uint32_t  base,
size_t  size 
)

Definition at line 280 of file espi_util.c.

References base, espi_mmio_range_base_reg(), espi_mmio_range_size_reg(), espi_write16(), and espi_write32().

Referenced by configure_child_espi_windows().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ espi_setup()

enum cb_err espi_setup ( void  )

Definition at line 922 of file espi_util.c.

References ESPI_GLOBAL_CONTROL_1, espi_read32(), ESPI_SUB_DECODE_EN, ESPI_SUB_DECODE_SLV_MASK, and espi_write32().

Referenced by configure_espi_with_mb_hook(), and verstage_soc_espi_init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ espi_update_static_bar()

void espi_update_static_bar ( uintptr_t  bar)

Definition at line 17 of file espi_util.c.

References espi_bar.

Referenced by espi_get_bar(), and espi_set_bar().

Here is the caller graph for this function:

◆ mb_set_up_early_espi()

void mb_set_up_early_espi ( void  )

Definition at line 15 of file bootblock.c.

References bootblock_mainboard_early_init(), espi_switch_to_spi1_pads(), gpio_configure_pads(), and variant_espi_gpio_table().

Referenced by configure_espi_with_mb_hook().

Here is the call graph for this function:
Here is the caller graph for this function: