ReactOS 0.4.16-dev-1946-g52006dd
tables.h File Reference
Include dependency graph for tables.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  uacpi_installed_table
 

Macros

#define UACPI_TABLE_LOADED   (1 << 0)
 
#define UACPI_TABLE_CSUM_VERIFIED   (1 << 1)
 
#define UACPI_TABLE_INVALID   (1 << 2)
 
#define UACPI_PRI_TBL_HDR   "'%.4s' (OEM ID '%.6s' OEM Table ID '%.8s')"
 
#define UACPI_FMT_TBL_HDR(hdr)   (hdr)->signature, (hdr)->oemid, (hdr)->oem_table_id
 

Typedefs

typedef uacpi_iteration_decision(* uacpi_table_iteration_callback) (void *user, struct uacpi_installed_table *tbl, uacpi_size idx)
 
typedef uacpi_bool(* uacpi_table_match_callback) (struct uacpi_installed_table *tbl)
 

Enumerations

enum  uacpi_table_origin { UACPI_TABLE_ORIGIN_FIRMWARE_VIRTUAL = 0 , UACPI_TABLE_ORIGIN_FIRMWARE_PHYSICAL = 1 , UACPI_TABLE_ORIGIN_HOST_VIRTUAL , UACPI_TABLE_ORIGIN_HOST_PHYSICAL }
 

Functions

uacpi_status uacpi_initialize_tables (void)
 
void uacpi_deinitialize_tables (void)
 
uacpi_bool uacpi_signatures_match (const void *const lhs, const void *const rhs)
 
uacpi_status uacpi_check_table_signature (void *table, const uacpi_char *expect)
 
uacpi_status uacpi_verify_table_checksum (void *table, uacpi_size size)
 
uacpi_status uacpi_table_install_physical_with_origin (uacpi_phys_addr phys, enum uacpi_table_origin origin, uacpi_table *out_table)
 
uacpi_status uacpi_table_install_with_origin (void *virt, enum uacpi_table_origin origin, uacpi_table *out_table)
 
void uacpi_table_mark_as_loaded (uacpi_size idx)
 
uacpi_status uacpi_table_load_with_cause (uacpi_size idx, enum uacpi_table_load_cause cause)
 
uacpi_status uacpi_for_each_table (uacpi_size base_idx, uacpi_table_iteration_callback, void *user)
 
uacpi_status uacpi_table_match (uacpi_size base_idx, uacpi_table_match_callback, uacpi_table *out_table)
 

Macro Definition Documentation

◆ UACPI_FMT_TBL_HDR

#define UACPI_FMT_TBL_HDR (   hdr)    (hdr)->signature, (hdr)->oemid, (hdr)->oem_table_id

Definition at line 70 of file tables.h.

◆ UACPI_PRI_TBL_HDR

#define UACPI_PRI_TBL_HDR   "'%.4s' (OEM ID '%.6s' OEM Table ID '%.8s')"

Definition at line 69 of file tables.h.

◆ UACPI_TABLE_CSUM_VERIFIED

#define UACPI_TABLE_CSUM_VERIFIED   (1 << 1)

Definition at line 27 of file tables.h.

◆ UACPI_TABLE_INVALID

#define UACPI_TABLE_INVALID   (1 << 2)

Definition at line 28 of file tables.h.

◆ UACPI_TABLE_LOADED

#define UACPI_TABLE_LOADED   (1 << 0)

Definition at line 26 of file tables.h.

Typedef Documentation

◆ uacpi_table_iteration_callback

typedef uacpi_iteration_decision(* uacpi_table_iteration_callback) (void *user, struct uacpi_installed_table *tbl, uacpi_size idx)

Definition at line 55 of file tables.h.

◆ uacpi_table_match_callback

typedef uacpi_bool(* uacpi_table_match_callback) (struct uacpi_installed_table *tbl)

Definition at line 62 of file tables.h.

Enumeration Type Documentation

◆ uacpi_table_origin

Enumerator
UACPI_TABLE_ORIGIN_FIRMWARE_VIRTUAL 
UACPI_TABLE_ORIGIN_FIRMWARE_PHYSICAL 
UACPI_TABLE_ORIGIN_HOST_VIRTUAL 
UACPI_TABLE_ORIGIN_HOST_PHYSICAL 

Definition at line 9 of file tables.h.

9 {
10#ifndef UACPI_BAREBONES_MODE
12#endif
14
17};
@ UACPI_TABLE_ORIGIN_HOST_VIRTUAL
Definition: tables.h:15
@ UACPI_TABLE_ORIGIN_HOST_PHYSICAL
Definition: tables.h:16
@ UACPI_TABLE_ORIGIN_FIRMWARE_PHYSICAL
Definition: tables.h:13
@ UACPI_TABLE_ORIGIN_FIRMWARE_VIRTUAL
Definition: tables.h:11

