device: Add fixed_io_range_flags() and helpers

Function fixed_io_resource() and alias io_resource() were
previously unused. Unlike previously, IORESOURCE_STORED flag
needs to be set by the caller, when necessary.

For fixed resources, fields alignment, granularity and
limit need not be initialised, as the resource cannot
be moved. It is assumed the caller provides valid base
and size parameters.

Change-Id: I8fb4cf2dee4f5193e5652648b63c0ecba7b8bab2
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/55458
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Nico Huber <nico.h@gmx.de>
This commit is contained in:
Kyösti Mälkki 2021-06-13 08:02:56 +03:00
parent ce34596f74
commit ad5fab2362
2 changed files with 23 additions and 20 deletions

View File

@ -841,20 +841,6 @@ const struct resource *fixed_resource_range_idx(struct device *dev, unsigned lon
return resource;
}
void fixed_io_resource(struct device *dev, unsigned long index,
unsigned long base, unsigned long size)
{
struct resource *resource;
resource = new_resource(dev, index);
resource->base = (resource_t)base;
resource->size = (resource_t)size;
resource->limit = resource->base + resource->size - 1;
resource->flags = IORESOURCE_IO | IORESOURCE_FIXED |
IORESOURCE_STORED | IORESOURCE_ASSIGNED |
IORESOURCE_RESERVE;
}
void mmconf_resource(struct device *dev, unsigned long index)
{
struct resource *resource = new_resource(dev, index);

View File

@ -307,9 +307,6 @@ void pci_domain_read_resources(struct device *dev);
void pci_domain_set_resources(struct device *dev);
void pci_domain_scan_bus(struct device *dev);
void fixed_io_resource(struct device *dev, unsigned long index,
unsigned long base, unsigned long size);
void mmconf_resource(struct device *dev, unsigned long index);
/* These are temporary resource constructors to get us through the
@ -336,6 +333,29 @@ const struct resource *fixed_mem_from_to_flags(struct device *dev, unsigned long
return fixed_mem_range_flags(dev, index, base, end - base, flags);
}
static inline
const struct resource *fixed_io_range_flags(struct device *dev, unsigned long index,
uint16_t base, uint16_t size, unsigned long flags)
{
return fixed_resource_range_idx(dev, index, base, size, IORESOURCE_IO | flags);
}
static inline
const struct resource *fixed_io_from_to_flags(struct device *dev, unsigned long index,
uint16_t base, uint16_t end, unsigned long flags)
{
if (end <= base)
return NULL;
return fixed_io_range_flags(dev, index, base, end - base, flags);
}
static inline
const struct resource *fixed_io_range_reserved(struct device *dev, unsigned long index,
uint16_t base, uint16_t size)
{
return fixed_io_range_flags(dev, index, base, size, IORESOURCE_RESERVE);
}
/* Compatibility code */
static inline void fixed_mem_resource_kb(struct device *dev, unsigned long index,
@ -365,9 +385,6 @@ static inline void fixed_mem_resource_kb(struct device *dev, unsigned long index
#define mmio_resource_kb(dev, idx, basek, sizek) \
fixed_mem_resource_kb(dev, idx, basek, sizek, IORESOURCE_RESERVE)
#define io_resource(dev, idx, base, size) \
fixed_io_resource(dev, idx, base, size)
void tolm_test(void *gp, struct device *dev, struct resource *new);
u32 find_pci_tolm(struct bus *bus);