void __exit nvramdrv_exit(void) { int index; for (index = 0; index < 1; index++) { if (fb[index].dirty) nvram_commit(index); ra_nvram_close(); fb[index].valid = 0; //free env kfree(fb[index].env.data); } unregister_chrdev(nvram_major, NVRAM_DEVNAME); }
static void ra_nvram_exit(void) { int index; for (index = 0; index < FLASH_BLOCK_NUM; index++) { if (fb[index].dirty) nvram_commit(index); ra_nvram_close(index); fb[index].valid = 0; //free env kfree(fb[index].env.data); } unregister_chrdev(ralink_nvram_major, RALINK_NVRAM_DEVNAME); }
/* * clear flash by writing all 1's value */ int nvram_clear(int index) { unsigned long to; int len; RANV_PRINT("--> nvram_clear %d\n", index); RANV_CHECK_INDEX(-1); ra_nvram_close(index); down(&nvram_sem); //construct all 1s env block len = fb[index].flash_max_len - sizeof(fb[index].env.crc); if (!fb[index].env.data) { fb[index].env.data = (char *)kmalloc(len, GFP_KERNEL); if (!fb[index].env.data) return -ENOMEM; } memset(fb[index].env.data, 0xFF, len); //calculate crc fb[index].env.crc = (unsigned long)nv_crc32(0, (unsigned char *)fb[index].env.data, len); //write crc to flash to = fb[index].flash_offset; len = sizeof(fb[index].env.crc); ra_mtd_write_nm(RALINK_NVRAM_MTDNAME, to, len, (unsigned char *)&fb[index].env.crc); //write all 1s data to flash to = to + len; len = fb[index].flash_max_len - len; ra_mtd_write_nm(RALINK_NVRAM_MTDNAME, to, len, (unsigned char *)fb[index].env.data); RANV_PRINT("clear flash from 0x%x for 0x%x bytes\n", (unsigned int)to, len); fb[index].dirty = 0; fb[index].valid = 1; up(&nvram_sem); return 0; }
static void ra_nvram_exit(void) { int index; for (index = 0; index < FLASH_BLOCK_NUM; index++) { if (fb[index].dirty) nvram_commit(index); ra_nvram_close(index); fb[index].valid = 0; //free env kfree(fb[index].env.data); } #ifdef CONFIG_DEVFS_FS devfs_unregister_chrdev(ralink_nvram_major, RALINK_NVRAM_DEVNAME); devfs_unregister(devfs_handle); #else unregister_chrdev(ralink_nvram_major, RALINK_NVRAM_DEVNAME); #endif }