coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
resource_allocator_common.c
Go to the documentation of this file.
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
3
#include <
device/device.h
>
4
5
struct
pick_largest_state
{
6
struct
resource
*
last
;
7
const
struct
device
*
result_dev
;
8
struct
resource
*
result
;
9
int
seen_last
;
10
};
11
12
static
void
pick_largest_resource
(
void
*gp,
struct
device
*dev,
13
struct
resource
*
resource
)
14
{
15
struct
pick_largest_state
*
state
= gp;
16
struct
resource
*last;
17
18
last =
state
->last;
19
20
/* Be certain to pick the successor to last. */
21
if
(
resource
== last) {
22
state
->seen_last = 1;
23
return
;
24
}
25
if
(
resource
->
flags
&
IORESOURCE_FIXED
)
26
return
;
/* Skip it. */
27
if
(last && ((last->
align
<
resource
->
align
) ||
28
((last->
align
==
resource
->
align
) &&
29
(last->
size
<
resource
->
size
)) ||
30
((last->
align
==
resource
->
align
) &&
31
(last->
size
==
resource
->
size
) && (!
state
->seen_last)))) {
32
return
;
33
}
34
if
(!
state
->result ||
35
(
state
->result->align <
resource
->
align
) ||
36
((
state
->result->align ==
resource
->
align
) &&
37
(
state
->result->size <
resource
->
size
))) {
38
state
->result_dev = dev;
39
state
->result =
resource
;
40
}
41
}
42
43
const
struct
device
*
largest_resource
(
struct
bus
*
bus
,
44
struct
resource
**result_res,
45
unsigned
long
type_mask,
46
unsigned
long
type
)
47
{
48
struct
pick_largest_state
state
;
49
50
state
.
last
= *result_res;
51
state
.result_dev =
NULL
;
52
state
.result =
NULL
;
53
state
.seen_last = 0;
54
55
search_bus_resources
(
bus
, type_mask,
type
,
pick_largest_resource
,
56
&
state
);
57
58
*result_res =
state
.result;
59
return
state
.result_dev;
60
}
search_bus_resources
void search_bus_resources(struct bus *bus, unsigned long type_mask, unsigned long type, resource_search_t search, void *gp)
Definition:
device_util.c:531
device.h
type
unsigned int type
Definition:
edid.c:57
state
state
Definition:
raminit.c:1787
IORESOURCE_FIXED
#define IORESOURCE_FIXED
Definition:
resource.h:36
pick_largest_resource
static void pick_largest_resource(void *gp, struct device *dev, struct resource *resource)
Definition:
resource_allocator_common.c:12
largest_resource
const struct device * largest_resource(struct bus *bus, struct resource **result_res, unsigned long type_mask, unsigned long type)
Definition:
resource_allocator_common.c:43
NULL
#define NULL
Definition:
stddef.h:19
bus
Definition:
device.h:76
device
Definition:
device.h:107
pick_largest_state
Definition:
resource_allocator_common.c:5
pick_largest_state::seen_last
int seen_last
Definition:
resource_allocator_common.c:9
pick_largest_state::last
struct resource * last
Definition:
resource_allocator_common.c:6
pick_largest_state::result
struct resource * result
Definition:
resource_allocator_common.c:8
pick_largest_state::result_dev
const struct device * result_dev
Definition:
resource_allocator_common.c:7
resource
Definition:
resource.h:44
resource::flags
unsigned long flags
Definition:
resource.h:49
resource::align
unsigned char align
Definition:
resource.h:51
resource::size
resource_t size
Definition:
resource.h:46
src
device
resource_allocator_common.c
Generated by
1.9.1