ReactOS 0.4.17-dev-683-g0dafdc5
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_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_installed_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)
 

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_u8 *out_flags)
 
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_installed_table (uacpi_size base_idx, uacpi_installed_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 59 of file tables.h.

◆ UACPI_PRI_TBL_HDR

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

Definition at line 58 of file tables.h.

Typedef Documentation

◆ uacpi_installed_table_iteration_callback

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

Definition at line 44 of file tables.h.

◆ uacpi_table_match_callback

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

Definition at line 51 of file tables.h.

Function Documentation

◆ uacpi_check_table_signature()

uacpi_status uacpi_check_table_signature ( void table,
const uacpi_char expect 
)

Definition at line 469 of file tables.c.

470{
472
475 struct acpi_sdt_hdr *hdr = table;
476
479 lvl = UACPI_LOG_ERROR;
480 }
481
483 lvl,
484 "invalid table "UACPI_PRI_TBL_HDR" signature (expected '%.4s')",
486 );
487 }
488
489 return ret;
490}
#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, fmt,...)
Definition: log.h:22
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:147
uacpi_bool uacpi_signatures_match(const void *const lhs, const void *const rhs)
Definition: tables.c:464
#define UACPI_PRI_TBL_HDR
Definition: tables.h:58
#define UACPI_FMT_TBL_HDR(hdr)
Definition: tables.h:59
char hdr[14]
Definition: iptest.cpp:33
#define UACPI_FLAG_BAD_TBL_SIGNATURE_FATAL
Definition: uacpi.h:81

Referenced by initialize_from_rxsdt(), and table_install_physical_with_origin_unlocked().

◆ uacpi_deinitialize_tables()

void uacpi_deinitialize_tables ( void  )

Definition at line 351 of file tables.c.

352{
354
355 for (i = 0; i < table_array_size(&tables); ++i) {
356 struct uacpi_installed_table *tbl = table_array_at(&tables, i);
357
358 switch (tbl->origin) {
359#ifndef UACPI_BAREBONES_MODE
361 uacpi_free(tbl->ptr, tbl->hdr.length);
362 break;
363#endif
366 if (tbl->reference_count != 0)
367 uacpi_kernel_unmap(tbl->ptr, tbl->hdr.length);
368 break;
369 default:
370 break;
371 }
372 }
373
374 if (early_table_access) {
375 uacpi_memzero(&tables, sizeof(tables));
376 early_table_access = UACPI_FALSE;
377 } else {
378 table_array_clear(&tables);
379 }
380
381 installation_handler = UACPI_NULL;
382 fadt_available = UACPI_FALSE;
383
384#ifndef UACPI_BAREBONES_MODE
385 if (table_mutex)
386 uacpi_kernel_free_mutex(table_mutex);
387
388 table_mutex = UACPI_NULL;
389#endif
390}
#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:14
struct acpi_sdt_hdr hdr
Definition: tables.h:11
uacpi_u8 origin
Definition: tables.h:17
@ UACPI_TABLE_ORIGIN_HOST_PHYSICAL
Definition: tables.h:193
@ UACPI_TABLE_ORIGIN_FIRMWARE_PHYSICAL
Definition: tables.h:181
@ UACPI_TABLE_ORIGIN_FIRMWARE_VIRTUAL
Definition: tables.h:188

Referenced by uacpi_setup_early_table_access(), and uacpi_state_reset().

◆ uacpi_for_each_installed_table()

uacpi_status uacpi_for_each_installed_table ( uacpi_size  base_idx,
uacpi_installed_table_iteration_callback  cb,
void user 
)

Definition at line 971 of file tables.c.

974{
977 struct uacpi_installed_table *tbl;
979
981
984 return ret;
985
986 for (idx = base_idx; idx < table_array_size(&tables); ++idx) {
987 tbl = table_array_at(&tables, idx);
988
990 continue;
991
992 dec = cb(user, tbl, idx);
994 break;
995 }
996
998 return ret;
999}
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
static MonoProfilerRuntimeShutdownBeginCallback cb
Definition: metahost.c:118
#define uacpi_unlikely(expr)
Definition: compiler.h:88
#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()
Definition: tables.c:29
static bool skip_due_to_bad_csum(struct uacpi_installed_table *tbl)
Definition: tables.c:458

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

◆ uacpi_initialize_tables()

uacpi_status uacpi_initialize_tables ( void  )

Definition at line 279 of file tables.c.

