iPXE
Data Structures | Macros | Functions | Variables
acpi.h File Reference

ACPI data structures. More...

#include <stdint.h>
#include <byteswap.h>
#include <ipxe/refcnt.h>
#include <ipxe/list.h>
#include <ipxe/interface.h>
#include <ipxe/tables.h>
#include <ipxe/api.h>
#include <config/general.h>
#include <ipxe/null_acpi.h>
#include <ipxe/efi/efi_acpi.h>
#include <ipxe/linux/linux_acpi.h>
#include <bits/acpi.h>

Go to the source code of this file.

Data Structures

struct  acpi_address
 An ACPI generic address structure. More...
 
struct  acpi_small_resource
 An ACPI small resource descriptor header. More...
 
struct  acpi_end_resource
 An ACPI end resource descriptor. More...
 
struct  acpi_large_resource
 An ACPI large resource descriptor header. More...
 
struct  acpi_qword_address_space_resource
 An ACPI QWORD address space resource descriptor. More...
 
union  acpi_resource
 An ACPI resource descriptor. More...
 
struct  acpi_header
 An ACPI description header. More...
 
struct  acpi_rsdp
 Root System Description Pointer. More...
 
struct  acpi_rsdt
 ACPI Root System Description Table (RSDT) More...
 
struct  acpi_fadt
 Fixed ACPI Description Table (FADT) More...
 
struct  acpi_descriptor
 An ACPI descriptor (used to construct ACPI tables) More...
 
struct  acpi_model
 An ACPI table model. More...
 

Macros

#define ACPI_ADDRESS_TYPE_MEM   0x00
 A memory address space type. More...
 
#define ACPI_ADDRESS_TYPE_IO   0x01
 An I/O address space type. More...
 
#define ACPI_ADDRESS_TYPE_BUS   0x02
 A bus number address space type. More...
 
#define ACPI_SMALL_LEN_MASK   0x03
 ACPI small resource length mask. More...
 
#define ACPI_END_RESOURCE   0x78
 An ACPI end resource descriptor. More...
 
#define ACPI_LARGE   0x80
 ACPI large resource flag. More...
 
#define ACPI_QWORD_ADDRESS_SPACE_RESOURCE   0x8a
 An ACPI QWORD address space resource descriptor. More...
 
#define ACPI_SIGNATURE(a, b, c, d)   ( ( (a) << 0 ) | ( (b) << 8 ) | ( (c) << 16 ) | ( (d) << 24 ) )
 Build ACPI signature. More...
 
#define RSDP_SIGNATURE   { 'R', 'S', 'D', ' ', 'P', 'T', 'R', ' ' }
 Root System Description Pointer signature. More...
 
#define RSDT_SIGNATURE   ACPI_SIGNATURE ( 'R', 'S', 'D', 'T' )
 Root System Description Table (RSDT) signature. More...
 
#define FADT_SIGNATURE   ACPI_SIGNATURE ( 'F', 'A', 'C', 'P' )
 Fixed ACPI Description Table (FADT) signature. More...
 
#define ACPI_PM1_CNT   0
 ACPI PM1 Control Register (within PM1a_CNT_BLK or PM1A_CNT_BLK) More...
 
#define ACPI_PM1_CNT_SLP_TYP(x)   ( (x) << 10 )
 Sleep type. More...
 
#define ACPI_PM1_CNT_SLP_EN   ( 1 << 13 )
 Sleep enable. More...
 
#define ACPI_PM_TMR   0
 ACPI PM Timer Register (within PM_TMR_BLK) More...
 
#define DSDT_SIGNATURE   ACPI_SIGNATURE ( 'D', 'S', 'D', 'T' )
 Differentiated System Description Table (DSDT) signature. More...
 
#define SSDT_SIGNATURE   ACPI_SIGNATURE ( 'S', 'S', 'D', 'T' )
 Secondary System Description Table (SSDT) signature. More...
 
#define ACPI_MODELS   __table ( struct acpi_model, "acpi_models" )
 ACPI models. More...
 
#define __acpi_model   __table_entry ( ACPI_MODELS, 01 )
 Declare an ACPI model. More...
 
#define ACPI_INLINE(_subsys, _api_func)   SINGLE_API_INLINE ( ACPI_PREFIX_ ## _subsys, _api_func )
 Calculate static inline ACPI API function name. More...
 
#define PROVIDE_ACPI(_subsys, _api_func, _func)   PROVIDE_SINGLE_API ( ACPI_PREFIX_ ## _subsys, _api_func, _func )
 Provide an ACPI API implementation. More...
 
