Zephyr API Documentation 4.2.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
zms_priv.h
Go to the documentation of this file.
1/* Copyright (c) 2018 Laczen
2 * Copyright (c) 2024 BayLibre SAS
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * ZMS: Zephyr Memory Storage
7 */
8
9#ifndef __ZMS_PRIV_H_
10#define __ZMS_PRIV_H_
11
12/*
13 * MASKS AND SHIFT FOR ADDRESSES.
14 * An address in zms is an uint64_t where:
15 * - high 4 bytes represent the sector number
16 * - low 4 bytes represent the offset in a sector
17 */
18#define ADDR_SECT_MASK GENMASK64(63, 32)
19#define ADDR_SECT_SHIFT 32
20#define ADDR_OFFS_MASK GENMASK64(31, 0)
21#define SECTOR_NUM(x) FIELD_GET(ADDR_SECT_MASK, x)
22#define SECTOR_OFFSET(x) FIELD_GET(ADDR_OFFS_MASK, x)
23
24#if defined(CONFIG_ZMS_CUSTOMIZE_BLOCK_SIZE)
25#define ZMS_BLOCK_SIZE CONFIG_ZMS_CUSTOM_BLOCK_SIZE
26#else
27#define ZMS_BLOCK_SIZE 32
28#endif
29
30#define ZMS_LOOKUP_CACHE_NO_ADDR GENMASK64(63, 0)
31
32#define ZMS_VERSION_MASK GENMASK(7, 0)
33#define ZMS_GET_VERSION(x) FIELD_GET(ZMS_VERSION_MASK, x)
34#define ZMS_DEFAULT_VERSION 1
35#define ZMS_MAGIC_NUMBER 0x42 /* murmur3a hash of "ZMS" (MSB) */
36#define ZMS_MAGIC_NUMBER_MASK GENMASK(15, 8)
37#define ZMS_GET_MAGIC_NUMBER(x) FIELD_GET(ZMS_MAGIC_NUMBER_MASK, x)
38#define ZMS_ATE_FORMAT_MASK GENMASK(19, 16)
39#define ZMS_GET_ATE_FORMAT(x) FIELD_GET(ZMS_ATE_FORMAT_MASK, x)
40#define ZMS_MIN_ATE_NUM 5
41
42#define ZMS_INVALID_SECTOR_NUM -1
43
44#define ZMS_ATE_FORMAT_ID_32BIT 0
45#define ZMS_ATE_FORMAT_ID_64BIT 1
46
47#if !defined(CONFIG_ZMS_ID_64BIT)
48#define ZMS_DEFAULT_ATE_FORMAT ZMS_ATE_FORMAT_ID_32BIT
49#define ZMS_HEAD_ID GENMASK(31, 0)
50#else
51#define ZMS_DEFAULT_ATE_FORMAT ZMS_ATE_FORMAT_ID_64BIT
52#define ZMS_HEAD_ID GENMASK64(63, 0)
53#endif /* CONFIG_ZMS_ID_64BIT */
54
61struct zms_ate {
68
69#if ZMS_DEFAULT_ATE_FORMAT == ZMS_ATE_FORMAT_ID_32BIT
72 union {
75 struct {
78 union {
90 };
91 };
92 };
93
94#elif ZMS_DEFAULT_ATE_FORMAT == ZMS_ATE_FORMAT_ID_64BIT
97 union {
99 uint8_t data[4];
104 };
105#endif /* ZMS_DEFAULT_ATE_FORMAT */
106
107} __packed;
108
109#define ZMS_DATA_IN_ATE_SIZE SIZEOF_FIELD(struct zms_ate, data)
110
111#endif /* __ZMS_PRIV_H_ */
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT64_TYPE__ uint64_t
Definition stdint.h:91
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
ZMS Allocation Table Entry (ATE) structure.
Definition zms_priv.h:61
uint32_t metadata
Used to store metadata information such as storage version.
Definition zms_priv.h:89
uint8_t data[8]
data field used to store small sized data
Definition zms_priv.h:74
uint32_t offset
data offset within sector
Definition zms_priv.h:77
uint32_t data_crc
crc for data: The data CRC is checked only when the whole data of the element is read.
Definition zms_priv.h:85
uint8_t cycle_cnt
cycle counter for non erasable devices
Definition zms_priv.h:65
uint16_t len
data len within sector
Definition zms_priv.h:67
uint8_t crc8
crc8 check of the entry
Definition zms_priv.h:63
uint32_t id
data id
Definition zms_priv.h:71