oremeq@18: #include oremeq@18: oremeq@18: oremeq@18: /* size of NVRAM in bytes */ oremeq@18: #define NVRAM_MAX_SIZE 262144 oremeq@18: oremeq@18: /* size of block in byte */ oremeq@18: #define NVRAM_BLOCK_SIZE 256 oremeq@18: oremeq@18: #define NVRAM_FILE_NAME "__nvram__" oremeq@18: oremeq@18: FILE *nvram_file = NULL; oremeq@18: oremeq@18: oremeq@18: void iat_flash_read_regs(); oremeq@18: void iat_flash_write_regs(); oremeq@18: void iat_flash_write_page(unsigned int); oremeq@18: void iat_flash_read_page(unsigned int); oremeq@18: oremeq@18: oremeq@18: short data_len; /* 0 to NVRAM_BLOCK_SIZE bytes */ oremeq@18: short data_num_pages; oremeq@18: unsigned int *data_page = NULL; oremeq@18: unsigned int data_addr; oremeq@18: oremeq@18: unsigned int *regs_page = NULL; oremeq@18: oremeq@18: int iat_init() oremeq@18: { oremeq@18: int i; oremeq@18: oremeq@18: nvram_file = fopen(NVRAM_FILE_NAME, "wr"); oremeq@18: if (nvram_file == NULL) oremeq@18: return -1; oremeq@18: oremeq@18: int n = NVRAM_BLOCK_SIZE / sizeof(unsigned int); oremeq@18: oremeq@18: /* some actions to initialise the flash */ oremeq@18: data_len = 0; oremeq@18: data_num_pages = 0; oremeq@18: oremeq@18: data_page = (unsigned int *)malloc(sizeof(unsigned int) * n); oremeq@18: memset(data_page, 0, sizeof(unsigned int)*n); oremeq@18: oremeq@18: if (data_page == NULL) oremeq@18: return -1; oremeq@18: oremeq@18: regs_page = (unsigned int *)malloc(sizeof(unsigned int) * n); oremeq@18: memset(regs_page, 0, sizeof(unsigned int)*n); oremeq@18: if (regs_page == NULL) oremeq@18: return -2; oremeq@18: oremeq@18: iat_flash_read_regs(); oremeq@18: oremeq@18: /* start the data at the location specified in the registers */ oremeq@18: if (0) /* for now it is 0, but put here a test to know whether oremeq@18: or not the NVRAM has been written before */ oremeq@18: data_addr = regs_page[1]; oremeq@18: else oremeq@18: data_addr = NVRAM_BLOCK_SIZE; /* let start at block 1 */ oremeq@18: oremeq@18: /* create a file the size of the simulated NVRAM */ oremeq@18: for(i=0; i