⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _dochapi.h

📁 H3 M-system NAND flash driver in Linux OS, M-DOC driver
💻 H
📖 第 1 页 / 共 5 页
字号:
#define DOCH_DPD_WAKEUP_HOST_CE		 0x0000
#define DOCH_DPD_WAKEUP_ASYNC_CLK	 0x0100

/*DMA Control Register*/
#define DOCH_DMA_REQ_DISABLE         0x0000
#define DOCH_DMA_REQ_ENABLE          0x0001

#define DOCH_DMA_REQ_POL_HIGH        0x0000
#define DOCH_DMA_REQ_POL_LOW         0x0002

#define DOCH_DMA_REQ_LEVEL           0x0000
#define DOCH_DMA_REQ_EDGE            0x0004

/*SLOCK Control Register*/
#define DOCH_SLOCK_ACTIVE			 0x0001
#define DOCH_SLOCK_OFF				 0x0000

/*Burst write/read mode control*/
#define DOCH_BURST_DISABLE           0x0000
#define DOCH_BURST_ENABLE            0x0002

#define DOCH_BURST_HOLD_1_CLK        0x0000
#define DOCH_BURST_HOLD_2_CLK        0x2000

#define DOCH_BURST_LEN_4_CYC         0x0000
#define DOCH_BURST_LEN_8_CYC         0x0800
#define DOCH_BURST_LEN_16_CYC        0x1000
#define DOCH_BURST_LEN_32_CYC        0x1800

/*Endian Control Register*/
#define DOCH_END_SWAP_OFF            0x0000
#define DOCH_END_SWAP_ON	         0x0101

/*Operation Mode Register*/
#define DOCH_NON_PIPE_ACCESS         0x00
#define DOCH_PIPE_ACCESS             0x01

#define DOCH_NO_ADDR_SHIFT           0x00
#define DOCH_ADDR_SHIFT              0x02

/*Power Mode Register*/
#define DOCH_POWER_MODE_DPD          0x0001

/*Environment variables*/
typedef enum {
	DOCH_ENV_VERIFY_WRITE		= 0x01,	/* Verifies every written sector by reading it back from device */
	DOCH_ENV_ATA_DEBUG			= 0x02,	/* Retrieve debug buffer from device after completion of ATA command */
	DOCH_ENV_BLOCK_SPI			= 0x03,	/* Block SPI */
	DOCH_ENV_NO_ATA_TIMEOUT		= 0x04,	/* Disable ATA command timeout */
	DOCH_ENV_AUTO_DPD_BY_HOST	= 0x05  /* Host automatically enters device to DPD after every command*/
} DOCH_EnVars;

/*Flags for read/write operations using DMA/Burst*/
#define DOCH_USE_DMA		0x01
#define DOCH_USE_BURST		0x02

/* Strings lengths */
#define DOCH_PASS_KEY_LEN			0x80
#define DOCH_PASS_KEY_LEN_NO_NULL	(H3_PASS_KEY_LEN-1)
#define DOCH_SER_NO_LEN				0x14
#define DOCH_MODEL_NO_LEN           0x28
#define DOCH_PROG_NAME_LEN          0x10
#define DOCH_PROG_VER_LEN           0x8

/* DOCH error codes */
/*------------------*/
#define DOCH_ATA_ERROR_BASE	0x0
#define DOCH_SDK_ERROR_BASE	0x100
#define DOCH_FS_ERROR_BASE  0x200

