| /* SPDX-License-Identifier: GPL-2.0-only */ |
| /* This file is part of the coreboot project. */ |
| |
| #ifndef _BOOT_DEVICE_H_ |
| #define _BOOT_DEVICE_H_ |
| |
| #include <commonlib/region.h> |
| |
| /* |
| * Boot device region can be protected by 2 sources, media and controller. |
| * The following modes are identified. It depends on the flash chip and the |
| * controller if mode is actually supported. |
| * |
| * MEDIA_WP : Flash/Boot device enforces write protect |
| * CTRLR_WP : Controller device enforces write protect |
| * CTRLR_RP : Controller device enforces read protect |
| * CTRLR_RWP : Controller device enforces read-write protect |
| */ |
| enum bootdev_prot_type { |
| CTRLR_WP = 1, |
| CTRLR_RP = 2, |
| CTRLR_RWP = 3, |
| MEDIA_WP = 4, |
| }; |
| /* |
| * Please note that the read-only boot device may not be coherent with |
| * the read-write boot device. Thus, mixing mmap() and writeat() is |
| * most likely not to work so don't rely on such semantics. |
| */ |
| |
| /* Return the region_device for the read-only boot device. */ |
| const struct region_device *boot_device_ro(void); |
| |
| /* Return the region_device for the read-write boot device. */ |
| const struct region_device *boot_device_rw(void); |
| |
| /* |
| * Create a sub-region of the read-only boot device. |
| * Returns 0 on success, < 0 on error. |
| */ |
| int boot_device_ro_subregion(const struct region *sub, |
| struct region_device *subrd); |
| |
| /* |
| * Create a sub-region of the read-write boot device. |
| * Returns 0 on success, < 0 on error. |
| */ |
| int boot_device_rw_subregion(const struct region *sub, |
| struct region_device *subrd); |
| |
| /* |
| * Write protect a sub-region of the boot device represented |
| * by the region device. |
| * Returns 0 on success, < 0 on error. |
| */ |
| int boot_device_wp_region(const struct region_device *rd, |
| const enum bootdev_prot_type type); |
| |
| /* |
| * Initialize the boot device. This may be called multiple times within |
| * a stage so boot device implementations should account for this behavior. |
| **/ |
| void boot_device_init(void); |
| |
| #endif /* _BOOT_DEVICE_H_ */ |