ReactOS 0.4.17-dev-683-g0dafdc5
registers.h File Reference
#include <uacpi/types.h>
Include dependency graph for registers.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Typedefs

typedef enum uacpi_register uacpi_register
 
typedef enum uacpi_register_field uacpi_register_field
 

Enumerations

enum  uacpi_register {
  UACPI_REGISTER_PM1_STS = 0 , UACPI_REGISTER_PM1_EN , UACPI_REGISTER_PM1_CNT , UACPI_REGISTER_PM_TMR ,
  UACPI_REGISTER_PM2_CNT , UACPI_REGISTER_SLP_CNT , UACPI_REGISTER_SLP_STS , UACPI_REGISTER_RESET ,
  UACPI_REGISTER_SMI_CMD , UACPI_REGISTER_MAX = UACPI_REGISTER_SMI_CMD
}
 
enum  uacpi_register_field {
  UACPI_REGISTER_FIELD_TMR_STS = 0 , UACPI_REGISTER_FIELD_BM_STS , UACPI_REGISTER_FIELD_GBL_STS , UACPI_REGISTER_FIELD_PWRBTN_STS ,
  UACPI_REGISTER_FIELD_SLPBTN_STS , UACPI_REGISTER_FIELD_RTC_STS , UACPI_REGISTER_FIELD_PCIEX_WAKE_STS , UACPI_REGISTER_FIELD_HWR_WAK_STS ,
  UACPI_REGISTER_FIELD_WAK_STS , UACPI_REGISTER_FIELD_TMR_EN , UACPI_REGISTER_FIELD_GBL_EN , UACPI_REGISTER_FIELD_PWRBTN_EN ,
  UACPI_REGISTER_FIELD_SLPBTN_EN , UACPI_REGISTER_FIELD_RTC_EN , UACPI_REGISTER_FIELD_PCIEXP_WAKE_DIS , UACPI_REGISTER_FIELD_SCI_EN ,
  UACPI_REGISTER_FIELD_BM_RLD , UACPI_REGISTER_FIELD_GBL_RLS , UACPI_REGISTER_FIELD_SLP_TYP , UACPI_REGISTER_FIELD_HWR_SLP_TYP ,
  UACPI_REGISTER_FIELD_SLP_EN , UACPI_REGISTER_FIELD_HWR_SLP_EN , UACPI_REGISTER_FIELD_ARB_DIS , UACPI_REGISTER_FIELD_MAX = UACPI_REGISTER_FIELD_ARB_DIS
}
 

Functions

uacpi_status uacpi_read_register (uacpi_register, uacpi_u64 *)
 
uacpi_status uacpi_write_register (uacpi_register, uacpi_u64)
 
uacpi_status uacpi_write_registers (uacpi_register, uacpi_u64, uacpi_u64)
 
uacpi_status uacpi_read_register_field (uacpi_register_field, uacpi_u64 *)
 
uacpi_status uacpi_write_register_field (uacpi_register_field, uacpi_u64)
 

Typedef Documentation

◆ uacpi_register

BEFORE YOU USE THIS API: uACPI manages FADT registers on its own entirely, you should only use this API directly if there's absolutely no other way for your use case, e.g. implementing a CPU idle state driver that does C state switching or similar.

◆ uacpi_register_field

Enumeration Type Documentation

◆ uacpi_register

BEFORE YOU USE THIS API: uACPI manages FADT registers on its own entirely, you should only use this API directly if there's absolutely no other way for your use case, e.g. implementing a CPU idle state driver that does C state switching or similar.

Enumerator
UACPI_REGISTER_PM1_STS 
UACPI_REGISTER_PM1_EN 
UACPI_REGISTER_PM1_CNT 
UACPI_REGISTER_PM_TMR 
UACPI_REGISTER_PM2_CNT 
UACPI_REGISTER_SLP_CNT 
UACPI_REGISTER_SLP_STS 
UACPI_REGISTER_RESET 
UACPI_REGISTER_SMI_CMD 
UACPI_REGISTER_MAX 

