-
Notifications
You must be signed in to change notification settings - Fork 2k
/
slot.h
121 lines (104 loc) · 2.47 KB
/
slot.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/*
* Copyright (C) 2018 Kaspar Schleiser <kaspar@schleiser.de>
* 2018 Inria
* 2018 Freie Universität Berlin
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @defgroup sys_riotboot_slot Helpers to manipulate partitions (slots) on internal flash
* @ingroup sys
* @{
*
* @file
* @brief Slot management tools
*
* @author Kaspar Schleiser <kaspar@schleiser.de>
* @author Francisco Acosta <francisco.acosta@inria.fr>
*
* @}
*/
#ifndef RIOTBOOT_SLOT_H
#define RIOTBOOT_SLOT_H
#ifdef __cplusplus
extern "C" {
#endif
#include "riotboot/hdr.h"
/**
* @brief Get currently running image slot
*
* @returns nr of currently active slot
*/
int riotboot_slot_current(void);
/**
* @brief Get currently not running image slot
*
* @returns nr of currently inactive slot
*/
int riotboot_slot_other(void);
/**
* @brief Get jump-to address of image slot
*
* @param[in] slot slot nr to work on
*
* @returns address of first byte of @p slot
*/
uint32_t riotboot_slot_get_image_startaddr(unsigned slot);
/**
* @brief Boot into image in slot @p slot
*
* @param[in] slot slot nr to jump to
*/
void riotboot_slot_jump(unsigned slot);
/**
* @brief Get header from a given flash slot
*
* @param[in] slot slot nr to work on
*
* @returns header of image slot nr @p slot
*/
const riotboot_hdr_t *riotboot_slot_get_hdr(unsigned slot);
/**
* @brief Validate slot
*
* @param[in] slot slot nr to work on
*
* @returns 0 if ok.
*/
static inline int riotboot_slot_validate(unsigned slot)
{
return riotboot_hdr_validate(riotboot_slot_get_hdr(slot));
}
/**
* @brief Print formatted slot header to STDIO
*
* @param[in] slot slot nr to work on
*
*/
static inline void riotboot_slot_print_hdr(unsigned slot)
{
riotboot_hdr_print(riotboot_slot_get_hdr(slot));
}
/**
* @brief Get the offset (in flash, in bytes) for a given slot.
*/
size_t riotboot_slot_offset(unsigned slot);
/**
* @brief Dump the addresses of all configured slots
*
*/
void riotboot_slot_dump_addrs(void);
/**
* @brief Number of configured firmware slots (incl. bootloader slot)
*/
extern const unsigned riotboot_slot_numof;
/**
* @brief Storage for header pointers of the configured slots
*/
extern const riotboot_hdr_t * const riotboot_slots[];
#ifdef __cplusplus
}
#endif
#endif /* RIOTBOOT_SLOT_H */