📄 _dochapi.h
字号:
#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 + -