typedef enum { DOCH_OK                  = 0,

				/*ATA Error codes*/

				DOCH_ATA_NO_ERROR                     = DOCH_ATA_ERROR_BASE + 0x00,
				DOCH_ATA_ERROR_MEDIA_ERROR_DETECTED   = DOCH_ATA_ERROR_BASE + 0x01,  /*ATA-4*/
				DOCH_ATA_ERROR_ADDRESS_MARK_NOT_FOUND = DOCH_ATA_ERROR_BASE + 0x01,  /*Repeat last operation*/
				DOCH_ATA_ERROR_TRACK_0_NOT_FOUND      = DOCH_ATA_ERROR_BASE + 0x02,  /*Protection violation*/
				DOCH_ATA_ERROR_NO_MEDIA               = DOCH_ATA_ERROR_BASE + 0x02,  /*ATA-4*/
				DOCH_ATA_ERROR_ABORT                  = DOCH_ATA_ERROR_BASE + 0x04,  /*Always need to be supplied*/
				DOCH_ATA_ERROR_MEDIA_CHANGE_REQUESTED = DOCH_ATA_ERROR_BASE + 0x08,  /*Not to use for now*/
				DOCH_ATA_ERROR_ID_NOT_FOUND           = DOCH_ATA_ERROR_BASE + 0x10,  /*Passing partition boundary*/
				DOCH_ATA_ERROR_MEDIA_CHANGE_DETECTED  = DOCH_ATA_ERROR_BASE + 0x20,  /*Not to use for now*/
				DOCH_ATA_ERROR_WRITE_PROTECTED        = DOCH_ATA_ERROR_BASE + 0x40,  /*on writes       - only if we run out of space*/
				DOCH_ATA_ERROR_UNCORRECTABLE_DATA	  = DOCH_ATA_ERROR_BASE + 0x40,  /*on reads        - possible for unrecoverable ECC - should not be returned by write routines*/
				DOCH_ATA_ERROR_ICRC					  = DOCH_ATA_ERROR_BASE + 0x80,  /*on DMA xfers    - to leave for now*/
	
				/*SDK Error Codes*/
				DOCH_TimedOut			 = DOCH_SDK_ERROR_BASE,
				DOCH_GeneralFailure      = DOCH_SDK_ERROR_BASE + 5,
				DOCH_AdapterNotFound     = DOCH_SDK_ERROR_BASE + 6,
				DOCH_DeviceTurnedOff     = DOCH_SDK_ERROR_BASE + 7,
				DOCH_BadParameter        = DOCH_SDK_ERROR_BASE + 10,
				DOCH_DriveNotAvailable   = DOCH_SDK_ERROR_BASE + 15,
				DOCH_DriveNotReady       = DOCH_SDK_ERROR_BASE + 20,
				DOCH_NotEnoughMemory     = DOCH_SDK_ERROR_BASE + 25,
				DOCH_ReadFault           = DOCH_SDK_ERROR_BASE + 30,
				DOCH_WriteFault          = DOCH_SDK_ERROR_BASE + 31,
				DOCH_VerifyFault         = DOCH_SDK_ERROR_BASE + 32,
				DOCH_ProtectionFault     = DOCH_SDK_ERROR_BASE + 33,
				DOCH_UnknownCmd          = DOCH_SDK_ERROR_BASE + 35,
				DOCH_DiskNotFound        = DOCH_SDK_ERROR_BASE + 40,
				DOCH_PartitionNotFound	 = DOCH_SDK_ERROR_BASE + 45,
				DOCH_PartitionLimitExceeded = DOCH_SDK_ERROR_BASE + 50,
				DOCH_FeatureNotSupported = DOCH_SDK_ERROR_BASE + 55,
				DOCH_ATABusyNotCleared	 = DOCH_SDK_ERROR_BASE + 60,
				DOCH_ATANotReady		 = DOCH_SDK_ERROR_BASE + 61,
				DOCH_ATAErrorDetected	 = DOCH_SDK_ERROR_BASE + 65

} DOCH_Error;


