📄 loader.c
字号:
/************************************************************************
*
* load.c
*
* load using serial port or Ethernet
*
*
* ######################################################################
*
* Copyright (c) 1999-2000 MIPS Technologies, Inc. All rights reserved.
*
* Unpublished rights reserved under the Copyright Laws of the United States of
* America.
*
* This document contains information that is proprietary to MIPS Technologies,
* Inc. ("MIPS Technologies"). Any copying, modifying or use of this information
* (in whole or in part) which is not expressly permitted in writing by MIPS
* Technologies or a contractually-authorized third party is strictly
* prohibited. At a minimum, this information is protected under unfair
* competition laws and the expression of the information contained herein is
* protected under federal copyright laws. Violations thereof may result in
* criminal penalties and fines.
* MIPS Technologies or any contractually-authorized third party reserves the
* right to change the information contained in this document to improve
* function, design or otherwise. MIPS Technologies does not assume any
* liability arising out of the application or use of this information. Any
* license under patent rights or any other intellectual property rights owned
* by MIPS Technologies or third parties shall be conveyed by MIPS Technologies
* or any contractually-authorized third party in a separate license agreement
* between the parties.
* The information contained in this document constitutes one or more of the
* following: commercial computer software, commercial computer software
* documentation or other commercial items. If the user of this information, or
* any related documentation of any kind, including related technical data or
* manuals, is an agency, department, or other entity of the United States
* government ("Government"), the use, duplication, reproduction, release,
* modification, disclosure, or transfer of this information, or any related
* documentation of any kind, is restricted in accordance with Federal
* Acquisition Regulation 12.212 for civilian agencies and Defense Federal
* Acquisition Regulation Supplement 227.7202 for military agencies. The use of
* this information by the Government is further restricted in accordance with
* the terms of the license agreement(s) and/or applicable contract terms and
* conditions covering this information from MIPS Technologies or any
* contractually-authorized third party.
*
************************************************************************/
/************************************************************************
* Include files
************************************************************************/
#include <sysdefs.h>
#include <sysdev.h>
#include <syserror.h>
#include <syscon_api.h>
#include <string.h>
#include <stdio.h>
#include <loader_api.h>
#include <sys_api.h>
#include <io_api.h>
#include <flash_api.h>
#include <net_api.h>
#include <shell_api.h>
#include <ctype.h>
extern UINT32 net_last_error ;
/************************************************************************
* Definitions
************************************************************************/
typedef struct
{
char *id;
UINT32 (*func)(
UINT32 port,
UINT32 ip,
char *filename,
void **addr,
t_image_format *imageformat,
UINT32 *error_pos,
UINT32 *raw_error );
}
t_load_format;
static t_load_format formats[] =
{
{ "S", NULL }
// { "\x7f""ELF", NULL }
};
#define LOAD_FORMATS (sizeof(formats)/sizeof(t_load_format))
#define COUNT_DISP_INTERVAL 0x200
#define MAX_LINE_SIZE 200
/************************************************************************
* Public variables
************************************************************************/
/************************************************************************
* Static variables
************************************************************************/
/* context, keping current s-record being read and processed */
static UINT8 loader_diag_msg[2*MAX_LINE_SIZE];
static UINT32 failing_line_no ;
static UINT32 failing_line_no_adjust ;
static bool line_termination_is_linefeed ;
static UINT8 sdata[2*MAX_LINE_SIZE];
static UINT32 sid ;
static UINT32 loader_last_error ;
static char* loader_error_string[] =
{
/* ERROR_LOAD_NONE */ NULL,
/* ERROR_LOAD_UNSUPPORTED_PORT */ "Port not supported",
/* ERROR_LOAD_AMBIGUOUS_TYPE */ "Load format is ambigous",
/* ERROR_LOAD_UNKNOWN_TYPE */ "Load format is unknown",
/* ERROR_LOAD_ILLEGAL_FORMAT */ "Load format not compliant",
/* ERROR_LOAD_CHECKSUM */ "Invalid checksum",
/* ERROR_LOAD_LINE_TOO_LONG */ "Line too long",
/* ERROR_LOAD_NET */ "Load error from net",
/* ERROR_LOAD_STORE */ "Load error by store of data",
/* ERROR_LOAD_BREAK */ "Load was interrupted by user",
/* ERROR_LOAD_NO_S7_RECORD */ "Termination record (S7,S8 or S9) is lacking",
/* ERROR_LOAD_ILLEGAL_CHARACTER */ "Illegal character in line",
/* ERROR_LOAD_UART_COMM_ERROR */ "UART communication error",
} ;
static char* loader_error_hint_string[] =
{
/* ERROR_LOAD_NONE */ NULL,
/* ERROR_LOAD_UNSUPPORTED_PORT */ "Use help",
/* ERROR_LOAD_AMBIGUOUS_TYPE */ NULL,
/* ERROR_LOAD_UNKNOWN_TYPE */ NULL,
/* ERROR_LOAD_ILLEGAL_FORMAT */ NULL,
/* ERROR_LOAD_CHECKSUM */ NULL,
/* ERROR_LOAD_LINE_TOO_LONG */ NULL,
/* ERROR_LOAD_NET */ NULL,
/* ERROR_LOAD_STORE */ NULL,
/* ERROR_LOAD_BREAK */ NULL,
/* ERROR_LOAD_NO_S7_RECORD */ "Add S7 termination record as last line of file",
/* ERROR_LOAD_ILLEGAL_CHARACTER */ NULL,
/* ERROR_LOAD_UART_COMM_ERROR */ NULL,
} ;
#define INVALID_CHAR 128
#define VALID_SPACE 129
static const UINT8 char2val[256] =
{
/* 0: NUL */ VALID_SPACE, /* space */
/* 1: SOH */ INVALID_CHAR,
/* 2: STX */ INVALID_CHAR,
/* 3: ETX */ INVALID_CHAR,
/* 4: EOT */ INVALID_CHAR,
/* 5: ENQ */ INVALID_CHAR,
/* 6: ACK */ INVALID_CHAR,
/* 7: BEL */ INVALID_CHAR,
/* 8: BS */ INVALID_CHAR,
/* 9: HT */ VALID_SPACE, /* space */
/* 10: LF */ VALID_SPACE, /* space */
/* 11: VT */ INVALID_CHAR,
/* 12: NP */ INVALID_CHAR,
/* 13: CR */ VALID_SPACE, /* space */
/* 14: SO */ INVALID_CHAR,
/* 15: SI */ INVALID_CHAR,
/* 16: DLE */ INVALID_CHAR,
/* 17: DC1 */ INVALID_CHAR,
/* 18: DC2 */ INVALID_CHAR,
/* 19: DC3 */ INVALID_CHAR,
/* 20: DC4 */ INVALID_CHAR,
/* 21: NAK */ INVALID_CHAR,
/* 22: SYN */ INVALID_CHAR,
/* 23: ETB */ INVALID_CHAR,
/* 24: CAN */ INVALID_CHAR,
/* 25: EM */ INVALID_CHAR,
/* 26: SUB */ INVALID_CHAR,
/* 27: ESC */ INVALID_CHAR,
/* 28: FS */ INVALID_CHAR,
/* 29: GS */ INVALID_CHAR,
/* 30: RS */ INVALID_CHAR,
/* 31: US */ INVALID_CHAR,
/* 32: SP */ VALID_SPACE, /* space */
/* 33: ! */ INVALID_CHAR,
/* 34: " */ INVALID_CHAR,
/* 35: # */ INVALID_CHAR,
/* 36: $ */ INVALID_CHAR,
/* 37: % */ INVALID_CHAR,
/* 38: & */ INVALID_CHAR,
/* 39: ' */ INVALID_CHAR,
/* 40: ( */ INVALID_CHAR,
/* 41: ) */ INVALID_CHAR,
/* 42: * */ INVALID_CHAR,
/* 43: + */ INVALID_CHAR,
/* 44: , */ INVALID_CHAR,
/* 45: - */ INVALID_CHAR,
/* 46: . */ INVALID_CHAR,
/* 47: sl */ INVALID_CHAR,
/* 48: 0 */ 0,
/* 49: 1 */ 1,
/* 50: 2 */ 2,
/* 51: 3 */ 3,
/* 52: 4 */ 4,
/* 53: 5 */ 5,
/* 54: 6 */ 6,
/* 55: 7 */ 7,
/* 56: 8 */ 8,
/* 57: 9 */ 9,
/* 58: : */ INVALID_CHAR,
/* 59: ; */ INVALID_CHAR,
/* 60: < */ INVALID_CHAR,
/* 61: = */ INVALID_CHAR,
/* 62: > */ INVALID_CHAR,
/* 63: ? */ INVALID_CHAR,
/* 64: @ */ INVALID_CHAR,
/* 65: A */ 10,
/* 66: B */ 11,
/* 67: C */ 12,
/* 68: D */ 13,
/* 69: E */ 14,
/* 70: F */ 15,
/* 71: G */ INVALID_CHAR,
/* 72: H */ INVALID_CHAR,
/* 73: I */ INVALID_CHAR,
/* 74: J */ INVALID_CHAR,
/* 75: K */ INVALID_CHAR,
/* 76: L */ INVALID_CHAR,
/* 77: M */ INVALID_CHAR,
/* 78: N */ INVALID_CHAR,
/* 79: O */ INVALID_CHAR,
/* 80: P */ INVALID_CHAR,
/* 81: Q */ INVALID_CHAR,
/* 82: R */ INVALID_CHAR,
/* 83: S */ INVALID_CHAR,
/* 84: T */ INVALID_CHAR,
/* 85: U */ INVALID_CHAR,
/* 86: V */ INVALID_CHAR,
/* 87: W */ INVALID_CHAR,
/* 88: X */ INVALID_CHAR,
/* 89: Y */ INVALID_CHAR,
/* 90: Z */ INVALID_CHAR,
/* 91: [ */ INVALID_CHAR,
/* 92: bsl */ INVALID_CHAR,
/* 93: ] */ INVALID_CHAR,
/* 94: ^ */ INVALID_CHAR,
/* 95: _ */ INVALID_CHAR,
/* 96: ` */ INVALID_CHAR,
/* 97: a */ 10,
/* 98: b */ 11,
/* 99: c */ 12,
/* 100: d */ 13,
/* 101: e */ 14,
/* 102: f */ 15,
/* 103: g */ INVALID_CHAR,
/* 104: h */ INVALID_CHAR,
/* 105: i */ INVALID_CHAR,
/* 106: j */ INVALID_CHAR,
/* 107: k */ INVALID_CHAR,
/* 108: l */ INVALID_CHAR,
/* 109: m */ INVALID_CHAR,
/* 110: n */ INVALID_CHAR,
/* 111: o */ INVALID_CHAR,
/* 112: p */ INVALID_CHAR,
/* 113: q */ INVALID_CHAR,
/* 114: r */ INVALID_CHAR,
/* 115: s */ INVALID_CHAR,
/* 116: t */ INVALID_CHAR,
/* 117: u */ INVALID_CHAR,
/* 118: v */ INVALID_CHAR,
/* 119: w */ INVALID_CHAR,
/* 120: x */ INVALID_CHAR,
/* 121: y */ INVALID_CHAR,
/* 122: z */ INVALID_CHAR,
/* 123: { */ INVALID_CHAR,
/* 124: | */ INVALID_CHAR,
/* 125: } */ INVALID_CHAR,
/* 126: ~ */ INVALID_CHAR,
/* 127: DEL */ INVALID_CHAR,
/* 128: */ INVALID_CHAR,
/* 129: */ INVALID_CHAR,
/* 130: */ INVALID_CHAR,
/* 131: */ INVALID_CHAR,
/* 132: */ INVALID_CHAR,
/* 133: */ INVALID_CHAR,
/* 134: */ INVALID_CHAR,
/* 135: */ INVALID_CHAR,
/* 136: */ INVALID_CHAR,
/* 137: */ INVALID_CHAR,
/* 138: */ INVALID_CHAR,
/* 139: */ INVALID_CHAR,
/* 140: */ INVALID_CHAR,
/* 141: */ INVALID_CHAR,
/* 142: */ INVALID_CHAR,
/* 143: */ INVALID_CHAR,
/* 144: */ INVALID_CHAR,
/* 145: */ INVALID_CHAR,
/* 146: */ INVALID_CHAR,
/* 147: */ INVALID_CHAR,
/* 148: */ INVALID_CHAR,
/* 149: */ INVALID_CHAR,
/* 150: */ INVALID_CHAR,
/* 151: */ INVALID_CHAR,
/* 152: */ INVALID_CHAR,
/* 153: */ INVALID_CHAR,
/* 154: */ INVALID_CHAR,
/* 155: */ INVALID_CHAR,
/* 156: */ INVALID_CHAR,
/* 157: */ INVALID_CHAR,
/* 158: */ INVALID_CHAR,
/* 159: */ INVALID_CHAR,
/* 160: */ INVALID_CHAR,
/* 161: */ INVALID_CHAR,
/* 162: */ INVALID_CHAR,
/* 163: */ INVALID_CHAR,
/* 164: */ INVALID_CHAR,
/* 165: */ INVALID_CHAR,
/* 166: */ INVALID_CHAR,
/* 167: */ INVALID_CHAR,
/* 168: */ INVALID_CHAR,
/* 169: */ INVALID_CHAR,
/* 170: */ INVALID_CHAR,
/* 171: */ INVALID_CHAR,
/* 172: */ INVALID_CHAR,
/* 173: */ INVALID_CHAR,
/* 174: */ INVALID_CHAR,
/* 175: */ INVALID_CHAR,
/* 176: */ INVALID_CHAR,
/* 177: */ INVALID_CHAR,
/* 178: */ INVALID_CHAR,
/* 179: */ INVALID_CHAR,
/* 180: */ INVALID_CHAR,
/* 181: */ INVALID_CHAR,
/* 182: */ INVALID_CHAR,
/* 183: */ INVALID_CHAR,
/* 184: */ INVALID_CHAR,
/* 185: */ INVALID_CHAR,
/* 186: */ INVALID_CHAR,
/* 187: */ INVALID_CHAR,
/* 188: */ INVALID_CHAR,
/* 189: */ INVALID_CHAR,
/* 190: */ INVALID_CHAR,
/* 191: */ INVALID_CHAR,
/* 192: */ INVALID_CHAR,
/* 193: */ INVALID_CHAR,
/* 194: */ INVALID_CHAR,
/* 195: */ INVALID_CHAR,
/* 196: */ INVALID_CHAR,
/* 197: */ INVALID_CHAR,
/* 198: */ INVALID_CHAR,
/* 199: */ INVALID_CHAR,
/* 200: */ INVALID_CHAR,
/* 201: */ INVALID_CHAR,
/* 202: */ INVALID_CHAR,
/* 203: */ INVALID_CHAR,
/* 204: */ INVALID_CHAR,
/* 205: */ INVALID_CHAR,
/* 206: */ INVALID_CHAR,
/* 207: */ INVALID_CHAR,
/* 208: */ INVALID_CHAR,
/* 209: */ INVALID_CHAR,
/* 210: */ INVALID_CHAR,
/* 211: */ INVALID_CHAR,
/* 212: */ INVALID_CHAR,
/* 213: */ INVALID_CHAR,
/* 214: */ INVALID_CHAR,
/* 215: */ INVALID_CHAR,
/* 216: */ INVALID_CHAR,
/* 217: */ INVALID_CHAR,
/* 218: */ INVALID_CHAR,
/* 219: */ INVALID_CHAR,
/* 220: */ INVALID_CHAR,
/* 221: */ INVALID_CHAR,
/* 222: */ INVALID_CHAR,
/* 223: */ INVALID_CHAR,
/* 224: */ INVALID_CHAR,
/* 225: */ INVALID_CHAR,
/* 226: */ INVALID_CHAR,
/* 227: */ INVALID_CHAR,
/* 228: */ INVALID_CHAR,
/* 229: */ INVALID_CHAR,
/* 230: */ INVALID_CHAR,
/* 231: */ INVALID_CHAR,
/* 232: */ INVALID_CHAR,
/* 233: */ INVALID_CHAR,
/* 234: */ INVALID_CHAR,
/* 235: */ INVALID_CHAR,
/* 236: */ INVALID_CHAR,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -