9
0
Fork 0

device: Add a dev_request_mem_region function

We might want to add real resource tracking later. Also
The first resource may not be a IORESOURCE_MEM at all.
For these reasons introduce a wrapper function for
driver so that they do not have to fiddle with resources
directly.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
This commit is contained in:
Sascha Hauer 2011-07-19 08:34:33 +02:00 committed by Jean-Christophe PLAGNIOL-VILLARD
parent 56fe623bfe
commit d5b96bdca9
2 changed files with 31 additions and 0 deletions

View File

@ -188,6 +188,20 @@ static inline const char *dev_name(const struct device_d *dev)
return dev_id(dev);
}
/*
* get register base 'num' for a device
*/
void __iomem *dev_get_mem_region(struct device_d *dev, int num);
/*
* exlusively request register base 'num' for a device
*/
static inline void __iomem *dev_request_mem_region(struct device_d *dev, int num)
{
/* no resource tracking yet */
return dev_get_mem_region(dev, num);
}
/* linear list over all available devices
*/
extern struct list_head device_list;

View File

@ -233,6 +233,23 @@ int register_driver(struct driver_d *drv)
}
EXPORT_SYMBOL(register_driver);
void __iomem *dev_get_mem_region(struct device_d *dev, int num)
{
int i, n = 0;
for (i = 0; i < dev->num_resources; i++) {
struct resource *res = &dev->resource[i];
if (resource_type(res) == IORESOURCE_MEM) {
if (n == num)
return (void __force __iomem *)res->start;
n++;
}
}
return NULL;
}
EXPORT_SYMBOL(dev_get_mem_region);
int dev_protect(struct device_d *dev, size_t count, unsigned long offset, int prot)
{
printf("%s: currently broken\n", __func__);