arch/x86/acpigen: Add new helper routines for XOR and get_rx_gpio
Add new helper function in the acpigen library, that use the underlying soc routines. Change-Id: I8d65699d3c806007a50adcb51c5d84567ce451b7 Signed-off-by: Rajat Jain <rajatja@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/39145 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Mathew King <mathewk@chromium.org>
This commit is contained in:
parent
4d9dd22bd1
commit
310623b2dd
|
@ -73,6 +73,15 @@ calling the platform specific acpigen_soc_{set,clear}_tx_gpio
|
|||
functions internally. Thus, all the ACPI AML calling conventions for
|
||||
the platform functions apply to these helper functions as well.
|
||||
|
||||
3. Get Rx GPIO
|
||||
int acpigen_get_rx_gpio(struct acpi_gpio gpio)
|
||||
|
||||
This function takes as input, an struct acpi_gpio type and outputs
|
||||
AML code to read the *logical* value of a gpio (after taking its
|
||||
polarity into consideration), into the Local0 variable. It calls
|
||||
the platform specific acpigen_soc_read_rx_gpio() to actually read
|
||||
the raw Rx gpio value.
|
||||
|
||||
## Implementation Details
|
||||
|
||||
ACPI library in coreboot will provide weak definitions for all the
|
||||
|
|
|
@ -1203,6 +1203,15 @@ void acpigen_write_or(uint8_t arg1, uint8_t arg2, uint8_t res)
|
|||
acpigen_emit_byte(res);
|
||||
}
|
||||
|
||||
/* Xor (arg1, arg2, res) */
|
||||
void acpigen_write_xor(uint8_t arg1, uint8_t arg2, uint8_t res)
|
||||
{
|
||||
acpigen_emit_byte(XOR_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)
|
||||
{
|
||||
|
@ -1759,6 +1768,14 @@ int acpigen_disable_tx_gpio(struct acpi_gpio *gpio)
|
|||
return acpigen_soc_clear_tx_gpio(gpio->pins[0]);
|
||||
}
|
||||
|
||||
void acpigen_get_rx_gpio(struct acpi_gpio *gpio)
|
||||
{
|
||||
acpigen_soc_read_rx_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)
|
||||
|
|
|
@ -361,6 +361,7 @@ 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_xor(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);
|
||||
|
@ -472,6 +473,14 @@ int acpigen_soc_clear_tx_gpio(unsigned int gpio_num);
|
|||
int acpigen_enable_tx_gpio(struct acpi_gpio *gpio);
|
||||
int acpigen_disable_tx_gpio(struct acpi_gpio *gpio);
|
||||
|
||||
/*
|
||||
* Helper function for getting a RX GPIO value based on the GPIO polarity.
|
||||
* The return value is stored in Local0 variable.
|
||||
* This function ends up calling acpigen_soc_get_rx_gpio to make callbacks
|
||||
* into SoC acpigen code
|
||||
*/
|
||||
void acpigen_get_rx_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);
|
||||
|
@ -481,4 +490,5 @@ void acpigen_resource_dword(u16 res_type, u16 gen_flags, u16 type_flags,
|
|||
/* refer to ACPI 6.4.3.5.1 QWord Address Space Descriptor section for details */
|
||||
void acpigen_resource_qword(u16 res_type, u16 gen_flags, u16 type_flags,
|
||||
u64 gran, u64 range_min, u64 range_max, u64 translation, u64 length);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue