TERES/SOFTWARE/A64-TERES/u-boot_new/usb_sunxi/usb_efex.h
Dimitar Gamishev 093685c7d8 u-boot
2017-10-13 14:02:55 +03:00

406 lines
9.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* (C) Copyright 2007-2013
* Allwinner Technology Co., Ltd. <www.allwinnertech.com>
* Jerry Wang <wangflord@allwinnertech.com>
*
* See file CREDITS for list of people who contributed to this
* project.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*/
#ifndef __USB_EFEX_H__
#define __USB_EFEX_H__
#include <common.h>
#define DRIVER_VENDOR_ID 0x1F3A
#define DRIVER_PRODUCT_ID 0xEfE8
#define CBW_MAGIC 0x43555741 //AWUC
#define CSW_MAGIC 0x53555741 //AWUS
#define CSW_STATUS_PASS 0x00
#define CSW_STATUS_FAIL 0x01
#define CBW_TOTAL_LEN 32 //
#define CBW_MAX_CMD_SIZE 16
#define FES_PLATFORM_HW_ID 0x00161000
#define AL_VERIFY_DEV_TAG_LEN 8
#define AL_VERIFY_DEV_TAG_DATA "AWUSBFEX"
#define AL_VERIFY_DEV_MODE_NULL 0x00
#define AL_VERIFY_DEV_MODE_FEL 0x01
#define AL_VERIFY_DEV_MODE_SRV 0x02
#define AL_VERIFY_DEV_MODE_UPDATE_COOL 0x03
#define AL_VERIFY_DEV_MODE_UPDATE_HOT 0x04
#define PHOENIX_PRIV_DATA_LEN_NR 8 //2的8次 = 256
#define PHOENIX_PRIV_DATA_ADDR (SRAM_AREA_A + 0x7e00) //给phoenix保留的空间
#define PHOENIX_PRIV_DATA_LEN (1 << PHOENIX_PRIV_DATA_LEN_NR) //空间大小
//--hgl--传输层的命令
typedef struct tag_TRANSFERDATA
{
u8 direction; ///
u8 resv; ///
u32 dataLen; ///
u8 resv2[10]; ///
}__attribute__ ((packed)) tTransferData;
struct sunxi_efex_cbw_t
{
u32 magic; //必须为CBW_MAGIC
u32 tag;
u32 data_transfer_len; //表示本次传输的数据阶段要传递的数据大小
u16 reserved_1;
u8 reserved_2;
u8 cmd_len; //cmd_package的实际有效长度
//u8 cmd_package[CBW_MAX_CMD_SIZE];
tTransferData cmd_package;
}__attribute__ ((packed));
#define CSW_TOTAL_LEN 13
struct sunxi_efex_csw_t
{
u32 magic; //必须为CSW_MAGIC
u32 tag;
u32 residue; //没有发送/接收的数据长度
u8 status; //为CSW_STATUS_PASS或 CSW_STATUS_FAIL
}__attribute__ ((packed));
#define TL_CMD_RESERVED 0x00
#define TL_CMD_TRANSMIT 0x11
#define TL_CMD_RECEIVE 0x12
#define TRANSPORT_INFO_STATUS_NULL 0x00
#define TRANSPORT_INFO_STATUS_CBW 0x01
#define TRANSPORT_INFO_STATUS_DATA 0x02
#define TRANSPORT_INFO_STATUS_CSW 0x03
#define TRANSPORT_INFO_IS_CONNECT_FAIL 0x00
#define TRANSPORT_INFO_IS_CONNECT_TRUE 0x01
//==app layer之公共命令
#define APP_LAYER_COMMEN_CMD_VERIFY_DEV 0x0001
#define APP_LAYER_COMMEN_CMD_SWITCH_ROLE 0x0002
#define APP_LAYER_COMMEN_CMD_IS_READY 0x0003
#define APP_LAYER_COMMEN_CMD_GET_CMD_SET_VER 0x0004
#define APP_LAYER_COMMEN_CMD_DISCONNECT 0x0010
#define FEX_CMD_fes_trans 0x0201
#define FEX_CMD_fes_run 0x0202
#define FEX_CMD_fes_down 0x0206
#define FEX_CMD_fes_up 0x0207
#define FEX_CMD_fes_verify 0x0208
#define FEX_CMD_fes_query_storage 0x0209
#define FEX_CMD_fes_probe_hardware 0x020A
#define FEX_CMD_fes_flash_set_on 0x020A
#define FEX_CMD_fes_flash_set_off 0x020B
#define FEX_CMD_fes_verify_value 0x020C
#define FEX_CMD_fes_verify_status 0x020D
#define FEX_CMD_fes_flash_size_probe 0x020E
#define FEX_CMD_fes_tool_mode 0x020F
#define FEX_CMD_fes_memset 0x0210
#define FEX_CMD_fes_pmu 0x0211
#define FEX_CMD_fes_unseqmem_read 0x0212
#define FEX_CMD_fes_unseqmem_write 0x0213
#define FEX_CMD_fes_force_erase 0x0220
#define FEX_CMD_fes_force_erase_key 0x0221
#define FEX_CMD_fes_reset_cpu 0x0214
#define FEX_CMD_fes_low_power_manger 0x0215
#define FEX_CMD_fes_query_secure 0x0230
//各个app命令的cmd,data部分status部分是共用的
//====================verify_dev====================
struct global_cmd_s
{
u16 app_cmd; //
u16 tag;
}__attribute__ ((packed));
struct verify_dev_cmd_s
{
u16 app_cmd; //必须为APP_LAYER_COMMEN_CMD_VERIFY_DEV
u16 tag;
u8 reserved[12];
}__attribute__ ((packed));
struct verify_dev_data_s
{
u8 tag[AL_VERIFY_DEV_TAG_LEN]; //必须为AL_VERIFY_DEV_TAG_DATA用来区分
u32 platform_id_hw;
u32 platform_id_fw;
u16 mode; //如AL_VERIFY_DEV_MODE_NULL
u8 pho_data_flag;
u8 pho_data_len; //
u32 pho_data_start_addr; //phoenix data的 start addr
u8 reserved_2[8];
}__attribute__ ((packed));
//====================switch_role====================
struct switch_role_cmd_s{
u16 app_cmd; //必须为APP_LAYER_COMMEN_CMD_SWITCH_ROLE
u16 state; //如AL_VERIFY_DEV_MODE_FEL
u8 reserved[12];
};
//====================is_ready====================
struct is_ready_cmd_s{
u16 app_cmd; //必须为APP_LAYER_COMMEN_CMD_IS_READY
u16 state; //目标state,如AL_VERIFY_DEV_MODE_FEL
u8 reserved[12];
}__attribute__ ((packed));
#define AL_IS_READY_STATE_NULL 0x00 //
#define AL_IS_READY_STATE_BUSY 0x01 //忙,请等待
#define AL_IS_READY_STATE_READY 0x02 //就绪
#define AL_IS_READY_STATE_FAIL 0x03 //失败
struct is_ready_data_s
{
u16 state; //当前所处的状态如AL_IS_READY_STATE_READY
u16 interval_ms; //下次发送is_ready命令的延时单位为ms
//推荐为500 ~2000 ,该字段只有当
//state == AL_IS_READY_STATE_BUSY时候才有效
u8 reserved[12];
}__attribute__ ((packed));
//====================get_cmd_set_ver====================
struct get_cmd_set_ver_cmd_s
{
u16 app_cmd; //必须为APP_LAYER_COMMEN_CMD_GET_CMD_SET_VER
u16 tag;
u16 state; //要查询cmd_set的state
u8 reserved[10];
}__attribute__ ((packed));
struct get_cmd_set_ver_data_s
{
u16 ver_high; //version的高word部分
u16 ver_low; //version的低word部分
u8 reserved[12];
}__attribute__ ((packed));
//====================disconnect====================
struct disconnect_cmd_s
{
u16 app_cmd;
u16 tag;
u8 reserved[12];
}__attribute__ ((packed));
typedef struct tag_STATUS
{
short mark; ///0xffff
short tag; ///
char state; ///STATUS_SUCCESS
char rev[3]; ///
}Status_t;
typedef struct tag_fes_trans
{
u16 app_cmd;
u16 tag;
u32 addr; ///
u32 len; ///
u32 type;
}fes_trans_t;
typedef struct tag_fes_trans_old
{
u16 app_cmd;
u16 tag;
u32 addr; ///
u32 len; ///
struct
{
u8 logicunit_index : 4; ///低4比特
u8 media_index : 4; ///高4比特
}u1;
struct
{
u8 res : 4; ///低4比特
u8 DOU : 2; ///中间2比特 标识 Download Or Upload
u8 OOC : 2; ///高2比特
}u2;
u8 reserved[2]; ///
}fes_trans_old_t;
typedef struct tag_fes_cmd_verify_value_s
{
u16 cmd;
u16 tag;
u32 start;
s64 size;
}fes_cmd_verify_value_t;
typedef struct tag_fes_cmd_verify_status_s
{
u16 cmd;
u16 tag;
u32 start;
u32 size;
u32 data_tag;
}fes_cmd_verify_status_t;
#define EFEX_CRC32_VALID_FLAG (0x6a617603)
typedef struct tag_efex_verify_s
{
u32 flag; //标志crc计算完成, 固定为0x6a617603
s32 fes_crc; //fes接收数据的crc
s32 media_crc; //media数据的crc
}fes_efex_verify_t;
typedef struct tag_FES_RUN
{
u16 app_cmd;
u16 tag;
u32 addr; ///
int max_para;
int *para_addr;
}fes_run_t;
typedef struct tag_efex_tool_s
{
u16 cmd;
u16 tag;
u32 tool_mode;
s32 next_mode;
s32 res0;
}fes_efex_tool_t;
typedef struct tag_efex_memset_s
{
u16 cmd;
u16 tag;
u32 start_addr;
u32 length;
s32 value;
}fes_efex_memset_t;
typedef struct tag_efex_pmu_s
{
u16 cmd;
u16 tag;
u32 size; //
s32 res1; //
s32 type;
}fes_efex_pmu_t;
struct pmu_config_t
{
char pmu_type[16];
char vol_name[16];
u32 voltage;
u32 gate;
};
typedef struct tag_efex_unseq_mem_s
{
u16 cmd;
u16 tag;
u32 size; ///
u32 count; ///
u32 type;
}tag_efex_unseq_mem_t;
struct unseq_mem_config
{
u32 addr;
u32 value;
};
struct multi_unseq_mem_s
{
int count;
struct unseq_mem_config *unseq_mem;
};
#define SUNXI_EFEX_RECV_MEM_SIZE (1024 * 1024)
typedef struct
{
uint type; //存储内型,见下面的宏定义
uchar *base_recv_buffer; //存放接收到的数据的首地址,必须足够大
uchar *act_recv_buffer;//
uint recv_size;
uint to_be_recved_size;
uchar *base_send_buffer; //存放将要到的数据的首地址,必须足够大
uchar *act_send_buffer;//
uint send_size; //需要发送数据的长度
uint flash_start; //起始位置可能是内存也可能是flash扇区
uint flash_sectors;
uchar *dram_trans_buffer;
int last_err;
int app_next_status;
}
efex_trans_set_t;
#define SUNXI_EFEX_DATA_TYPE_MASK (0x7fff)
#define SUNXI_EFEX_DRAM_MASK (0x7f00)
#define SUNXI_EFEX_DRAM_TAG (0x7f00)
#define SUNXI_EFEX_MBR_TAG (0x7f01)
#define SUNXI_EFEX_BOOT1_TAG (0x7f02)
#define SUNXI_EFEX_BOOT0_TAG (0x7f03)
#define SUNXI_EFEX_ERASE_TAG (0x7f04)
#define SUNXI_EFEX_PMU_SET (0x7f05)
#define SUNXI_EFEX_UNSEQ_MEM_FOR_READ (0x7f06)
#define SUNXI_EFEX_UNSEQ_MEM_FOR_WRITE (0x7f07)
#define SUNXI_EFEX_FULLIMG_SIZE_TAG (0x7f10)
#define SUNXI_EFEX_FLASH_TAG (0x8000)
#define SUNXI_EFEX_TRANS_MASK (0x30000)
#define SUNXI_EFEX_TRANS_START_TAG (0x20000)
#define SUNXI_EFEX_TRANS_FINISH_TAG (0x10000)
#define SUNXI_EFEX_VERIFY_STATUS (0)
#define SUNXI_EFEX_VERIFY_ADDSUM (1)
#define SUNXI_EFEX_VERIFY_CRC32 (2)
#endif