commonlib/region: Add helpers for dynamic initialization of region dev
This allows initialization of runtime region devices and xlate region devices where all parameters cannot be statically determined. BUG=chrome-os-partner:54563 Change-Id: Ia6e1b695fed3bbfa08598d1593e650fc1465d41f Signed-off-by: Furquan Shaikh <furquan@google.com> Reviewed-on: https://review.coreboot.org/15267 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
parent
f4dac8ac06
commit
2b57691ce0
|
@ -90,6 +90,11 @@ struct region_device {
|
||||||
}, \
|
}, \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Helper to dynamically initialize region device. */
|
||||||
|
void region_device_init(struct region_device *rdev,
|
||||||
|
const struct region_device_ops *ops, size_t offset,
|
||||||
|
size_t size);
|
||||||
|
|
||||||
static inline size_t region_offset(const struct region *r)
|
static inline size_t region_offset(const struct region *r)
|
||||||
{
|
{
|
||||||
return r->offset;
|
return r->offset;
|
||||||
|
@ -187,4 +192,10 @@ extern const struct region_device_ops xlate_rdev_ops;
|
||||||
.rdev = REGION_DEV_INIT(&xlate_rdev_ops, 0, (parent_sz_)),\
|
.rdev = REGION_DEV_INIT(&xlate_rdev_ops, 0, (parent_sz_)),\
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Helper to dynamically initialize xlate region device. */
|
||||||
|
void xlate_region_device_init(struct xlate_region_device *xdev,
|
||||||
|
const struct region_device *access_dev,
|
||||||
|
size_t sub_offset, size_t sub_size,
|
||||||
|
size_t parent_size);
|
||||||
|
|
||||||
#endif /* _REGION_H_ */
|
#endif /* _REGION_H_ */
|
||||||
|
|
|
@ -133,6 +133,29 @@ void mem_region_device_init(struct mem_region_device *mdev, void *base,
|
||||||
mdev->rdev.region.size = size;
|
mdev->rdev.region.size = size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void region_device_init(struct region_device *rdev,
|
||||||
|
const struct region_device_ops *ops, size_t offset,
|
||||||
|
size_t size)
|
||||||
|
{
|
||||||
|
memset(rdev, 0, sizeof(*rdev));
|
||||||
|
rdev->root = NULL;
|
||||||
|
rdev->ops = ops;
|
||||||
|
rdev->region.offset = offset;
|
||||||
|
rdev->region.size = size;
|
||||||
|
}
|
||||||
|
|
||||||
|
void xlate_region_device_init(struct xlate_region_device *xdev,
|
||||||
|
const struct region_device *access_dev,
|
||||||
|
size_t sub_offset, size_t sub_size,
|
||||||
|
size_t parent_size)
|
||||||
|
{
|
||||||
|
memset(xdev, 0, sizeof(*xdev));
|
||||||
|
xdev->access_dev = access_dev;
|
||||||
|
xdev->sub_region.offset = sub_offset;
|
||||||
|
xdev->sub_region.size = sub_size;
|
||||||
|
region_device_init(&xdev->rdev, &xlate_rdev_ops, 0, parent_size);
|
||||||
|
}
|
||||||
|
|
||||||
static void *mdev_mmap(const struct region_device *rd, size_t offset,
|
static void *mdev_mmap(const struct region_device *rd, size_t offset,
|
||||||
size_t size __unused)
|
size_t size __unused)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue