/* Definitions and macros for support of AMD's remote debugger, MiniMON. Copyright 1990, 1991 Free Software Foundation, Inc. This file is part of GDB. 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. */ /* * Some basic types. FIXME, this should be done by declaring bitfield * sizes in the structs. We can't portably depend on a "long int" being * 32 bits, etc. */ typedef long int INT32; /* 32 bit integer */ typedef unsigned long int UINT32; /* 32 bit integer (unsigned) */ typedef unsigned long int ADDR32; /* 32 bit address */ typedef unsigned long int INST32; /* 32 bit instruction */ typedef long int BOOLEAN; /* Boolean value (32 bit) */ typedef unsigned char BYTE; /* byte (8 bit) */ typedef short int INT16; /* 16 bit integer */ typedef unsigned short int UINT16; /* 16 bit integer (unsigned) */ /****************************************************************************/ /************************* Message Information ******************************/ /****************************************************************************/ /* * Error codes */ /* General errors */ #define EMUSAGE 1 /* Bad args / flags */ #define EMFAIL 2 /* Unrecoverable error */ #define EMBADADDR 3 /* Illegal address */ #define EMBADREG 4 /* Illegal register */ #define EMSYNTAX 5 /* Illegal command syntax */ #define EMACCESS 6 /* Could not access memory */ #define EMALLOC 7 /* Could not allocate memory */ #define EMTARGET 8 /* Unknown target type */ #define EMHINIT 9 /* Could not initialize host */ #define EMCOMM 10 /* Could not open communication channel */ /* Message errors */ #define EMBADMSG 11 /* Unknown message type */ #define EMMSG2BIG 12 /* Message to large for buffer */ #define EMNOSEND 13 /* Could not send message */ #define EMNORECV 14 /* Could not receive message */ #define EMRESET 15 /* Could not RESET target */ #define EMCONFIG 16 /* Could not get target CONFIG */ #define EMSTATUS 17 /* Could not get target STATUS */ #define EMREAD 18 /* Could not READ target memory */ #define EMWRITE 19 /* Could not WRITE target memory */ #define EMBKPTSET 20 /* Could not set breakpoint */ #define EMBKPTRM 21 /* Could not remove breakpoint */ #define EMBKPTSTAT 22 /* Could not get breakpoint status */ #define EMBKPTNONE 23 /* All breakpoints in use */ #define EMBKPTUSED 24 /* Breakpoints already in use */ #define EMCOPY 25 /* Could not COPY target memory */ #define EMFILL 26 /* Could not FILL target memory */ #define EMINIT 27 /* Could not initialize target memory */ #define EMGO 28 /* Could not start execution */ #define EMSTEP 29 /* Could not single step */ #define EMBREAK 30 /* Could not BREAK */ #define EMHIF 31 /* Could not perform HIF service */ #define EMCHANNEL0 32 /* Could not read CHANNEL0 */ #define EMCHANNEL1 33 /* Could not write CHANNEL1 */ /* COFF file loader errors */ #define EMOPEN 34 /* Could not open COFF file */ #define EMHDR 35 /* Could not read COFF header */ #define EMMAGIC 36 /* Bad magic number */ #define EMAOUT 37 /* Could not read COFF a.out header */ #define EMSCNHDR 38 /* Could not read COFF section header */ #define EMSCN 39 /* Could not read COFF section */ #define EMCLOSE 40 /* Could not close COFF file */ /* Log file errors */ #define EMLOGOPEN 41 /* Could not open log file */ #define EMLOGREAD 42 /* Could not read log file */ #define EMLOGWRITE 43 /* Could not write to log file */ #define EMLOGCLOSE 44 /* Could not close log file */ /* Command file errors */ #define EMCMDOPEN 45 /* Could not open command file */ #define EMCMDREAD 46 /* Could not read command file */ #define EMCMDWRITE 47 /* Could not write to command file */ #define EMCMDCLOSE 48 /* Could not close comand file */ #define EMTIMEOUT 49 /* Host timed out waiting for a message */ #define EMCOMMTYPE 50 /* A '-t' flag must be specified */ #define EMCOMMERR 51 /* Communication error */ #define EMBAUD 52 /* Invalid baud rate specified */ /* * Memory Spaces */ #define LOCAL_REG 0 /* Local processor register */ #define GLOBAL_REG 1 /* Global processor register */ #define SPECIAL_REG 2 /* Special processor register */ #define TLB_REG 3 /* Translation Lookaside Buffer */ #define COPROC_REG 4 /* Coprocessor register */ #define I_MEM 5 /* Instruction Memory */ #define D_MEM 6 /* Data Memory */ #define I_ROM 7 /* Instruction ROM */ #define D_ROM 8 /* Data ROM */ #define I_O 9 /* Input/Output */ #define I_CACHE 10 /* Instruction Cache */ #define D_CACHE 11 /* Data Cache */ /* To supress warnings for zero length array definitions */ #define DUMMY 1 /* ** Host to target definitions */ #define RESET 0 #define CONFIG_REQ 1 #define STATUS_REQ 2 #define READ_REQ 3 #define WRITE_REQ 4 #define BKPT_SET 5 #define BKPT_RM 6 #define BKPT_STAT 7 #define COPY 8 #define FILL 9 #define INIT 10 #define GO 11 #define STEP 12 #define BREAK 13 #define HIF_CALL_RTN 64 #define CHANNEL0 65 #define CHANNEL1_ACK 66 /* ** Target to host definitions */ #define RESET_ACK 32 #define CONFIG 33 #define STATUS 34 #define READ_ACK 35 #define WRITE_ACK 36 #define BKPT_SET_ACK 37 #define BKPT_RM_ACK 38 #define BKPT_STAT_ACK 39 #define COPY_ACK 40 #define FILL_ACK 41 #define INIT_ACK 42 #define HALT 43 #define ERROR 63 #define HIF_CALL 96 #define CHANNEL0_ACK 97 #define CHANNEL1 98 /* A "generic" message */ struct generic_msg_t { INT32 code; /* generic */ INT32 length; BYTE byte[DUMMY]; }; /* A "generic" message (with an INT32 array) */ struct generic_int32_msg_t { INT32 code; /* generic */ INT32 length; INT32 int32[DUMMY]; }; /* ** Host to target messages */ struct reset_msg_t { INT32 code; /* 0 */ INT32 length; }; struct config_req_msg_t { INT32 code; /* 1 */ INT32 length; }; struct status_req_msg_t { INT32 code; /* 2 */ INT32 length; }; struct read_req_msg_t { INT32 code; /* 3 */ INT32 length; INT32 memory_space; ADDR32 address; INT32 byte_count; }; struct write_req_msg_t { INT32 code; /* 4 */ INT32 length; INT32 memory_space; ADDR32 address; INT32 byte_count; BYTE data[DUMMY]; }; struct write_r_msg_t { INT32 code; /* 4 */ INT32 length; INT32 memory_space; ADDR32 address; INT32 byte_count; INT32 data[DUMMY]; }; struct bkpt_set_msg_t { INT32 code; /* 5 */ INT32 length; INT32 memory_space; ADDR32 bkpt_addr; INT32 pass_count; INT32 bkpt_type; }; struct bkpt_rm_msg_t { INT32 code; /* 6 */ INT32 length; INT32 memory_space; ADDR32 bkpt_addr; }; struct bkpt_stat_msg_t { INT32 code; /* 7 */ INT32 length; INT32 memory_space; ADDR32 bkpt_addr; }; struct copy_msg_t { INT32 code; /* 8 */ INT32 length; INT32 source_space; ADDR32 source_addr; INT32 dest_space; ADDR32 dest_addr; INT32 byte_count; }; struct fill_msg_t { INT32 code; /* 9 */ INT32 length; INT32 memory_space; ADDR32 start_addr; INT32 fill_count; INT32 byte_count; BYTE fill_data[DUMMY]; }; struct init_msg_t { INT32 code; /* 10 */ INT32 length; ADDR32 text_start; ADDR32 text_end; ADDR32 data_start; ADDR32 data_end; ADDR32 entry_point; INT32 mem_stack_size; INT32 reg_stack_size; ADDR32 arg_start; INT32 os_control; }; struct go_msg_t { INT32 code; /* 11 */ INT32 length; }; struct step_msg_t { INT32 code; /* 12 */ INT32 length; INT32 count; }; struct break_msg_t { INT32 code; /* 13 */ INT32 length; }; struct hif_call_rtn_msg_t { INT32 code; /* 64 */ INT32 length; INT32 service_number; INT32 gr121; INT32 gr96; INT32 gr97; }; struct channel0_msg_t { INT32 code; /* 65 */ INT32 length; BYTE data; }; struct channel1_ack_msg_t { INT32 code; /* 66 */ INT32 length; }; /* ** Target to host messages */ struct reset_ack_msg_t { INT32 code; /* 32 */ INT32 length; }; struct config_msg_t { INT32 code; /* 33 */ INT32 length; INT32 processor_id; INT32 version; ADDR32 I_mem_start; INT32 I_mem_size; ADDR32 D_mem_start; INT32 D_mem_size; ADDR32 ROM_start; INT32 ROM_size; INT32 max_msg_size; INT32 max_bkpts; INT32 coprocessor; INT32 reserved; }; struct status_msg_t { INT32 code; /* 34 */ INT32 length; INT32 msgs_sent; INT32 msgs_received; INT32 errors; INT32 bkpts_hit; INT32 bkpts_free; INT32 traps; INT32 fills; INT32 spills; INT32 cycles; INT32 reserved; }; struct read_ack_msg_t { INT32 code; /* 35 */ INT32 length; INT32 memory_space; ADDR32 address; INT32 byte_count; BYTE data[DUMMY]; }; struct read_r_ack_msg_t { INT32 code; /* 35 */ INT32 length; INT32 memory_space; ADDR32 address; INT32 byte_count; INT32 data[DUMMY]; }; struct write_ack_msg_t { INT32 code; /* 36 */ INT32 length; INT32 memory_space; ADDR32 address; INT32 byte_count; }; struct bkpt_set_ack_msg_t { INT32 code; /* 37 */ INT32 length; INT32 memory_space; ADDR32 address; INT32 pass_count; INT32 bkpt_type; }; struct bkpt_rm_ack_msg_t { INT32 code; /* 38 */ INT32 length; INT32 memory_space; ADDR32 address; }; struct bkpt_stat_ack_msg_t { INT32 code; /* 39 */ INT32 length; INT32 memory_space; ADDR32 address; INT32 pass_count; INT32 bkpt_type; }; struct copy_ack_msg_t { INT32 code; /* 40 */ INT32 length; INT32 source_space; ADDR32 source_addr; INT32 dest_space; ADDR32 dest_addr; INT32 byte_count; }; struct fill_ack_msg_t { INT32 code; /* 41 */ INT32 length; INT32 memory_space; ADDR32 start_addr; INT32 fill_count; INT32 byte_count; }; struct init_ack_msg_t { INT32 code; /* 42 */ INT32 length; }; struct halt_msg_t { INT32 code; /* 43 */ INT32 length; INT32 memory_space; ADDR32 pc0; ADDR32 pc1; INT32 trap_number; }; struct error_msg_t { INT32 code; /* 63 */ INT32 length; INT32 error_code; INT32 memory_space; ADDR32 address; }; struct hif_call_msg_t { INT32 code; /* 96 */ INT32 length; INT32 service_number; INT32 lr2; INT32 lr3; INT32 lr4; }; struct channel0_ack_msg_t { INT32 code; /* 97 */ INT32 length; }; struct channel1_msg_t { INT32 code; /* 98 */ INT32 length; BYTE data[DUMMY]; }; /* ** Union all of the message types together */ union msg_t { struct generic_msg_t generic_msg; struct generic_int32_msg_t generic_int32_msg; struct reset_msg_t reset_msg; struct config_req_msg_t config_req_msg; struct status_req_msg_t status_req_msg; struct read_req_msg_t read_req_msg; struct write_req_msg_t write_req_msg; struct write_r_msg_t write_r_msg; struct bkpt_set_msg_t bkpt_set_msg; struct bkpt_rm_msg_t bkpt_rm_msg; struct bkpt_stat_msg_t bkpt_stat_msg; struct copy_msg_t copy_msg; struct fill_msg_t fill_msg; struct init_msg_t init_msg; struct go_msg_t go_msg; struct step_msg_t step_msg; struct break_msg_t break_msg; struct hif_call_rtn_msg_t hif_call_rtn_msg; struct channel0_msg_t channel0_msg; struct channel1_ack_msg_t channel1_ack_msg; struct reset_ack_msg_t reset_ack_msg; struct config_msg_t config_msg; struct status_msg_t status_msg; struct read_ack_msg_t read_ack_msg; struct read_r_ack_msg_t read_r_ack_msg; struct write_ack_msg_t write_ack_msg; struct bkpt_set_ack_msg_t bkpt_set_ack_msg; struct bkpt_rm_ack_msg_t bkpt_rm_ack_msg; struct bkpt_stat_ack_msg_t bkpt_stat_ack_msg; struct copy_ack_msg_t copy_ack_msg; struct fill_ack_msg_t fill_ack_msg; struct init_ack_msg_t init_ack_msg; struct halt_msg_t halt_msg; struct error_msg_t error_msg; struct hif_call_msg_t hif_call_msg; struct channel0_ack_msg_t channel0_ack_msg; struct channel1_msg_t channel1_msg; };