11bd4fe43Sopenharmony_ci/* 21bd4fe43Sopenharmony_ci * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED. 31bd4fe43Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 41bd4fe43Sopenharmony_ci * you may not use this file except in compliance with the License. 51bd4fe43Sopenharmony_ci * You may obtain a copy of the License at 61bd4fe43Sopenharmony_ci * 71bd4fe43Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 81bd4fe43Sopenharmony_ci * 91bd4fe43Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 101bd4fe43Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 111bd4fe43Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 121bd4fe43Sopenharmony_ci * See the License for the specific language governing permissions and 131bd4fe43Sopenharmony_ci * limitations under the License. 141bd4fe43Sopenharmony_ci */ 151bd4fe43Sopenharmony_ci 161bd4fe43Sopenharmony_ci#ifndef __TRANSFER_H__ 171bd4fe43Sopenharmony_ci#define __TRANSFER_H__ 181bd4fe43Sopenharmony_ci 191bd4fe43Sopenharmony_ci#include <ymodem.h> 201bd4fe43Sopenharmony_ci#include <hi_boot_rom.h> 211bd4fe43Sopenharmony_ci#include <efuse_opt.h> 221bd4fe43Sopenharmony_ci#include <load.h> 231bd4fe43Sopenharmony_ci 241bd4fe43Sopenharmony_ci#define MODEM_SOH 0x01 /* Start character of data block */ 251bd4fe43Sopenharmony_ci#define MODEM_STX 0x02 /* The start byte of 1024 bytes */ 261bd4fe43Sopenharmony_ci#define MODEM_EOT 0x04 /* File transfer finish */ 271bd4fe43Sopenharmony_ci#define MODEM_ACK 0x06 /* ACK message */ 281bd4fe43Sopenharmony_ci#define MODEM_NAK 0x15 /* Error occurred */ 291bd4fe43Sopenharmony_ci#define MODEM_CAN 0x18 /* Cancel transmission */ 301bd4fe43Sopenharmony_ci#define MODEM_EOF 0x1A /* Data blank filler */ 311bd4fe43Sopenharmony_ci#define MODEM_C 0x43 /* Capital letter C */ 321bd4fe43Sopenharmony_ci 331bd4fe43Sopenharmony_ci#define FLASH_ADDR_OFFSET 0x400000 341bd4fe43Sopenharmony_ci 351bd4fe43Sopenharmony_ci#define UPLOAD_WAIT_START_C_TIME 10000000 /* 10s */ 361bd4fe43Sopenharmony_ci#define UPLOAD_WAIT_DEFAULT_TIME 2000000 /* 2s */ 371bd4fe43Sopenharmony_ci 381bd4fe43Sopenharmony_ci#define UPLOAD_DATA_SIZE 1024 391bd4fe43Sopenharmony_ci#define UPLOAD_BUFF_LEN 1029 401bd4fe43Sopenharmony_ci 411bd4fe43Sopenharmony_ci#define RETRY_COUNT 0 421bd4fe43Sopenharmony_ci#define CAN_COUNT 3 431bd4fe43Sopenharmony_ci#define MSG_START_LEN 3 441bd4fe43Sopenharmony_ci#define SOH_MSG_LEN 128 451bd4fe43Sopenharmony_ci#define SOH_MSG_TOTAL_LEN 133 461bd4fe43Sopenharmony_ci#define WAIT_ZERO_ACK_DELAY 100 471bd4fe43Sopenharmony_ci#define UPLOAD_FILE_NAME "upload.bin" 481bd4fe43Sopenharmony_ci#define UPLOAD_FILE_NAME_LEN 11 491bd4fe43Sopenharmony_ci 501bd4fe43Sopenharmony_cienum { 511bd4fe43Sopenharmony_ci UPLOAD_NONE, 521bd4fe43Sopenharmony_ci UPLOAD_WAIT_START_C, 531bd4fe43Sopenharmony_ci UPLOAD_WAIT_INIT_ACK, 541bd4fe43Sopenharmony_ci UPLOAD_WAIT_TRANS_C, 551bd4fe43Sopenharmony_ci UPLOAD_WAIT_INTER_ACK, 561bd4fe43Sopenharmony_ci UPLOAD_WAIT_FINAL_ACK, 571bd4fe43Sopenharmony_ci UPLOAD_WAIT_EOT_C, 581bd4fe43Sopenharmony_ci UPLOAD_WAIT_ZERO_ACK, 591bd4fe43Sopenharmony_ci}; 601bd4fe43Sopenharmony_ci 611bd4fe43Sopenharmony_citypedef struct { 621bd4fe43Sopenharmony_ci uintptr_t file_addr; 631bd4fe43Sopenharmony_ci hi_u32 file_length; 641bd4fe43Sopenharmony_ci hi_char *file_name; 651bd4fe43Sopenharmony_ci hi_u32 offset; 661bd4fe43Sopenharmony_ci hi_u8 status; 671bd4fe43Sopenharmony_ci hi_u8 seq; 681bd4fe43Sopenharmony_ci hi_u8 retry : 4; 691bd4fe43Sopenharmony_ci hi_u8 can_cnt : 4; 701bd4fe43Sopenharmony_ci hi_u8 buffer[UPLOAD_BUFF_LEN]; 711bd4fe43Sopenharmony_ci} upload_context; 721bd4fe43Sopenharmony_ci 731bd4fe43Sopenharmony_cihi_u32 download_image(hi_u32 addr, hi_u32 erase_size, hi_u32 flash_size, hi_u8 burn_efuse); 741bd4fe43Sopenharmony_cihi_u32 download_factory_image(hi_u32 addr, hi_u32 erase_size, hi_u32 flash_size, hi_u8 burn_efuse); 751bd4fe43Sopenharmony_cihi_u32 loady_file(uintptr_t ram_addr); 761bd4fe43Sopenharmony_cihi_u32 loady_version_file(uintptr_t ram_addr); 771bd4fe43Sopenharmony_cihi_u32 upload_data(hi_u32 addr, hi_u32 length); 781bd4fe43Sopenharmony_ci 791bd4fe43Sopenharmony_ci#endif 80