iPXE
Macros | Functions | Variables
pcibios.h File Reference

PCI configuration space access via PCI BIOS. More...

#include <stdint.h>

Go to the source code of this file.

Macros

#define PCIAPI_PREFIX_pcbios   __pcbios_
 
#define PCIBIOS_INSTALLATION_CHECK   0xb1010000
 
#define PCIBIOS_READ_CONFIG_BYTE   0xb1080000
 
#define PCIBIOS_READ_CONFIG_WORD   0xb1090000
 
#define PCIBIOS_READ_CONFIG_DWORD   0xb10a0000
 
#define PCIBIOS_WRITE_CONFIG_BYTE   0xb10b0000
 
#define PCIBIOS_WRITE_CONFIG_WORD   0xb10c0000
 
#define PCIBIOS_WRITE_CONFIG_DWORD   0xb10d0000
 

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 
int pcibios_read (struct pci_device *pci, uint32_t command, uint32_t *value)
 Read configuration space via PCI BIOS. More...
 
int pcibios_write (struct pci_device *pci, uint32_t command, uint32_t value)
 Write configuration space via PCI BIOS. More...
 
static __always_inline int PCIAPI_INLINE (pcbios, pci_read_config_byte)(struct pci_device *pci
 Read byte from PCI configuration space via PCI BIOS. More...
 
static __always_inline int PCIAPI_INLINE (pcbios, pci_read_config_word)(struct pci_device *pci
 Read word from PCI configuration space via PCI BIOS. More...
 
static __always_inline int PCIAPI_INLINE (pcbios, pci_read_config_dword)(struct pci_device *pci
 Read dword from PCI configuration space via PCI BIOS. More...
 
static __always_inline int PCIAPI_INLINE (pcbios, pci_write_config_byte)(struct pci_device *pci
 Write byte to PCI configuration space via PCI BIOS. More...
 
static __always_inline int PCIAPI_INLINE (pcbios, pci_write_config_word)(struct pci_device *pci
 Write word to PCI configuration space via PCI BIOS. More...
 
static __always_inline int PCIAPI_INLINE (pcbios, pci_write_config_dword)(struct pci_device *pci
 Write dword to PCI configuration space via PCI BIOS. More...
 

Variables

static __always_inline int unsigned int where
 
static __always_inline int unsigned int uint8_tvalue
 
int rc = pcibios_read ( pci, PCIBIOS_READ_CONFIG_BYTE | where, &tmp )
 

Detailed Description

PCI configuration space access via PCI BIOS.

Definition in file pcibios.h.

Macro Definition Documentation

◆ PCIAPI_PREFIX_pcbios

#define PCIAPI_PREFIX_pcbios   __pcbios_

Definition at line 17 of file pcibios.h.

◆ PCIBIOS_INSTALLATION_CHECK

#define PCIBIOS_INSTALLATION_CHECK   0xb1010000

Definition at line 22 of file pcibios.h.

◆ PCIBIOS_READ_CONFIG_BYTE

#define PCIBIOS_READ_CONFIG_BYTE   0xb1080000

Definition at line 23 of file pcibios.h.

◆ PCIBIOS_READ_CONFIG_WORD

#define PCIBIOS_READ_CONFIG_WORD   0xb1090000

Definition at line 24 of file pcibios.h.

◆ PCIBIOS_READ_CONFIG_DWORD

#define PCIBIOS_READ_CONFIG_DWORD   0xb10a0000

Definition at line 25 of file pcibios.h.

◆ PCIBIOS_WRITE_CONFIG_BYTE

#define PCIBIOS_WRITE_CONFIG_BYTE   0xb10b0000

Definition at line 26 of file pcibios.h.

◆ PCIBIOS_WRITE_CONFIG_WORD

#define PCIBIOS_WRITE_CONFIG_WORD   0xb10c0000

Definition at line 27 of file pcibios.h.

◆ PCIBIOS_WRITE_CONFIG_DWORD

#define PCIBIOS_WRITE_CONFIG_DWORD   0xb10d0000

Definition at line 28 of file pcibios.h.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )

◆ pcibios_read()

int pcibios_read ( struct pci_device pci,
uint32_t  command,
uint32_t value 
)

Read configuration space via PCI BIOS.

Parameters
pciPCI device
commandPCI BIOS command
valueValue read
Return values
rcReturn status code

Definition at line 71 of file pcibios.c.

71  {
72  int discard_b, discard_D;
74 
75  __asm__ __volatile__ ( REAL_CODE ( "stc\n\t"
76  "int $0x1a\n\t"
77  "jnc 1f\n\t"
78  "xorl %%eax, %%eax\n\t"
79  "decl %%eax\n\t"
80  "movl %%eax, %%ecx\n\t"
81  "\n1:\n\t" )
82  : "=a" ( status ), "=b" ( discard_b ),
83  "=c" ( *value ), "=D" ( discard_D )
84  : "a" ( command >> 16 ), "D" ( command ),
85  "b" ( pci->busdevfn )
86  : "edx" );
87 
88  return ( status >> 8 );
89 }
unsigned short uint16_t
Definition: stdint.h:11
A command-line command.
Definition: command.h:9
uint8_t status
Status.
Definition: ena.h:16
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
void * discard_D
Definition: bigint.h:29
__asm__ __volatile__("\n1:\n\t" "movb -1(%2,%1), %%al\n\t" "stosb\n\t" "loop 1b\n\t" "xorl %%eax, %%eax\n\t" "mov %3, %1\n\t" "rep stosb\n\t" :"=&D"(discard_D), "=&c"(discard_c) :"r"(data), "g"(pad_len), "0"(value0), "1"(len) :"eax")
uint32_t busdevfn
Segment, bus, device, and function (bus:dev.fn) number.
Definition: pci.h:210
__asm__(".section \".rodata\", \"a\", " PROGBITS "\n\t" "\nprivate_key_data:\n\t" ".size private_key_data, ( . - private_key_data )\n\t" ".equ private_key_len, ( . - private_key_data )\n\t" ".previous\n\t")
#define REAL_CODE(asm_code_str)
Definition: libkir.h:226

References __asm__(), __volatile__(), pci_device::busdevfn, discard_D, REAL_CODE, status, and value.

◆ pcibios_write()

int pcibios_write ( struct pci_device pci,
uint32_t  command,
uint32_t  value 
)

Write configuration space via PCI BIOS.

Parameters
pciPCI device
commandPCI BIOS command
valueValue to be written
Return values
rcReturn status code

Definition at line 99 of file pcibios.c.

99  {
100  int discard_b, discard_c, discard_D;
102 
103  __asm__ __volatile__ ( REAL_CODE ( "stc\n\t"
104  "int $0x1a\n\t"
105  "jnc 1f\n\t"
106  "movb $0xff, %%ah\n\t"
107  "\n1:\n\t" )
108  : "=a" ( status ), "=b" ( discard_b ),
109  "=c" ( discard_c ), "=D" ( discard_D )
110  : "a" ( command >> 16 ), "D" ( command ),
111  "b" ( pci->busdevfn ), "c" ( value )
112  : "edx" );
113 
114  return ( status >> 8 );
115 }
unsigned short uint16_t
Definition: stdint.h:11
A command-line command.
Definition: command.h:9
uint8_t status
Status.
Definition: ena.h:16
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
void * discard_D
Definition: bigint.h:29
__asm__ __volatile__("\n1:\n\t" "movb -1(%2,%1), %%al\n\t" "stosb\n\t" "loop 1b\n\t" "xorl %%eax, %%eax\n\t" "mov %3, %1\n\t" "rep stosb\n\t" :"=&D"(discard_D), "=&c"(discard_c) :"r"(data), "g"(pad_len), "0"(value0), "1"(len) :"eax")
uint32_t busdevfn
Segment, bus, device, and function (bus:dev.fn) number.
Definition: pci.h:210
__asm__(".section \".rodata\", \"a\", " PROGBITS "\n\t" "\nprivate_key_data:\n\t" ".size private_key_data, ( . - private_key_data )\n\t" ".equ private_key_len, ( . - private_key_data )\n\t" ".previous\n\t")
long discard_c
Definition: bigint.h:30
#define REAL_CODE(asm_code_str)
Definition: libkir.h:226

References __asm__(), __volatile__(), pci_device::busdevfn, discard_c, discard_D, REAL_CODE, status, and value.

◆ PCIAPI_INLINE() [1/6]

static __always_inline int PCIAPI_INLINE ( pcbios  ,
pci_read_config_byte   
)
inlinestatic

Read byte from PCI configuration space via PCI BIOS.

Parameters
pciPCI device
whereLocation within PCI configuration space
valueValue read
Return values
rcReturn status code

◆ PCIAPI_INLINE() [2/6]

static __always_inline int PCIAPI_INLINE ( pcbios  ,
pci_read_config_word   
)
inlinestatic

Read word from PCI configuration space via PCI BIOS.

Parameters
pciPCI device
whereLocation within PCI configuration space
valueValue read
Return values
rcReturn status code

◆ PCIAPI_INLINE() [3/6]

static __always_inline int PCIAPI_INLINE ( pcbios  ,
pci_read_config_dword   
)
inlinestatic

Read dword from PCI configuration space via PCI BIOS.

Parameters
pciPCI device
whereLocation within PCI configuration space
valueValue read
Return values
rcReturn status code

◆ PCIAPI_INLINE() [4/6]

static __always_inline int PCIAPI_INLINE ( pcbios  ,
pci_write_config_byte   
)
inlinestatic

Write byte to PCI configuration space via PCI BIOS.

Parameters
pciPCI device
whereLocation within PCI configuration space
valueValue to be written
Return values
rcReturn status code

◆ PCIAPI_INLINE() [5/6]

static __always_inline int PCIAPI_INLINE ( pcbios  ,
pci_write_config_word   
)
inlinestatic

Write word to PCI configuration space via PCI BIOS.

Parameters
pciPCI device
whereLocation within PCI configuration space
valueValue to be written
Return values
rcReturn status code

◆ PCIAPI_INLINE() [6/6]

static __always_inline int PCIAPI_INLINE ( pcbios  ,
pci_write_config_dword   
)
inlinestatic

Write dword to PCI configuration space via PCI BIOS.

Parameters
pciPCI device
whereLocation within PCI configuration space
valueValue to be written
Return values
rcReturn status code

Variable Documentation

◆ where

__always_inline int unsigned int where

Definition at line 45 of file pcibios.h.

◆ value

__always_inline int unsigned int uint32_t value
Initial value:
{
uint8_t * tmp
Definition: entropy.h:156
unsigned int uint32_t
Definition: stdint.h:12

Definition at line 46 of file pcibios.h.

◆ rc

Definition at line 48 of file pcibios.h.