/* * (C) Copyright 2018 * wangwei */ #ifndef __spare_head_h__ #define __spare_head_h__ /* work mode */ #define WORK_MODE_PRODUCT (1<<4) #define WORK_MODE_UPDATE (1<<5) #define WORK_MODE_BOOT 0x00 /*normal boot mode */ #define WORK_MODE_USB_PRODUCT 0x10 /*usb product mode */ #define WORK_MODE_CARD_PRODUCT 0x11 /*card burn mode */ #define WORK_MODE_USB_DEBUG 0x12 /*some test mode by usb efex protocol */ #define WORK_MODE_SPRITE_RECOVERY 0x13 /*update firmware from internal backup part */ #define WORK_MODE_CARD_UPDATE 0x14 /*update firmware from sdcard */ #define WORK_MODE_USB_UPDATE 0x20 /*usb update mode */ #define WORK_MODE_UDISK_UPDATE 0x15 #define WORK_MODE_OUTER_UPDATE 0x21 #define NOUSE_CARDMODE (0xFFFFFFFF) #define WORK_MODE_USB_TOOL_PRODUCT 0x04 #define WORK_MODE_USB_TOOL_UPDATE 0x08 #define WORK_MODE_ERASE_KEY 0x20 #define UBOOT_MAGIC "uboot" #define STAMP_VALUE 0x5F0A6C39 #define ALIGN_SIZE (4 * 1024) #define MAGIC_SIZE 8 #define STORAGE_BUFFER_SIZE (256) #define PARAMETER_MAGIC "para" #define BOOT_PARAMETER_SIZE (4094*2) #define SUNXI_UPDATE_NEXT_ACTION_NORMAL (1) #define SUNXI_UPDATE_NEXT_ACTION_REBOOT (2) #define SUNXI_UPDATE_NEXT_ACTION_SHUTDOWN (3) #define SUNXI_UPDATE_NEXT_ACTION_REUPDATE (4) #define SUNXI_UPDATE_NEXT_ACTION_BOOT (5) #define SUNXI_UPDATA_NEXT_ACTION_SPRITE_TEST (6) #define SUNXI_DEBUG_MODE_FLAG (0x59) #define SUNXI_EFEX_CMD_FLAG (0x5A) #define SUNXI_BOOT_RESIGNATURE_FLAG (0x5B) #define SUNXI_BOOT_RECOVERY_FLAG (0x5C) #define SUNXI_SYS_RECOVERY_FLAG (0x5D) #define SUNXI_USB_RECOVERY_FLAG (0x5E) #define SUNXI_FASTBOOT_FLAG (0x5F) #define SUNXI_VBUS_UNKNOWN (0) #define SUNXI_VBUS_EXIST (1) #define SUNXI_VBUS_NOT_EXIST (2) #define BOOT0_SDMMC_START_ADDR (16) #define BOOT0_SDMMC_BACKUP_START_ADDR (256) #define BOOT0_EMMC3_START_ADDR (384) #define BOOT0_EMMC3_BACKUP_START_ADDR (512) #define UBOOT_START_SECTOR_IN_SDMMC (32800) #define UBOOT_BACKUP_START_SECTOR_IN_SDMMC (24576) #define SUNXI_NORMAL_MODE 0 #define SUNXI_SECURE_MODE_WITH_SECUREOS 1 #define SUNXI_SECURE_MODE_NO_SECUREOS 2 #define SUNXI_RUN_CRASHDUMP_RESET_FLAG (0x5AA55AA5) #define SUNXI_RUN_CRASHDUMP_RESET_READY (0x5AA55AA6) #define SUNXI_RUN_CRASHDUMP_REFRESH_READY (0x5AA55AA7) #define SUNXI_LOGO_OFFSET (3<<20) #define SUNXI_DTB_OFFSET (2<<20) /* Reserve 4k for bootparam*/ #define SUNXI_BOOTPARAM_OFFSET (SUNXI_DTB_OFFSET - 4096) #define SUNXI_CFG_OFFSET (1<<20) #define SUNXI_DTBO_OFFSET (1<<20) typedef enum _SUNXI_BOOT_FILE_MODE { SUNXI_BOOT_FILE_NORMAL =0, SUNXI_BOOT_FILE_TOC = 1, SUNXI_BOOT_FILE_RES0 = 2, SUNXI_BOOT_FILE_RES1 = 3, SUNXI_BOOT_FILE_PKG = 4 }SUNXI_BOOT_FILE_MODE; #define BOOT_FROM_SD0 0 #define BOOT_FROM_NFC 1 #define BOOT_FROM_SD2 2 #define BOOT_FROM_SPI_NOR 3 #define BOOT_FROM_SPI_NAND 4 #define SUNXI_SECURE_MODE_USE_SEC_MONITOR 1 #define TOC_ITEM_ENTRY_STATUS_ENCRYP_NOT_USED 0x00 #define TOC_ITEM_ENTRY_STATUS_ENCRYP_USED 0x01 #define TOC_ITEM_ENTRY_TYPE_NULL 0x00 #define TOC_ITEM_ENTRY_TYPE_KEY_CERTIF 0x01 #define TOC_ITEM_ENTRY_TYPE_BIN_CERTIF 0x02 #define TOC_ITEM_ENTRY_TYPE_BIN 0x03 #define TOC_ITEM_ENTRY_TYPE_LOGO 0x04 typedef struct _normal_gpio_cfg { char port; /* port : PA/PB/PC ... */ char port_num; /* internal port num: PA00/PA01 ... */ char mul_sel; /* function num: input/output/io-disalbe ...*/ char pull; /* pull-up/pull-down/no-pull */ char drv_level; /* driver level: level0-3*/ char data; /* pin state when the port is configured as input or output*/ char reserved[2]; } normal_gpio_cfg; typedef struct _special_gpio_cfg { unsigned char port; /* port : PA/PB/PC ... */ unsigned char port_num; /* intern port num: PA00/PA01 .. */ char mul_sel; /* function num: input/output/io-disalbe ...*/ char data; /* pin state when the port is configured as input or output*/ }special_gpio_cfg; typedef struct sdcard_spare_info_t { int card_no[4]; /*controller num*/ int speed_mode[4]; /*speed mode: 0--low speed, other--high speed */ int line_sel[4]; /*line mode: 1/4/8*/ int line_count[4]; /*line count*/ } sdcard_spare_info; #pragma pack(1) typedef struct _boot_extend_head_t { __u8 version[8]; /*version:1.0*/ __u8 magic[8]; /* ="DRAM.ext" */ __u8 select_mode; /*0:不进行自动识别 1:gpio识别模式 2:gpadc识别模式 3:1个IO+gpadc识别模式*/ __u8 gpadc_channel; /*select gpadc 通道*/ __u8 reserve[2]; normal_gpio_cfg dram_select_gpio[4]; /*select_mode=1|3 时设置的pin*/ unsigned int dram_para[15][32]; /*ext dram参数*/ __u8 reserve1[12]; } boot_extend_head_t; #pragma pack() typedef enum { STORAGE_NAND =0, STORAGE_SD, STORAGE_EMMC, STORAGE_NOR, STORAGE_EMMC3, STORAGE_SPI_NAND, STORAGE_SD1, STORAGE_EMMC0, }SUNXI_BOOT_STORAGE; #endif