int BCMATTACHFN(nvram_init)(void *si) { bool isemb; int ret; si_t *sih; static int nvram_status = -1; #ifdef __ECOS if (!kernel_initial) return 0; #endif /* Check for previous 'restore defaults' condition */ if (nvram_status == 1) return 1; /* Check whether nvram already initilized */ if (nvram_status == 0 && !nvram_do_reset) return 0; sih = (si_t *)si; /* Restore defaults from embedded NVRAM if button held down */ if (nvram_do_reset) { /* Initialize with embedded NVRAM */ nvram_header = find_nvram(TRUE, &isemb); ret = _nvram_init(si); if (ret == 0) { nvram_status = 1; return 1; } nvram_status = -1; _nvram_exit(); } /* Find NVRAM */ nvram_header = find_nvram(FALSE, &isemb); ret = _nvram_init(si); if (ret == 0) { /* Restore defaults if embedded NVRAM used */ if (nvram_header && isemb) { ret = 1; } } nvram_status = ret; return ret; }
int nvram_init(void *si) { bool isemb; int ret; si_t *sih; static int nvram_status = -1; /* Check for previous 'restore defaults' condition */ if (nvram_status == 1) return 1; sih = (si_t *)si; /* Initialize private semaphore */ if ((nvram_lock = semBCreate(SEM_Q_FIFO, SEM_FULL)) == NULL) { printf("nvram_init: semBCreate failed\n"); return ERROR; } /* Find NVRAM */ nvram_header = find_nvram(FALSE, &isemb); if (!nvram_header) { #if defined(BUILD_VXBOOT) nvram_header = NV_RAM_ADRS; #else return ERROR; #endif } ret = _nvram_init(si); if (ret == 0) { /* Restore defaults if embedded NVRAM used */ if (nvram_header && isemb) { ret = 1; } } nvram_status = ret; return ret; }