#define PROVIDE_ACPI_INLINE(_subsys, _api_func)   PROVIDE_SINGLE_API_INLINE ( ACPI_PREFIX_ ## _subsys, _api_func )
 Provide a static inline ACPI API implementation. More...
 
#define acpi_describe_TYPE(object_type)   typeof ( struct acpi_descriptor * ( object_type ) )
 

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 
static unsigned int acpi_resource_tag (union acpi_resource *res)
 Get ACPI resource tag. More...
 
static size_t acpi_small_len (struct acpi_small_resource *res)
 Get length of ACPI small resource descriptor. More...
 
static size_t acpi_large_len (struct acpi_large_resource *res)
 Get length of ACPI large resource descriptor. More...
 
static size_t acpi_resource_len (union acpi_resource *res)
 Get length of ACPI resource descriptor. More...
 
static union acpi_resourceacpi_resource_next (union acpi_resource *res)
 Get next ACPI resource descriptor. More...
 
static const char * acpi_name (uint32_t signature)
 Transcribe ACPI table signature (for debugging) More...
 
static void acpi_init (struct acpi_descriptor *desc, struct acpi_model *model, struct refcnt *refcnt)
 Initialise ACPI descriptor. More...
 
const struct acpi_headeracpi_find_via_rsdt (uint32_t signature, unsigned int index)
 Locate ACPI table via RSDT. More...
 
const struct acpi_rsdtacpi_find_rsdt (void)
 Locate ACPI root system description table. More...
 
const struct acpi_headeracpi_find (uint32_t signature, unsigned int index)
 Locate ACPI table. More...
 
struct acpi_descriptoracpi_describe (struct interface *interface)
 Get object's ACPI descriptor. More...
 
void acpi_fix_checksum (struct acpi_header *acpi)
 Fix up ACPI table checksum. More...
 
const struct acpi_headeracpi_table (uint32_t signature, unsigned int index)
 Locate ACPI table. More...
 
int acpi_extract (uint32_t signature, void *data, int(*extract)(const struct acpi_header *zsdt, size_t len, size_t offset, void *data))
 Extract value from DSDT/SSDT. More...
 
void * acpi_ioremap (struct acpi_address *address, size_t len)
 Map an ACPI generic address. More...
 
void acpi_add (struct acpi_descriptor *desc)
 Add ACPI descriptor. More...
 
void acpi_del (struct acpi_descriptor *desc)
 Remove ACPI descriptor. More...
 
int acpi_install (int(*install)(struct acpi_header *acpi))
 Install ACPI tables. More...
 

Variables

const struct acpi_header *(* acpi_finder )(uint32_t signature, unsigned int index)
 

Detailed Description

ACPI data structures.

Definition in file acpi.h.

Macro Definition Documentation

◆ ACPI_ADDRESS_TYPE_MEM

#define ACPI_ADDRESS_TYPE_MEM   0x00

A memory address space type.

Definition at line 36 of file acpi.h.

◆ ACPI_ADDRESS_TYPE_IO

#define ACPI_ADDRESS_TYPE_IO   0x01

An I/O address space type.

Definition at line 39 of file acpi.h.

◆ ACPI_ADDRESS_TYPE_BUS

#define ACPI_ADDRESS_TYPE_BUS   0x02

A bus number address space type.

Definition at line 42 of file acpi.h.

◆ ACPI_SMALL_LEN_MASK

#define ACPI_SMALL_LEN_MASK   0x03

ACPI small resource length mask.

Definition at line 51 of file acpi.h.

◆ ACPI_END_RESOURCE

#define ACPI_END_RESOURCE   0x78

An ACPI end resource descriptor.

Definition at line 54 of file acpi.h.

◆ ACPI_LARGE

#define ACPI_LARGE   0x80

ACPI large resource flag.

Definition at line 73 of file acpi.h.

◆ ACPI_QWORD_ADDRESS_SPACE_RESOURCE

#define ACPI_QWORD_ADDRESS_SPACE_RESOURCE   0x8a

An ACPI QWORD address space resource descriptor.

Definition at line 76 of file acpi.h.

◆ ACPI_SIGNATURE

#define ACPI_SIGNATURE (   a,
  b,
  c,
 
)    ( ( (a) << 0 ) | ( (b) << 8 ) | ( (c) << 16 ) | ( (d) << 24 ) )

Build ACPI signature.

