7#ifndef _HARDWARE_BOOT_LOCK_H
8#define _HARDWARE_BOOT_LOCK_H
17#ifndef PARAM_ASSERTIONS_ENABLED_HARDWARE_BOOT_LOCK
18#define PARAM_ASSERTIONS_ENABLED_HARDWARE_BOOT_LOCK 0
23#include "hardware/structs/bootram.h"
28typedef volatile uint32_t boot_lock_t;
36__force_inline static boot_lock_t *boot_lock_instance(uint lock_num) {
37 invalid_params_if(HARDWARE_BOOT_LOCK, lock_num >= NUM_BOOT_LOCKS);
38 return (boot_lock_t *) (BOOTRAM_BASE + BOOTRAM_BOOTLOCK0_OFFSET + lock_num * 4);
48 invalid_params_if(HARDWARE_BOOT_LOCK, (uint) lock < BOOTRAM_BASE + BOOTRAM_BOOTLOCK0_OFFSET ||
49 (uint) lock >= NUM_BOOT_LOCKS *
sizeof(boot_lock_t) + BOOTRAM_BASE + BOOTRAM_BOOTLOCK0_OFFSET ||
50 ((uint) lock - BOOTRAM_BASE + BOOTRAM_BOOTLOCK0_OFFSET) %
sizeof(boot_lock_t) != 0);
51 return (uint) (lock - (boot_lock_t *) (BOOTRAM_BASE + BOOTRAM_BOOTLOCK0_OFFSET));
59__force_inline static void boot_lock_unsafe_blocking(boot_lock_t *lock) {
63 while (__builtin_expect(!*lock, 0)) {
74__force_inline static bool boot_try_lock_unsafe(boot_lock_t *lock) {
100__force_inline static uint32_t boot_lock_blocking(boot_lock_t *lock) {
102 boot_lock_unsafe_blocking(lock);
111inline static bool is_boot_locked(boot_lock_t *lock) {
112 check_hw_size(boot_lock_t, 4);
113 uint lock_num = boot_lock_get_num(lock);
114 return 0 != (*(io_ro_32 *) (BOOTRAM_BASE + BOOTRAM_BOOTLOCK_STAT_OFFSET) & (1u << lock_num));
127__force_inline static void boot_unlock(boot_lock_t *lock, uint32_t saved_irq) {
128 boot_unlock_unsafe(lock);
140boot_lock_t *boot_lock_init(uint lock_num);
145void boot_locks_reset(
void);
static __force_inline uint32_t save_and_disable_interrupts(void)
Disable interrupts on the calling core, returning the previous interrupt state.
Definition sync.h:237
static __force_inline void __mem_fence_release(void)
Release a memory fence.
Definition sync.h:189
static __force_inline void restore_interrupts_from_disabled(uint32_t status)
Restore interrupts to a specified state on the calling core with restricted transitions.
Definition sync.h:280
static __force_inline void __mem_fence_acquire(void)
Acquire a memory fence.
Definition sync.h:173