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