linux/drivers/staging/brcm80211/include/bcmnvram.h
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2010 Broadcom Corporation
   3 *
   4 * Permission to use, copy, modify, and/or distribute this software for any
   5 * purpose with or without fee is hereby granted, provided that the above
   6 * copyright notice and this permission notice appear in all copies.
   7 *
   8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
   9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
  11 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
  13 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15 */
  16
  17#ifndef _bcmnvram_h_
  18#define _bcmnvram_h_
  19
  20#ifndef _LANGUAGE_ASSEMBLY
  21
  22#include <bcmdefs.h>
  23
  24struct nvram_header {
  25        u32 magic;
  26        u32 len;
  27        u32 crc_ver_init;       /* 0:7 crc, 8:15 ver, 16:31 sdram_init */
  28        u32 config_refresh;     /* 0:15 sdram_config, 16:31 sdram_refresh */
  29        u32 config_ncdl;        /* ncdl values for memc */
  30};
  31
  32/*
  33 * Get default value for an NVRAM variable
  34 */
  35extern char *nvram_default_get(const char *name);
  36
  37/*
  38 * Initialize NVRAM access. May be unnecessary or undefined on certain
  39 * platforms.
  40 */
  41extern int nvram_init(void *sih);
  42
  43/*
  44 * Append a chunk of nvram variables to the global list
  45 */
  46extern int nvram_append(void *si, char *vars, uint varsz);
  47
  48/*
  49 * Check for reset button press for restoring factory defaults.
  50 */
  51extern int nvram_reset(void *sih);
  52
  53/*
  54 * Disable NVRAM access. May be unnecessary or undefined on certain
  55 * platforms.
  56 */
  57extern void nvram_exit(void *sih);
  58
  59/*
  60 * Get the value of an NVRAM variable. The pointer returned may be
  61 * invalid after a set.
  62 * @param       name    name of variable to get
  63 * @return      value of variable or NULL if undefined
  64 */
  65extern char *nvram_get(const char *name);
  66
  67/*
  68 * Read the reset GPIO value from the nvram and set the GPIO
  69 * as input
  70 */
  71extern int nvram_resetgpio_init(void *sih);
  72
  73/*
  74 * Get the value of an NVRAM variable.
  75 * @param       name    name of variable to get
  76 * @return      value of variable or NUL if undefined
  77 */
  78#define nvram_safe_get(name) (nvram_get(name) ? : "")
  79
  80/*
  81 * Match an NVRAM variable.
  82 * @param       name    name of variable to match
  83 * @param       match   value to compare against value of variable
  84 * @return      true if variable is defined and its value is string equal
  85 *              to match or false otherwise
  86 */
  87static inline int nvram_match(char *name, char *match)
  88{
  89        const char *value = nvram_get(name);
  90        return value && !strcmp(value, match);
  91}
  92
  93/*
  94 * Inversely match an NVRAM variable.
  95 * @param       name    name of variable to match
  96 * @param       match   value to compare against value of variable
  97 * @return      true if variable is defined and its value is not string
  98 *              equal to invmatch or false otherwise
  99 */
 100static inline int nvram_invmatch(char *name, char *invmatch)
 101{
 102        const char *value = nvram_get(name);
 103        return value && strcmp(value, invmatch);
 104}
 105
 106/*
 107 * Set the value of an NVRAM variable. The name and value strings are
 108 * copied into private storage. Pointers to previously set values
 109 * may become invalid. The new value may be immediately
 110 * retrieved but will not be permanently stored until a commit.
 111 * @param       name    name of variable to set
 112 * @param       value   value of variable
 113 * @return      0 on success and errno on failure
 114 */
 115extern int nvram_set(const char *name, const char *value);
 116
 117/*
 118 * Unset an NVRAM variable. Pointers to previously set values
 119 * remain valid until a set.
 120 * @param       name    name of variable to unset
 121 * @return      0 on success and errno on failure
 122 * NOTE: use nvram_commit to commit this change to flash.
 123 */
 124extern int nvram_unset(const char *name);
 125
 126/*
 127 * Commit NVRAM variables to permanent storage. All pointers to values
 128 * may be invalid after a commit.
 129 * NVRAM values are undefined after a commit.
 130 * @return      0 on success and errno on failure
 131 */
 132extern int nvram_commit(void);
 133
 134/*
 135 * Get all NVRAM variables (format name=value\0 ... \0\0).
 136 * @param       buf     buffer to store variables
 137 * @param       count   size of buffer in bytes
 138 * @return      0 on success and errno on failure
 139 */
 140extern int nvram_getall(char *nvram_buf, int count);
 141
 142/*
 143 * returns the crc value of the nvram
 144 * @param       nvh     nvram header pointer
 145 */
 146u8 nvram_calc_crc(struct nvram_header *nvh);
 147
 148#endif                          /* _LANGUAGE_ASSEMBLY */
 149
 150/* The NVRAM version number stored as an NVRAM variable */
 151#define NVRAM_SOFTWARE_VERSION  "1"
 152
 153#define NVRAM_MAGIC             0x48534C46      /* 'FLSH' */
 154#define NVRAM_CLEAR_MAGIC       0x0
 155#define NVRAM_INVALID_MAGIC     0xFFFFFFFF
 156#define NVRAM_VERSION           1
 157#define NVRAM_HEADER_SIZE       20
 158#define NVRAM_SPACE             0x8000
 159
 160#define NVRAM_MAX_VALUE_LEN 255
 161#define NVRAM_MAX_PARAM_LEN 64
 162
 163#define NVRAM_CRC_START_POSITION        9       /* magic, len, crc8 to be skipped */
 164#define NVRAM_CRC_VER_MASK      0xffffff00      /* for crc_ver_init */
 165
 166#endif                          /* _bcmnvram_h_ */
 167