Esempio n. 1
0
static int load_param_value(void)
{
	unsigned char *addr = NULL;
	unsigned int err = 0, dev_id = 0;

	addr = vmalloc(PARAM_LEN);
	if (!addr)
		return -ENOMEM;

	err = BML_Open(dev_id);
	if (err) {
		printk(KERN_ERR "%s: open error\n", __FUNCTION__);
		goto fail;
	}

	err = read_param_block(dev_id, addr, BLOCK_OFFSET_MAIN);
	if (err) {
		printk(KERN_ERR "%s: read param error\n", __FUNCTION__);
		goto fail;
	}

	if (is_valid_param((status_t *)addr)) {
		memcpy(&param_status, addr, sizeof(status_t));
	}
	else {

		printk(KERN_ERR "%s: no param info in first param block\n", __FUNCTION__);

		err = read_param_block(dev_id, addr, BLOCK_OFFSET_BACKUP);
		if (err) {
			printk(KERN_ERR "%s: read backup param error\n", __FUNCTION__);
			goto fail;
		}

		if (is_valid_param((status_t *)addr)) {
			memcpy(&param_status, addr, sizeof(status_t));
		}
		else {
			printk(KERN_ERR "%s: no param info in backup param block\n", __FUNCTION__);
			err = -1;
		}
	}

fail:
	vfree(addr);
	BML_Close(dev_id);

	return err;
}
Esempio n. 2
0
static int load_parameter_value(void)
{
	unsigned char *addr = NULL;
	unsigned int err = 0, dev_id = 0;

	status_t *status;

	addr = kmalloc(PARAM_LEN, GFP_KERNEL);
	if (!addr)
		return -ENOMEM;
	err = read_param_block(dev_id, addr);
	if (err) {
		printk(KERN_ERR "%s: read param error\n", __FUNCTION__);
		goto fail;
	}

	status = (status_t *)addr;

	if ((status->param_magic == PARAM_MAGIC) &&
			(status->param_version == PARAM_VERSION)) {
		memcpy(&param_status, (char *)status, sizeof(status_t));			
	}
	else {
		printk(KERN_ERR "%s: no param info\n", __FUNCTION__);
		err = -1;
	}	

fail:
	kfree(addr);
	return err;
}
Esempio n. 3
0
int save_param_value(void)
{
	unsigned int err = 0, dev_id = 0;
	unsigned char *addr = NULL;

	addr = vmalloc(PARAM_LEN);
	if (!addr)
		return -ENOMEM;

	err = BML_Open(dev_id);
	if (err) {
		printk(KERN_ERR "%s: open error\n", __FUNCTION__);
		goto fail;
	}

	// if MAIN is not broken, copy MAIN to BACKUP
	err = read_param_block(dev_id, addr, BLOCK_OFFSET_MAIN);
	if (err) {
		printk(KERN_ERR "%s: read param error\n", __FUNCTION__);
		goto fail;
	}

	if (is_valid_param((status_t *)addr)) {
		err = write_param_block(dev_id, addr, BLOCK_OFFSET_BACKUP);
		if (err) {
			printk(KERN_ERR "%s: write backup param error\n", __FUNCTION__);
			goto fail;
		}
	} else
		printk(KERN_ERR "%s: main block is invalid, not backing up.\n", __FUNCTION__);


	// update MAIN
	memset(addr, 0, PARAM_LEN);
	memcpy(addr, &param_status, sizeof(status_t));

	err = write_param_block(dev_id, addr, BLOCK_OFFSET_MAIN);
	if (err) {
		printk(KERN_ERR "%s: write param error\n", __FUNCTION__);
		goto fail;
	}

fail:
	vfree(addr);
	BML_Close(dev_id);

	return err;
}