Parameters
aFirst character of ACPI signature
bSecond character of ACPI signature
cThird character of ACPI signature
dFourth character of ACPI signature
Return values
signatureACPI signature

Definition at line 225 of file acpi.h.

◆ RSDP_SIGNATURE

#define RSDP_SIGNATURE   { 'R', 'S', 'D', ' ', 'P', 'T', 'R', ' ' }

Root System Description Pointer signature.

Definition at line 229 of file acpi.h.

◆ RSDT_SIGNATURE

#define RSDT_SIGNATURE   ACPI_SIGNATURE ( 'R', 'S', 'D', 'T' )

Root System Description Table (RSDT) signature.

Definition at line 246 of file acpi.h.

◆ FADT_SIGNATURE

#define FADT_SIGNATURE   ACPI_SIGNATURE ( 'F', 'A', 'C', 'P' )

Fixed ACPI Description Table (FADT) signature.

Definition at line 257 of file acpi.h.

◆ ACPI_PM1_CNT

#define ACPI_PM1_CNT   0

ACPI PM1 Control Register (within PM1a_CNT_BLK or PM1A_CNT_BLK)

Definition at line 280 of file acpi.h.

◆ ACPI_PM1_CNT_SLP_TYP

#define ACPI_PM1_CNT_SLP_TYP (   x)    ( (x) << 10 )

Sleep type.

Definition at line 281 of file acpi.h.

◆ ACPI_PM1_CNT_SLP_EN

#define ACPI_PM1_CNT_SLP_EN   ( 1 << 13 )

Sleep enable.

Definition at line 282 of file acpi.h.

◆ ACPI_PM_TMR

#define ACPI_PM_TMR   0

ACPI PM Timer Register (within PM_TMR_BLK)

Definition at line 285 of file acpi.h.

◆ DSDT_SIGNATURE

#define DSDT_SIGNATURE   ACPI_SIGNATURE ( 'D', 'S', 'D', 'T' )

Differentiated System Description Table (DSDT) signature.

Definition at line 288 of file acpi.h.

◆ SSDT_SIGNATURE

#define SSDT_SIGNATURE   ACPI_SIGNATURE ( 'S', 'S', 'D', 'T' )

Secondary System Description Table (SSDT) signature.

Definition at line 291 of file acpi.h.

◆ ACPI_MODELS

#define ACPI_MODELS   __table ( struct acpi_model, "acpi_models" )

ACPI models.

Definition at line 340 of file acpi.h.

◆ __acpi_model

struct acpi_model ib_sbft_model __acpi_model   __table_entry ( ACPI_MODELS, 01 )

Declare an ACPI model.

IB sBFT model.

aBFT model

Definition at line 343 of file acpi.h.

◆ ACPI_INLINE

#define ACPI_INLINE (   _subsys,
  _api_func 
)    SINGLE_API_INLINE ( ACPI_PREFIX_ ## _subsys, _api_func )

Calculate static inline ACPI API function name.

Parameters
_prefixSubsystem prefix
_api_funcAPI function
Return values
_subsys_funcSubsystem API function

Definition at line 352 of file acpi.h.

◆ PROVIDE_ACPI

#define PROVIDE_ACPI (   _subsys,
  _api_func,
  _func 
)    PROVIDE_SINGLE_API ( ACPI_PREFIX_ ## _subsys, _api_func, _func )

Provide an ACPI API implementation.

Parameters
_prefixSubsystem prefix
_api_funcAPI function
_funcImplementing function

Definition at line 362 of file acpi.h.

◆ PROVIDE_ACPI_INLINE

#define PROVIDE_ACPI_INLINE (   _subsys,
  _api_func 
)    PROVIDE_SINGLE_API_INLINE ( ACPI_PREFIX_ ## _subsys, _api_func )

Provide a static inline ACPI API implementation.

Parameters
_prefixSubsystem prefix
_api_funcAPI function

Definition at line 371 of file acpi.h.

◆ acpi_describe_TYPE

#define acpi_describe_TYPE (   object_type)    typeof ( struct acpi_descriptor * ( object_type ) )

Definition at line 404 of file acpi.h.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )

◆ acpi_resource_tag()

static unsigned int acpi_resource_tag ( union acpi_resource res)
inlinestatic

Get ACPI resource tag.

Parameters
resACPI resource descriptor
Return values
tagResource tag

Definition at line 120 of file acpi.h.

