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>
diff --git a/src/arch/x86/acpigen.c b/src/arch/x86/acpigen.c
index 72605bb..9162cdb 100644
--- a/src/arch/x86/acpigen.c
+++ b/src/arch/x86/acpigen.c
@@ -1203,6 +1203,15 @@
 	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 @@
 		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)