hc
2024-05-10 cde9070d9970eef1f7ec2360586c802a16230ad8
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
/*
 * NVRAM variable manipulation
 *
 * Copyright (C) 2020, Broadcom.
 *
 *      Unless you and Broadcom execute a separate written software license
 * agreement governing use of this software, this software is licensed to you
 * under the terms of the GNU General Public License version 2 (the "GPL"),
 * available at http://www.broadcom.com/licenses/GPLv2.php, with the
 * following added to such license:
 *
 *      As a special exception, the copyright holders of this software give you
 * permission to link this software with independent modules, and to copy and
 * distribute the resulting executable under terms of your choice, provided that
 * you also meet, for each linked independent module, the terms and conditions of
 * the license of that module.  An independent module is a module which is not
 * derived from this software.  The special exception does not apply to any
 * modifications of the software.
 *
 *
 * <<Broadcom-WL-IPTag/Dual:>>
 */
 
#ifndef _bcmnvram_h_
#define _bcmnvram_h_
 
#ifndef _LANGUAGE_ASSEMBLY
 
#include <typedefs.h>
 
struct nvram_header {
   uint32 magic;
   uint32 len;
   uint32 crc_ver_init;    /* 0:7 crc, 8:15 ver, 16:31 sdram_init */
   uint32 config_refresh;    /* 0:15 sdram_config, 16:31 sdram_refresh */
   uint32 config_ncdl;    /* ncdl values for memc */
};
 
struct nvram_tuple {
   char *name;
   char *value;
   struct nvram_tuple *next;
};
 
#ifdef BCMDRIVER
#include <siutils.h>
 
/*
 * Initialize NVRAM access. May be unnecessary or undefined on certain
 * platforms.
 */
extern int nvram_init(si_t *sih);
 
extern int nvram_file_read(char **nvramp, int *nvraml);
 
/*
 * Append a chunk of nvram variables to the global list
 */
extern int nvram_append(void *si, char *vars, uint varsz, uint16 prio);
 
/*
 * Check for reset button press for restoring factory defaults.
 */
extern int nvram_reset(si_t *sih);
 
/*
 * Disable NVRAM access. May be unnecessary or undefined on certain
 * platforms.
 */
extern void nvram_exit(si_t *sih);
 
/*
 * Get the value of an NVRAM variable. The pointer returned may be
 * invalid after a set.
 * @param    name    name of variable to get
 * @return    value of variable or NULL if undefined
 */
extern char * nvram_get(const char *name);
 
/*
 * Get the value of an NVRAM variable.
 * @param    name    name of variable to get
 * @return    value of variable or NUL if undefined
 */
static INLINE char *
nvram_safe_get(const char *name)
{
   char *p = nvram_get(name);
   return p ? p : "";
}
 
/*
 * Set the value of an NVRAM variable. The name and value strings are
 * copied into private storage. Pointers to previously set values
 * may become invalid. The new value may be immediately
 * retrieved but will not be permanently stored until a commit.
 * @param    name    name of variable to set
 * @param    value    value of variable
 * @return    0 on success and errno on failure
 */
extern int nvram_set(const char *name, const char *value);
 
/*
 * Unset an NVRAM variable. Pointers to previously set values
 * remain valid until a set.
 * @param    name    name of variable to unset
 * @return    0 on success and errno on failure
 * NOTE: use nvram_commit to commit this change to flash.
 */
extern int nvram_unset(const char *name);
 
/*
 * Commit NVRAM variables to permanent storage. All pointers to values
 * may be invalid after a commit.
 * NVRAM values are undefined after a commit.
 * @return    0 on success and errno on failure
 */
extern int nvram_commit(void);
 
/*
 * Get all NVRAM variables (format name=value\0 ... \0\0).
 * @param    buf    buffer to store variables
 * @param    count    size of buffer in bytes
 * @return    0 on success and errno on failure
 */
extern int nvram_getall(char *nvram_buf, int count);
 
/*
 * returns the crc value of the nvram
 * @param    nvh    nvram header pointer
 */
uint8 nvram_calc_crc(struct nvram_header * nvh);
 
extern void nvram_printall(void);
 
#endif /* BCMDRIVER */
#endif /* _LANGUAGE_ASSEMBLY */
 
#define NVRAM_MAGIC        0x48534C46    /* 'FLSH' */
#define NVRAM_VERSION        1
#define NVRAM_HEADER_SIZE    20
/* This definition is for precommit staging, and will be removed */
#define NVRAM_SPACE        0x8000
#define MAX_NVRAM_SPACE        0x10000
#define DEF_NVRAM_SPACE        0x8000
#define NVRAM_LZMA_MAGIC    0x4c5a4d41    /* 'LZMA' */
 
#define NVRAM_MAX_VALUE_LEN 255
#define NVRAM_MAX_PARAM_LEN 64
 
#define NVRAM_CRC_START_POSITION    9 /* magic, len, crc8 to be skipped */
#define NVRAM_CRC_VER_MASK    0xffffff00 /* for crc_ver_init */
 
#define BCM_JUMBO_NVRAM_DELIMIT '\n'
#define BCM_JUMBO_START "Broadcom Jumbo Nvram file"
 
#if defined(BCMSDIODEV) || defined(BCMHOSTVARS)
extern char *_vars;
extern uint _varsz;
#endif
 
#endif /* _bcmnvram_h_ */