120  {
121 
122  return ( ( res->tag & ACPI_LARGE ) ?
123  res->tag : ( res->tag & ~ACPI_SMALL_LEN_MASK ) );
124 }
uint8_t tag
Tag byte.
Definition: acpi.h:103
#define ACPI_SMALL_LEN_MASK
ACPI small resource length mask.
Definition: acpi.h:51
#define ACPI_LARGE
ACPI large resource flag.
Definition: acpi.h:73

References ACPI_LARGE, ACPI_SMALL_LEN_MASK, and acpi_resource::tag.

Referenced by efipci_discover_one(), and efipci_ioremap().

◆ acpi_small_len()

static size_t acpi_small_len ( struct acpi_small_resource res)
inlinestatic

Get length of ACPI small resource descriptor.

Parameters
resSmall resource descriptor
Return values
lenLength of descriptor

Definition at line 132 of file acpi.h.

132  {
133 
134  return ( sizeof ( *res ) + ( res->tag & ACPI_SMALL_LEN_MASK ) );
135 }
#define ACPI_SMALL_LEN_MASK
ACPI small resource length mask.
Definition: acpi.h:51
uint8_t tag
Tag byte.
Definition: acpi.h:47

References ACPI_SMALL_LEN_MASK, and acpi_small_resource::tag.

Referenced by acpi_resource_len().

◆ acpi_large_len()

static size_t acpi_large_len ( struct acpi_large_resource res)
inlinestatic

Get length of ACPI large resource descriptor.

Parameters
resLarge resource descriptor
Return values
lenLength of descriptor

Definition at line 143 of file acpi.h.

143  {
144 
145  return ( sizeof ( *res ) + le16_to_cpu ( res->len ) );
146 }
uint16_t len
Length of data items.
Definition: acpi.h:69
#define le16_to_cpu(value)
Definition: byteswap.h:112

References le16_to_cpu, and acpi_large_resource::len.

Referenced by acpi_resource_len().

◆ acpi_resource_len()

static size_t acpi_resource_len ( union acpi_resource res)
inlinestatic

Get length of ACPI resource descriptor.

Parameters
resACPI resource descriptor
Return values
lenLength of descriptor

Definition at line 154 of file acpi.h.

154  {
155 
156  return ( ( res->tag & ACPI_LARGE ) ?
157  acpi_large_len ( &res->large ) :
158  acpi_small_len ( &res->small ) );
159 }
struct acpi_small_resource small
Small resource descriptor.
Definition: acpi.h:105
struct acpi_large_resource large
Large resource descriptor.
Definition: acpi.h:109
uint8_t tag
Tag byte.
Definition: acpi.h:103
static size_t acpi_small_len(struct acpi_small_resource *res)
Get length of ACPI small resource descriptor.
Definition: acpi.h:132
static size_t acpi_large_len(struct acpi_large_resource *res)
Get length of ACPI large resource descriptor.
Definition: acpi.h:143
#define ACPI_LARGE
ACPI large resource flag.
Definition: acpi.h:73

References ACPI_LARGE, acpi_large_len(), acpi_small_len(), acpi_resource::large, acpi_resource::small, and acpi_resource::tag.

Referenced by acpi_resource_next().

◆ acpi_resource_next()

static union acpi_resource* acpi_resource_next ( union acpi_resource res)
static

Get next ACPI resource descriptor.

Parameters
resACPI resource descriptor
Return values
nextNext ACPI resource descriptor

Definition at line 168 of file acpi.h.

168  {
169 
170  return ( ( ( void * ) res ) + acpi_resource_len ( res ) );
171 }
static size_t acpi_resource_len(union acpi_resource *res)
Get length of ACPI resource descriptor.
Definition: acpi.h:154

References acpi_resource_len().

Referenced by efipci_discover_one(), and efipci_ioremap().

◆ acpi_name()

static const char* acpi_name ( uint32_t  signature)
inlinestatic

Transcribe ACPI table signature (for debugging)

Parameters
signatureACPI table signature
Return values
nameACPI table signature name

Definition at line 206 of file acpi.h.

206  {
207  static union {
209  char name[5];
210  } u;
211 
212  u.signature = cpu_to_le32 ( signature );
213  return u.name;
214 }
const char * name
Definition: ath9k_hw.c:1984
union @18 u
#define cpu_to_le32(value)
Definition: byteswap.h:107
unsigned int uint32_t
Definition: stdint.h:12
u8 signature
CPU signature.
Definition: CIB_PRM.h:35

References cpu_to_le32, name, signature, and u.

