diff options
author | John Sonnenschein <johns@joyent.com> | 2012-05-17 18:26:57 +0000 |
---|---|---|
committer | John Sonnenschein <johns@joyent.com> | 2012-05-17 18:26:57 +0000 |
commit | 04b244dd661c24b510ac22936decfc0972d202d3 (patch) | |
tree | 3ebfef98afc303fddf3415d6fba64e8682f495e8 /usr/src/lib/libkmsagent/common/KMSAgent_direct.h | |
parent | eac250589e41f1b705e1b7427b02b3379aac9f9e (diff) | |
parent | a69187741b83640a90dd8586195456dd50c016a8 (diff) | |
download | illumos-joyent-20120517.tar.gz |
Merge git.joyent.com:illumos-joyent20120517
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, 0 insertions, 942 deletions
diff --git a/usr/src/lib/libkmsagent/common/KMSAgent_direct.h b/usr/src/lib/libkmsagent/common/KMSAgent_direct.h deleted file mode 100644 index e33322a5dd..0000000000 --- a/usr/src/lib/libkmsagent/common/KMSAgent_direct.h +++ /dev/null @@ -1,942 +0,0 @@ -/* - * 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 - |