| /* Definitions and macros for support of AMD's remote debugger, MiniMON. |
| Copyright (C) 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; |
| }; |