100,6 → 100,7 |
/* PnP I/O specific bits (IORESOURCE_BITS) */ |
#define IORESOURCE_IO_16BIT_ADDR (1<<0) |
#define IORESOURCE_IO_FIXED (1<<1) |
#define IORESOURCE_IO_SPARSE (1<<2) |
|
/* PCI ROM control bits (IORESOURCE_BITS) */ |
#define IORESOURCE_ROM_ENABLE (1<<0) /* ROM is enabled, same as PCI_ROM_ADDRESS_ENABLE */ |
110,10 → 111,63 |
/* PCI control bits. Shares IORESOURCE_BITS with above PCI ROM. */ |
#define IORESOURCE_PCI_FIXED (1<<4) /* Do not move resource */ |
|
|
/* helpers to define resources */ |
#define DEFINE_RES_NAMED(_start, _size, _name, _flags) \ |
{ \ |
.start = (_start), \ |
.end = (_start) + (_size) - 1, \ |
.name = (_name), \ |
.flags = (_flags), \ |
} |
|
#define DEFINE_RES_IO_NAMED(_start, _size, _name) \ |
DEFINE_RES_NAMED((_start), (_size), (_name), IORESOURCE_IO) |
#define DEFINE_RES_IO(_start, _size) \ |
DEFINE_RES_IO_NAMED((_start), (_size), NULL) |
|
#define DEFINE_RES_MEM_NAMED(_start, _size, _name) \ |
DEFINE_RES_NAMED((_start), (_size), (_name), IORESOURCE_MEM) |
#define DEFINE_RES_MEM(_start, _size) \ |
DEFINE_RES_MEM_NAMED((_start), (_size), NULL) |
|
#define DEFINE_RES_IRQ_NAMED(_irq, _name) \ |
DEFINE_RES_NAMED((_irq), 1, (_name), IORESOURCE_IRQ) |
#define DEFINE_RES_IRQ(_irq) \ |
DEFINE_RES_IRQ_NAMED((_irq), NULL) |
|
#define DEFINE_RES_DMA_NAMED(_dma, _name) \ |
DEFINE_RES_NAMED((_dma), 1, (_name), IORESOURCE_DMA) |
#define DEFINE_RES_DMA(_dma) \ |
DEFINE_RES_DMA_NAMED((_dma), NULL) |
|
/* PC/ISA/whatever - the normal PC address spaces: IO and memory */ |
extern struct resource ioport_resource; |
extern struct resource iomem_resource; |
|
extern struct resource *request_resource_conflict(struct resource *root, struct resource *new); |
extern int request_resource(struct resource *root, struct resource *new); |
extern int release_resource(struct resource *new); |
void release_child_resources(struct resource *new); |
extern void reserve_region_with_split(struct resource *root, |
resource_size_t start, resource_size_t end, |
const char *name); |
extern struct resource *insert_resource_conflict(struct resource *parent, struct resource *new); |
extern int insert_resource(struct resource *parent, struct resource *new); |
extern void insert_resource_expand_to_fit(struct resource *root, struct resource *new); |
extern void arch_remove_reservations(struct resource *avail); |
extern int allocate_resource(struct resource *root, struct resource *new, |
resource_size_t size, resource_size_t min, |
resource_size_t max, resource_size_t align, |
resource_size_t (*alignf)(void *, |
const struct resource *, |
resource_size_t, |
resource_size_t), |
void *alignf_data); |
struct resource *lookup_resource(struct resource *root, resource_size_t start); |
int adjust_resource(struct resource *res, resource_size_t start, |
resource_size_t size); |
resource_size_t resource_alignment(struct resource *res); |
static inline resource_size_t resource_size(const struct resource *res) |
{ |
return res->end - res->start + 1; |