original files of m241
This commit is contained in:
@@ -0,0 +1,157 @@
|
||||
/* transCbio.h - Transaction Block I/O library */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2004-2005 Wind River Systems, Inc.
|
||||
*
|
||||
* The right to copy, distribute, modify or otherwise make use
|
||||
* of this software may be licensed only pursuant to the terms
|
||||
* of an applicable Wind River license agreement.
|
||||
*/
|
||||
|
||||
/*
|
||||
modification history
|
||||
--------------------
|
||||
01c,18aug05,act add prototype for xbdTransInit
|
||||
01b,31may05,act convert from CBIO to XBD
|
||||
01a,23sep04,rfr Added include guards
|
||||
17mai04,alr created
|
||||
*/
|
||||
|
||||
/*
|
||||
DESCRIPTION
|
||||
|
||||
This library provides...
|
||||
|
||||
See description of XBDs.
|
||||
|
||||
|
||||
SEE ALSO
|
||||
.I "VxWorks Programmers Guide: I/O System"
|
||||
|
||||
INCLUDE FILES
|
||||
transCbio.h
|
||||
|
||||
INTERNAL
|
||||
*/
|
||||
|
||||
#ifndef __INCtransCbioh
|
||||
#define __INCtransCbioh
|
||||
|
||||
#include "vxWorks.h"
|
||||
#include "semLib.h"
|
||||
#include "cbioLib.h" /* XXX - for block_t */
|
||||
#include "drv/xbd/bio.h"
|
||||
#include "drv/xbd/xbd.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* error codes */
|
||||
#define ERROR_LOCK 0 /* error acquiring lock (semTake()) */
|
||||
#define ERROR_TRANS_WRITE 1 /* error writing transaction */
|
||||
#define ERROR_CONSISTENCY 3 /* internal consistency check error */
|
||||
#define ERROR_IO_OPERATION 4 /* general IO error (underlying layer should not return error!) */
|
||||
#define ERROR_OUTOFMEMORY 5 /* out of heap memory */
|
||||
#define ERROR_UNCATCHED 6 /* system was unable to recover from warning */
|
||||
#define ERROR_OUT_OF_UNITS 7 /* out of physical units */
|
||||
#define ERROR_DEFRAG 8 /* error while defragmenting */
|
||||
|
||||
/* warning codes */
|
||||
#define WARN_OUT_OF_UNITS 10 /* out of physical units */
|
||||
#define WARN_TRANS_CRC_MIS 11 /* transaction CRC mismatch */
|
||||
|
||||
/* Implementation dependent data structures */
|
||||
typedef struct transCtrl TRANS_CTRL;
|
||||
|
||||
/*
|
||||
* Transaction data, some stored on disk (via TRANS_MASTER; see xbdTran.c).
|
||||
* Note that block_t should probably be sector_t, but we store block_t
|
||||
* values on disk.
|
||||
*/
|
||||
struct transCtrl
|
||||
{
|
||||
/* physical disk geometry */
|
||||
block_t physStartOffset; /* spare offset to leave on disk (e.g. TFFS=1) */
|
||||
block_t physTrans1Offset; /* physical block offset translation table 1 */
|
||||
block_t physTrans2Offset; /* physical block offset translation table 2 */
|
||||
block_t physTransSize; /* # of physical data blocks for a translation table */
|
||||
block_t physDataOffset; /* physical block offset for data */
|
||||
block_t physDataSize; /* # of physical data blocks */
|
||||
|
||||
/* translation information */
|
||||
int blkshift; /* blk size shifter (used to increase the logical block sizes) */
|
||||
int overhead; /* overhead size */
|
||||
|
||||
/* physical disk geometry seen in units (blocks including blkshift) */
|
||||
block_t physDataUnits; /* # of physical data units */
|
||||
block_t physFreeUnits; /* # of free physical data units */
|
||||
block_t physReplacedUnits; /* # of replaced physical data units */
|
||||
char * physUnitFree; /* physical units free table */
|
||||
char * physUnitReplaced; /* physical units replaced table */
|
||||
block_t physLastFreeUnit; /* last found free physical data units */
|
||||
|
||||
/* logical disk geometry */
|
||||
block_t * virtToPhys; /* virtual # to physical # mapping table */
|
||||
char * virtToPhysDirty1; /* virtToPhys dirty table */
|
||||
char * virtToPhysDirty2; /* virtToPhys dirty table */
|
||||
|
||||
/* transaction information */
|
||||
u_long transSerial; /* current transaction serial number */
|
||||
u_char transNumber; /* current transaction image */
|
||||
|
||||
/* disk identification */
|
||||
u_long diskSerial1; /* disk serial number 1 (random) */
|
||||
u_long diskSerial2; /* disk serial number 2 (random hash) */
|
||||
|
||||
/* transaction layer options */
|
||||
u_long options; /* options for transaction layer */
|
||||
};
|
||||
|
||||
typedef struct transXbd TRANS_XBD, *TRANS_XBD_ID;
|
||||
/* the actual details of a transXbd are only in xbdTrans.c */
|
||||
|
||||
/* Function Pointers */
|
||||
extern STATUS (*transpanic)(TRANS_XBD *dev, int code, char * message);
|
||||
extern STATUS (*transwarning)(TRANS_XBD *dev, int code, char * message);
|
||||
|
||||
/* format structure + types */
|
||||
#define FORMAT_REGULAR 0 /* Regular type. It includes a TMR at the
|
||||
* beginning and end of the media to
|
||||
* increase reliability. It should be used
|
||||
* for all regular devices, which are neither
|
||||
* TFFS, nor require DosFS compatiblity
|
||||
* (will never be accessed in a pure FAT
|
||||
* system). */
|
||||
|
||||
#define FORMAT_TFFS 1 /* TFFS type. It leaves the first sector
|
||||
* empty (for TFFS), and only uses a TMR
|
||||
* on the end of the media. */
|
||||
|
||||
#define FORMAT_DOS 2 /* DOS FAT compatiblity type. It immediately
|
||||
* starts the media, moving all transaction
|
||||
* data and TMR to the end of the media.
|
||||
* A media prepared with this (and
|
||||
* defragmented) will be read and
|
||||
* accessible in a Dos FAT system. */
|
||||
|
||||
/* XXX this structure is obsolete (? but do we want to handle the ioctl?) */
|
||||
typedef struct transFmt
|
||||
{
|
||||
/* translation information */
|
||||
int blkshift; /* blk size shifter (used to increase logical block sizes) */
|
||||
int overhead; /* overhead size */
|
||||
int type; /* format type */
|
||||
} TRANS_FORMAT;
|
||||
|
||||
TRANS_XBD *transDevCreate(device_t subDev);
|
||||
STATUS formatTrans(int rawFd, int blkshift, int overhead, int type);
|
||||
STATUS transShow(TRANS_XBD *dev, int verb);
|
||||
device_t xbdTransDevCreate(device_t subDev);
|
||||
STATUS xbdTransInit(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __INCtransCbioh */
|
||||
Reference in New Issue
Block a user