/*	IOCTL Codes	*/
typedef enum {
	/*Get Info*/
	SDK_IDENTIFY_DISKONCHIP_DEVICE	= 0x200,
	SDK_GET_RESET_STATUS			= 0x201,
	SDK_NOTIFY_RESET				= 0x202,
	SDK_NOTIFY_PLATFORM_RESUMED		= 0x203,
	SDK_GET_PARTITION_INFO			= 0x204,
	SDK_SET_DISK_USER_ATTR			= 0x205,
	SDK_GET_DISK_USER_ATTR			= 0x206,
	SDK_GET_CONFIG_DATA				= 0x207,
	SDK_SET_CONFIG_DATA				= 0x208,

	/*Media*/
	SDK_SET_DEFAULT_PARTITION	= 0x210,
	SDK_SET_DATA_XFER_MODE		= 0x211,
	SDK_OPTIMIZE_MEDIA			= 0x212,
	SDK_DELETE_PARTITIONS		= 0x213,
	SDK_ADD_PARTITION			= 0x214,
	SDK_UNFORMAT_DEVICE			= 0x215,
	SDK_WRITE_IPL				= 0x216,
	SDK_READ_IPL				= 0x217,

	/*IO*/
	SDK_READ_PARTITION_SECTORS	= 0x220,
	SDK_WRITE_PARTITION_SECTORS	= 0x221,
	SDK_WRITE_AND_LOCK			= 0x222,
	SDK_WIPE_SECTORS			= 0x223,
	SDK_FREE_SECTORS			= 0x224,
	SDK_PREPARE_FOR_WRITE		= 0x225,

	/*Flexi-Flash*/
	SDK_WRITE_FLEXI_FAST		= 0x230,
	SDK_WRITE_FLEXI_NORMAL		= 0x231,
	SDK_REWRITE_FLEXI_NORMAL	= 0x232,

	/*Hash*/
	SDK_READ_WITH_HASH_VERIFY	= 0x240,
	SDK_READ_HASH				= 0x241,
	SDK_WRITE_HASH				= 0x242,

	/*Protection*/
	SDK_ACCESS_PART_WITH_PWD	= 0x250,
	SDK_DISABLE_PART_ACCESS		= 0x251,
	SDK_SET_PART_PROTECTION		= 0x252,
	SDK_SET_PART_USER_ATTR		= 0x253,
	SDK_GET_PART_USER_ATTR		= 0x254,

	/*PKI*/
	SDK_PKI_HOST				= 0x260,
	SDK_PKI_DOCH				= 0x261,
	SDK_PKI_VERIFY_HOST_KEY		= 0x262,

	/*Custom Parameters*/
	SDK_GET_CUSTOM_PARAM		= 0x270,
	SDK_SET_CUSTOM_PARAM		= 0x271,

	/*Atomic Read/Write Sequence*/
	SDK_ATOMIC_WRITE_SEQ		= 0x280,

	/*Algorithms*/
	SDK_REPORT_SUPP_ALG			= 0x290,
	SDK_REPORT_ALG_CAPAB		= 0x291,
	SDK_SET_ALG_MODE			= 0x292,

	/*Hash*/
	SDK_AUTO_HASH_CTRL			= 0x2A0,
	SDK_READ_CALC_HASH			= 0x2A1,
	SDK_WRITE_CALC_HASH			= 0x2A2,
	SDK_READ_ORIG_HASH			= 0x2A3,
	SDK_WRITE_GIVEN_HASH		= 0x2A4,
	SDK_START_HASH_STREAM_CALC	= 0x2A5,
	SDK_READ_HASH_STREAM_CALC	= 0x2A6,
	SDK_RETURN_RAND_NUMS		= 0x2A7,
	SDK_SET_HASH_KEY			= 0x2A8,

	/*General (Control/Configuration)*/
	SDK_SET_POWER_MODE			= 0x2B0,
	SDK_GET_POWER_MODE			= 0x2B1,
	SDK_HW_CONFIG				= 0x2B2,
	SDK_RECOVER_FROM_POWER_LOSS	= 0x2B3,
	SDK_RESET_SOCKET			= 0x2B4,
	SDK_SET_ENV_VAR				= 0x2B5,
	SDK_CLEAR_ATA_INTERRUPT		= 0x2B6,
	SDK_GET_PHYSICAL_ADDRESS	= 0x2B7
} SDKFunctionNo;

/* runtime socket init data */
typedef struct {
	unsigned int nDeviceAddress;
} DOCH_InitSocket;

/* Access layer routines registration structure */
typedef struct {
	unsigned char (*hal_get_ata_reg_user)	(volatile unsigned char *base, int reg);
	void		  (*hal_set_ata_reg_user)	(volatile unsigned char *base, int reg, unsigned int val);
	unsigned short(*hal_get_ctrl_reg_user)	(volatile unsigned char *base, int reg);
	void		  (*hal_set_ctrl_reg_user)	(volatile unsigned char *base, int reg, unsigned int val);
	int			  (*hal_blk_read_user)		(volatile unsigned char *base, unsigned char *buf, int sectors);
	int			  (*hal_blk_write_user)		(volatile unsigned char *base, unsigned char *buf, int sectors);
	int			  (*hal_release_user)		(int socketNo);
} DOCH_BusAccess_routines;

/********************/
/*	API Defines		*/
/********************/