280{
281 if (early_table_access) {
282 uacpi_size num_tables;
283
285
286 // Reallocate the user buffer into a normal heap array
287 num_tables = table_array_size(&tables);
288 if (num_tables > table_array_inline_capacity(&tables)) {
289 void *new_buf;
290
291 /*
292 * Allocate a new buffer with size equal to exactly the number of
293 * dynamic tables (that live in the user provided temporary buffer).
294 */
295 num_tables -= table_array_inline_capacity(&tables);
296 new_buf = uacpi_kernel_alloc(
297 sizeof(struct uacpi_installed_table) * num_tables
298 );
299 if (uacpi_unlikely(new_buf == UACPI_NULL))
301
302 uacpi_memcpy(new_buf, tables.dynamic_storage,
303 sizeof(struct uacpi_installed_table) * num_tables);
304 tables.dynamic_storage = new_buf;
305 tables.dynamic_capacity = num_tables;
306 } else {
307 /*
308 * User-provided temporary buffer was not used at all, just remove
309 * any references to it.
310 */
311 tables.dynamic_storage = UACPI_NULL;
312 tables.dynamic_capacity = 0;
313 }
314
315 early_table_access = UACPI_FALSE;
316 } else {
318
321 return ret;
322 }
323
325 struct acpi_fadt *fadt = &g_uacpi_rt_ctx.fadt;
326 uacpi_table tbl;
327
328 if (fadt->x_firmware_ctrl) {
330
332 fadt->x_firmware_ctrl, UACPI_TABLE_ORIGIN_FIRMWARE_PHYSICAL,
334 );
337 return ret;
338
339 g_uacpi_rt_ctx.facs = tbl.ptr;
340 }
341 }
342
343 table_mutex = uacpi_kernel_create_mutex();
344 if (uacpi_unlikely(table_mutex == UACPI_NULL))
346
347 return UACPI_STATUS_OK;
348}
#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
@ 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:263
uacpi_status uacpi_for_each_installed_table(uacpi_size base_idx, uacpi_installed_table_iteration_callback cb, void *user)
Definition: tables.c:971
static uacpi_status initialize_from_rsdp(void)
Definition: tables.c:171
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:790
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:28

Referenced by uacpi_initialize().

◆ uacpi_signatures_match()

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

Definition at line 464 of file tables.c.

465{
466 return uacpi_memcmp(lhs, rhs, sizeof(uacpi_object_name)) == 0;
467}
#define uacpi_memcmp
Definition: stdlib.h:61

Referenced by do_search_tables(), 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 865 of file tables.c.

868{
870
873 return ret;
874
876 phys, origin, UACPI_NULL, out_table
877 );
879
880 return ret;
881}
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 935 of file tables.c.

938{
940
943 return ret;
944
946
948 return ret;
949}
static uacpi_status table_install_with_origin_unlocked(void *virt, enum uacpi_table_origin origin, uacpi_table *out_table)
Definition: tables.c:883

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 1280 of file tables.c.

1283{
1285 struct table_ctl_request req = {
1288 .set = UACPI_TABLE_LOADED,
1289 .expect_clear = UACPI_TABLE_LOADED,
1290 };
1291
1292 ret = table_ctl(idx, &req);
1294 return ret;
1295
1296 ret = uacpi_execute_table(req.out_tbl, cause);
1297
1298 req.type = TABLE_CTL_PUT;
1299 table_ctl(idx, &req);
1300 return ret;
1301}
#define TABLE_CTL_GET
Definition: tables.c:1191
#define TABLE_CTL_VALIDATE_CLEAR_FLAGS
Definition: tables.c:1190
#define TABLE_CTL_PUT
Definition: tables.c:1192
#define TABLE_CTL_SET_FLAGS
Definition: tables.c:1187
static uacpi_status table_ctl(uacpi_size idx, struct table_ctl_request *req)
Definition: tables.c:1205
uacpi_status uacpi_execute_table(void *, enum uacpi_table_load_cause cause)
Definition: interpreter.c:1612
void * out_tbl
Definition: tables.c:1202
uacpi_u8 type
Definition: tables.c:1195
#define UACPI_TABLE_LOADED
Definition: tables.h:243

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 1308 of file tables.c.

1309{
1310 struct table_ctl_request req = {
1312 };
1313
1314 table_ctl(idx, &req);
1315}

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 1081 of file tables.c.

1084{
1086 struct table_search_ctx ctx = { 0 };
1087
1088 ctx.match_cb = cb;
1089 ctx.search_type = SEARCH_TYPE_MATCH;
1090 ctx.out_table = out_table;
1091 ctx.status = UACPI_STATUS_NOT_FOUND;
1092
1095 return ret;
1096
1097 return ctx.status;
1098}
@ 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:1018
@ SEARCH_TYPE_MATCH
Definition: tables.c:1003
uacpi_table * out_table
Definition: tables.c:1012

Referenced by uacpi_namespace_load().

◆ uacpi_verify_table_checksum()

uacpi_status uacpi_verify_table_checksum ( void table,
uacpi_size  size,
uacpi_u8 out_flags 
)

Definition at line 426 of file tables.c.

429{
432
434 if (out_flags != UACPI_NULL)
435 *out_flags |= UACPI_TABLE_CSUM_CHECKED;
436
437 if (uacpi_unlikely(csum != 0)) {
439 struct acpi_sdt_hdr *hdr = table;
440
441 if (out_flags != UACPI_NULL)
442 *out_flags |= UACPI_TABLE_CSUM_BAD;
443
446 lvl = UACPI_LOG_ERROR;
447 }
448
450 lvl, "invalid table "UACPI_PRI_TBL_HDR" checksum %d!",
452 );
453 }
454
455 return ret;
456}
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:414
GLsizeiptr size
Definition: glext.h:5919
Definition: ffs.h:52
#define UACPI_TABLE_CSUM_BAD
Definition: tables.h:257
#define UACPI_TABLE_CSUM_CHECKED
Definition: tables.h:249
#define UACPI_FLAG_BAD_CSUM_FATAL
Definition: uacpi.h:75

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