Function Documentation

◆ uacpi_check_table_signature()

uacpi_status uacpi_check_table_signature ( void table,
const uacpi_char expect 
)

Definition at line 420 of file tables.c.

421{
423
426 struct acpi_sdt_hdr *hdr = table;
427
430 lvl = UACPI_LOG_ERROR;
431 }
432
434 lvl,
435 "invalid table "UACPI_PRI_TBL_HDR" signature (expected '%.4s')\n",
437 );
438 }
439
440 return ret;
441}
#define expect(EXPECTED, GOT)
Definition: SystemMenu.c:483
static uacpi_bool uacpi_check_flag(uacpi_u64 flag)
Definition: context.h:90
#define uacpi_log_lvl(lvl,...)
Definition: log.h:14
uacpi_log_level
Definition: log.h:7
@ UACPI_LOG_ERROR
Definition: log.h:35
@ UACPI_LOG_WARN
Definition: log.h:29
uacpi_status
Definition: status.h:10
@ UACPI_STATUS_INVALID_SIGNATURE
Definition: status.h:15
@ UACPI_STATUS_OK
Definition: status.h:11
return ret
Definition: mutex.c:146
uacpi_bool uacpi_signatures_match(const void *const lhs, const void *const rhs)
Definition: tables.c:415
#define UACPI_PRI_TBL_HDR
Definition: tables.h:69
#define UACPI_FMT_TBL_HDR(hdr)
Definition: tables.h:70
char hdr[14]
Definition: iptest.cpp:33
#define UACPI_FLAG_BAD_TBL_SIGNATURE_FATAL
Definition: uacpi.h:70

Referenced by initialize_from_rxsdt(), and table_install_physical_with_origin_unlocked().

◆ uacpi_deinitialize_tables()

void uacpi_deinitialize_tables ( void  )

Definition at line 316 of file tables.c.

317{
319
320 for (i = 0; i < table_array_size(&tables); ++i) {
321 struct uacpi_installed_table *tbl = table_array_at(&tables, i);
322
323 switch (tbl->origin) {
324#ifndef UACPI_BAREBONES_MODE
326 uacpi_free(tbl->ptr, tbl->hdr.length);
327 break;
328#endif
331 if (tbl->reference_count != 0)
332 uacpi_kernel_unmap(tbl->ptr, tbl->hdr.length);
333 break;
334 default:
335 break;
336 }
337 }
338
339 if (early_table_access) {
340 uacpi_memzero(&tables, sizeof(tables));
341 early_table_access = UACPI_FALSE;
342 } else {
343 table_array_clear(&tables);
344 }
345
346 installation_handler = UACPI_NULL;
347
348#ifndef UACPI_BAREBONES_MODE
349 if (table_mutex)
350 uacpi_kernel_free_mutex(table_mutex);
351
352 table_mutex = UACPI_NULL;
353#endif
354}
#define uacpi_memzero(ptr, size)
Definition: stdlib.h:99
#define uacpi_free(mem, _)
Definition: stdlib.h:96
size_t uacpi_size
Definition: types.h:37
#define UACPI_FALSE
Definition: types.h:30
#define UACPI_NULL
Definition: types.h:33
struct nls_table * tables
Definition: nls_base.c:22
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
void uacpi_kernel_free_mutex(uacpi_handle)
Definition: uacpiosl.c:146
void uacpi_kernel_unmap(void *addr, uacpi_size len)
Definition: uacpiosl.c:198
uacpi_u16 reference_count
Definition: tables.h:24
struct acpi_sdt_hdr hdr
Definition: tables.h:21
uacpi_u8 origin
Definition: tables.h:30

Referenced by uacpi_setup_early_table_access(), and uacpi_state_reset().

◆ uacpi_for_each_table()

uacpi_status uacpi_for_each_table ( uacpi_size  base_idx,
uacpi_table_iteration_callback  cb,
void user 
)

Definition at line 832 of file tables.c.

835{
838 struct uacpi_installed_table *tbl;
840
842
845 return ret;
846
847 for (idx = base_idx; idx < table_array_size(&tables); ++idx) {
848 tbl = table_array_at(&tables, idx);
849
850 if (tbl->flags & UACPI_TABLE_INVALID)
851 continue;
852
853 dec = cb(user, tbl, idx);
855 break;
856 }
857
859 return ret;
860}
ios_base &_STLP_CALL dec(ios_base &__s)
Definition: _ios_base.h:321
void user(int argc, const char *argv[])
Definition: cmds.c:1350
static uacpi_status uacpi_acquire_native_mutex_may_be_null(uacpi_handle mtx)
Definition: mutex.h:34
static uacpi_status uacpi_release_native_mutex_may_be_null(uacpi_handle mtx)
Definition: mutex.h:44
unsigned int idx
Definition: utils.c:41
#define uacpi_unlikely_error(expr)
Definition: status.h:49
uacpi_iteration_decision
Definition: types.h:28
@ UACPI_ITERATION_DECISION_BREAK
Definition: types.h:30
#define ENSURE_TABLES_ONLINE()
#define UACPI_TABLE_INVALID
Definition: tables.h:28
static HMODULE MODULEINFO DWORD cb
Definition: module.c:33
uacpi_u8 flags
Definition: tables.h:29

