2 * NVRAM variable manipulation
4 * Copyright 2007, Broadcom Corporation
5 * Copyright 2009, OpenWrt.org
8 * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
9 * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
10 * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
11 * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
27 #include <linux/limits.h>
29 #include "sdinitvals.h"
35 uint32_t crc_ver_init
; /* 0:7 crc, 8:15 ver, 16:31 sdram_init */
36 uint32_t config_refresh
; /* 0:15 sdram_config, 16:31 sdram_refresh */
37 uint32_t config_ncdl
; /* ncdl values for memc */
38 } __attribute__((__packed__
));
43 struct nvram_tuple
*next
;
50 struct nvram_tuple
*nvram_hash
[257];
51 struct nvram_tuple
*nvram_dead
;
54 typedef struct nvram_handle nvram_handle_t
;
55 typedef struct nvram_header nvram_header_t
;
56 typedef struct nvram_tuple nvram_tuple_t
;
59 /* Get nvram header. */
60 nvram_header_t
* nvram_header(nvram_handle_t
*h
);
62 /* Set the value of an NVRAM variable */
63 int nvram_set(nvram_handle_t
*h
, const char *name
, const char *value
);
65 /* Get the value of an NVRAM variable. */
66 char * nvram_get(nvram_handle_t
*h
, const char *name
);
68 /* Unset the value of an NVRAM variable. */
69 int nvram_unset(nvram_handle_t
*h
, const char *name
);
71 /* Get all NVRAM variables. */
72 nvram_tuple_t
* nvram_getall(nvram_handle_t
*h
);
74 /* Regenerate NVRAM. */
75 int nvram_commit(nvram_handle_t
*h
);
77 /* Open NVRAM and obtain a handle. */
78 nvram_handle_t
* nvram_open(const char *file
, int rdonly
);
80 /* Close NVRAM and free memory. */
81 int nvram_close(nvram_handle_t
*h
);
83 /* Get the value of an NVRAM variable in a safe way, use "" instead of NULL. */
84 #define nvram_safe_get(h, name) (nvram_get(h, name) ? : "")
86 /* Computes a crc8 over the input data. */
87 uint8_t hndcrc8 (uint8_t * pdata
, uint32_t nbytes
, uint8_t crc
);
89 /* Returns the crc value of the nvram. */
90 uint8_t nvram_calc_crc(nvram_header_t
* nvh
);
92 /* Determine NVRAM device node. */
93 char * nvram_find_mtd(void);
95 /* Copy NVRAM contents to staging file. */
96 int nvram_to_staging(void);
98 /* Copy staging file to NVRAM device. */
99 int staging_to_nvram(void);
101 /* Check NVRAM staging file. */
102 char * nvram_find_staging(void);
105 /* Staging file for NVRAM */
106 #define NVRAM_STAGING "/tmp/.nvram"
111 #define NVRAM_ARRAYSIZE(a) sizeof(a)/sizeof(a[0])
112 #define NVRAM_ROUNDUP(x, y) ((((x)+((y)-1))/(y))*(y))
114 /* NVRAM constants */
115 #define NVRAM_SPACE 0x8000
116 #define NVRAM_START(x) x - NVRAM_SPACE
117 #define NVRAM_MAGIC 0x48534C46 /* 'FLSH' */
118 #define NVRAM_VERSION 1
120 #define NVRAM_CRC_START_POSITION 9 /* magic, len, crc8 to be skipped */
123 #endif /* _nvram_h_ */