📄 h3_hwtest.h
字号:
#ifndef H3_HW_TEST_H
#define H3_HW_TEST_H
#include "test_platform.h"
#define DOCH_USING_8K_WIN
#define DOCH_SET_CUSTOM_PARAM 0x41
#define DOCH_GET_DISK_USER_ATTR 0x70
#define DOCH_SET_DISK_USER_ATTR 0x71
/*Register areas*/
/*--------------*/
#ifdef DOCH_USING_8K_WIN
#define HIB_CORE_ADDRESS 0x0C000000
#define DOCH_CONT_REG_AREA (HIB_CORE_ADDRESS + 0x0800)
#define DOCH_DATA_PORT_AREA (HIB_CORE_ADDRESS + 0x1000)
#define DOCH_CONFIG_REG_AREA (HIB_CORE_ADDRESS + 0x1400)
#define DOCH_MEM_WIN_SIZE 0x2000 /*8KB*/
#else /* DOCH_USING_8K_WIN */
#define HIB_CORE_ADDRESS 0x0C008000
#define DOCH_MEM_WIN_SIZE 0x20000 /*128KB*/
#define DOCH_CONT_REG_AREA HIB_CORE_ADDRESS
#define DOCH_DATA_PORT_AREA (HIB_CORE_ADDRESS + 0x0800)
#define DOCH_CONFIG_REG_AREA (HIB_CORE_ADDRESS + 0x1400)
#define DOCH_PRIMARY_SECONDARY_AREA (HIB_CORE_ADDRESS + 0x1800)
#endif /* DOCH_USING_8K_WIN */
#define HIB_CHIPID1_REG (DOCH_CONFIG_REG_AREA)
#define HIB_CHIPID2_REG (DOCH_CONFIG_REG_AREA + 0x22)
#define HIB_IPL_CONTROL_REG (DOCH_CONFIG_REG_AREA + 0x08)
#define HIB_IPL_CONTROL_ADD (DOCH_CONFIG_REG_AREA + 0x08)
#define DOCH_DATA_MODE_SINGLE 0
#define DOCH_DATA_MODE_MULT 1
#define HIB_OPERATION_MODE_REG DOCH_CONFIG_REG_AREA + 0x14
#define HIB_NO_ADDR_SHIFT 0x00
#define HIB_ADDR_SHIFT 0x02
/*Operation Mode Register*/
#define HIB_NON_PIPE_ACCESS 0x00
#define HIB_PIPE_ACCESS 0x01
/* bits for DOCH_DRIVE_HEAD_REG register */
#define DOCH_DEVICE 0x10
#define DOCH_LBA 0x40
#define DOCH_DRIVE_HEAD 0xA0
/* size of DOCH data block in FLBytes */
#define DOCH_SECTOR_SIZE 512
#define DOCH_SECTOR_SIZE_BITS 9
/* bits in DOCH_STATUS_REG and DOCH_ALT_STATUS_REG registers */
#define DOCH_ERROR 0x01
#define DOCH_DRQ 0x08
#define DOCH_DSC 0x10
#define DOCH_READY 0x40
#define DOCH_BUSY 0x80
#define DOCH_MAX_SECTORS 256
/* all DOCH error codes */
#define DOCH_ATA_ERROR_BASE 0x0
#define DOCH_SDK_ERROR_BASE 0x100
#define DOCH_FS_ERROR_BASE 0x200
#ifdef DOCH_FPGA_SIM
/* 'long' DOCH operations can take up to DOCH_LONG_WAIT milliseconds */
#define DOCH_LONG_WAIT 5000
/* 'short' DOCH operations can take up to DOCH_SHORT_WAIT milliseconds */
#define DOCH_SHORT_WAIT 5000
#else /*DOCH_FPGA_SIM*/
/* 'long' DOCH operations can take up to DOCH_LONG_WAIT milliseconds */
#define DOCH_LONG_WAIT 500
/* 'short' DOCH operations can take up to DOCH_SHORT_WAIT milliseconds */
#define DOCH_SHORT_WAIT 5
#endif /*DOCH_FPGA_SIM*/
typedef enum { DOCH_OK = 0,
/*ATA Error codes*/
DOCH_AtaDeviceNotFound = DOCH_ATA_ERROR_BASE + 6,
DOCH_UnknownATACmd = DOCH_ATA_ERROR_BASE + 7,
DOCH_NoSpaceInVolume = DOCH_ATA_ERROR_BASE + 10,
DOCH_NoSpaceInDevice = DOCH_ATA_ERROR_BASE + 11,
DOCH_PartitionNotProtected = DOCH_ATA_ERROR_BASE + 20,
DOCH_NoWriteAccess = DOCH_ATA_ERROR_BASE + 21,
DOCH_NoReadAccess = DOCH_ATA_ERROR_BASE + 22,
DOCH_PartitionProtected = DOCH_ATA_ERROR_BASE + 23,
DOCH_WrongPasskey = DOCH_ATA_ERROR_BASE + 24,
DOCH_PartitionOTPEnabled = DOCH_ATA_ERROR_BASE + 25,
DOCH_TimedOut = DOCH_ATA_ERROR_BASE + 30,
DOCH_PartitionNotFormatted = DOCH_ATA_ERROR_BASE + 35,
DOCH_SectorExceedsVolume = DOCH_ATA_ERROR_BASE + 40,
DOCH_AtaVerifyFault = DOCH_ATA_ERROR_BASE + 41,
/*SDK Error Codes*/
DOCH_GeneralFailure = DOCH_SDK_ERROR_BASE + 5,
DOCH_AdapterNotFound = DOCH_SDK_ERROR_BASE + 6,
DOCH_BadFunction = DOCH_SDK_ERROR_BASE + 10,
DOCH_BadParameter = DOCH_SDK_ERROR_BASE + 15,
DOCH_DriveNotAvailable = DOCH_SDK_ERROR_BASE + 20,
DOCH_DriveNotReady = DOCH_SDK_ERROR_BASE + 25,
DOCH_FormattingError = DOCH_SDK_ERROR_BASE + 30,
DOCH_NotEnoughMemory = DOCH_SDK_ERROR_BASE + 35,
DOCH_ReadFault = DOCH_SDK_ERROR_BASE + 40,
DOCH_WriteFault = DOCH_SDK_ERROR_BASE + 41,
DOCH_VerifyFault = DOCH_SDK_ERROR_BASE + 42,
DOCH_UnknownCmd = DOCH_SDK_ERROR_BASE + 45,
DOCH_UnknownMedia = DOCH_SDK_ERROR_BASE + 50,
DOCH_DiskNotFound = DOCH_SDK_ERROR_BASE + 55,
DOCH_PartitionNotFound = DOCH_SDK_ERROR_BASE + 60,
DOCH_FeatureNotSupported = DOCH_SDK_ERROR_BASE + 65,
DOCH_ATABusyNotCleared = DOCH_SDK_ERROR_BASE + 70,
DOCH_ATANotReady = DOCH_SDK_ERROR_BASE + 71,
DOCH_ATAErrorDetected = DOCH_SDK_ERROR_BASE + 72
} DOCH_Error;
/* 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*/
} DOCH_Registers;
typedef enum {
DOCH_DATA_REG = DOCH_CONT_REG_AREA,
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;
/* set of DOCH Vendor-Specific ATA Commands */
typedef enum {
/*I/O*/
DOCH_VSCMD_READ_PARTITION = 0x82,
DOCH_VSCMD_WRITE_PARTITION = 0x83,
DOCH_VSCMD_WRITE_FLEXI = 0x84,
DOCH_VSCMD_VERIFY = 0x85,
/*Sectors Operations*/
DOCH_VSCMD_OPTIMIZE_SECTORS = 0x86,
DOCH_VSCMD_ERASE_SECTORS = 0x88,
/*Hash*/
DOCH_VSCMD_READ_CALCULATED_HASH = 0x8A,
DOCH_VSCMD_WRITE_CALCULATED_HASH = 0x8B,
DOCH_VSCMD_READ_ORIGINAL_HASH = 0x8C,
DOCH_VSCMD_WRITE_GIVEN_HASH = 0x8D,
/*Sub-commanded commands*/
DOCH_VSCMD_PARTITION_MANAGEMENT = 0xFA,
DOCH_VSCMD_ACCESS_CONTROL = 0xFB,
DOCH_VSCMD_EXT_DEVICE_CTRL = 0xFC,
DOCH_VSCMD_EXT_SECURITY_CTRL = 0xFD,
/*Supported standard ATA commands*/
DOCH_CMD_IDENTIFY_DEV = 0xEC,
DOCH_DOWNLOAD_MICROCODE = 0x92
} DOCH_Command;
/* Optional bits in DOCH_DRIVE_HEAD_REG */
#define DRIVE_HEAD_OPT1 0x80
#define DRIVE_HEAD_OPT2 0x20
/* Pattern to add to DOCH_DRIVE_HEAD_REG to */
/*Option1*/
#define CUSTOM_PARAM_TEMP DRIVE_HEAD_OPT1 /*Temporary value*/
#define CUSTOM_PARAM_DEFAULT 0 /*DEFAULT value*/
/* Custom Parameters Table */
typedef enum {
DOCH_CP_BOOT_MODE = 0x00, /*Boot Mode (See DOCH_IPLModes)*/
DOCH_CP_XIP_TEST_MODE = 0x01, /*XIP Test Modes (See DOCH_XIPTestModes)*/
DOCH_CP_XIP_MAX_SIZE = 0x02, /*Max XIP Size*/
DOCH_CP_XIP_ETFFS_SIZE = 0x03 /*Returns the size of the currently saved ETFFS (required for uploading the ETFFS)*/
} DOCH_CustomParams;
#define DOCH_CUSTOM_PARAM_TEMP 0
#define DOCH_CUSTOM_PARAM_DEFAULT 1
/* IPL Modes */
typedef enum {
DOCH_IPL_MODE_NORMAL_RAM = 0x0000,
DOCH_IPL_MODE_PAGED_RAM = 0x0001,
DOCH_IPL_MODE_VIRTUAL_RAM = 0x0002,
DOCH_IPL_MODE_CS_DELAY = 0x1000, /*Should be Or`ed with 0x0XX0, where bits 4-11 indicating delay*/
DOCH_IPL_MODE_ADDRESS_SHIFT_IN_AFFECT = 0x2000,
DOCH_IPL_MODE_ACTIVE_SWAP_BYTES = 0x4000,
DOCH_IPL_MODE_8KB_WINDOW = 0x8000
} DOCH_IPLModes;
#define DOCH_IPL_WRITE_FIRST_CHUNK 0x80000000 /*Defines first chunk when writing IPL in chunks*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -