20,6 → 20,7 |
resource_size_t end; |
const char *name; |
unsigned long flags; |
unsigned long desc; |
struct resource *parent, *sibling, *child; |
}; |
|
49,12 → 50,19 |
#define IORESOURCE_WINDOW 0x00200000 /* forwarded by bridge */ |
#define IORESOURCE_MUXED 0x00400000 /* Resource is software muxed */ |
|
#define IORESOURCE_EXT_TYPE_BITS 0x01000000 /* Resource extended types */ |
#define IORESOURCE_SYSRAM 0x01000000 /* System RAM (modifier) */ |
|
#define IORESOURCE_EXCLUSIVE 0x08000000 /* Userland may not map this resource */ |
|
#define IORESOURCE_DISABLED 0x10000000 |
#define IORESOURCE_UNSET 0x20000000 /* No address assigned yet */ |
#define IORESOURCE_AUTO 0x40000000 |
#define IORESOURCE_BUSY 0x80000000 /* Driver has marked this resource busy */ |
|
/* I/O resource extended types */ |
#define IORESOURCE_SYSTEM_RAM (IORESOURCE_MEM|IORESOURCE_SYSRAM) |
|
/* PnP IRQ specific bits (IORESOURCE_BITS) */ |
#define IORESOURCE_IRQ_HIGHEDGE (1<<0) |
#define IORESOURCE_IRQ_LOWEDGE (1<<1) |
98,13 → 106,27 |
|
/* PCI ROM control bits (IORESOURCE_BITS) */ |
#define IORESOURCE_ROM_ENABLE (1<<0) /* ROM is enabled, same as PCI_ROM_ADDRESS_ENABLE */ |
#define IORESOURCE_ROM_SHADOW (1<<1) /* ROM is copy at C000:0 */ |
#define IORESOURCE_ROM_COPY (1<<2) /* ROM is alloc'd copy, resource field overlaid */ |
#define IORESOURCE_ROM_BIOS_COPY (1<<3) /* ROM is BIOS copy, resource field overlaid */ |
#define IORESOURCE_ROM_SHADOW (1<<1) /* Use RAM image, not ROM BAR */ |
|
/* PCI control bits. Shares IORESOURCE_BITS with above PCI ROM. */ |
#define IORESOURCE_PCI_FIXED (1<<4) /* Do not move resource */ |
|
/* |
* I/O Resource Descriptors |
* |
* Descriptors are used by walk_iomem_res_desc() and region_intersects() |
* for searching a specific resource range in the iomem table. Assign |
* a new descriptor when a resource range supports the search interfaces. |
* Otherwise, resource.desc must be set to IORES_DESC_NONE (0). |
*/ |
enum { |
IORES_DESC_NONE = 0, |
IORES_DESC_CRASH_KERNEL = 1, |
IORES_DESC_ACPI_TABLES = 2, |
IORES_DESC_ACPI_NV_STORAGE = 3, |
IORES_DESC_PERSISTENT_MEMORY = 4, |
IORES_DESC_PERSISTENT_MEMORY_LEGACY = 5, |
}; |
|
/* helpers to define resources */ |
#define DEFINE_RES_NAMED(_start, _size, _name, _flags) \ |
113,6 → 135,7 |
.end = (_start) + (_size) - 1, \ |
.name = (_name), \ |
.flags = (_flags), \ |
.desc = IORES_DESC_NONE, \ |
} |
|
#define DEFINE_RES_IO_NAMED(_start, _size, _name) \ |
149,6 → 172,7 |
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 int remove_resource(struct resource *old); |
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, |
170,6 → 194,10 |
{ |
return res->flags & IORESOURCE_TYPE_BITS; |
} |
static inline unsigned long resource_ext_type(const struct resource *res) |
{ |
return res->flags & IORESOURCE_EXT_TYPE_BITS; |
} |
/* True iff r1 completely contains r2 */ |
static inline bool resource_contains(struct resource *r1, struct resource *r2) |
{ |