acpigen: Add some new helper functions
These build on existing functions but use different object types in order to provide functions for upcoming changes: acpigen_write_return_op(): Return an operator. acpigen_write_if_lequal_op_op(): Check if 2 operands are equal. acpigen_get_package_op_element(): Read an element from a package into an operator. This one just provides the missing helper, the other 3 already exist: acpigen_get_tx_gpio: Read TX gpio state. Signed-off-by: Duncan Laurie <dlaurie@google.com> Change-Id: I1141fd132d6f09cf482f74e95308947cba2c5846 Reviewed-on: https://review.coreboot.org/c/coreboot/+/41985 Reviewed-by: Furquan Shaikh <furquan@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
9ff79c2280
commit
2fe7471962
2 changed files with 60 additions and 0 deletions
|
@ -339,6 +339,18 @@ void acpigen_write_scope(const char *name)
|
|||
acpigen_emit_namestring(name);
|
||||
}
|
||||
|
||||
void acpigen_get_package_op_element(uint8_t package_op, unsigned int element, uint8_t dest_op)
|
||||
{
|
||||
/* <dest_op> = DeRefOf (<package_op>[<element]) */
|
||||
acpigen_write_store();
|
||||
acpigen_emit_byte(DEREF_OP);
|
||||
acpigen_emit_byte(INDEX_OP);
|
||||
acpigen_emit_byte(package_op);
|
||||
acpigen_write_integer(element);
|
||||
acpigen_emit_byte(ZERO_OP); /* Ignore Index() Destination */
|
||||
acpigen_emit_byte(dest_op);
|
||||
}
|
||||
|
||||
void acpigen_write_processor(u8 cpuindex, u32 pblock_addr, u8 pblock_len)
|
||||
{
|
||||
/*
|
||||
|
@ -1268,6 +1280,20 @@ void acpigen_write_if_and(uint8_t arg1, uint8_t arg2)
|
|||
acpigen_emit_byte(arg2);
|
||||
}
|
||||
|
||||
/*
|
||||
* Generates ACPI code for checking if operand1 and operand2 are equal.
|
||||
* Both operand1 and operand2 are ACPI ops.
|
||||
*
|
||||
* If (Lequal (op,1 op2))
|
||||
*/
|
||||
void acpigen_write_if_lequal_op_op(uint8_t op1, uint8_t op2)
|
||||
{
|
||||
acpigen_write_if();
|
||||
acpigen_emit_byte(LEQUAL_OP);
|
||||
acpigen_emit_byte(op1);
|
||||
acpigen_emit_byte(op2);
|
||||
}
|
||||
|
||||
/*
|
||||
* Generates ACPI code for checking if operand1 and operand2 are equal, where,
|
||||
* operand1 is ACPI op and operand2 is an integer.
|
||||
|
@ -1341,6 +1367,12 @@ void acpigen_write_return_singleton_buffer(uint8_t arg)
|
|||
acpigen_write_return_byte_buffer(&arg, 1);
|
||||
}
|
||||
|
||||
void acpigen_write_return_op(uint8_t arg)
|
||||
{
|
||||
acpigen_emit_byte(RETURN_OP);
|
||||
acpigen_emit_byte(arg);
|
||||
}
|
||||
|
||||
void acpigen_write_return_byte(uint8_t arg)
|
||||
{
|
||||
acpigen_emit_byte(RETURN_OP);
|
||||
|
@ -1790,6 +1822,14 @@ void acpigen_get_rx_gpio(struct acpi_gpio *gpio)
|
|||
acpigen_write_xor(LOCAL0_OP, 1, LOCAL0_OP);
|
||||
}
|
||||
|
||||
void acpigen_get_tx_gpio(struct acpi_gpio *gpio)
|
||||
{
|
||||
acpigen_soc_get_tx_gpio(gpio->pins[0]);
|
||||
|
||||
if (gpio->polarity == ACPI_GPIO_ACTIVE_LOW)
|
||||
acpigen_write_xor(LOCAL0_OP, 1, LOCAL0_OP);
|
||||
}
|
||||
|
||||
/* refer to ACPI 6.4.3.5.3 Word Address Space Descriptor section for details */
|
||||
void acpigen_resource_word(u16 res_type, u16 gen_flags, u16 type_flags, u16 gran,
|
||||
u16 range_min, u16 range_max, u16 translation, u16 length)
|
||||
|
|
|
@ -360,6 +360,7 @@ 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_if_lequal_op_op(uint8_t op, uint8_t val);
|
||||
void acpigen_write_if_lequal_op_int(uint8_t op, uint64_t val);
|
||||
void acpigen_write_if_lequal_namestr_int(const char *namestr, uint64_t val);
|
||||
void acpigen_write_else(void);
|
||||
|
@ -368,6 +369,7 @@ void acpigen_write_to_integer(uint8_t src, uint8_t dst);
|
|||
void acpigen_write_byte_buffer(uint8_t *arr, size_t size);
|
||||
void acpigen_write_return_byte_buffer(uint8_t *arr, size_t size);
|
||||
void acpigen_write_return_singleton_buffer(uint8_t arg);
|
||||
void acpigen_write_return_op(uint8_t arg);
|
||||
void acpigen_write_return_byte(uint8_t arg);
|
||||
void acpigen_write_upc(enum acpi_upc_type type);
|
||||
void acpigen_write_pld(const struct acpi_pld *pld);
|
||||
|
@ -438,6 +440,16 @@ void acpigen_write_indexfield(const char *idx, const char *data,
|
|||
|
||||
int get_cst_entries(acpi_cstate_t **);
|
||||
|
||||
/*
|
||||
* Get element from package into specified destination op:
|
||||
* <dest_op> = DeRefOf (<package_op>[<element])
|
||||
*
|
||||
* Example:
|
||||
* acpigen_get_package_op_element(ARG0_OP, 0, LOCAL0_OP)
|
||||
* Local0 = DeRefOf (Arg0[0])
|
||||
*/
|
||||
void acpigen_get_package_op_element(uint8_t package_op, unsigned int element, uint8_t dest_op);
|
||||
|
||||
/*
|
||||
* Soc-implemented functions for generating ACPI AML code for GPIO handling. All
|
||||
* these functions are expected to use only Local5, Local6 and Local7
|
||||
|
@ -478,6 +490,14 @@ int acpigen_disable_tx_gpio(struct acpi_gpio *gpio);
|
|||
*/
|
||||
void acpigen_get_rx_gpio(struct acpi_gpio *gpio);
|
||||
|
||||
/*
|
||||
* Helper function for getting a TX GPIO value based on the GPIO polarity.
|
||||
* The return value is stored in Local0 variable.
|
||||
* This function ends up calling acpigen_soc_get_tx_gpio to make callbacks
|
||||
* into SoC acpigen code
|
||||
*/
|
||||
void acpigen_get_tx_gpio(struct acpi_gpio *gpio);
|
||||
|
||||
/* refer to ACPI 6.4.3.5.3 Word Address Space Descriptor section for details */
|
||||
void acpigen_resource_word(u16 res_type, u16 gen_flags, u16 type_flags, u16 gran,
|
||||
u16 range_min, u16 range_max, u16 translation, u16 length);
|
||||
|
|
Loading…
Reference in a new issue