arch/x86/acpigen: Add new functions to acpigen library
Add functions to support generation of following AML operations: 1. PowerResource 2. Store 3. Or 4. And 5. Not 6. Debug 7. If 8. Else 9. Serialized method BUG=chrome-os-partner:55988 Change-Id: I606736b38e6a55ffdc3e814b6ae0fa367ef7595b Signed-off-by: Furquan Shaikh <furquan@chromium.org> Reviewed-on: https://review.coreboot.org/17079 Tested-by: build bot (Jenkins) Reviewed-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-by: Alexander Couzens <lynxis@fe80.eu>
This commit is contained in:
parent
e4e9b94db1
commit
fcc7a04cc8
|
@ -438,12 +438,24 @@ void acpigen_write_empty_PTC(void)
|
|||
acpigen_pop_len();
|
||||
}
|
||||
|
||||
void acpigen_write_method(const char *name, int nargs)
|
||||
static void __acpigen_write_method(const char *name, uint8_t flags)
|
||||
{
|
||||
acpigen_emit_byte(METHOD_OP);
|
||||
acpigen_write_len_f();
|
||||
acpigen_emit_namestring(name);
|
||||
acpigen_emit_byte(nargs & 7);
|
||||
acpigen_emit_byte(flags);
|
||||
}
|
||||
|
||||
/* Method (name, nargs, NotSerialized) */
|
||||
void acpigen_write_method(const char *name, int nargs)
|
||||
{
|
||||
__acpigen_write_method(name, (nargs & 7));
|
||||
}
|
||||
|
||||
/* Method (name, nargs, Serialized) */
|
||||
void acpigen_write_method_serialized(const char *name, int nargs)
|
||||
{
|
||||
__acpigen_write_method(name, (nargs & 7) | (1 << 3));
|
||||
}
|
||||
|
||||
void acpigen_write_device(const char *name)
|
||||
|
@ -864,3 +876,119 @@ void acpigen_write_uuid(const char *uuid)
|
|||
|
||||
acpigen_pop_len();
|
||||
}
|
||||
|
||||
/*
|
||||
* Name (_PRx, Package(One) { name })
|
||||
* ...
|
||||
* PowerResource (name, level, order)
|
||||
*/
|
||||
void acpigen_write_power_res(const char *name, uint8_t level, uint16_t order,
|
||||
const char *dev_states[], size_t dev_states_count)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < dev_states_count; i++) {
|
||||
acpigen_write_name(dev_states[i]);
|
||||
acpigen_write_package(1);
|
||||
acpigen_emit_simple_namestring(name);
|
||||
acpigen_pop_len(); /* Package */
|
||||
}
|
||||
|
||||
acpigen_emit_ext_op(POWER_RES_OP);
|
||||
|
||||
acpigen_write_len_f();
|
||||
|
||||
acpigen_emit_simple_namestring(name);
|
||||
acpigen_emit_byte(level);
|
||||
acpigen_emit_word(order);
|
||||
}
|
||||
|
||||
/* Sleep (ms) */
|
||||
void acpigen_write_sleep(uint64_t sleep_ms)
|
||||
{
|
||||
acpigen_emit_ext_op(SLEEP_OP);
|
||||
acpigen_write_integer(sleep_ms);
|
||||
}
|
||||
|
||||
void acpigen_write_store(void)
|
||||
{
|
||||
acpigen_emit_byte(STORE_OP);
|
||||
}
|
||||
|
||||
/* Store (src, dst) */
|
||||
void acpigen_write_store_ops(uint8_t src, uint8_t dst)
|
||||
{
|
||||
acpigen_write_store();
|
||||
acpigen_emit_byte(src);
|
||||
acpigen_emit_byte(dst);
|
||||
}
|
||||
|
||||
/* Or (arg1, arg2, res) */
|
||||
void acpigen_write_or(uint8_t arg1, uint8_t arg2, uint8_t res)
|
||||
{
|
||||
acpigen_emit_byte(OR_OP);
|
||||
acpigen_emit_byte(arg1);
|
||||
acpigen_emit_byte(arg2);
|
||||
acpigen_emit_byte(res);
|
||||
}
|
||||
|
||||
/* And (arg1, arg2, res) */
|
||||
void acpigen_write_and(uint8_t arg1, uint8_t arg2, uint8_t res)
|
||||
{
|
||||
acpigen_emit_byte(AND_OP);
|
||||
acpigen_emit_byte(arg1);
|
||||
acpigen_emit_byte(arg2);
|
||||
acpigen_emit_byte(res);
|
||||
}
|
||||
|
||||
/* Not (arg, res) */
|
||||
void acpigen_write_not(uint8_t arg, uint8_t res)
|
||||
{
|
||||
acpigen_emit_byte(NOT_OP);
|
||||
acpigen_emit_byte(arg);
|
||||
acpigen_emit_byte(res);
|
||||
}
|
||||
|
||||
/* Store (str, DEBUG) */
|
||||
void acpigen_write_debug_string(const char *str)
|
||||
{
|
||||
acpigen_write_store();
|
||||
acpigen_write_string(str);
|
||||
acpigen_emit_ext_op(DEBUG_OP);
|
||||
}
|
||||
|
||||
/* Store (val, DEBUG) */
|
||||
void acpigen_write_debug_integer(uint64_t val)
|
||||
{
|
||||
acpigen_write_store();
|
||||
acpigen_write_integer(val);
|
||||
acpigen_emit_ext_op(DEBUG_OP);
|
||||
}
|
||||
|
||||
/* Store (op, DEBUG) */
|
||||
void acpigen_write_debug_op(uint8_t op)
|
||||
{
|
||||
acpigen_write_store();
|
||||
acpigen_emit_byte(op);
|
||||
acpigen_emit_ext_op(DEBUG_OP);
|
||||
}
|
||||
|
||||
void acpigen_write_if(void)
|
||||
{
|
||||
acpigen_emit_byte(IF_OP);
|
||||
acpigen_write_len_f();
|
||||
}
|
||||
|
||||
/* If (And (arg1, arg2)) */
|
||||
void acpigen_write_if_and(uint8_t arg1, uint8_t arg2)
|
||||
{
|
||||
acpigen_write_if();
|
||||
acpigen_emit_byte(AND_OP);
|
||||
acpigen_emit_byte(arg1);
|
||||
acpigen_emit_byte(arg2);
|
||||
}
|
||||
|
||||
void acpigen_write_else(void)
|
||||
{
|
||||
acpigen_emit_byte(ELSE_OP);
|
||||
acpigen_write_len_f();
|
||||
}
|
||||
|
|
|
@ -114,6 +114,7 @@ void acpigen_write_name_integer(const char *name, uint64_t val);
|
|||
void acpigen_write_coreboot_hid(enum coreboot_acpi_ids id);
|
||||
void acpigen_write_scope(const char *name);
|
||||
void acpigen_write_method(const char *name, int nargs);
|
||||
void acpigen_write_method_serialized(const char *name, int nargs);
|
||||
void acpigen_write_device(const char *name);
|
||||
void acpigen_write_PPC(u8 nr);
|
||||
void acpigen_write_PPC_NVS(void);
|
||||
|
@ -142,6 +143,20 @@ void acpigen_write_mainboard_resource_template(void);
|
|||
void acpigen_write_mainboard_resources(const char *scope, const char *name);
|
||||
void acpigen_write_irq(u16 mask);
|
||||
void acpigen_write_uuid(const char *uuid);
|
||||
void acpigen_write_power_res(const char *name, uint8_t level, uint16_t order,
|
||||
const char *dev_states[], size_t dev_states_count);
|
||||
void acpigen_write_sleep(uint64_t sleep_ms);
|
||||
void acpigen_write_store(void);
|
||||
void acpigen_write_store_ops(uint8_t src, uint8_t dst);
|
||||
void acpigen_write_or(uint8_t arg1, uint8_t arg2, uint8_t res);
|
||||
void acpigen_write_and(uint8_t arg1, uint8_t arg2, uint8_t res);
|
||||
void acpigen_write_not(uint8_t arg, uint8_t res);
|
||||
void acpigen_write_debug_string(const char *str);
|
||||
void acpigen_write_debug_integer(uint64_t val);
|
||||
void acpigen_write_debug_op(uint8_t op);
|
||||
void acpigen_write_if(void);
|
||||
void acpigen_write_if_and(uint8_t arg1, uint8_t arg2);
|
||||
void acpigen_write_else(void);
|
||||
|
||||
int get_cst_entries(acpi_cstate_t **);
|
||||
|
||||
|
|
Loading…
Reference in New Issue