xref: /aosp_15_r20/external/coreboot/src/lib/boot_device.c (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <boot_device.h>
4 
boot_device_init(void)5 void __weak boot_device_init(void)
6 {
7 	/* Provide weak do-nothing init. */
8 }
9 
boot_device_wp_region(const struct region_device * rd,const enum bootdev_prot_type type)10 int __weak boot_device_wp_region(const struct region_device *rd,
11 				 const enum bootdev_prot_type type)
12 {
13 	/* return a failure, make aware WP is not implemented */
14 	return -1;
15 }
16 
boot_device_subregion(const struct region * sub,struct region_device * subrd,const struct region_device * parent)17 static int boot_device_subregion(const struct region *sub,
18 				struct region_device *subrd,
19 				const struct region_device *parent)
20 {
21 	if (parent == NULL)
22 		return -1;
23 
24 	return rdev_chain(subrd, parent, region_offset(sub), region_sz(sub));
25 }
26 
boot_device_ro_subregion(const struct region * sub,struct region_device * subrd)27 int boot_device_ro_subregion(const struct region *sub,
28 				struct region_device *subrd)
29 {
30 	/* Ensure boot device has been initialized at least once. */
31 	boot_device_init();
32 
33 	return boot_device_subregion(sub, subrd, boot_device_ro());
34 }
35 
boot_device_rw_subregion(const struct region * sub,struct region_device * subrd)36 int boot_device_rw_subregion(const struct region *sub,
37 				struct region_device *subrd)
38 {
39 	/* Ensure boot device has been initialized at least once. */
40 	boot_device_init();
41 
42 	return boot_device_subregion(sub, subrd, boot_device_rw());
43 }
44