diff options
Diffstat (limited to 'usr/src/lib/libkmsagent/common/KMSAgent_direct.h')
| -rw-r--r-- | usr/src/lib/libkmsagent/common/KMSAgent_direct.h | 942 |
1 files changed, 942 insertions, 0 deletions
diff --git a/usr/src/lib/libkmsagent/common/KMSAgent_direct.h b/usr/src/lib/libkmsagent/common/KMSAgent_direct.h new file mode 100644 index 0000000000..e33322a5dd --- /dev/null +++ b/usr/src/lib/libkmsagent/common/KMSAgent_direct.h @@ -0,0 +1,942 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + */ + +/** + * \file direct.h + * + * This file is included in KMSAgentStorage.cpp to provide file handling + * hooks. It also contains our EEPROM file handling functions. + * + * HISTORY: + * 8/6/07 BJB Added code for 9840D encryption sectors + * 4/7/08 BJB Changed to remove 'file is junk' message - EVT + * didn't like it. + * 4/24/08 BJB Added function call back to T10000/9840D code + * to lookup eeprom address - + * so it isn't a hardcoded value. + * 05/09/08 BJB Added being more conservative about EEPROM so as to change + * frequency of 32CA problems + * + */ + + +#ifndef KMSAGENT_DIRECT_H +#define KMSAGENT_DIRECT_H + +#include <stdio.h> +#include <string.h> + +#ifdef WIN32 +#include <direct.h> +#endif + +#define my_unlink(a) unlink(a) +#define my_rmdir(a) rmdir(a) + +#ifndef METAWARE + +#define myFILE FILE + +#else // METAWARE + +#include "SYSCommon.h" +#include "debug.h" +#include <snprintf.h> + +extern "C" void ecpt_trace_msg(ECPT_TRACE_ENTRY*,const char*,...); + +extern char st[256]; + + +#ifndef I_KNOW_REAL_NAMES +#undef fopen +#undef fclose +#undef fputs +#undef fgets +#undef fwrite +#undef fread +#undef unlink +#undef rmdir + +#define fopen my_eeprom_fopen +#define fclose my_eeprom_fclose +#define fputs my_eeprom_fputs +#define fwrite my_eeprom_fwrite +#define fread my_eeprom_fread +#define fgets my_eeprom_fgets +#define unlink my_eeprom_unlink +#define rmdir my_eeprom_rmdir + +#define my_eeprom_rmdir(a) (1) + +#endif + + +#include "KMSClientProfile.h" +extern char KMSAgent_Version[KMS_MAX_VERSION_LENGTH]; + +unsigned char volatile* eeprom_addr_lookup_FILESYSTEM_START_ADDR(void); +unsigned int EEPROM_Sector_size(void); + +#define FILESYSTEM_SECTOR (eeprom_addr_lookup_FILESYSTEM_START_ADDR()) +// was ((unsigned char volatile*)0xf20000) on 9840 +// was ((unsigned char volatile*)0x41dc0000) on T10000 + +#define FILESYSTEM_SECTOR_SIZE (EEPROM_Sector_size()) +// was hardcoded 0x20000 + +#define EEPROM_ERASED_BYTE 0xFF + +/* size of a file allowed (not counting the name) */ +#define EEPROM_FILE_SECT_SIZE 0x1800 + +/* size of a file name allowed (+ the null) */ +#define EEPROM_FNAME_SIZE 0x80 + +// 1000h = 4096d +#define EEPROM_BLOCK_SIZE (EEPROM_FILE_SECT_SIZE - EEPROM_FNAME_SIZE - 4) + +/* number of 'files' available */ +#define FTABLE_SIZE 0x5 + + +#define UCHAR8 unsigned char +#define UINT32 unsigned long + + +extern "C" unsigned long +EEPROM_Sector_Erase( unsigned char volatile *sector_address ); + +extern "C" unsigned long +Flash_Write( UCHAR8 *destinationP, + UCHAR8 *sourceP, + UINT32 byteCount); + +extern "C" unsigned long +Flash_Read( UCHAR8 *dstP, + UCHAR8 *srcP, + UINT32 byteCount); + +/* a eeprom file */ +struct eepromBlockStruct +{ + unsigned long fsize; + char fname[EEPROM_FNAME_SIZE]; + unsigned char fdata[EEPROM_BLOCK_SIZE]; +}; + + +struct fileSystem +{ + struct eepromBlockStruct ftable[FTABLE_SIZE]; + /* what level of toolkit wrote this - for + future compatibility */ + char writingversion[KMS_MAX_VERSION_LENGTH+1]; +}; + + +#define MODE_WRITE 0x01 +#define MODE_READ 0x02 + +#define MYFILE_CLOSED 0x0 +#define MYFILE_OPEN_READ 0x1 +#define MYFILE_OPEN_WRITE 0x2 + + +/* an open file */ +typedef struct fileStruct +{ + unsigned char *readptr; + unsigned long readsize; + unsigned char *writeptr; + struct eepromBlockStruct *memptr; + unsigned long mode; + unsigned long file_number; +} myFILE; + + +extern "C" myFILE *my_eeprom_fopen (const char *filename, const char *mode); +extern "C" int my_eeprom_fclose (myFILE *stream); +extern "C" int my_eeprom_fputs (const char *s, myFILE *stream); +extern "C" int my_eeprom_fwrite (const char *s, int size, int nobj, myFILE *f); +extern "C" int my_eeprom_fread (char *s, int size, int nobj, myFILE *f); +extern "C" char *my_eeprom_fgets (char *s, int n, myFILE *stream); +extern "C" int my_eeprom_unlink (const char *filename); +extern "C" int my_eeprom_fsys_erase(void); + +#ifndef FALSE +#define FALSE 0 +#endif +#ifndef TRUE +#define TRUE 1 +#endif + +#ifdef DEFINE_STORAGE +/* ram copy of the file system */ +struct fileSystem ramFileSystem; +int file_read = FALSE; + +/* file state - open/closed/etc */ +unsigned long fstate[FTABLE_SIZE] = {MYFILE_CLOSED, + MYFILE_CLOSED, + MYFILE_CLOSED, + MYFILE_CLOSED, + MYFILE_CLOSED}; +#else +/* ram copy of the file system */ +extern struct fileSystem ramFileSystem; +extern int file_read; + +/* file state - open/closed/etc */ +extern unsigned long fstate[FTABLE_SIZE]; + +#endif + + + +#ifdef DEFINE_STORAGE + + +extern "C" unsigned long + + +/* UNIT TEST */ +int TESTV = 0; + +/* UNIT TEST */ +#define MY_FLASH_READ(a,b,c) \ + Flash_Read(a,b,c); \ + if (TESTV++ < 5) { \ + ramFileSystem.ftable[0].fname[0] = EEPROM_ERASED_BYTE; \ + ramFileSystem.ftable[1].fsize = EEPROM_BLOCK_SIZE+1; \ + } + + + +/** + * my_eeprom_fopen() + * my filesystem fileopen + */ +extern "C" myFILE *my_eeprom_fopen(const char *filename, const char *mode) +{ + int i; + myFILE *file; + int open_for_write = TRUE; + static int Firsttime = TRUE; + int retries = 100; + + ECPT_TRACE_ENTRY *trace = NULL; + ECPT_TRACE( trace, my_eeprom_fopen ) ; + ecpt_trace_msg( trace, "file %s", (char*)filename); + + FATAL_ASSERT(filename); + FATAL_ASSERT(mode); + + if ( (strcmp(mode,"wb") == 0) || + (strcmp(mode,"w") == 0)) + { + // write + open_for_write = TRUE; + } + else if ( (strcmp(mode,"r") == 0) || + (strcmp(mode,"rb") == 0) ) + { + // read binary + open_for_write = FALSE; + } + else + { + FATAL_APPLICATION_STATE("my_eeprom_fopen : Illegal mode"); + } + + /* read the file table from eeprom? */ + if (!file_read) + { + RETRY: + + MY_FLASH_READ((unsigned char *)&ramFileSystem, + (unsigned char *)FILESYSTEM_SECTOR, + sizeof(ramFileSystem)); + + /* Audit the filesystem - if it looks junked, reclaim bad files */ + + for (i=0; i < FTABLE_SIZE; i++) + { + if ( (ramFileSystem.ftable[i].fname[0] == EEPROM_ERASED_BYTE) || + (ramFileSystem.ftable[i].fsize > EEPROM_BLOCK_SIZE) ) + { + /* if this looks bad, don't accept this outcome until + 100 retries */ + if (retries-- > 0) + { + ecpt_trace_msg( trace, "file was junk - retrying %s", (char*)filename); + log_error_printf( + "KMSAgent_direct::fopen file %d is junk - (name %x, " + "size %x, data %x) RETRYING \n", + i, + ramFileSystem.ftable[i].fname[0], + ramFileSystem.ftable[i].fsize , + ramFileSystem.ftable[i].fdata[0]); + + goto RETRY; + } + else + { + ecpt_trace_msg( trace, "file was junk - formatting %s", (char*)filename); + log_error_printf( + "KMSAgent_direct::fopen file %d is junk - (name %x, " + "size %x, data %x) formatting it\n", + i, + ramFileSystem.ftable[i].fname[0], + ramFileSystem.ftable[i].fsize , + ramFileSystem.ftable[i].fdata[0]); + + /* set data to reasonable starting values */ + ramFileSystem.ftable[i].fname[0] = 0; + ramFileSystem.ftable[i].fsize = 0; + ramFileSystem.ftable[i].fdata[0] = 0; + } + + } + + } /* for */ + + file_read = TRUE; + + } /* !file read */ + + /* read the file table */ + for (i=0; i < FTABLE_SIZE; i++) + { + /* compare filename to ram copy filename */ + if (strcmp(filename, (const char *)ramFileSystem.ftable[i].fname) == 0) + { + + if (fstate[i] != MYFILE_CLOSED) + { + log_printf("KMSAgent_direct::fopen FN=%s file matches, " + "FILE %d WAS ALREADY OPEN for %s with mode %s" + "file size is %d \n", + filename, + i, + (fstate[i] == MYFILE_OPEN_WRITE ? "WRITE": "READ"), + mode, + ramFileSystem.ftable[i].fsize); + } + + /* create a new ramfile handle */ + file = malloc(sizeof(myFILE)); + + /* since file is being rewritten, it is now size 0 */ + if (open_for_write) + ramFileSystem.ftable[i].fsize = 0; + + /* remember the file is open */ + fstate[i]= open_for_write ? MYFILE_OPEN_WRITE : MYFILE_OPEN_READ; + + + /* if filename matches, set file pointers to it */ + file->writeptr = file->readptr = ramFileSystem.ftable[i].fdata; + file->memptr = &ramFileSystem.ftable[i]; + file->readsize = 0; + file->mode = open_for_write ? MODE_WRITE : MODE_READ; + file->file_number = i; + + + log_printf("KMSAgent_direct::fopen FN=%s file matches, " + "opening existing file number %d with mode %s" + "file size is %d \n", + filename, + i, + mode, + ramFileSystem.ftable[i].fsize); + + break; + } + + } + + /* if no existing entry was found, assign a new entry to this filename */ + if (i == FTABLE_SIZE) + { + /* couldn't find an old file and opened for read so return NULL */ + if (open_for_write == FALSE) + { + + + log_printf("KMSAgent_direct::fopen FN=%s no file match, " + "file opened for read so return NULL %d\n", + filename, + i); + + + return NULL; + } + + /* find a free file pointer */ + for (i=0; i < FTABLE_SIZE ; i++) + { + /* empty data will be 0xffffffff since it was copied + straight from EEPROM */ + if (ramFileSystem.ftable[i].fname[0] == '\0') + { + log_printf("KMSAgent_direct::fopen FN=%s no file match, " + "opening new file %d\n", + filename, + i); + + /* give it a filename - marks this as in use */ + strcpy ((char *)ramFileSystem.ftable[i].fname, filename); + + /* set filesize to zero */ + ramFileSystem.ftable[i].fsize = 0; + + /* remember the file is open */ + fstate[i]= open_for_write ? MYFILE_OPEN_WRITE : MYFILE_OPEN_READ; + + + /* create a new ramfile handle */ + file = malloc(sizeof(myFILE)); + + /* if filename matches, set file pointers to it */ + file->writeptr = file->readptr = ramFileSystem.ftable[i].fdata; + file->memptr = &ramFileSystem.ftable[i]; + file->readsize = 0; + file->mode = open_for_write ? MODE_WRITE : MODE_READ; + file->file_number = i; + + break; + } + + } + + if (i == FTABLE_SIZE) + { + log_error_printf("KMSAgent_direct::fopen FN=%s no free files \n", + filename); + /* no free entries - bail */ + return NULL; + } + + } + + /* return pointer to the myFILE struct created */ + return file; + +} + +/** + * my_eeprom_fclose() + * my filesystem fileclose + */ +extern "C" int my_eeprom_fclose(myFILE *f) +{ + ECPT_TRACE_ENTRY *trace = NULL; + ECPT_TRACE( trace, my_eeprom_fclose ) ; + ecpt_trace_msg( trace, "entered"); + + FATAL_ASSERT(f); + +#ifdef DEBUG + log_printf("KMSAgent_direct::fclose FN=%s, " + "FILE %d " + "file size is %d \n", + ramFileSystem.ftable[f->file_number].fname, + f->file_number, + ramFileSystem.ftable[f->file_number].fsize); +#endif + + if (fstate[f->file_number] == MYFILE_CLOSED) + { + log_error_printf("KMSAgent_direct::fclose FN=%s, " + "FILE %d WAS ALREADY CLOSED " + "file size is %d \n", + ramFileSystem.ftable[f->file_number].fname, + f->file_number, + ramFileSystem.ftable[f->file_number].fsize); + } + + /* remember the file is closed */ + fstate[f->file_number]= MYFILE_CLOSED; + + /* don't rewrite eeprom unless file was opened for writing */ + if (f->mode == MODE_WRITE) + { + /* Erase the sector we are rewriting */ + EEPROM_Sector_Erase( (unsigned char*)FILESYSTEM_SECTOR ) ; + + /* remember the version of toolkit that wrote this filesystem + (for any future compatibility problems). */ + strncpy(ramFileSystem.writingversion, + KMSAgent_Version, + sizeof(KMSAgent_Version)); + + /* flush the memory indicated by myFILE * out to EEPROM */ + /* see boot_eeprom.c for details on Flash_Write */ + Flash_Write ((unsigned char*)FILESYSTEM_SECTOR, + (unsigned char*)&ramFileSystem, + FILESYSTEM_SECTOR_SIZE); + } + + /* delete the placeholder file */ + free(f); + + return 0; +} + +/** + * my_eeprom_fputs() + * my filesystem put string + */ +extern "C" int my_eeprom_fputs(const char *s, myFILE *f) +{ + /* put the string to the memory indicated by myFILE */ + int i; + ECPT_TRACE_ENTRY *trace = NULL; + ECPT_TRACE( trace, my_eeprom_fputs ) ; + + ecpt_trace_msg (trace, "\nmy_eeprom_fputs : Entered"); + +#ifdef DEBUG + log_printf( + "\nKMSAgent_direct::my_eeprom_fputs " + "f->writeptr =%x " + "f->readptr=%x " + "f->readsize=%x " + "f->memptr=%x" + "f->memptr->fsize=%x\n", + f->writeptr, + f->readptr, + f->readsize, + f->memptr, + f->memptr->fsize); + +#endif + + FATAL_ASSERT(s); + FATAL_ASSERT(f); + + for (i=0;;i++) + { + /* end of input string? quit */ + if (*s == '\0') + break; + + /* end of max file memory, quit */ + if ((unsigned char*)s >= + (unsigned char*)(f->memptr + sizeof(struct eepromBlockStruct))) + break; + + /* copy */ + *(f->writeptr) = *s++; + f->writeptr++; + + /* increment the filesize */ + f->memptr->fsize += 1; + + } + +#ifdef DEBUG + log_printf( + "\nKMSAgent_direct::fputs wrote %d chars, " + "filesize is %d\n", + i, + f->memptr->fsize ); +#endif + + /* return how many chars were written */ + return i; +} + + +/** + * my_eeprom_fwrite() + * my filesystem put string + */ +extern "C" int my_eeprom_fwrite(const char *s, + int size, + int nobj, + myFILE *f) +{ + /* put the string to the memory indicated by myFILE */ + int i,j; + + ECPT_TRACE_ENTRY *trace = NULL; + ECPT_TRACE( trace, my_eeprom_fwrite ) ; + ecpt_trace_msg ( trace, "Entered"); + + log_printf( + "\nKMSAgent_direct::my_eeprom_fputs " + "f->writeptr =%x " + "f->readptr=%x " + "f->readsize=%x " + "f->memptr=%x" + "f->memptr->fsize=%x\n", + f->writeptr, + f->readptr, + f->readsize, + f->memptr, + f->memptr->fsize); + + FATAL_ASSERT(s); + FATAL_ASSERT(f); + FATAL_ASSERT((size*nobj) > 0); + + for (i=0; i<nobj; i++) + { + for (j=0; j<size; j++) + { + /* end of max file memory, quit */ + if ((unsigned char*)s >= + (unsigned char*)(f->memptr + sizeof(struct eepromBlockStruct))) + goto DONE; + + /* copy */ + *(f->writeptr) = *s++; + f->writeptr++; + + /* increment the filesize */ + f->memptr->fsize += 1; + } + + } + + DONE: + + +#ifdef DEBUG + log_printf( + "\nKMSAgent_direct::fwrite wrote %d chars, " + "filesize is %d\n", + i, + f->memptr->fsize ); +#endif + + /* return how many objects were written */ + return i; +} + + + +/** + * my_eeprom_fgets() + * my filesystem getstring + */ +extern "C" char *my_eeprom_fgets(char *s, int n, myFILE *f) +{ + /* put the string to the memory indicated by myFILE */ + int i; + char *tmp = s; + + ECPT_TRACE_ENTRY *trace = NULL; + ECPT_TRACE( trace, my_eeprom_fgets ) ; + ecpt_trace_msg (trace, "entered"); + + FATAL_ASSERT(s); + FATAL_ASSERT(n > 0); + FATAL_ASSERT(f); + +#ifdef DEBUG + log_printf( + "\nKMSAgent_direct::my_eeprom_fgets from file %s " + "fileptr %x " + "readptr = %x " + "readsize = %d " + "filesize = %d \n", + f->memptr->fname, + f, + f->readptr, + f->readsize, + f->memptr->fsize); +#endif + + /* get up to n-1 (and a \0) chars */ + for (i=0; i < n; i++) + { + /* end of read line? quit */ + if (*f->readptr == '\n') + { + /* increment the number of bytes read */ + f->readptr++; + f->readsize++; + break; + } + + /* trying to read beyond what was written? quit */ + if (f->readsize > + f->memptr->fsize) + { +#ifdef DEBUG + log_printf( + "\nKMSAgent_direct::fgets eof after %d chars, " + "readsize is %d " + "filesize is %d\n", + i, + f->readsize, + f->memptr->fsize); +#endif + return NULL; + } + + /* trying to read beyond max file memory, quit */ + if ((unsigned char*)f->readptr >= + (unsigned char*)(f->memptr + sizeof(struct eepromBlockStruct))) + { +#ifdef DEBUG + log_printf( + "\nKMSAgent_direct::fgets end of max file after %d chars " + "readsize is %d " + "filesize is %d\n", + i, + f->readsize, + f->memptr->fsize); +#endif + /* EOF or error is signalled by NULL return */ + return NULL; + } + + /* copy a char */ + *tmp++ = *f->readptr; + + /* increment the number of bytes read */ + f->readptr++; + f->readsize++; + + } /* for */ + + /* terminate the returned string with a 0, but not a \n */ + *tmp='\0'; + +#ifdef DEBUG + /* terminate returned string after a non-absurd number of chars + */ + log_printf( + "\nKMSAgent_direct::fgets string [%s] " + "end of line after %d chars " + "readsize is %d " + "filesize is %d\n", + s, + i, + f->readsize, + f->memptr->fsize); +#endif + + /* on success, return the original pointer */ + return s; +} + + + + +/** + * my_eeprom_fread() + * my filesystem read a file + */ +extern "C" int my_eeprom_fread(char *s, int size, int nobj, myFILE *f) +{ + /* put the string to the memory indicated by myFILE */ + int i,j; + + ECPT_TRACE_ENTRY *trace = NULL; + ECPT_TRACE( trace, my_eeprom_fread ) ; + ecpt_trace_msg (trace, "entered"); + + FATAL_ASSERT(s); + FATAL_ASSERT(f); + FATAL_ASSERT((size*nobj) > 0); + + for (i=0; i<nobj; i++) + { + for (j=0; j<size; j++) + { + /* end of written file memory, quit */ + if ( (unsigned char*) s >= + (unsigned char*) (f->memptr + f->memptr->fsize) ) + goto DONE; + + /* copy */ + *s++ = *(f->readptr); + f->readptr++; + } + + } + + DONE: + +#ifdef DEBUG + log_printf( + "\nKMSAgent_direct::fread read %d chars, " + "filesize is %d\n", + i, + f->memptr->fsize ); +#endif + + /* return how many objects were written */ + return i; + +} + + + + + + +/** + * my_eeprom_unlink() - delete the file named + */ +extern "C" int my_eeprom_unlink(const char *filename) +{ + int i; + + ECPT_TRACE_ENTRY *trace = NULL; + ECPT_TRACE( trace, my_eeprom_fgets ) ; + ecpt_trace_msg (trace, "Entered fn=%s", (char*)filename); + + /* assume the file is closed */ + FATAL_ASSERT(filename); + + /* read the file table */ + for (i=0; i < FTABLE_SIZE; i++) + { + + if (fstate[i] != MYFILE_CLOSED) + { + log_error_printf("KMSAgent_direct::unlink FN=%s file matches, " + "FILE %d WAS STILL OPEN for %s" + "file size is %d \n", + filename, + i, + (fstate[i] == MYFILE_OPEN_WRITE ? "WRITE": "READ"), + ramFileSystem.ftable[i].fsize); + } + + /* compare input filename to ram copy filename */ + if (strcmp(filename, (const char*)ramFileSystem.ftable[i].fname) == 0) + { + /* if filename matches, zero it out to delete the file */ + ramFileSystem.ftable[i].fname[0] = '\0'; + ramFileSystem.ftable[i].fsize = 0; + ramFileSystem.ftable[i].fdata[0] = 1; + + /* remember the file is closed */ + fstate[i]= MYFILE_CLOSED; + + EEPROM_Sector_Erase( FILESYSTEM_SECTOR ) ; + + /* remember the version of toolkit that wrote this filesystem + (for any future compatibility problems). */ + strncpy(ramFileSystem.writingversion, + KMSAgent_Version, + sizeof(KMSAgent_Version)); + + /* flush the memory indicated by myFILE * out to EEPROM */ + Flash_Write ((unsigned char*)FILESYSTEM_SECTOR, + (unsigned char*)&ramFileSystem, + FILESYSTEM_SECTOR_SIZE); + + break; + } + + } + +#ifdef DEBUG + log_printf ("my_eeprom_unlink : returning"); +#endif + + if (i == FTABLE_SIZE) + return -1; + + /* success */ + return 0; +} + + +/** + * my_eeprom_fsys_erase() - delete all files + */ +extern "C" int my_eeprom_fsys_erase(void) +{ + int i; + + ECPT_TRACE_ENTRY *trace = NULL; + ECPT_TRACE( trace, my_eeprom_fread ) ; + ecpt_trace_msg (trace, "my_eeprom_fsys_erase : entering "); + + /* read the file table */ + for (i=0; i < FTABLE_SIZE; i++) + { + if (fstate[i] != MYFILE_CLOSED) + { + log_error_printf("KMSAgent_direct::fsys_erase FN=%s file " + "FILE %d WAS STILL OPEN for %s " + "file size is %d \n", + ramFileSystem.ftable[i].fname, + i, + (fstate[i] == MYFILE_OPEN_WRITE ? "WRITE": "READ"), + ramFileSystem.ftable[i].fsize); + } + + /* zero filename out to delete the file */ + ramFileSystem.ftable[i].fname[0] = '\0'; + ramFileSystem.ftable[i].fsize = 0; + ramFileSystem.ftable[i].fdata[0] = 2; + + /* remember the file is closed */ + fstate[i]= MYFILE_CLOSED; + + EEPROM_Sector_Erase( FILESYSTEM_SECTOR ) ; + + /* remember the version of toolkit that wrote this filesystem + (for any future compatibility problems). */ + strncpy(ramFileSystem.writingversion, + KMSAgent_Version, + sizeof(KMSAgent_Version)); + + /* flush the memory indicated by myFILE * out to EEPROM */ + Flash_Write ((unsigned char*)FILESYSTEM_SECTOR, + (unsigned char*)&ramFileSystem, + FILESYSTEM_SECTOR_SIZE); + + + } + +#ifdef DEBUG + log_printf ("\nmy_eeprom_fsys_erase : returning"); +#endif + + if (i == FTABLE_SIZE) + return -1; + + /* success */ + return 0; +} + + + + +#endif // DEFINE_STORAGE +#endif // METAWARE +#endif + |