Definition at line 16 of file registers.h.

16 {
uacpi_register
Definition: registers.h:16
@ UACPI_REGISTER_RESET
Definition: registers.h:24
@ UACPI_REGISTER_SMI_CMD
Definition: registers.h:25
@ UACPI_REGISTER_MAX
Definition: registers.h:26
@ UACPI_REGISTER_PM1_EN
Definition: registers.h:18
@ UACPI_REGISTER_PM1_CNT
Definition: registers.h:19
@ UACPI_REGISTER_PM2_CNT
Definition: registers.h:21
@ UACPI_REGISTER_PM1_STS
Definition: registers.h:17
@ UACPI_REGISTER_PM_TMR
Definition: registers.h:20
@ UACPI_REGISTER_SLP_CNT
Definition: registers.h:22
@ UACPI_REGISTER_SLP_STS
Definition: registers.h:23

◆ uacpi_register_field

Enumerator
UACPI_REGISTER_FIELD_TMR_STS 
UACPI_REGISTER_FIELD_BM_STS 
UACPI_REGISTER_FIELD_GBL_STS 
UACPI_REGISTER_FIELD_PWRBTN_STS 
UACPI_REGISTER_FIELD_SLPBTN_STS 
UACPI_REGISTER_FIELD_RTC_STS 
UACPI_REGISTER_FIELD_PCIEX_WAKE_STS 
UACPI_REGISTER_FIELD_HWR_WAK_STS 
UACPI_REGISTER_FIELD_WAK_STS 
UACPI_REGISTER_FIELD_TMR_EN 
UACPI_REGISTER_FIELD_GBL_EN 
UACPI_REGISTER_FIELD_PWRBTN_EN 
UACPI_REGISTER_FIELD_SLPBTN_EN 
UACPI_REGISTER_FIELD_RTC_EN 
UACPI_REGISTER_FIELD_PCIEXP_WAKE_DIS 
UACPI_REGISTER_FIELD_SCI_EN 
UACPI_REGISTER_FIELD_BM_RLD 
UACPI_REGISTER_FIELD_GBL_RLS 
UACPI_REGISTER_FIELD_SLP_TYP 
UACPI_REGISTER_FIELD_HWR_SLP_TYP 
UACPI_REGISTER_FIELD_SLP_EN 
UACPI_REGISTER_FIELD_HWR_SLP_EN 
UACPI_REGISTER_FIELD_ARB_DIS 
UACPI_REGISTER_FIELD_MAX 

Definition at line 56 of file registers.h.

56 {
uacpi_register_field
Definition: registers.h:56
@ UACPI_REGISTER_FIELD_PWRBTN_EN
Definition: registers.h:68
@ UACPI_REGISTER_FIELD_PWRBTN_STS
Definition: registers.h:60
@ UACPI_REGISTER_FIELD_MAX
Definition: registers.h:80
@ UACPI_REGISTER_FIELD_WAK_STS
Definition: registers.h:65
@ UACPI_REGISTER_FIELD_RTC_STS
Definition: registers.h:62
@ UACPI_REGISTER_FIELD_SCI_EN
Definition: registers.h:72
@ UACPI_REGISTER_FIELD_ARB_DIS
Definition: registers.h:79
@ UACPI_REGISTER_FIELD_HWR_WAK_STS
Definition: registers.h:64
@ UACPI_REGISTER_FIELD_HWR_SLP_EN
Definition: registers.h:78
@ UACPI_REGISTER_FIELD_RTC_EN
Definition: registers.h:70
@ UACPI_REGISTER_FIELD_GBL_EN
Definition: registers.h:67
@ UACPI_REGISTER_FIELD_SLPBTN_STS
Definition: registers.h:61
@ UACPI_REGISTER_FIELD_SLP_TYP
Definition: registers.h:75
@ UACPI_REGISTER_FIELD_SLPBTN_EN
Definition: registers.h:69
@ UACPI_REGISTER_FIELD_GBL_STS
Definition: registers.h:59
@ UACPI_REGISTER_FIELD_GBL_RLS
Definition: registers.h:74
@ UACPI_REGISTER_FIELD_TMR_STS
Definition: registers.h:57
@ UACPI_REGISTER_FIELD_BM_STS
Definition: registers.h:58
@ UACPI_REGISTER_FIELD_TMR_EN
Definition: registers.h:66
@ UACPI_REGISTER_FIELD_SLP_EN
Definition: registers.h:77
@ UACPI_REGISTER_FIELD_PCIEX_WAKE_STS
Definition: registers.h:63
@ UACPI_REGISTER_FIELD_HWR_SLP_TYP
Definition: registers.h:76
@ UACPI_REGISTER_FIELD_PCIEXP_WAKE_DIS
Definition: registers.h:71
@ UACPI_REGISTER_FIELD_BM_RLD
Definition: registers.h:73

Function Documentation

◆ uacpi_read_register()

uacpi_status uacpi_read_register ( uacpi_register  reg_enum,
uacpi_u64 out_value 
)

Read a register from FADT

NOTE: write-only bits (if any) are cleared automatically

Definition at line 227 of file registers.c.

230{
232 const struct register_spec *reg;
234
236
237 ret = get_reg(reg_enum, &reg, &mapping);
239 return ret;
240
243 return ret;
244
245 return do_read_register(reg, mapping, out_value);
246}
#define UACPI_ENSURE_INIT_LEVEL_AT_LEAST(lvl)
Definition: context.h:127
#define uacpi_unlikely_error(expr)
Definition: status.h:49
uacpi_status
Definition: status.h:10
@ UACPI_INIT_LEVEL_SUBSYSTEM_INITIALIZED
Definition: types.h:72
return ret
Definition: mutex.c:147
static uacpi_status ensure_register_mapped(const struct register_spec *spec, struct register_mapping *mapping)
Definition: registers.c:151
static uacpi_status get_reg(uacpi_u8 idx, const struct register_spec **out_spec, struct register_mapping **out_mapping)
Definition: registers.c:181
static uacpi_status do_read_register(const struct register_spec *reg, struct register_mapping *mapping, uacpi_u64 *out_value)
Definition: registers.c:204
GLenum GLenum GLenum GLenum mapping
Definition: glext.h:9031
static int reg
Definition: i386-dis.c:1290

Referenced by enter_sleep_state_hw_full(), handle_fixed_events(), and prepare_for_wake_from_sleep_state_hw_full().

◆ uacpi_read_register_field()

uacpi_status uacpi_read_register_field ( uacpi_register_field  field_enum,
uacpi_u64 out_value 
)

Read a field from a FADT register

NOTE: The value is automatically masked and shifted down as appropriate, the client code doesn't have to do any bit manipulation. E.g. for a field at 0b???XX??? the returned value will contain just the 0bXX

Definition at line 487 of file registers.c.

490{
492 uacpi_u8 field_idx = field_enum;
493 const struct register_field *field;
494 const struct register_spec *reg;
496
498
501
502 field = &g_fields[field_idx];
503 reg = &g_registers[field->reg];
505
508 return ret;
509
510 ret = do_read_register(reg, mapping, out_value);
512 return ret;
513
514 *out_value = (*out_value & field->mask) >> field->offset;
515 return UACPI_STATUS_OK;
516}
#define uacpi_unlikely(expr)
Definition: compiler.h:88
uint8_t uacpi_u8
Definition: types.h:19
@ UACPI_STATUS_INVALID_ARGUMENT
Definition: status.h:18
@ UACPI_STATUS_OK
Definition: status.h:11
static struct register_mapping g_register_mappings[UACPI_REGISTER_MAX+1]
Definition: registers.c:109
static const struct register_spec g_registers[UACPI_REGISTER_MAX+1]
Definition: registers.c:33
static const struct register_field g_fields[UACPI_REGISTER_FIELD_MAX+1]
Definition: registers.c:338
Definition: parser.c:44

Referenced by enter_sleep_state_hw_full(), enter_sleep_state_hw_reduced(), read_mode(), set_event(), and uacpi_fixed_event_info().

◆ uacpi_write_register()

uacpi_status uacpi_write_register ( uacpi_register  reg_enum,
uacpi_u64  in_value 
)

Write a register from FADT

NOTE:

  • Preserved bits (if any) are preserved automatically
  • If a register is made up of two (e.g. PM1a and PM1b) parts, the input is written to both at the same time

Definition at line 286 of file registers.c.

289{
291 const struct register_spec *reg;
293
295
296 ret = get_reg(reg_enum, &reg, &mapping);
298 return ret;
299
302 return ret;
303
304 return do_write_register(reg, mapping, in_value);
305}
static uacpi_status do_write_register(const struct register_spec *reg, struct register_mapping *mapping, uacpi_u64 in_value)
Definition: registers.c:258

Referenced by enter_sleep_state_hw_reduced(), prepare_for_wake_from_sleep_state_hw_reduced(), set_mode(), uacpi_clear_all_events(), and uacpi_reboot().

◆ uacpi_write_register_field()

uacpi_status uacpi_write_register_field ( uacpi_register_field  field_enum,
uacpi_u64  in_value 
)

Write to a field of a FADT register

NOTE: The value is automatically masked and shifted up as appropriate, the client code doesn't have to do any bit manipulation. E.g. for a field at 0b???XX??? the passed value should be just 0bXX

Definition at line 518 of file registers.c.

521{
523 uacpi_u8 field_idx = field_enum;
524 const struct register_field *field;
525 const struct register_spec *reg;
527
530
532
535
536 field = &g_fields[field_idx];
537 reg = &g_registers[field->reg];
539
542 return ret;
543
544 in_value = (in_value << field->offset) & field->mask;
545
547
549 if (in_value == 0) {
551 goto out;
552 }
553
554 ret = do_write_register(reg, mapping, in_value);
555 goto out;
556 }
557
560 goto out;
561
562 data &= ~field->mask;
563 data |= in_value;
564
566
567out:
569 return ret;
570}
unsigned long uacpi_cpu_flags
Definition: arch_helpers.h:13
uint64_t uacpi_u64
Definition: types.h:22
static uacpi_handle g_reg_lock
Definition: registers.c:11
@ REGISTER_ACCESS_KIND_WRITE_TO_CLEAR
Definition: registers.c:20
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLbitfield flags
Definition: glext.h:7161
uacpi_cpu_flags uacpi_kernel_lock_spinlock(uacpi_handle)
Definition: uacpiosl.c:98
void uacpi_kernel_unlock_spinlock(uacpi_handle, uacpi_cpu_flags)
Definition: uacpiosl.c:105
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383

Referenced by dispatch_fixed_event(), enter_sleep_state_hw_full(), enter_sleep_state_hw_reduced(), initialize_fixed_events(), set_event(), uacpi_clear_fixed_event(), uacpi_release_global_lock_to_firmware(), wake_from_sleep_state_hw_full(), and wake_from_sleep_state_hw_reduced().

◆ uacpi_write_registers()

uacpi_status uacpi_write_registers ( uacpi_register  reg_enum,
uacpi_u64  in_value0,
uacpi_u64  in_value1 
)

Write a register from FADT

NOTE:

  • Preserved bits (if any) are preserved automatically
  • For registers that are made up of two (e.g. PM1a and PM1b) parts, the provided values are written to their respective physical register

Definition at line 307 of file registers.c.

310{
312 const struct register_spec *reg;
314
316
317 ret = get_reg(reg_enum, &reg, &mapping);
319 return ret;
320
323 return ret;
324
325 ret = do_write_one(mapping, 0, in_value0);
327 return ret;
328
329 return do_write_one(mapping, 1, in_value1);
330}
static uacpi_status do_write_one(struct register_mapping *mapping, uacpi_u8 idx, uacpi_u64 in_value)
Definition: registers.c:248

Referenced by enter_sleep_state_hw_full(), and prepare_for_wake_from_sleep_state_hw_full().