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, ¶m_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; }
int save_parameter_value(void) { unsigned int err = 0, dev_id = 0; unsigned char *addr = NULL; addr = kmalloc(PARAM_LEN, GFP_KERNEL); if (!addr) return -ENOMEM; memset(addr, 0, PARAM_LEN); memcpy(addr, ¶m_status, sizeof(status_t)); err = write_param_block(dev_id, addr); if (err) { printk(KERN_ERR "%s: read param error\n", __FUNCTION__); goto fail; } #ifdef DCM_PARAM_DEBUG dump_param_status(¶m_status); #endif fail: kfree(addr); return err; }