acpigen: Add option for reserved bits in Field
Add an option for unused/reserved bits in a Field definition, allowing for declarations that do not start at bit 0: Field (UART, AnyAcc, NoLock, Preserve) { , 7, /* RESERVED */ BITF, /* Used bit */ } These just use byte 0 instead of a name. Change-Id: I86b54685dbdebacb0834173857c9341ea9fa9a46 Signed-off-by: Duncan Laurie <dlaurie@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/46254 Reviewed-by: Furquan Shaikh <furquan@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
committed by
Duncan Laurie
parent
cf5d58328f
commit
095bbf969d
@ -505,6 +505,12 @@ static void acpigen_write_field_name(const char *name, uint32_t size)
|
|||||||
acpigen_write_field_length(size);
|
acpigen_write_field_length(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void acpigen_write_field_reserved(uint32_t size)
|
||||||
|
{
|
||||||
|
acpigen_emit_byte(0);
|
||||||
|
acpigen_write_field_length(size);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Generate ACPI AML code for Field
|
* Generate ACPI AML code for Field
|
||||||
* Arg0: region name
|
* Arg0: region name
|
||||||
@ -515,6 +521,7 @@ static void acpigen_write_field_name(const char *name, uint32_t size)
|
|||||||
* struct fieldlist l[] = {
|
* struct fieldlist l[] = {
|
||||||
* FIELDLIST_OFFSET(0x84),
|
* FIELDLIST_OFFSET(0x84),
|
||||||
* FIELDLIST_NAMESTR("PMCS", 2),
|
* FIELDLIST_NAMESTR("PMCS", 2),
|
||||||
|
* FIELDLIST_RESERVED(6),
|
||||||
* };
|
* };
|
||||||
* acpigen_write_field("UART", l, ARRAY_SIZE(l), FIELD_ANYACC | FIELD_NOLOCK |
|
* acpigen_write_field("UART", l, ARRAY_SIZE(l), FIELD_ANYACC | FIELD_NOLOCK |
|
||||||
* FIELD_PRESERVE);
|
* FIELD_PRESERVE);
|
||||||
@ -522,7 +529,8 @@ static void acpigen_write_field_name(const char *name, uint32_t size)
|
|||||||
* Field (UART, AnyAcc, NoLock, Preserve)
|
* Field (UART, AnyAcc, NoLock, Preserve)
|
||||||
* {
|
* {
|
||||||
* Offset (0x84),
|
* Offset (0x84),
|
||||||
* PMCS, 2
|
* PMCS, 2,
|
||||||
|
* , 6,
|
||||||
* }
|
* }
|
||||||
*/
|
*/
|
||||||
void acpigen_write_field(const char *name, const struct fieldlist *l, size_t count,
|
void acpigen_write_field(const char *name, const struct fieldlist *l, size_t count,
|
||||||
@ -546,6 +554,10 @@ void acpigen_write_field(const char *name, const struct fieldlist *l, size_t cou
|
|||||||
acpigen_write_field_name(l[i].name, l[i].bits);
|
acpigen_write_field_name(l[i].name, l[i].bits);
|
||||||
current_bit_pos += l[i].bits;
|
current_bit_pos += l[i].bits;
|
||||||
break;
|
break;
|
||||||
|
case RESERVED:
|
||||||
|
acpigen_write_field_reserved(l[i].bits);
|
||||||
|
current_bit_pos += l[i].bits;
|
||||||
|
break;
|
||||||
case OFFSET:
|
case OFFSET:
|
||||||
acpigen_write_field_offset(l[i].bits, current_bit_pos);
|
acpigen_write_field_offset(l[i].bits, current_bit_pos);
|
||||||
current_bit_pos = l[i].bits;
|
current_bit_pos = l[i].bits;
|
||||||
|
@ -158,6 +158,10 @@ enum {
|
|||||||
.name = X, \
|
.name = X, \
|
||||||
.bits = Y, \
|
.bits = Y, \
|
||||||
}
|
}
|
||||||
|
#define FIELDLIST_RESERVED(X) { .type = RESERVED, \
|
||||||
|
.name = "", \
|
||||||
|
.bits = X, \
|
||||||
|
}
|
||||||
|
|
||||||
#define FIELD_ANYACC 0
|
#define FIELD_ANYACC 0
|
||||||
#define FIELD_BYTEACC 1
|
#define FIELD_BYTEACC 1
|
||||||
@ -174,6 +178,7 @@ enum {
|
|||||||
enum field_type {
|
enum field_type {
|
||||||
OFFSET,
|
OFFSET,
|
||||||
NAME_STRING,
|
NAME_STRING,
|
||||||
|
RESERVED,
|
||||||
FIELD_TYPE_MAX,
|
FIELD_TYPE_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user