Subversion Repositories Kolibri OS

Rev

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;