arch/x86: add acpigen resource support
Add Word/DWord/QWord Address Space Descriptor helper functions. Signed-off-by: Jonathan Zhang <jonzhang@fb.com> Signed-off-by: Reddy Chagam <anjaneya.chagam@intel.com> Change-Id: I707f8a443090b6f30e2940b721f9555ccdf49d32 Reviewed-on: https://review.coreboot.org/c/coreboot/+/38594 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Patrick Rudolph <patrick.rudolph@9elements.com> Reviewed-by: Patrick Rudolph <siro@das-labor.org>
This commit is contained in:
parent
ea4d1246e8
commit
71299c274b
|
@ -1758,3 +1758,78 @@ int acpigen_disable_tx_gpio(struct acpi_gpio *gpio)
|
||||||
else
|
else
|
||||||
return acpigen_soc_clear_tx_gpio(gpio->pins[0]);
|
return acpigen_soc_clear_tx_gpio(gpio->pins[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 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)
|
||||||
|
{
|
||||||
|
acpigen_emit_byte(0x88);
|
||||||
|
/* Byte 1+2: length (0x000d) */
|
||||||
|
acpigen_emit_byte(0x0d);
|
||||||
|
acpigen_emit_byte(0x00);
|
||||||
|
/* resource type */
|
||||||
|
acpigen_emit_byte(res_type); // 0 - mem, 1 - io, 2 - bus
|
||||||
|
/* general flags */
|
||||||
|
acpigen_emit_byte(gen_flags);
|
||||||
|
/* type flags */
|
||||||
|
// refer to ACPI Table 6-234 (Memory), 6-235 (IO), 6-236 (Bus) for details
|
||||||
|
acpigen_emit_byte(type_flags);
|
||||||
|
/* granularity, min, max, translation, length */
|
||||||
|
acpigen_emit_word(gran);
|
||||||
|
acpigen_emit_word(range_min);
|
||||||
|
acpigen_emit_word(range_max);
|
||||||
|
acpigen_emit_word(translation);
|
||||||
|
acpigen_emit_word(length);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* refer to ACPI 6.4.3.5.2 DWord Address Space Descriptor section for details */
|
||||||
|
void acpigen_resource_dword(u16 res_type, u16 gen_flags, u16 type_flags,
|
||||||
|
u32 gran, u32 range_min, u32 range_max, u32 translation, u32 length)
|
||||||
|
{
|
||||||
|
acpigen_emit_byte(0x87);
|
||||||
|
/* Byte 1+2: length (0023) */
|
||||||
|
acpigen_emit_byte(23);
|
||||||
|
acpigen_emit_byte(0x00);
|
||||||
|
/* resource type */
|
||||||
|
acpigen_emit_byte(res_type); // 0 - mem, 1 - io, 2 - bus
|
||||||
|
/* general flags */
|
||||||
|
acpigen_emit_byte(gen_flags);
|
||||||
|
/* type flags */
|
||||||
|
// refer to ACPI Table 6-234 (Memory), 6-235 (IO), 6-236 (Bus) for details
|
||||||
|
acpigen_emit_byte(type_flags);
|
||||||
|
/* granularity, min, max, translation, length */
|
||||||
|
acpigen_emit_dword(gran);
|
||||||
|
acpigen_emit_dword(range_min);
|
||||||
|
acpigen_emit_dword(range_max);
|
||||||
|
acpigen_emit_dword(translation);
|
||||||
|
acpigen_emit_dword(length);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void acpigen_emit_qword(u64 data)
|
||||||
|
{
|
||||||
|
acpigen_emit_dword(data & 0xffffffff);
|
||||||
|
acpigen_emit_dword((data >> 32) & 0xffffffff);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 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)
|
||||||
|
{
|
||||||
|
acpigen_emit_byte(0x8a);
|
||||||
|
/* Byte 1+2: length (0x002b) */
|
||||||
|
acpigen_emit_byte(0x2b);
|
||||||
|
acpigen_emit_byte(0x00);
|
||||||
|
/* resource type */
|
||||||
|
acpigen_emit_byte(res_type); // 0 - mem, 1 - io, 2 - bus
|
||||||
|
/* general flags */
|
||||||
|
acpigen_emit_byte(gen_flags);
|
||||||
|
/* type flags */
|
||||||
|
// refer to ACPI Table 6-234 (Memory), 6-235 (IO), 6-236 (Bus) for details
|
||||||
|
acpigen_emit_byte(type_flags);
|
||||||
|
/* granularity, min, max, translation, length */
|
||||||
|
acpigen_emit_qword(gran);
|
||||||
|
acpigen_emit_qword(range_min);
|
||||||
|
acpigen_emit_qword(range_max);
|
||||||
|
acpigen_emit_qword(translation);
|
||||||
|
acpigen_emit_qword(length);
|
||||||
|
}
|
||||||
|
|
|
@ -472,4 +472,13 @@ int acpigen_soc_clear_tx_gpio(unsigned int gpio_num);
|
||||||
int acpigen_enable_tx_gpio(struct acpi_gpio *gpio);
|
int acpigen_enable_tx_gpio(struct acpi_gpio *gpio);
|
||||||
int acpigen_disable_tx_gpio(struct acpi_gpio *gpio);
|
int acpigen_disable_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);
|
||||||
|
/* refer to ACPI 6.4.3.5.2 DWord Address Space Descriptor section for details */
|
||||||
|
void acpigen_resource_dword(u16 res_type, u16 gen_flags, u16 type_flags,
|
||||||
|
u32 gran, u32 range_min, u32 range_max, u32 translation, u32 length);
|
||||||
|
/* 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
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue