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