acpigen.c: Add resource consumer functions for mmio
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz> Change-Id: Id9e4adcd976e1f56ef7f502d9df16dbefce95c3e Reviewed-on: https://review.coreboot.org/c/coreboot/+/79217 Reviewed-by: Nico Huber <nico.h@gmx.de> Reviewed-by: Tim Wawrzynczak <inforichland@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
39b19f270c
commit
62f788e244
|
@ -2296,13 +2296,11 @@ void acpigen_resource_producer_io(u16 io_base, u16 io_limit)
|
||||||
io_limit - io_base + 1); /* length */
|
io_limit - io_base + 1); /* length */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void acpigen_resource_producer_mmio32(u32 mmio_base, u32 mmio_limit, u16 type_flags)
|
static void acpigen_resource_mmio32(u32 mmio_base, u32 mmio_limit, u16 gen_flags,
|
||||||
|
u16 type_flags)
|
||||||
{
|
{
|
||||||
acpigen_resource_dword(RSRC_TYPE_MEM, /* res_type */
|
acpigen_resource_dword(RSRC_TYPE_MEM, /* res_type */
|
||||||
ADDR_SPACE_GENERAL_FLAG_MAX_FIXED
|
gen_flags, /* gen_flags */
|
||||||
| ADDR_SPACE_GENERAL_FLAG_MIN_FIXED
|
|
||||||
| ADDR_SPACE_GENERAL_FLAG_DEC_POS
|
|
||||||
| ADDR_SPACE_GENERAL_FLAG_PRODUCER, /* gen_flags */
|
|
||||||
type_flags, /* type_flags */
|
type_flags, /* type_flags */
|
||||||
0, /* gran */
|
0, /* gran */
|
||||||
mmio_base, /* range_min */
|
mmio_base, /* range_min */
|
||||||
|
@ -2311,13 +2309,11 @@ static void acpigen_resource_producer_mmio32(u32 mmio_base, u32 mmio_limit, u16
|
||||||
mmio_limit - mmio_base + 1); /* length */
|
mmio_limit - mmio_base + 1); /* length */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void acpigen_resource_producer_mmio64(u64 mmio_base, u64 mmio_limit, u16 type_flags)
|
static void acpigen_resource_mmio64(u64 mmio_base, u64 mmio_limit, u16 gen_flags,
|
||||||
|
u16 type_flags)
|
||||||
{
|
{
|
||||||
acpigen_resource_qword(RSRC_TYPE_MEM, /* res_type */
|
acpigen_resource_qword(RSRC_TYPE_MEM, /* res_type */
|
||||||
ADDR_SPACE_GENERAL_FLAG_MAX_FIXED
|
gen_flags, /* gen_flags */
|
||||||
| ADDR_SPACE_GENERAL_FLAG_MIN_FIXED
|
|
||||||
| ADDR_SPACE_GENERAL_FLAG_DEC_POS
|
|
||||||
| ADDR_SPACE_GENERAL_FLAG_PRODUCER, /* gen_flags */
|
|
||||||
type_flags, /* type_flags */
|
type_flags, /* type_flags */
|
||||||
0, /* gran */
|
0, /* gran */
|
||||||
mmio_base, /* range_min */
|
mmio_base, /* range_min */
|
||||||
|
@ -2326,12 +2322,28 @@ static void acpigen_resource_producer_mmio64(u64 mmio_base, u64 mmio_limit, u16
|
||||||
mmio_limit - mmio_base + 1); /* length */
|
mmio_limit - mmio_base + 1); /* length */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void acpigen_resource_mmio(u64 mmio_base, u64 mmio_limit, bool is_producer, u16 type_flags)
|
||||||
|
{
|
||||||
|
const u16 gen_flags = ADDR_SPACE_GENERAL_FLAG_MAX_FIXED
|
||||||
|
| ADDR_SPACE_GENERAL_FLAG_MIN_FIXED
|
||||||
|
| ADDR_SPACE_GENERAL_FLAG_DEC_POS
|
||||||
|
| (is_producer ? ADDR_SPACE_GENERAL_FLAG_PRODUCER
|
||||||
|
: ADDR_SPACE_GENERAL_FLAG_CONSUMER);
|
||||||
|
|
||||||
|
if (mmio_base < 4ULL * GiB && mmio_limit < 4ULL * GiB)
|
||||||
|
acpigen_resource_mmio32(mmio_base, mmio_limit, gen_flags, type_flags);
|
||||||
|
else
|
||||||
|
acpigen_resource_mmio64(mmio_base, mmio_limit, gen_flags, type_flags);
|
||||||
|
}
|
||||||
|
|
||||||
void acpigen_resource_producer_mmio(u64 mmio_base, u64 mmio_limit, u16 type_flags)
|
void acpigen_resource_producer_mmio(u64 mmio_base, u64 mmio_limit, u16 type_flags)
|
||||||
{
|
{
|
||||||
if (mmio_base < 4ULL * GiB && mmio_limit < 4ULL * GiB)
|
acpigen_resource_mmio(mmio_base, mmio_limit, true, type_flags);
|
||||||
acpigen_resource_producer_mmio32(mmio_base, mmio_limit, type_flags);
|
}
|
||||||
else
|
|
||||||
acpigen_resource_producer_mmio64(mmio_base, mmio_limit, type_flags);
|
void acpigen_resource_consumer_mmio(u64 mmio_base, u64 mmio_limit, u16 type_flags)
|
||||||
|
{
|
||||||
|
acpigen_resource_mmio(mmio_base, mmio_limit, false, type_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
void acpigen_write_ADR(uint64_t adr)
|
void acpigen_write_ADR(uint64_t adr)
|
||||||
|
|
|
@ -691,6 +691,7 @@ void acpigen_resource_qword(u16 res_type, u16 gen_flags, u16 type_flags,
|
||||||
void acpigen_resource_producer_bus_number(u16 bus_base, u16 bus_limit);
|
void acpigen_resource_producer_bus_number(u16 bus_base, u16 bus_limit);
|
||||||
void acpigen_resource_producer_io(u16 io_base, u16 io_limit);
|
void acpigen_resource_producer_io(u16 io_base, u16 io_limit);
|
||||||
void acpigen_resource_producer_mmio(u64 mmio_base, u64 mmio_limit, u16 type_flags);
|
void acpigen_resource_producer_mmio(u64 mmio_base, u64 mmio_limit, u16 type_flags);
|
||||||
|
void acpigen_resource_consumer_mmio(u64 mmio_base, u64 mmio_limit, u16 type_flags);
|
||||||
|
|
||||||
/* Emits Notify(namestr, value) */
|
/* Emits Notify(namestr, value) */
|
||||||
void acpigen_notify(const char *namestr, int value);
|
void acpigen_notify(const char *namestr, int value);
|
||||||
|
|
Loading…
Reference in New Issue