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>
diff --git a/src/device/device_util.c b/src/device/device_util.c
index 9e2c3d5..383e17b 100644
--- a/src/device/device_util.c
+++ b/src/device/device_util.c
@@ -841,20 +841,6 @@
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);
diff --git a/src/include/device/device.h b/src/include/device/device.h
index c018306..8f5407d 100644
--- a/src/include/device/device.h
+++ b/src/include/device/device.h
@@ -307,9 +307,6 @@
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 @@
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 @@
#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);