Referenced by acpi_extract(), acpi_find_via_rsdt(), acpi_settings_fetch(), acpi_zsdt(), dummy_install(), efi_block_install(), and int13_install().

◆ acpi_init()

static void acpi_init ( struct acpi_descriptor desc,
struct acpi_model model,
struct refcnt refcnt 
)
inlinestatic

Initialise ACPI descriptor.

Parameters
descACPI descriptor
modelTable model
refcntReference count

Definition at line 311 of file acpi.h.

312  {
313 
314  desc->refcnt = refcnt;
315  desc->model = model;
316  INIT_LIST_HEAD ( &desc->list );
317 }
static void(*) struct refcnt refcnt)
Definition: pool.h:62
struct ena_llq_option desc
Descriptor counts.
Definition: ena.h:20
#define INIT_LIST_HEAD(list)
Initialise a list head.
Definition: list.h:45

References desc, INIT_LIST_HEAD, and refcnt.

Referenced by aoedev_open(), ib_srp_open(), and iscsi_open().

◆ acpi_find_via_rsdt()

const struct acpi_header* acpi_find_via_rsdt ( uint32_t  signature,
unsigned int  index 
)

Locate ACPI table via RSDT.

Parameters
signatureRequested table signature
indexRequested index of table with this signature
Return values
tableTable, or NULL if not found

Definition at line 105 of file acpi.c.

106  {
107  const struct acpi_rsdt *rsdt;
108  const struct acpi_header *table;
109  size_t len;
110  unsigned int count;
111  unsigned int i;
112 
113  /* Locate RSDT */
114  rsdt = acpi_find_rsdt();
115  if ( ! rsdt ) {
116  DBG ( "RSDT not found\n" );
117  return NULL;
118  }
119 
120  /* Read RSDT header */
121  if ( rsdt->acpi.signature != cpu_to_le32 ( RSDT_SIGNATURE ) ) {
122  DBGC ( colour, "RSDT %#08lx has invalid signature:\n",
123  virt_to_phys ( rsdt ) );
124  DBGC_HDA ( colour, virt_to_phys ( rsdt ), &rsdt->acpi,
125  sizeof ( rsdt->acpi ) );
126  return NULL;
127  }
128  len = le32_to_cpu ( rsdt->acpi.length );
129  if ( len < sizeof ( rsdt->acpi ) ) {
130  DBGC ( colour, "RSDT %#08lx has invalid length:\n",
131  virt_to_phys ( rsdt ) );
132  DBGC_HDA ( colour, virt_to_phys ( rsdt ), &rsdt->acpi,
133  sizeof ( rsdt->acpi ) );
134  return NULL;
135  }
136 
137  /* Calculate number of entries */
138  count = ( ( len - sizeof ( rsdt->acpi ) ) /
139  sizeof ( rsdt->entry[0] ) );
140 
141  /* Search through entries */
142  for ( i = 0 ; i < count ; i++ ) {
143 
144  /* Read table header */
145  table = phys_to_virt ( rsdt->entry[i] );
146 
147  /* Check table signature */
148  if ( table->signature != cpu_to_le32 ( signature ) )
149  continue;
150 
151  /* Check index */
152  if ( index-- )
153  continue;
154 
155  /* Check table integrity */
156  if ( acpi_checksum ( table ) != 0 ) {
157  DBGC ( colour, "RSDT %#08lx found %s with bad "
158  "checksum at %#08lx\n", virt_to_phys ( rsdt ),
159  acpi_name ( signature ),
160  virt_to_phys ( table ) );
161  break;
162  }
163 
164  DBGC ( colour, "RSDT %#08lx found %s at %#08lx\n",
165  virt_to_phys ( rsdt ), acpi_name ( signature ),
166  virt_to_phys ( table ) );
167  return table;
168  }
169 
170  DBGC ( colour, "RSDT %#08lx could not find %s\n",
171  virt_to_phys ( rsdt ), acpi_name ( signature ) );
172  return NULL;
173 }
#define RSDT_SIGNATURE
Root System Description Table (RSDT) signature.
Definition: acpi.h:246
uint32_t signature
ACPI signature (4 ASCII characters)
Definition: acpi.h:181
#define le32_to_cpu(value)
Definition: byteswap.h:113
const struct acpi_rsdt * acpi_find_rsdt(void)
Locate ACPI root system description table.
#define DBGC(...)
Definition: compiler.h:505
long index
Definition: bigint.h:62
ACPI Root System Description Table (RSDT)
Definition: acpi.h:249
#define colour
Colour for debug messages.
Definition: acpi.c:41
uint32_t length
Length of table, in bytes, including header.
Definition: acpi.h:183
#define DBGC_HDA(...)
Definition: compiler.h:506
ring len
Length.
Definition: dwmac.h:231
uint32_t entry[0]
ACPI table entries.
Definition: acpi.h:253
static unsigned int count
Number of entries.
Definition: dwmac.h:225
#define cpu_to_le32(value)
Definition: byteswap.h:107
An ACPI description header.
Definition: acpi.h:179
struct acpi_header acpi
ACPI header.
Definition: acpi.h:251
static const char * acpi_name(uint32_t signature)
Transcribe ACPI table signature (for debugging)
Definition: acpi.h:206
#define DBG(...)
Print a debugging message.
Definition: compiler.h:498
u8 signature
CPU signature.
Definition: CIB_PRM.h:35
#define NULL
NULL pointer (VOID *)
Definition: Base.h:321

