Rev 6936 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6936 | Rev 7143 | ||
---|---|---|---|
Line 18... | Line 18... | ||
18 | struct resource { |
18 | struct resource { |
19 | resource_size_t start; |
19 | resource_size_t start; |
20 | resource_size_t end; |
20 | resource_size_t end; |
21 | const char *name; |
21 | const char *name; |
22 | unsigned long flags; |
22 | unsigned long flags; |
- | 23 | unsigned long desc; |
|
23 | struct resource *parent, *sibling, *child; |
24 | struct resource *parent, *sibling, *child; |
24 | }; |
25 | }; |
Line 25... | Line 26... | ||
25 | 26 | ||
26 | /* |
27 | /* |
Line 47... | Line 48... | ||
47 | 48 | ||
48 | #define IORESOURCE_MEM_64 0x00100000 |
49 | #define IORESOURCE_MEM_64 0x00100000 |
49 | #define IORESOURCE_WINDOW 0x00200000 /* forwarded by bridge */ |
50 | #define IORESOURCE_WINDOW 0x00200000 /* forwarded by bridge */ |
Line -... | Line 51... | ||
- | 51 | #define IORESOURCE_MUXED 0x00400000 /* Resource is software muxed */ |
|
- | 52 | ||
- | 53 | #define IORESOURCE_EXT_TYPE_BITS 0x01000000 /* Resource extended types */ |
|
50 | #define IORESOURCE_MUXED 0x00400000 /* Resource is software muxed */ |
54 | #define IORESOURCE_SYSRAM 0x01000000 /* System RAM (modifier) */ |
- | 55 | ||
51 | 56 | #define IORESOURCE_EXCLUSIVE 0x08000000 /* Userland may not map this resource */ |
|
52 | #define IORESOURCE_EXCLUSIVE 0x08000000 /* Userland may not map this resource */ |
57 | |
53 | #define IORESOURCE_DISABLED 0x10000000 |
58 | #define IORESOURCE_DISABLED 0x10000000 |
54 | #define IORESOURCE_UNSET 0x20000000 /* No address assigned yet */ |
59 | #define IORESOURCE_UNSET 0x20000000 /* No address assigned yet */ |
Line -... | Line 60... | ||
- | 60 | #define IORESOURCE_AUTO 0x40000000 |
|
- | 61 | #define IORESOURCE_BUSY 0x80000000 /* Driver has marked this resource busy */ |
|
- | 62 | ||
55 | #define IORESOURCE_AUTO 0x40000000 |
63 | /* I/O resource extended types */ |
56 | #define IORESOURCE_BUSY 0x80000000 /* Driver has marked this resource busy */ |
64 | #define IORESOURCE_SYSTEM_RAM (IORESOURCE_MEM|IORESOURCE_SYSRAM) |
57 | 65 | ||
58 | /* PnP IRQ specific bits (IORESOURCE_BITS) */ |
66 | /* PnP IRQ specific bits (IORESOURCE_BITS) */ |
59 | #define IORESOURCE_IRQ_HIGHEDGE (1<<0) |
67 | #define IORESOURCE_IRQ_HIGHEDGE (1<<0) |
Line 96... | Line 104... | ||
96 | #define IORESOURCE_IO_FIXED (1<<1) |
104 | #define IORESOURCE_IO_FIXED (1<<1) |
97 | #define IORESOURCE_IO_SPARSE (1<<2) |
105 | #define IORESOURCE_IO_SPARSE (1<<2) |
Line 98... | Line 106... | ||
98 | 106 | ||
99 | /* PCI ROM control bits (IORESOURCE_BITS) */ |
107 | /* PCI ROM control bits (IORESOURCE_BITS) */ |
100 | #define IORESOURCE_ROM_ENABLE (1<<0) /* ROM is enabled, same as PCI_ROM_ADDRESS_ENABLE */ |
108 | #define IORESOURCE_ROM_ENABLE (1<<0) /* ROM is enabled, same as PCI_ROM_ADDRESS_ENABLE */ |
101 | #define IORESOURCE_ROM_SHADOW (1<<1) /* ROM is copy at C000:0 */ |
- | |
102 | #define IORESOURCE_ROM_COPY (1<<2) /* ROM is alloc'd copy, resource field overlaid */ |
- | |
Line 103... | Line 109... | ||
103 | #define IORESOURCE_ROM_BIOS_COPY (1<<3) /* ROM is BIOS copy, resource field overlaid */ |
109 | #define IORESOURCE_ROM_SHADOW (1<<1) /* Use RAM image, not ROM BAR */ |
104 | 110 | ||
Line -... | Line 111... | ||
- | 111 | /* PCI control bits. Shares IORESOURCE_BITS with above PCI ROM. */ |
|
- | 112 | #define IORESOURCE_PCI_FIXED (1<<4) /* Do not move resource */ |
|
- | 113 | ||
- | 114 | /* |
|
- | 115 | * I/O Resource Descriptors |
|
- | 116 | * |
|
- | 117 | * Descriptors are used by walk_iomem_res_desc() and region_intersects() |
|
- | 118 | * for searching a specific resource range in the iomem table. Assign |
|
- | 119 | * a new descriptor when a resource range supports the search interfaces. |
|
- | 120 | * Otherwise, resource.desc must be set to IORES_DESC_NONE (0). |
|
- | 121 | */ |
|
- | 122 | enum { |
|
- | 123 | IORES_DESC_NONE = 0, |
|
- | 124 | IORES_DESC_CRASH_KERNEL = 1, |
|
- | 125 | IORES_DESC_ACPI_TABLES = 2, |
|
- | 126 | IORES_DESC_ACPI_NV_STORAGE = 3, |
|
Line 105... | Line 127... | ||
105 | /* PCI control bits. Shares IORESOURCE_BITS with above PCI ROM. */ |
127 | IORES_DESC_PERSISTENT_MEMORY = 4, |
106 | #define IORESOURCE_PCI_FIXED (1<<4) /* Do not move resource */ |
128 | IORES_DESC_PERSISTENT_MEMORY_LEGACY = 5, |
107 | 129 | }; |
|
108 | 130 | ||
109 | /* helpers to define resources */ |
131 | /* helpers to define resources */ |
110 | #define DEFINE_RES_NAMED(_start, _size, _name, _flags) \ |
132 | #define DEFINE_RES_NAMED(_start, _size, _name, _flags) \ |
111 | { \ |
133 | { \ |
- | 134 | .start = (_start), \ |
|
112 | .start = (_start), \ |
135 | .end = (_start) + (_size) - 1, \ |
Line 113... | Line 136... | ||
113 | .end = (_start) + (_size) - 1, \ |
136 | .name = (_name), \ |
114 | .name = (_name), \ |
137 | .flags = (_flags), \ |
115 | .flags = (_flags), \ |
138 | .desc = IORES_DESC_NONE, \ |
Line 147... | Line 170... | ||
147 | resource_size_t start, resource_size_t end, |
170 | resource_size_t start, resource_size_t end, |
148 | const char *name); |
171 | const char *name); |
149 | extern struct resource *insert_resource_conflict(struct resource *parent, struct resource *new); |
172 | extern struct resource *insert_resource_conflict(struct resource *parent, struct resource *new); |
150 | extern int insert_resource(struct resource *parent, struct resource *new); |
173 | extern int insert_resource(struct resource *parent, struct resource *new); |
151 | extern void insert_resource_expand_to_fit(struct resource *root, struct resource *new); |
174 | extern void insert_resource_expand_to_fit(struct resource *root, struct resource *new); |
- | 175 | extern int remove_resource(struct resource *old); |
|
152 | extern void arch_remove_reservations(struct resource *avail); |
176 | extern void arch_remove_reservations(struct resource *avail); |
153 | extern int allocate_resource(struct resource *root, struct resource *new, |
177 | extern int allocate_resource(struct resource *root, struct resource *new, |
154 | resource_size_t size, resource_size_t min, |
178 | resource_size_t size, resource_size_t min, |
155 | resource_size_t max, resource_size_t align, |
179 | resource_size_t max, resource_size_t align, |
156 | resource_size_t (*alignf)(void *, |
180 | resource_size_t (*alignf)(void *, |
Line 168... | Line 192... | ||
168 | } |
192 | } |
169 | static inline unsigned long resource_type(const struct resource *res) |
193 | static inline unsigned long resource_type(const struct resource *res) |
170 | { |
194 | { |
171 | return res->flags & IORESOURCE_TYPE_BITS; |
195 | return res->flags & IORESOURCE_TYPE_BITS; |
172 | } |
196 | } |
- | 197 | static inline unsigned long resource_ext_type(const struct resource *res) |
|
- | 198 | { |
|
- | 199 | return res->flags & IORESOURCE_EXT_TYPE_BITS; |
|
- | 200 | } |
|
173 | /* True iff r1 completely contains r2 */ |
201 | /* True iff r1 completely contains r2 */ |
174 | static inline bool resource_contains(struct resource *r1, struct resource *r2) |
202 | static inline bool resource_contains(struct resource *r1, struct resource *r2) |
175 | { |
203 | { |
176 | if (resource_type(r1) != resource_type(r2)) |
204 | if (resource_type(r1) != resource_type(r2)) |
177 | return false; |
205 | return false; |