390 lines
16 KiB
C
390 lines
16 KiB
C
/*
|
|
* $Log: V:/Flite/archives/TrueFFS5/Src/DOCBDK.H_V $
|
|
*
|
|
* Rev 1.13 Apr 15 2002 07:35:48 oris
|
|
* Moved bdkCall to blockdev.h
|
|
* Added include for flreq.h and flfuncno.h when BDK_ACCESS is defined.
|
|
*
|
|
* Rev 1.12 Feb 19 2002 20:58:56 oris
|
|
* Removed flflash.h include directive.
|
|
* Moved bdkCall prototype to blockdev.
|
|
*
|
|
* Rev 1.11 Nov 08 2001 10:45:10 oris
|
|
* Moved BDK module ifdef statement in order to allow the use of basic definitions.
|
|
*
|
|
* Rev 1.10 Oct 18 2001 22:17:12 oris
|
|
* Added number of blocks per floor in the bdkVol structure.
|
|
*
|
|
* Rev 1.9 Oct 10 2001 19:48:28 oris
|
|
* More afficient way to store the Binary module internal structure (bdkVol).
|
|
*
|
|
* Rev 1.8 May 20 2001 14:35:00 oris
|
|
* Removed mtdsa.h include file.
|
|
*
|
|
* Rev 1.7 May 17 2001 16:51:08 oris
|
|
* Removed warnings.
|
|
*
|
|
* Rev 1.6 May 16 2001 21:17:12 oris
|
|
* Added OTP routines declaration.
|
|
* Removed redefinitions of SOCKETS and BINARY_PARTITIONS.
|
|
* Changed variable types to TrueFFS standard types.
|
|
* Added EXTRA_SIZE definition and removed SYNDROM_BYTES.
|
|
*
|
|
* Rev 1.5 May 09 2001 00:32:14 oris
|
|
* Removed the DOC2000_FAMILY and DOCPLUS_FAMILY defintion and replaced it with NO_DOC2000_FAMILY_SUPPORT, NO_DOCPLUS_FAMILY_SUPPORT, NO_NFTL_SUPPORT and NO_INFTL_SUPPORT.
|
|
* Added BINARY_PARTITIONS and SOCKETS defintions.
|
|
*
|
|
* Rev 1.4 Apr 30 2001 17:59:38 oris
|
|
* Changed bdkSetBootPartitonNo, bdkGetProtectionType, bdkSetProtection prototypes
|
|
*
|
|
* Rev 1.3 Apr 16 2001 13:32:02 oris
|
|
* Removed warrnings.
|
|
*
|
|
* Rev 1.2 Apr 09 2001 15:06:18 oris
|
|
* End with an empty line.
|
|
*
|
|
* Rev 1.1 Apr 01 2001 07:50:38 oris
|
|
* Updated copywrite notice.
|
|
* Removed nested comments.
|
|
* Changed #include "base2400.h" to "mdocplus.h"
|
|
* Fix for Big endien compilation problems - changed LEmin to LEulong
|
|
* Changed MULTIPLIER_OFFSET define.
|
|
* Changed protectionType to word instead of unsigned.
|
|
* Added extern prototype of bdkVol pointer.
|
|
*
|
|
* Rev 1.0 Feb 02 2001 13:24:56 oris
|
|
* Initial revision.
|
|
*/
|
|
|
|
/***************************************************************************/
|
|
/* M-Systems Confidential */
|
|
/* Copyright (C) M-Systems Flash Disk Pioneers Ltd. 1995-2001 */
|
|
/* All Rights Reserved */
|
|
/***************************************************************************/
|
|
/* NOTICE OF M-SYSTEMS OEM */
|
|
/* SOFTWARE LICENSE AGREEMENT */
|
|
/* */
|
|
/* THE USE OF THIS SOFTWARE IS GOVERNED BY A SEPARATE LICENSE */
|
|
/* AGREEMENT BETWEEN THE OEM AND M-SYSTEMS. REFER TO THAT AGREEMENT */
|
|
/* FOR THE SPECIFIC TERMS AND CONDITIONS OF USE, */
|
|
/* OR CONTACT M-SYSTEMS FOR LICENSE ASSISTANCE: */
|
|
/* E-MAIL = info@m-sys.com */
|
|
/***************************************************************************/
|
|
/************************************************************************/
|
|
/* Caution: The BDK_ACCESS compilation flag is for M-SYSTEMS internal */
|
|
/* use ONLY. This flag is used by M-SYSTEMS drivers and */
|
|
/* therfore it is SHOULD NOT be used by this package */
|
|
/************************************************************************/
|
|
|
|
/*****************************************************************************
|
|
* File Header *
|
|
* ----------- *
|
|
* Name : docbdk.h *
|
|
* *
|
|
* Description : This file contains the binary partition defintions , data *
|
|
* structures and function prototypes. *
|
|
* *
|
|
* Note : The file exports 2 interfaces each under its own compilation flag: *
|
|
* *
|
|
* BDK package - Standalone package that exports routines for binary *
|
|
* partitions handling(MTD_STANDALONE compilation flag). *
|
|
* OSAK module - Separated module of the OSAK package that exports a *
|
|
* common entry point to the same routines. (BDK_ACCESS *
|
|
* compilation flag). *
|
|
* *
|
|
* Warning : Do not use this file with the BDK_ACCESS compilation flag unless *
|
|
* you own the full OSAK package. *
|
|
*****************************************************************************/
|
|
|
|
#ifndef _DOC_BDK_H_
|
|
#define _DOC_BDK_H_
|
|
|
|
/*---------------------------------------------------------------------*/
|
|
/* Include the proper header files. */
|
|
/*---------------------------------------------------------------------*/
|
|
|
|
#include "nanddefs.h" /* The MTD for the doc2000 and millennium DiskOnChips */
|
|
|
|
#ifdef BDK_ACCESS
|
|
#include "flfuncno.h"
|
|
#include "flreq.h"
|
|
#endif /* BDK_ACCESS */
|
|
|
|
|
|
|
|
/*---------------------------------------------------------------------
|
|
*
|
|
* Binary Development Kit Stand Alone Customization Area
|
|
*
|
|
*---------------------------------------------------------------------*/
|
|
|
|
/*---------------------------------------------------------------------*/
|
|
/* Boundries of the memory location to look for the DiskOnChip */
|
|
/*---------------------------------------------------------------------*/
|
|
|
|
#define DOC_LOW_ADDRESS 0xC8000L
|
|
#define DOC_HIGH_ADDRESS 0xE0000L
|
|
|
|
/*----------------------- Mtd selection -------------------------------
|
|
*
|
|
* Uncomment the following uneeded MTD or TL to reduce code size.
|
|
*
|
|
*---------------------------------------------------------------------*/
|
|
|
|
/* DiskOnChip2000, DiskOnChip Millennium and DiskOnChip 2000 Tsop devices */
|
|
/* #define NO_DOC2000_FAMILY_SUPPORT */
|
|
|
|
/* DiskOnChip Millennium plus device */
|
|
/* #define NO_DOCPLUS_FAMILY_SUPPORT */
|
|
|
|
/* NFTL format - DiskOnChip2000 and DiskOnChip Millennium */
|
|
/* #define NO_NFTL_SUPPORT */
|
|
|
|
/* INFTL format - DiskOnChip2000 Tsop and DiskOnChip Millennium Plus */
|
|
/* #define NO_INFTL_SUPPORT */
|
|
|
|
/*---------------------------------------------------------------------
|
|
*
|
|
* End of Binary Development Kit Stand Alone Customization Area
|
|
*
|
|
*---------------------------------------------------------------------*/
|
|
|
|
/*---------------------------------------------------------------------*/
|
|
/* general constant */
|
|
/*---------------------------------------------------------------------*/
|
|
|
|
#define MAX_BINARY_PARTITIONS_PER_DRIVE 3
|
|
#define SIGNATURE_LEN 8
|
|
#define BDK_SIGNATURE_NAME 4
|
|
#define SIGNATURE_NUM 4
|
|
#define MBYTE 0x100000L
|
|
#define KBYTE 0x400
|
|
#define BLOCK 0x200
|
|
#define BDK_SIGN_OFFSET 8
|
|
#define ANAND_LEN 5
|
|
#define BDK_COMPLETE_IMAGE_UPDATE 16
|
|
#define BDK_PARTIAL_IMAGE_UPDATE 0
|
|
#define BDK_MIN(a,b) ((a) < (b) ? (a) : (b))
|
|
|
|
#define MULTIPLIER_OFFSET 5
|
|
#define BDK_INVALID_VOLUME_HANDLE 0xff
|
|
#define BDK_HEADERS_SPACING (SECTOR_SIZE * 4)
|
|
#define BDK_UNIT_BAD 0
|
|
#define BDK_NO_OF_MEDIA_HEADERS 2
|
|
#define BDK_FIELDS_BEFORE_HEADER 9 /* number of LEmin fieldsr to skip
|
|
to reach the volume records */
|
|
#define BDK_HEADER_FIELDS 35 /* number of LEmin fields used for
|
|
volumes infromation record */
|
|
#define BDK_BINARY_FLAG 0x20000000L /* flag representing a binary volume
|
|
in the volume information record */
|
|
/* BDK specific flag area */
|
|
#define ERASE_BEFORE_WRITE 8
|
|
#define EXTRA_SIZE 16
|
|
/*---------------------------------------------------------------------*/
|
|
/* The maximum number of binary partitions */
|
|
/*---------------------------------------------------------------------*/
|
|
|
|
#ifndef BINARY_PARTITIONS
|
|
#define BINARY_PARTITIONS SOCKETS /* for backwards compatibility */
|
|
#endif /* BINARY_PARITITON */
|
|
|
|
/*-------------------------- BDK Global Status Values --------------------*/
|
|
#define BDK_S_INIT 0 /* uninitialized binary partition record */
|
|
#define BDK_S_DOC_FOUND 0x01 /* DiskOnChip device was found */
|
|
#define BDK_S_HEADER_FOUND 0X04 /* Partition information was found */
|
|
#define BDK_S_INFO_FOUND 0x08 /* Sub partition information was found */
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
#if defined(BDK_ACCESS) || defined(MTD_STANDALONE)
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
/* Global binary partition data structures */
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
typedef struct {
|
|
|
|
byte bdkGlobalStatus; /* BDK global status variable */
|
|
byte bdkEDC; /* ECC mode flag */
|
|
byte bdkSignOffset; /* BDK signature offset ( 0 or 8) */
|
|
byte bdkSavedSignOffset; /* signature offset of last access */
|
|
word bdkSavedStartUnit; /* starting unit of last access */
|
|
word startPartitionBlock, endPartitionBlock; /* partition boundries */
|
|
word startImageBlock, endImageBlock; /* sub partition boundries */
|
|
word curReadImageBlock; /* current block number to read from */
|
|
word blockPerFloor; /* Blocks per floor */
|
|
byte signBuffer[SIGNATURE_LEN]; /* signature of binary sub partition */
|
|
dword bootImageSize; /* available sub binary partition size */
|
|
dword realBootImageSize; /* size used by an image on the sub partition */
|
|
dword actualReadLen; /* length needed to be read */
|
|
dword bdkDocWindow; /* DiskOnChip window start address */
|
|
CardAddress curReadImageAddress; /* current address to read from */
|
|
#ifdef UPDATE_BDK_IMAGE
|
|
CardAddress curUpdateImageAddress; /* current address to write to */
|
|
dword actualUpdateLen; /* length needed to be write */
|
|
word curUpdateImageBlock; /* current block number to write to */
|
|
byte updateImageFlag;/* BDK_COMPLETE_IMAGE_UPDATE \ ERASE_BEFORE_WRITE */
|
|
#endif /* UPDATE_BDK_IMAGE */
|
|
#ifdef PROTECT_BDK_IMAGE
|
|
byte protectionArea; /* protection area no protecting the volume */
|
|
word protectionType; /* PROTECTABLE , CHANGEABLE_PROTECTION */
|
|
#endif /* PROTECT_BDK_IMAGE */
|
|
|
|
byte erasableBlockBits; /* number of bits used to represen a block */
|
|
FLFlash * flash; /* flash record representing the media */
|
|
|
|
} BDKVol;
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
/* Extern variables for low level operations. */
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
extern BDKVol* bdkVol;
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
/* OSAK Routines argument packet */
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
#ifdef BDK_ACCESS
|
|
typedef struct {
|
|
byte oldSign[BDK_SIGNATURE_NAME];
|
|
byte newSign[BDK_SIGNATURE_NAME];
|
|
byte signOffset;
|
|
dword startingBlock;
|
|
dword length;
|
|
byte flags;
|
|
byte FAR1 *bdkBuffer;
|
|
} BDKStruct;
|
|
#endif /* BDK_ACCESS */
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
/* Diffrent records used by the media header */
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
typedef struct {
|
|
LEulong virtualSize; /* Virtual size exported by the trasnaltion layer */
|
|
LEulong firstUnit; /* First erasable block of the partition */
|
|
LEulong lastUnit; /* Last erasable block of the partition */
|
|
LEulong flags; /* PROTECTABLE , BDK_BINARY_FLAG */
|
|
LEulong not_used1;
|
|
LEulong not_used2;
|
|
LEulong protectionArea; /* protection area no' */
|
|
} VolumeRecord;
|
|
|
|
/************************ Function Prototype Begin ************************/
|
|
|
|
#ifdef MTD_STANDALONE
|
|
|
|
/*************************/
|
|
/* BDK specific routines */
|
|
/*************************/
|
|
|
|
void bdkExit (void);
|
|
void bdkSetDocWindow (CardAddress docWindow);
|
|
FLStatus bdkSetBootPartitionNo (byte partitionNo);
|
|
FLStatus bdkFindDiskOnChip (CardAddress FAR2 *docAddress,
|
|
dword FAR2 *docSize );
|
|
FLStatus bdkCheckSignOffset (byte FAR2 *signature );
|
|
FLStatus bdkCopyBootArea (byte FAR1 *startAddress,
|
|
word startUnit,
|
|
dword areaLen,
|
|
byte FAR2 *checkSum,
|
|
byte FAR2 *signature);
|
|
|
|
/**************************************************/
|
|
/* common functions which are exported by the BDK */
|
|
/**************************************************/
|
|
|
|
FLStatus bdkGetBootPartitionInfo (word startUnit,
|
|
dword FAR2 *partitionSize,
|
|
dword FAR2 *realPartitionSize,
|
|
dword FAR2 *unitSize,
|
|
byte FAR2 *signature);
|
|
|
|
FLStatus bdkCopyBootAreaInit (word startUnit,
|
|
dword areaLen,
|
|
byte FAR2 *signature);
|
|
FLStatus bdkCopyBootAreaBlock (byte FAR1 *buf ,
|
|
word bufferLen,
|
|
byte FAR2 *checkSum);
|
|
|
|
#ifdef BDK_IMAGE_TO_FILE
|
|
|
|
FLStatus bdkCopyBootAreaFile ( char FAR2 *fname,
|
|
word startUnit,
|
|
dword areaLen,
|
|
byte FAR2 *checkSum,
|
|
byte FAR2 *signature );
|
|
#endif /* BDK_IMAGE_TO_FILE */
|
|
|
|
#ifdef UPDATE_BDK_IMAGE
|
|
|
|
FLStatus bdkUpdateBootAreaInit (word startUnit,
|
|
dword areaLen,
|
|
byte updateFlag,
|
|
byte FAR2 *signature );
|
|
FLStatus bdkUpdateBootAreaBlock (byte FAR1 *buf ,
|
|
word bufferLen );
|
|
|
|
#ifdef ERASE_BDK_IMAGE
|
|
FLStatus bdkEraseBootArea (word startUnit,
|
|
word noOfBlocks,
|
|
byte FAR2 * signature);
|
|
#endif /* ERASE_BDK_IMAGE */
|
|
#ifdef CREATE_BDK_IMAGE
|
|
FLStatus bdkCreateBootArea (word noOfBlocks,
|
|
byte FAR2 * oldSign,
|
|
byte FAR2 * newSign);
|
|
#endif /* CREATE_BDK_IMAGE */
|
|
|
|
#ifdef HW_OTP
|
|
FLStatus bdkGetUniqueID(byte FAR1* buf);
|
|
FLStatus bdkReadOtp(word offset,byte FAR1 * buffer,word length);
|
|
FLStatus bdkWriteAndLockOtp(const byte FAR1 * buffer,word length);
|
|
FLStatus bdkGetOtpSize(dword FAR2* sectionSize, dword FAR2* usedSize,
|
|
word FAR2* locked);
|
|
#endif /* HW_OTP */
|
|
|
|
#ifdef BDK_IMAGE_TO_FILE
|
|
|
|
FLStatus bdkUpdateBootAreaFile(char FAR2 *fname, word startUnit,
|
|
dword areaLen, byte FAR2 *signature);
|
|
#endif /* BDK_IMAGE_TO_FILE */
|
|
|
|
#endif /* UPDATE_BDK_IMAGE */
|
|
|
|
#ifdef PROTECT_BDK_IMAGE
|
|
|
|
FLStatus bdkGetProtectionType (word * protectionType);
|
|
|
|
FLStatus bdkSetProtectionType (word newType);
|
|
|
|
FLStatus bdkInsertKey (byte FAR1* key);
|
|
|
|
FLStatus bdkRemoveKey (void);
|
|
|
|
FLStatus bdkLockEnable (byte enable);
|
|
|
|
FLStatus bdkChangeKey (byte FAR1* key);
|
|
|
|
#endif /* PROTECT_BDK_IMAGE */
|
|
|
|
#else /* MTD_STANDALONE */
|
|
|
|
extern FLStatus bdkCall(FLFunctionNo functionNo,
|
|
IOreq FAR2 *ioreq, FLFlash* flash);
|
|
|
|
#endif /* MTD_STANDALONE */
|
|
|
|
/********************/
|
|
/* common functions */
|
|
/********************/
|
|
|
|
void bdkInit( void );
|
|
|
|
/************************ Function Prototype End **************************/
|
|
|
|
#endif /* BDK_ACCESS || MTD_STANDALONE */
|
|
#endif /* _DOC_BDK_H_ */
|
|
|
|
|