OpenWrt – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | /* |
2 | * NVRAM variable manipulation |
||
3 | * |
||
4 | * Copyright 2007, Broadcom Corporation |
||
5 | * Copyright 2009, OpenWrt.org |
||
6 | * All Rights Reserved. |
||
7 | * |
||
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. |
||
12 | * |
||
13 | */ |
||
14 | |||
15 | #ifndef _nvram_h_ |
||
16 | #define _nvram_h_ |
||
17 | |||
18 | #include <stdint.h> |
||
19 | #include <string.h> |
||
20 | #include <stdio.h> |
||
21 | #include <stdlib.h> |
||
22 | #include <fcntl.h> |
||
23 | #include <unistd.h> |
||
24 | #include <errno.h> |
||
25 | #include <sys/mman.h> |
||
26 | #include <sys/stat.h> |
||
27 | #include <linux/limits.h> |
||
28 | |||
29 | #include "sdinitvals.h" |
||
30 | |||
31 | |||
32 | struct nvram_header { |
||
33 | uint32_t magic; |
||
34 | uint32_t len; |
||
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__)); |
||
39 | |||
40 | struct nvram_tuple { |
||
41 | char *name; |
||
42 | char *value; |
||
43 | struct nvram_tuple *next; |
||
44 | }; |
||
45 | |||
46 | struct nvram_handle { |
||
47 | int fd; |
||
48 | char *mmap; |
||
49 | unsigned int length; |
||
50 | unsigned int offset; |
||
51 | struct nvram_tuple *nvram_hash[257]; |
||
52 | struct nvram_tuple *nvram_dead; |
||
53 | }; |
||
54 | |||
55 | typedef struct nvram_handle nvram_handle_t; |
||
56 | typedef struct nvram_header nvram_header_t; |
||
57 | typedef struct nvram_tuple nvram_tuple_t; |
||
58 | |||
59 | |||
60 | /* Get nvram header. */ |
||
61 | nvram_header_t * nvram_header(nvram_handle_t *h); |
||
62 | |||
63 | /* Set the value of an NVRAM variable */ |
||
64 | int nvram_set(nvram_handle_t *h, const char *name, const char *value); |
||
65 | |||
66 | /* Get the value of an NVRAM variable. */ |
||
67 | char * nvram_get(nvram_handle_t *h, const char *name); |
||
68 | |||
69 | /* Unset the value of an NVRAM variable. */ |
||
70 | int nvram_unset(nvram_handle_t *h, const char *name); |
||
71 | |||
72 | /* Get all NVRAM variables. */ |
||
73 | nvram_tuple_t * nvram_getall(nvram_handle_t *h); |
||
74 | |||
75 | /* Regenerate NVRAM. */ |
||
76 | int nvram_commit(nvram_handle_t *h); |
||
77 | |||
78 | /* Open NVRAM and obtain a handle. */ |
||
79 | nvram_handle_t * nvram_open(const char *file, int rdonly); |
||
80 | |||
81 | /* Close NVRAM and free memory. */ |
||
82 | int nvram_close(nvram_handle_t *h); |
||
83 | |||
84 | /* Get the value of an NVRAM variable in a safe way, use "" instead of NULL. */ |
||
85 | #define nvram_safe_get(h, name) (nvram_get(h, name) ? : "") |
||
86 | |||
87 | /* Computes a crc8 over the input data. */ |
||
88 | uint8_t hndcrc8 (uint8_t * pdata, uint32_t nbytes, uint8_t crc); |
||
89 | |||
90 | /* Returns the crc value of the nvram. */ |
||
91 | uint8_t nvram_calc_crc(nvram_header_t * nvh); |
||
92 | |||
93 | /* Determine NVRAM device node. */ |
||
94 | char * nvram_find_mtd(void); |
||
95 | |||
96 | /* Copy NVRAM contents to staging file. */ |
||
97 | int nvram_to_staging(void); |
||
98 | |||
99 | /* Copy staging file to NVRAM device. */ |
||
100 | int staging_to_nvram(void); |
||
101 | |||
102 | /* Check NVRAM staging file. */ |
||
103 | char * nvram_find_staging(void); |
||
104 | |||
105 | |||
106 | /* Staging file for NVRAM */ |
||
107 | #define NVRAM_STAGING "/tmp/.nvram" |
||
108 | #define NVRAM_RO 1 |
||
109 | #define NVRAM_RW 0 |
||
110 | |||
111 | /* Helper macros */ |
||
112 | #define NVRAM_ARRAYSIZE(a) sizeof(a)/sizeof(a[0]) |
||
113 | #define NVRAM_ROUNDUP(x, y) ((((x)+((y)-1))/(y))*(y)) |
||
114 | |||
115 | /* NVRAM constants */ |
||
116 | #define NVRAM_MIN_SPACE 0x8000 |
||
117 | #define NVRAM_MAGIC 0x48534C46 /* 'FLSH' */ |
||
118 | #define NVRAM_VERSION 1 |
||
119 | |||
120 | #define NVRAM_CRC_START_POSITION 9 /* magic, len, crc8 to be skipped */ |
||
121 | |||
122 | |||
123 | #endif /* _nvram_h_ */ |