References acpi_rsdt::acpi, acpi_find_rsdt(), acpi_name(), colour, count, cpu_to_le32, DBG, DBGC, DBGC_HDA, acpi_rsdt::entry, index, le32_to_cpu, len, acpi_header::length, NULL, RSDT_SIGNATURE, signature, and acpi_header::signature.

Referenced by acpi_find().

◆ acpi_find_rsdt()

const struct acpi_rsdt* acpi_find_rsdt ( void  )

Locate ACPI root system description table.

Return values
rsdtACPI root system description table, or NULL

Referenced by acpi_find_via_rsdt().

◆ acpi_find()

const struct acpi_header* acpi_find ( uint32_t  signature,
unsigned int  index 
)

Locate ACPI table.

Parameters
signatureRequested table signature
indexRequested index of table with this signature
Return values
tableTable, or NULL if not found

Definition at line 26 of file rsdp.h.

26  {
27 
29 }
const struct acpi_header * acpi_find_via_rsdt(uint32_t signature, unsigned int index)
Locate ACPI table via RSDT.
Definition: acpi.c:105
long index
Definition: bigint.h:62
u8 signature
CPU signature.
Definition: CIB_PRM.h:35

References acpi_find_via_rsdt(), index, NULL, and signature.

◆ acpi_describe()

struct acpi_descriptor* acpi_describe ( struct interface intf)

Get object's ACPI descriptor.

Parameters
intfInterface
Return values
descACPI descriptor, or NULL

Definition at line 320 of file acpi.c.