Referenced by find_table(), uacpi_initialize_tables(), and uacpi_table_match().

◆ uacpi_initialize_tables()

uacpi_status uacpi_initialize_tables ( void  )

Definition at line 244 of file tables.c.

245{
246 if (early_table_access) {
247 uacpi_size num_tables;
248
250
251 // Reallocate the user buffer into a normal heap array
252 num_tables = table_array_size(&tables);
253 if (num_tables > table_array_inline_capacity(&tables)) {
254 void *new_buf;
255
256 /*
257 * Allocate a new buffer with size equal to exactly the number of
258 * dynamic tables (that live in the user provided temporary buffer).
259 */
260 num_tables -= table_array_inline_capacity(&tables);
261 new_buf = uacpi_kernel_alloc(
262 sizeof(struct uacpi_installed_table) * num_tables
263 );
264 if (uacpi_unlikely(new_buf == UACPI_NULL))
266
267 uacpi_memcpy(new_buf, tables.dynamic_storage,
268 sizeof(struct uacpi_installed_table) * num_tables);
269 tables.dynamic_storage = new_buf;
270 tables.dynamic_capacity = num_tables;
271 } else {
272 /*
273 * User-provided temporary buffer was not used at all, just remove
274 * any references to it.
275 */
276 tables.dynamic_storage = UACPI_NULL;
277 tables.dynamic_capacity = 0;
278 }
279
280 early_table_access = UACPI_FALSE;
281 } else {
283
286 return ret;
287 }
288
290 struct acpi_fadt *fadt = &g_uacpi_rt_ctx.fadt;
291 uacpi_table tbl;
292
293 if (fadt->x_firmware_ctrl) {
295
297 fadt->x_firmware_ctrl, UACPI_TABLE_ORIGIN_FIRMWARE_PHYSICAL,
299 );
302 return ret;
303
304 g_uacpi_rt_ctx.facs = tbl.ptr;
305 }
306 }
307
308 table_mutex = uacpi_kernel_create_mutex();
309 if (uacpi_unlikely(table_mutex == UACPI_NULL))
311
312 return UACPI_STATUS_OK;
313}
#define ACPI_FACS_SIGNATURE
Definition: acpi.h:18
static uacpi_bool uacpi_is_hardware_reduced(void)
Definition: context.h:100
struct uacpi_runtime_context g_uacpi_rt_ctx
Definition: uacpi.c:17
#define uacpi_memcpy
Definition: stdlib.h:34
#define uacpi_unlikely(expr)
Definition: compiler.h:58
@ UACPI_STATUS_OUT_OF_MEMORY
Definition: status.h:13
@ UACPI_STATUS_OVERRIDDEN
Definition: status.h:30
static uacpi_iteration_decision warn_if_early_referenced(void *user, struct uacpi_installed_table *tbl, uacpi_size idx)
Definition: tables.c:228
static uacpi_status initialize_from_rsdp(void)
Definition: tables.c:159
static uacpi_status table_install_physical_with_origin_unlocked(uacpi_phys_addr phys, enum uacpi_table_origin origin, const uacpi_char *expected_signature, uacpi_table *out_table)
Definition: tables.c:652
uacpi_status uacpi_for_each_table(uacpi_size base_idx, uacpi_table_iteration_callback cb, void *user)
Definition: tables.c:832
void * uacpi_kernel_alloc(uacpi_size size)
Definition: uacpiosl.c:111
uacpi_handle uacpi_kernel_create_mutex(void)
Definition: uacpiosl.c:139
void * ptr
Definition: tables.h:26

Referenced by uacpi_initialize().

◆ uacpi_signatures_match()

uacpi_bool uacpi_signatures_match ( const void *const  lhs,
const void *const  rhs 
)

Definition at line 415 of file tables.c.

416{
417 return uacpi_memcmp(lhs, rhs, sizeof(uacpi_object_name)) == 0;
418}
#define uacpi_memcmp
Definition: stdlib.h:61

Referenced by do_search_tables(), dump_table_header(), match_ssdt_or_psdt(), uacpi_check_table_signature(), and verify_and_install_table().

◆ uacpi_table_install_physical_with_origin()

