iBoot/drivers/flash_nand/raw/Whimory/Inc/VFL.h

172 lines
8.1 KiB
C
Raw Permalink Normal View History

2023-07-08 13:03:17 -07:00
/*****************************************************************************/
/* */
/* COMPONENT : Rainbow */
/* MODULE : Virtual Flash Layer */
/* NAME : VFL header file */
/* FILE : VFL.h */
/* PURPOSE : This file contains the definition and protypes of exported */
/* functions for VFL. */
/* */
/*---------------------------------------------------------------------------*/
/* */
/* COPYRIGHT 2003-2005 SAMSUNG ELECTRONICS CO., LTD. */
/* ALL RIGHTS RESERVED */
/* */
/* Permission is hereby granted to licensees of Samsung Electronics */
/* Co., Ltd. products to use or abstract this computer program for the */
/* sole purpose of implementing a product based on Samsung */
/* Electronics Co., Ltd. products. No other rights to reproduce, use, */
/* or disseminate this computer program, whether in part or in whole, */
/* are granted. */
/* */
/* Samsung Electronics Co., Ltd. makes no representation or warranties */
/* with respect to the performance of this computer program, and */
/* specifically disclaims any responsibility for any damages, */
/* special or consequential, connected with the use of this program. */
/* */
/*---------------------------------------------------------------------------*/
/* */
/* REVISION HISTORY */
/* */
/* 18-JUL-2005 [Jaesung Jung] : first writing */
/* 31-MAR-2006 [Yangsup Lee ] : support ftl meta block wear leveling */
/* */
/*****************************************************************************/
#ifndef _VFL_H_
#define _VFL_H_
#include "FPart.h"
#include "VFLBuffer.h"
/*****************************************************************************/
/* Return value of VFL_XXX() */
/*****************************************************************************/
#define VFL_SUCCESS ANDErrorCodeOk
#define VFL_SUCCESS_CLEAN ANDErrorCodeCleanOk
#define VFL_CRITICAL_ERROR ANDErrorCodeHwErr
#define VFL_U_ECC_ERROR ANDErrorCodeUserDataErr
/*****************************************************************************/
/* Type definition of checksum (confirm) state */
/*****************************************************************************/
/*****************************************************************************/
/* exported function prototype of VFL */
/*****************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#define VFL_SPANS_MAX (128)
// read result flags - 32 Bit
#define VFL_READ_STATUS_REFRESH (1 << 0)
#define VFL_READ_STATUS_RETIRE (1 << 1)
#define VFL_READ_STATUS_UECC (1 << 2) // UECC = invalid data TRUE and clean FALSE
#define VFL_READ_STATUS_CLEAN (1 << 3) // UECC = invalid data TRUE and clean TRUE
#define VFL_READ_STATUS_VALID_DATA (1 << 4) // at least one of the pages had valid data
#define VFL_READ_STATUS_UNIDENTIFIED (1 << 5) // at least one status was something we do not expect
#define VFL_READ_STATUS_ERRS (VFL_READ_STATUS_UECC | VFL_READ_STATUS_RETIRE | VFL_READ_STATUS_REFRESH)
#define VFL_READ_STATUS_ALL (0xFFFFFFFF)
typedef UInt32 VFLReadStatusType;
typedef void (*VFL_ReadSpansCB_t)(UInt32 vba, VFLReadStatusType status, UInt8 *meta);
typedef struct
{
BOOL32 bDisableWhitening;
BOOL32 bMarkECCForScrub;
UInt32 vba[VFL_SPANS_MAX];
UInt32 count[VFL_SPANS_MAX];
UInt8 *data[VFL_SPANS_MAX];
UInt8 *meta[VFL_SPANS_MAX];
UInt32 len;
VFL_ReadSpansCB_t cb;
UInt32 cbOpt;
VFLReadStatusType op_status;
} VFL_ReadSpans_t;
typedef struct _VFLFunctions
{
#ifndef AND_READONLY
Int32 (*Format)(UInt32 dwBootAreaSize, UInt32 dwOptions);
BOOL32 (*AllocateSpecialBlock)(SpecialBlockAddress *allocated_block, UInt16 type);
Int32 (*WriteSinglePage)(UInt32 nVpn, Buffer *pBuf, BOOL32 boolReplaceBlockOnFail, BOOL32 bDisableWhitening);
Int32 (*Erase)(UInt16 wVbn, BOOL32 bReplaceOnFail);
Int32 (*ChangeFTLCxtVbn)(UInt16 *aFTLCxtVbn);
BOOL32 (*WriteMultiplePagesInVb)
(UInt32 dwVpn, UInt16 wNumPagesToWrite,
UInt8 * pbaData, UInt8 * pbaSpare, BOOL32 boolReplaceBlockOnFail, BOOL32 bDisableWhitening);
BOOL32 (*MarkBlockAsGrownBad)(SpecialBlockAddress *allocated_block);
#if AND_SUPPORT_BLOCK_BORROWING
BOOL32 (*BorrowSpareBlock)(UInt32 *pdwPhysicalCE, UInt32 *pdwPhysicalBlock, UInt16 wType);
#endif //AND_SUPPORT_BLOCK_BORROWING
BOOL32 (*ProgramMultipleVbas)(UInt32 vba, UInt16 count, UInt8 *data, UInt8 *meta,
BOOL32 replaceOnPfail, BOOL32 disableWhitening);
#endif // ! AND_READONLY
Int32 (*Init)(FPartFunctions * pFPartFunctions);
Int32 (*Open)(UInt32 dwBootAreaSize, UInt32 minor_ver, UInt32 dwOptions);
void (*Close)(void);
BOOL32 (*ReadMultiplePagesInVb)
(UInt16 wVbn, UInt16 wStartPOffset,
UInt16 wNumPagesToRead,
UInt8 * pbaData,
UInt8 * pbaSpare,
BOOL32 * pboolNeedRefresh,
UInt8 * pabSectorStats,
BOOL32 bDisableWhitening);
BOOL32 (*ReadScatteredPagesInVb)
(UInt32 * padwVpn,
UInt16 wNumPagesToRead,
UInt8 * pbaData, UInt8 * pbaSpare,
BOOL32 * pboolNeedRefresh,
UInt8 * pabSectorStats,
BOOL32 bDisableWhitening, Int32 *actualStatus);
Int32 (*ReadSinglePage)(UInt32 nVpn, Buffer *pBuf,
BOOL32 bCleanCheck,
BOOL32 bMarkECCForScrub,
BOOL32 * pboolNeedRefresh,
UInt8 * pabSectorStats,
BOOL32 bDisableWhitening);
UInt16* (*GetFTLCxtVbn)(void);
BOOL32 (*GetStruct)(UInt32 dwStructType,
void * pvoidStructBuffer,
UInt32 * pdwStructSize);
BOOL32 (*SetStruct)(UInt32 dwStructType,
void * pvoidStructBuffer,
UInt32 dwStructSize);
UInt32 (*GetDeviceInfo)(UInt32 dwParamType);
UInt32 (*GetMinorVersion)(void);
UInt16 (*GetVbasPerVb)(UInt16 wVbn);
// new func - read
VFLReadStatusType (*ReadMultipleVbas)(UInt32 vba, UInt16 count, UInt8 *data, UInt8 *meta,
BOOL32 bDisableWhitening, BOOL32 bMarkECCForScrub);
void (*ReadSpansInit)(VFL_ReadSpans_t *s, VFL_ReadSpansCB_t cb, UInt32 cbOpt, BOOL32 bDisableWhitening, BOOL32 bMarkECCForScrub);
void (*ReadSpansAdd)(VFL_ReadSpans_t *s, UInt32 vba, UInt32 count, UInt8 *data, UInt8 *meta);
VFLReadStatusType (*ReadSpans)(VFL_ReadSpans_t *s);
} VFLFunctions;
void VSVFL_Register(VFLFunctions * pVFL_Functions);
void VFL_Register(VFLFunctions * pVFL_Functions);
void PPNVFL_Register(VFLFunctions * pVFL_Functions);
#define PPN_VFL_MAJOR_VER (1)
VFLFunctions * PPN_VFL_GetFunctions(void);
#define PPN_SVFL_MAJOR_VER (2)
VFLFunctions * PPN_SVFL_GetFunctions(void);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _VFL_H_ */