320  {
321  struct interface *dest;
322  acpi_describe_TYPE ( void * ) *op =
324  void *object = intf_object ( dest );
325  struct acpi_descriptor *desc;
326 
327  if ( op ) {
328  desc = op ( object );
329  } else {
330  desc = NULL;
331  }
332 
333  intf_put ( dest );
334  return desc;
335 }
void * intf_object(struct interface *intf)
Get pointer to object containing object interface.
Definition: interface.c:159
struct interface * intf
Original interface.
Definition: interface.h:158
struct ena_llq_option desc
Descriptor counts.
Definition: ena.h:20
An object interface.
Definition: interface.h:124
struct acpi_descriptor * acpi_describe(struct interface *intf)
Get object's ACPI descriptor.
Definition: acpi.c:320
#define acpi_describe_TYPE(object_type)
Definition: acpi.h:404
static uint16_t struct vmbus_xfer_pages_operations * op
Definition: netvsc.h:327
An ACPI descriptor (used to construct ACPI tables)
Definition: acpi.h:294
void intf_put(struct interface *intf)
Decrement reference count on an object interface.
Definition: interface.c:149
if(len >=6 *4) __asm__ __volatile__("movsl" if(len >=5 *4) __asm__ __volatile__("movsl" if(len >=4 *4) __asm__ __volatile__("movsl" if(len >=3 *4) __asm__ __volatile__("movsl" if(len >=2 *4) __asm__ __volatile__("movsl" if(len >=1 *4) __asm__ __volatile__("movsl" if((len % 4) >=2) __asm__ __volatile__("movsw" if((len % 2) >=1) __asm__ __volatile__("movsb" return dest
Definition: string.h:150
#define NULL
NULL pointer (VOID *)
Definition: Base.h:321
#define intf_get_dest_op(intf, type, dest)
Get object interface destination and operation method.
Definition: interface.h:269

References acpi_describe(), acpi_describe_TYPE, desc, dest, interface::intf, intf_get_dest_op, intf_object(), intf_put(), NULL, and op.

Referenced by acpi_describe(), and sanpath_open().

◆ acpi_fix_checksum()

void acpi_fix_checksum ( struct acpi_header acpi)

Fix up ACPI table checksum.

Parameters
acpiACPI table header

Definition at line 79 of file acpi.c.

79  {
80 
81  /* Update checksum */
82  acpi->checksum -= acpi_checksum ( acpi );
83 }
static EFI_ACPI_TABLE_PROTOCOL * acpi
ACPI table protocol protocol.
Definition: efi_block.c:66

References acpi.

Referenced by efi_block_install(), and int13_install().

◆ acpi_table()

const struct acpi_header* acpi_table ( uint32_t  signature,
unsigned int  index 
)

Locate ACPI table.

Parameters
signatureRequested table signature
indexRequested index of table with this signature
Return values
tableTable, or NULL if not found

Definition at line 92 of file acpi.c.

93  {
94 
95  return ( *acpi_finder ) ( signature, index );
96 }
const struct acpi_header *(* acpi_finder)(uint32_t signature, unsigned int index)
long index
Definition: bigint.h:62
u8 signature
CPU signature.
Definition: CIB_PRM.h:35

References acpi_finder, index, and signature.

Referenced by acpi_extract(), acpi_poweroff(), acpi_settings_fetch(), acpi_timer_probe(), ecam_find(), and spcr_console().

◆ acpi_extract()

int acpi_extract ( uint32_t  signature,
void *  data,
int(*)(const struct acpi_header *zsdt, size_t len, size_t offset, void *data extract 
)

Extract value from DSDT/SSDT.

Parameters
signatureSignature (e.g. "_S5_")
dataData buffer
extractExtraction method
Return values
rcReturn status code

Definition at line 227 of file acpi.c.

230  {
231  const struct acpi_fadt *fadt;
232  const struct acpi_header *dsdt;
233  const struct acpi_header *ssdt;
234  unsigned int i;
235  int rc;
236 
237  /* Try DSDT first */
238  fadt = container_of ( acpi_table ( FADT_SIGNATURE, 0 ),
239  struct acpi_fadt, acpi );
240  if ( fadt ) {
241  dsdt = phys_to_virt ( fadt->dsdt );
242  if ( ( rc = acpi_zsdt ( dsdt, signature, data,
243  extract ) ) == 0 )
244  return 0;
245  }
246 
247  /* Try all SSDTs */
248  for ( i = 0 ; ; i++ ) {
249  ssdt = acpi_table ( SSDT_SIGNATURE, i );
250  if ( ! ssdt )
251  break;
252  if ( ( rc = acpi_zsdt ( ssdt, signature, data,
253  extract ) ) == 0 )
254  return 0;
255  }
256 
257  DBGC ( colour, "ACPI could not find \"%s\"\n",
258  acpi_name ( signature ) );
259  return -ENOENT;
260 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
#define DBGC(...)
Definition: compiler.h:505
#define SSDT_SIGNATURE
Secondary System Description Table (SSDT) signature.
Definition: acpi.h:291
#define ENOENT
No such file or directory.
Definition: errno.h:514
const struct acpi_header * acpi_table(uint32_t signature, unsigned int index)
Locate ACPI table.
Definition: acpi.c:92
#define container_of(ptr, type, field)
Get containing structure.
Definition: stddef.h:35
#define colour
Colour for debug messages.
Definition: acpi.c:41
Fixed ACPI Description Table (FADT)
Definition: acpi.h:260
static EFI_ACPI_TABLE_PROTOCOL * acpi
ACPI table protocol protocol.
Definition: efi_block.c:66
#define FADT_SIGNATURE
Fixed ACPI Description Table (FADT) signature.
Definition: acpi.h:257
An ACPI description header.
Definition: acpi.h:179
uint32_t dsdt
Physical address of DSDT.
Definition: acpi.h:266
static const char * acpi_name(uint32_t signature)
Transcribe ACPI table signature (for debugging)
Definition: acpi.h:206
uint8_t data[48]
Additional event data.
Definition: ena.h:22
static int acpi_zsdt(const struct acpi_header *zsdt, uint32_t signature, void *data, int(*extract)(const struct acpi_header *zsdt, size_t len, size_t offset, void *data))
Extract value from DSDT/SSDT.
Definition: acpi.c:184
u8 signature
CPU signature.
Definition: CIB_PRM.h:35

References acpi, acpi_name(), acpi_table(), acpi_zsdt(), colour, container_of, data, DBGC, acpi_fadt::dsdt, ENOENT, FADT_SIGNATURE, rc, signature, and SSDT_SIGNATURE.

Referenced by acpi_mac(), and acpi_poweroff().

◆ acpi_ioremap()

void* acpi_ioremap ( struct acpi_address address,
size_t  len 
)

Map an ACPI generic address.

Parameters
addressGeneric address
lenLength of region
Return values
io_addrI/O address, or NULL on error

Definition at line 269 of file acpi.c.

269  {
270  physaddr_t base = le64_to_cpu ( address->address );
271 
272  switch ( address->type ) {
274  return ioremap ( base, len );
276  return ( ( void * ) base );
277  default:
278  return NULL;
279  }
280 }
uint32_t base
Base.
Definition: librm.h:138
uint64_t address
Base address.
Definition: ena.h:24
#define ACPI_ADDRESS_TYPE_IO
An I/O address space type.
Definition: acpi.h:39
ring len
Length.
Definition: dwmac.h:231
unsigned long physaddr_t
Definition: stdint.h:20
#define ACPI_ADDRESS_TYPE_MEM
A memory address space type.
Definition: acpi.h:36
void * ioremap(unsigned long bus_addr, size_t len)
Map bus address as an I/O address.
#define le64_to_cpu(value)
Definition: byteswap.h:114
#define NULL
NULL pointer (VOID *)
Definition: Base.h:321

References ACPI_ADDRESS_TYPE_IO, ACPI_ADDRESS_TYPE_MEM, address, base, ioremap(), le64_to_cpu, len, and NULL.

Referenced by spcr_16550().

◆ acpi_add()

void acpi_add ( struct acpi_descriptor desc)

Add ACPI descriptor.

Parameters
descACPI descriptor

Definition at line 294 of file acpi.c.

294  {
295 
296  /* Add to list of descriptors */
297  ref_get ( desc->refcnt );
298  list_add_tail ( &desc->list, &desc->model->descs );
299 }
struct ena_llq_option desc
Descriptor counts.
Definition: ena.h:20
#define list_add_tail(new, head)
Add a new entry to the tail of a list.
Definition: list.h:93
#define ref_get(refcnt)
Get additional reference to object.
Definition: refcnt.h:92

References desc, list_add_tail, and ref_get.

Referenced by sanpath_open().

◆ acpi_del()

void acpi_del ( struct acpi_descriptor desc)

Remove ACPI descriptor.

Parameters
descACPI descriptor

Definition at line 306 of file acpi.c.

306  {
307 
308  /* Remove from list of descriptors */
309  list_check_contains_entry ( desc, &desc->model->descs, list );
310  list_del ( &desc->list );
311  ref_put ( desc->refcnt );
312 }
#define list_del(list)
Delete an entry from a list.
Definition: list.h:119
struct ena_llq_option desc
Descriptor counts.
Definition: ena.h:20
#define list_check_contains_entry(entry, head, member)
Check list contains a specified entry.
Definition: list.h:549
#define ref_put(refcnt)
Drop reference to object.
Definition: refcnt.h:106

References desc, list_check_contains_entry, list_del, and ref_put.

Referenced by sandev_undescribe(), and sanpath_open().

◆ acpi_install()

int acpi_install ( int(*)(struct acpi_header *acpi install)

Install ACPI tables.

Parameters
installTable installation method
Return values
rcReturn status code

Definition at line 343 of file acpi.c.

343  {
344  struct acpi_model *model;
345  int rc;
346 
347  for_each_table_entry ( model, ACPI_MODELS ) {
348  if ( ( rc = model->install ( install ) ) != 0 )
349  return rc;
350  }
351 
352  return 0;
353 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
int(* install)(int(*install)(struct acpi_header *acpi))
Install ACPI tables.
Definition: acpi.h:336
An ACPI table model.
Definition: acpi.h:320
#define for_each_table_entry(pointer, table)
Iterate through all entries within a linker table.
Definition: tables.h:385
#define ACPI_MODELS
ACPI models.
Definition: acpi.h:340

References ACPI_MODELS, for_each_table_entry, acpi_model::install, and rc.

Referenced by dummy_san_describe(), efi_block_describe(), and int13_describe().

Variable Documentation

◆ acpi_finder

const struct acpi_header*( * acpi_finder) (uint32_t signature, unsigned int index)

Referenced by acpi_table().