www.pudn.com > Demo C.rar > nvRamToTffs.c


/* nvRamToAta.c - non-volatile RAM mapping to Ata for boot line storage */ 
 
/* Copyright 1996 RST Software Industries, Ltd, Israel */ 
 
/* 
modification history 
-------------------- 
01b,10jun99,mpv       modified to support tffs 
01a,25dec96,vlad@rst  created. 
*/ 
 
/* 
DESCRIPTION 
This library simulates NVRAM on a Flash Device for boot line 
storage only. This library is intended to support targets that 
are not accompany with NVRAM and obtain bootrom 
image from the Flash device. 
*/ 
 
#ifndef __NVRAM_TO_TFFS__ 
#define __NVRAM_TO_TFFS__ 
 
/* includes */ 
  
#include  
#include "drv/mem/memDev.h" 
#include "config.h" 
#include "dosFsLib.h" 
 
/* defines */ 
 
/* globals */ 
/* device names to search for */ 
char *	nvBlDevNames[] = {"/tffs0"/* default name */ , "c:"}; 
int	nvBlDevNameInd = (-1); 
 
/****************************************************************************** 
* nvAtaDevInit - to init DOSFS on the Flash device. 
* 
* RETURNS OK. 
*/ 
 
LOCAL STATUS nvTffsDevInit() 
    { 
    int	fd; 
     
    if( nvBlDevNameInd != (-1) ) 
        return OK; 
 
    if (tffsDrv() == ERROR) 
	{ 
	printErr ("Could not initialize.\n"); 
	return (ERROR); 
	} 
 
    printf ("Attaching to Tffs device... "); 
 
    dosFsInit (NUM_DOSFS_FILES);        /* initialize DOS-FS */ 
    fd = usrTffsConfig (0,0,"/tffs0");  
 
    printErr("Tffs device %s created\n", nvBlDevNames[ 0 ] ); 
 
    nvBlDevNameInd = 0; 
 
    return OK; 
    } 
 
/******************************************************************************* 
* 
* sysNvRamSet - write boot linre onto Ata disk 
* 
* This routine copies a specified string into bootline file on the Ata 
* disk. 
* 
* RETURNS: OK, or ERROR if access is outside the non-volatile RAM range. 
* 
* SEE ALSO: sysNvRamGet() 
*/ 
 
STATUS sysNvRamSet 
    ( 
    char *string,     /* string to be copied into non-volatile RAM */ 
    int strLen,       /* maximum number of bytes to copy           */ 
    int offset        /* byte offset into non-volatile RAM         */ 
    ) 
    { 
    int fd; 
    char	name[ 20 ] = {EOS}; 
 
    printErr("Store boot line to file. Please wait...\n"); 
 
    if( nvTffsDevInit() == ERROR ) 
    	return ERROR; 
 
    sprintf(name,"%s/bootline.dat", "/tffs0" ); 
    fd = creat( name, O_WRONLY ); 
    if( fd == ERROR ) 
    	{ 
    	printErr("Error create file to store boot line onto Flash Device\n"); 
    	return ERROR; 
    	} 
    if( write(fd, string, strLen ) < strLen ) 
        { 
        printErr("Error store boot line onto Flash Device\n"); 
        return ERROR; 
        } 
    close( fd );  
    return OK; 
    } 
 
/******************************************************************************* 
* sysNvRamGet - get boot line from Ata disk. 
* 
* This routine copies the contents of bootline file into a specified 
* string.  The string will be terminated with an EOS. 
* 
* RETURNS: OK, or ERROR if access is outside the non-volatile RAM range. 
* 
* SEE ALSO: sysNvRamSet() 
*/ 
 
STATUS sysNvRamGet 
    ( 
    char *string,     /* string to be copied into non-volatile RAM */ 
    int strLen,       /* maximum number of bytes to copy           */ 
    int offset        /* byte offset into non-volatile RAM         */ 
    ) 
    { 
    int fd; 
    char        name[ 20 ] = {EOS}; 
 
    printErr("Try to read boot line\n"); 
 
    if( nvTffsDevInit() == ERROR ) 
        return ERROR; 
 
    sprintf(name,"%s/bootline.dat", "/tffs0" ); 
    fd = open( name, O_RDONLY, 0 ); 
    if( fd == ERROR ) 
        { 
        printErr("Error: boot line file %s not found\n", name ); 
        return ERROR; 
        } 
    if( read(fd, string, strLen ) == ERROR ) 
        { 
        printErr("Error read boot line from Flash Device\n"); 
        return ERROR; 
        } 
    string [strLen] = EOS; 
    close( fd ); 
    return OK; 
    } 
 
#endif /* __NVRAM_TO_TFFS__ */