2012-11-26 04:11:15 +08:00
|
|
|
--- a/driver/nvram_stub.c
|
|
|
|
+++ b/driver/nvram_stub.c
|
|
|
|
@@ -22,6 +22,7 @@ typedef struct _vars {
|
|
|
|
#define VARS_T_OH sizeof(vars_t)
|
|
|
|
|
|
|
|
static vars_t *vars = NULL;
|
|
|
|
+static int nvram_init_done = 0;
|
|
|
|
extern char *nvram_buf[];
|
|
|
|
|
|
|
|
int
|
|
|
|
@@ -33,6 +34,10 @@ BCMATTACHFN(nvram_init)(void *si)
|
|
|
|
uint nvs, bufsz;
|
|
|
|
vars_t *new;
|
|
|
|
|
|
|
|
+ nvram_init_done++;
|
|
|
|
+ if (nvram_init_done != 1)
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
|
|
osh = si_osh(sih);
|
|
|
|
|
|
|
|
nvs = R_REG(osh, &nvh->len) - sizeof(struct nvram_header);
|
|
|
|
@@ -79,6 +84,10 @@ BCMATTACHFN(nvram_exit)(void *si)
|
|
|
|
vars_t *this, *next;
|
|
|
|
si_t *sih;
|
|
|
|
|
|
|
|
+ nvram_init_done--;
|
|
|
|
+ if (nvram_init_done != 0)
|
2013-11-12 05:56:45 +08:00
|
|
|
+ return;
|
2012-11-26 04:11:15 +08:00
|
|
|
+
|
|
|
|
sih = (si_t *)si;
|
|
|
|
this = vars;
|
|
|
|
while (this) {
|