Пример #1
0
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;
}
Пример #2
0
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;
}