uacpi_status uacpi_table_install_physical_with_origin ( uacpi_phys_addr  phys,
enum uacpi_table_origin  origin,
uacpi_table out_table 
)

Definition at line 726 of file tables.c.

729{
731
734 return ret;
735
737 phys, origin, UACPI_NULL, out_table
738 );
740
741 return ret;
742}
voidpf uLong int origin
Definition: ioapi.h:144

Referenced by initialize_from_rxsdt(), and uacpi_table_install_physical().

◆ uacpi_table_install_with_origin()

uacpi_status uacpi_table_install_with_origin ( void virt,
enum uacpi_table_origin  origin,
uacpi_table out_table 
)

Definition at line 796 of file tables.c.

799{
801
804 return ret;
805
807
809 return ret;
810}
static uacpi_status table_install_with_origin_unlocked(void *virt, enum uacpi_table_origin origin, uacpi_table *out_table)
Definition: tables.c:744

Referenced by handle_load(), and uacpi_table_install().

◆ uacpi_table_load_with_cause()

uacpi_status uacpi_table_load_with_cause ( uacpi_size  idx,
enum uacpi_table_load_cause  cause 
)

Definition at line 1115 of file tables.c.

1118{
1120 struct table_ctl_request req = {
1123 .set = UACPI_TABLE_LOADED,
1124 .expect_clear = UACPI_TABLE_LOADED,
1125 };
1126
1127 ret = table_ctl(idx, &req);
1129 return ret;
1130
1131 ret = uacpi_execute_table(req.out_tbl, cause);
1132
1133 req.type = TABLE_CTL_PUT;
1134 table_ctl(idx, &req);
1135 return ret;
1136}
#define TABLE_CTL_GET
Definition: tables.c:1026
#define TABLE_CTL_VALIDATE_CLEAR_FLAGS
Definition: tables.c:1025
#define TABLE_CTL_PUT
Definition: tables.c:1027
#define TABLE_CTL_SET_FLAGS
Definition: tables.c:1022
static uacpi_status table_ctl(uacpi_size idx, struct table_ctl_request *req)
Definition: tables.c:1040
#define UACPI_TABLE_LOADED
Definition: tables.h:26
uacpi_status uacpi_execute_table(void *, enum uacpi_table_load_cause cause)
Definition: interpreter.c:1549
void * out_tbl
Definition: tables.c:1037
uacpi_u8 type
Definition: tables.c:1030

Referenced by uacpi_namespace_load(), and uacpi_table_load().

◆ uacpi_table_mark_as_loaded()

void uacpi_table_mark_as_loaded ( uacpi_size  idx)

Definition at line 1143 of file tables.c.

1144{
1145 table_ctl(idx, &(struct table_ctl_request) {
1147 });
1148}

Referenced by handle_load(), and handle_load_table().

◆ uacpi_table_match()

uacpi_status uacpi_table_match ( uacpi_size  base_idx,
uacpi_table_match_callback  cb,
uacpi_table out_table 
)

Definition at line 935 of file tables.c.

938{
940 struct table_search_ctx ctx = {
941 .match_cb = cb,
942 .search_type = SEARCH_TYPE_MATCH,
943 .out_table = out_table,
944 .status = UACPI_STATUS_NOT_FOUND,
945 };
946
949 return ret;
950
951 return ctx.status;
952}
@ UACPI_STATUS_NOT_FOUND
Definition: status.h:17
static uacpi_iteration_decision do_search_tables(void *user, struct uacpi_installed_table *tbl, uacpi_size idx)
Definition: tables.c:878
@ SEARCH_TYPE_MATCH
Definition: tables.c:864
uacpi_table * out_table
Definition: tables.c:873

Referenced by uacpi_namespace_load().

◆ uacpi_verify_table_checksum()

uacpi_status uacpi_verify_table_checksum ( void table,
uacpi_size  size 
)

Definition at line 390 of file tables.c.

391{
394
396
397 if (uacpi_unlikely(csum != 0)) {
399 struct acpi_sdt_hdr *hdr = table;
400
403 lvl = UACPI_LOG_ERROR;
404 }
405
407 lvl, "invalid table "UACPI_PRI_TBL_HDR" checksum %d!\n",
409 );
410 }
411
412 return ret;
413}
uint8_t uacpi_u8
Definition: types.h:19
@ UACPI_STATUS_BAD_CHECKSUM
Definition: status.h:14
static uacpi_u8 table_checksum(void *table, uacpi_size size)
Definition: tables.c:378
GLsizeiptr size
Definition: glext.h:5919
Definition: ffs.h:52
#define UACPI_FLAG_BAD_CSUM_FATAL
Definition: uacpi.h:64

Referenced by initialize_from_rxsdt(), table_ref_unlocked(), and verify_and_install_table().