/* set of DOCH ATA registers */
typedef enum { 
			   DOCH_DATA_REG          = 0x00,
			   DOCH_ERROR_REG         = 0x01,
               DOCH_FEATURES_REG      = 0x01,
               DOCH_SECTOR_CNT_REG    = 0x02,
               DOCH_SECTOR_NO_REG     = 0x03,
               DOCH_CYLINDER_LOW_REG  = 0x04,
               DOCH_CYLINDER_HIGH_REG = 0x05,
               DOCH_DRIVE_HEAD_REG    = 0x06,
               DOCH_STATUS_REG        = 0x07,
               DOCH_COMMAND_REG       = 0x07,
               DOCH_ALT_STATUS_REG    = 0x0E,
               DOCH_CONTROL_REG		  = 0x0E
} DOCH_Reg;

/* ATA registers structure */
typedef struct {  FLByte bFeaturesError;	/* DOCH_FEATURES_REG or DOCH_ERROR_REG	*/
				  FLByte bSectorCount;		/* DOCH_SECTOR_CNT_REG	*/
				  FLByte bSectorNumber;		/* DOCH_SECTOR_NO_REG	*/
				  FLByte bCylLow;			/* DOCH_CYLINDER_LOW_REG	*/
				  FLByte bCylHigh;			/* DOCH_CYLINDER_HIGH_REG	*/
				  FLByte bDriveHead;		/* DOCH_DRIVE_HEAD_REG	*/
				  FLByte bCommandStatus;	/* DOCH_COMMAND_REG	or DOCH_STATUS_REG*/
				  FLByte bContorlAltStatus;	/* DOCH_CONTROL_REG	or DOCH_ALT_STATUS_REG*/
} DOCH_Registers;

/* Set of operation codes for PassThru */
typedef enum { DOCH_PASSTHRU_NO_DATA		= 0x00,
               DOCH_PASSTHRU_DATA_IN		= 0x01,
               DOCH_PASSTHRU_DATA_OUT		= 0x02
} DOCH_PassThru_Op;

typedef enum { DOCH_PASSTHRU_NO_INT		= 0x00,
               DOCH_PASSTHRU_USE_INT	= 0x04

} DOCH_PassThru_Int;


/*OPTIMIZE_MEDIA*/
#define DOCH_OPTIMIZE_BY_PREPARE_FOR_WRITE	0
#define DOCH_OPTIMIZE_DEFAULT				1

typedef enum {
	SET_DEFAULT_PARTITION_TEMP = 0x0,
	SET_DEFAULT_PARTITION_PERM = 0x1
} DOCH_DefaultPartSet;

typedef enum {
	DOCH_FAST_PARTITOIN_DELETE		= 0x0,
	DOCH_COMPLETE_PARTITION_DELETE	= 0x8
} DOCH_DeletePartitionsMode;


/******************************************************************************/
/*
 *	Partition Info structure, sub-structures and ENUMS
 */
/******************************************************************************/

/*Partition dwCommandFlagsOrStatuses Offsets*/
#define	DOCH_CFSO_FAST_AREA_SIZE_TYPE	8
#define	DOCH_CFSO_USER_AUTHENTICATED	16
#define	DOCH_CFSO_PERM_LOCKED			17
#define	DOCH_CFSO_MASTER_AUTHENTICATED	18
#define	DOCH_CFSO_HW_LOCK_ASSERTED		30
#define	DOCH_CFSO_SW_LOCK_ASSERTED		31

/*Partition dwCommandFlagsOrStatuses Bits*/
#define	DOCH_CFSB_FAST_AREA_SIZE_TYPE	0x00000100
#define	DOCH_CFSB_USER_AUTHENTICATED	0x00010000
#define	DOCH_CFSB_PERM_LOCKED			0x00020000
#define	DOCH_CFSB_MASTER_AUTHENTICATED	0x00040000
#define	DOCH_CFSB_HW_LOCK_ASSERTED		0x40000000
#define	DOCH_CFSB_SW_LOCK_ASSERTED		0x80000000

/*Partition Attribute1 Offsets*/
#define	DOCH_PA1O_PARTITION_TYPE	0
#define	DOCH_PA1O_PERFORMANCE_CTRL	8
#define	DOCH_PA1O_PAGE_SIZE_EXP		16
#define	DOCH_PA1O_HASH_TYPE			24

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -