1 /* Definitions and macros for support of AMD's remote debugger, MiniMON. 2 Copyright 1990, 1991 Free Software Foundation, Inc. 3 4 This file is part of GDB. 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program; if not, write to the Free Software 18 Foundation, Inc., 59 Temple Place - Suite 330, 19 Boston, MA 02111-1307, USA. */ 20 21 /* 22 * Some basic types. FIXME, this should be done by declaring bitfield 23 * sizes in the structs. We can't portably depend on a "long int" being 24 * 32 bits, etc. 25 */ 26 typedef long int INT32; /* 32 bit integer */ 27 typedef unsigned long int UINT32; /* 32 bit integer (unsigned) */ 28 typedef unsigned long int ADDR32; /* 32 bit address */ 29 typedef unsigned long int INST32; /* 32 bit instruction */ 30 typedef long int BOOLEAN; /* Boolean value (32 bit) */ 31 typedef unsigned char BYTE; /* byte (8 bit) */ 32 typedef short int INT16; /* 16 bit integer */ 33 typedef unsigned short int UINT16; /* 16 bit integer (unsigned) */ 34 35 /****************************************************************************/ 36 /************************* Message Information ******************************/ 37 /****************************************************************************/ 38 39 /* 40 * Error codes 41 */ 42 43 /* General errors */ 44 #define EMUSAGE 1 /* Bad args / flags */ 45 #define EMFAIL 2 /* Unrecoverable error */ 46 #define EMBADADDR 3 /* Illegal address */ 47 #define EMBADREG 4 /* Illegal register */ 48 #define EMSYNTAX 5 /* Illegal command syntax */ 49 #define EMACCESS 6 /* Could not access memory */ 50 #define EMALLOC 7 /* Could not allocate memory */ 51 #define EMTARGET 8 /* Unknown target type */ 52 #define EMHINIT 9 /* Could not initialize host */ 53 #define EMCOMM 10 /* Could not open communication channel */ 54 55 /* Message errors */ 56 #define EMBADMSG 11 /* Unknown message type */ 57 #define EMMSG2BIG 12 /* Message to large for buffer */ 58 #define EMNOSEND 13 /* Could not send message */ 59 #define EMNORECV 14 /* Could not receive message */ 60 61 #define EMRESET 15 /* Could not RESET target */ 62 #define EMCONFIG 16 /* Could not get target CONFIG */ 63 #define EMSTATUS 17 /* Could not get target STATUS */ 64 #define EMREAD 18 /* Could not READ target memory */ 65 #define EMWRITE 19 /* Could not WRITE target memory */ 66 #define EMBKPTSET 20 /* Could not set breakpoint */ 67 #define EMBKPTRM 21 /* Could not remove breakpoint */ 68 #define EMBKPTSTAT 22 /* Could not get breakpoint status */ 69 #define EMBKPTNONE 23 /* All breakpoints in use */ 70 #define EMBKPTUSED 24 /* Breakpoints already in use */ 71 #define EMCOPY 25 /* Could not COPY target memory */ 72 #define EMFILL 26 /* Could not FILL target memory */ 73 #define EMINIT 27 /* Could not initialize target memory */ 74 #define EMGO 28 /* Could not start execution */ 75 #define EMSTEP 29 /* Could not single step */ 76 #define EMBREAK 30 /* Could not BREAK */ 77 #define EMHIF 31 /* Could not perform HIF service */ 78 #define EMCHANNEL0 32 /* Could not read CHANNEL0 */ 79 #define EMCHANNEL1 33 /* Could not write CHANNEL1 */ 80 81 /* COFF file loader errors */ 82 #define EMOPEN 34 /* Could not open COFF file */ 83 #define EMHDR 35 /* Could not read COFF header */ 84 #define EMMAGIC 36 /* Bad magic number */ 85 #define EMAOUT 37 /* Could not read COFF a.out header */ 86 #define EMSCNHDR 38 /* Could not read COFF section header */ 87 #define EMSCN 39 /* Could not read COFF section */ 88 #define EMCLOSE 40 /* Could not close COFF file */ 89 90 /* Log file errors */ 91 #define EMLOGOPEN 41 /* Could not open log file */ 92 #define EMLOGREAD 42 /* Could not read log file */ 93 #define EMLOGWRITE 43 /* Could not write to log file */ 94 #define EMLOGCLOSE 44 /* Could not close log file */ 95 96 /* Command file errors */ 97 #define EMCMDOPEN 45 /* Could not open command file */ 98 #define EMCMDREAD 46 /* Could not read command file */ 99 #define EMCMDWRITE 47 /* Could not write to command file */ 100 #define EMCMDCLOSE 48 /* Could not close comand file */ 101 102 #define EMTIMEOUT 49 /* Host timed out waiting for a message */ 103 #define EMCOMMTYPE 50 /* A '-t' flag must be specified */ 104 #define EMCOMMERR 51 /* Communication error */ 105 #define EMBAUD 52 /* Invalid baud rate specified */ 106 /* 107 * Memory Spaces 108 */ 109 #define LOCAL_REG 0 /* Local processor register */ 110 #define GLOBAL_REG 1 /* Global processor register */ 111 #define SPECIAL_REG 2 /* Special processor register */ 112 #define TLB_REG 3 /* Translation Lookaside Buffer */ 113 #define COPROC_REG 4 /* Coprocessor register */ 114 #define I_MEM 5 /* Instruction Memory */ 115 #define D_MEM 6 /* Data Memory */ 116 #define I_ROM 7 /* Instruction ROM */ 117 #define D_ROM 8 /* Data ROM */ 118 #define I_O 9 /* Input/Output */ 119 #define I_CACHE 10 /* Instruction Cache */ 120 #define D_CACHE 11 /* Data Cache */ 121 122 /* To supress warnings for zero length array definitions */ 123 #define DUMMY 1 124 125 /* 126 ** Host to target definitions 127 */ 128 129 #define RESET 0 130 #define CONFIG_REQ 1 131 #define STATUS_REQ 2 132 #define READ_REQ 3 133 #define WRITE_REQ 4 134 #define BKPT_SET 5 135 #define BKPT_RM 6 136 #define BKPT_STAT 7 137 #define COPY 8 138 #define FILL 9 139 #define INIT 10 140 #define GO 11 141 #define STEP 12 142 #define BREAK 13 143 144 #define HIF_CALL_RTN 64 145 #define CHANNEL0 65 146 #define CHANNEL1_ACK 66 147 148 149 /* 150 ** Target to host definitions 151 */ 152 153 #define RESET_ACK 32 154 #define CONFIG 33 155 #define STATUS 34 156 #define READ_ACK 35 157 #define WRITE_ACK 36 158 #define BKPT_SET_ACK 37 159 #define BKPT_RM_ACK 38 160 #define BKPT_STAT_ACK 39 161 #define COPY_ACK 40 162 #define FILL_ACK 41 163 #define INIT_ACK 42 164 #define HALT 43 165 166 #define ERROR 63 167 168 #define HIF_CALL 96 169 #define CHANNEL0_ACK 97 170 #define CHANNEL1 98 171 172 173 /* A "generic" message */ 174 struct generic_msg_t 175 { 176 INT32 code; /* generic */ 177 INT32 length; 178 BYTE byte[DUMMY]; 179 }; 180 181 182 /* A "generic" message (with an INT32 array) */ 183 struct generic_int32_msg_t 184 { 185 INT32 code; /* generic */ 186 INT32 length; 187 INT32 int32[DUMMY]; 188 }; 189 190 191 /* 192 ** Host to target messages 193 */ 194 195 struct reset_msg_t 196 { 197 INT32 code; /* 0 */ 198 INT32 length; 199 }; 200 201 202 struct config_req_msg_t 203 { 204 INT32 code; /* 1 */ 205 INT32 length; 206 }; 207 208 209 struct status_req_msg_t 210 { 211 INT32 code; /* 2 */ 212 INT32 length; 213 }; 214 215 216 struct read_req_msg_t 217 { 218 INT32 code; /* 3 */ 219 INT32 length; 220 INT32 memory_space; 221 ADDR32 address; 222 INT32 byte_count; 223 }; 224 225 226 struct write_req_msg_t 227 { 228 INT32 code; /* 4 */ 229 INT32 length; 230 INT32 memory_space; 231 ADDR32 address; 232 INT32 byte_count; 233 BYTE data[DUMMY]; 234 }; 235 236 237 struct write_r_msg_t 238 { 239 INT32 code; /* 4 */ 240 INT32 length; 241 INT32 memory_space; 242 ADDR32 address; 243 INT32 byte_count; 244 INT32 data[DUMMY]; 245 }; 246 247 248 struct bkpt_set_msg_t 249 { 250 INT32 code; /* 5 */ 251 INT32 length; 252 INT32 memory_space; 253 ADDR32 bkpt_addr; 254 INT32 pass_count; 255 INT32 bkpt_type; 256 }; 257 258 259 struct bkpt_rm_msg_t 260 { 261 INT32 code; /* 6 */ 262 INT32 length; 263 INT32 memory_space; 264 ADDR32 bkpt_addr; 265 }; 266 267 268 struct bkpt_stat_msg_t 269 { 270 INT32 code; /* 7 */ 271 INT32 length; 272 INT32 memory_space; 273 ADDR32 bkpt_addr; 274 }; 275 276 277 struct copy_msg_t 278 { 279 INT32 code; /* 8 */ 280 INT32 length; 281 INT32 source_space; 282 ADDR32 source_addr; 283 INT32 dest_space; 284 ADDR32 dest_addr; 285 INT32 byte_count; 286 }; 287 288 289 struct fill_msg_t 290 { 291 INT32 code; /* 9 */ 292 INT32 length; 293 INT32 memory_space; 294 ADDR32 start_addr; 295 INT32 fill_count; 296 INT32 byte_count; 297 BYTE fill_data[DUMMY]; 298 }; 299 300 301 struct init_msg_t 302 { 303 INT32 code; /* 10 */ 304 INT32 length; 305 ADDR32 text_start; 306 ADDR32 text_end; 307 ADDR32 data_start; 308 ADDR32 data_end; 309 ADDR32 entry_point; 310 INT32 mem_stack_size; 311 INT32 reg_stack_size; 312 ADDR32 arg_start; 313 INT32 os_control; 314 }; 315 316 317 struct go_msg_t 318 { 319 INT32 code; /* 11 */ 320 INT32 length; 321 }; 322 323 324 struct step_msg_t 325 { 326 INT32 code; /* 12 */ 327 INT32 length; 328 INT32 count; 329 }; 330 331 332 struct break_msg_t 333 { 334 INT32 code; /* 13 */ 335 INT32 length; 336 }; 337 338 339 struct hif_call_rtn_msg_t 340 { 341 INT32 code; /* 64 */ 342 INT32 length; 343 INT32 service_number; 344 INT32 gr121; 345 INT32 gr96; 346 INT32 gr97; 347 }; 348 349 350 struct channel0_msg_t 351 { 352 INT32 code; /* 65 */ 353 INT32 length; 354 BYTE data; 355 }; 356 357 358 struct channel1_ack_msg_t 359 { 360 INT32 code; /* 66 */ 361 INT32 length; 362 }; 363 364 365 /* 366 ** Target to host messages 367 */ 368 369 370 struct reset_ack_msg_t 371 { 372 INT32 code; /* 32 */ 373 INT32 length; 374 }; 375 376 377 struct config_msg_t 378 { 379 INT32 code; /* 33 */ 380 INT32 length; 381 INT32 processor_id; 382 INT32 version; 383 ADDR32 I_mem_start; 384 INT32 I_mem_size; 385 ADDR32 D_mem_start; 386 INT32 D_mem_size; 387 ADDR32 ROM_start; 388 INT32 ROM_size; 389 INT32 max_msg_size; 390 INT32 max_bkpts; 391 INT32 coprocessor; 392 INT32 reserved; 393 }; 394 395 396 struct status_msg_t 397 { 398 INT32 code; /* 34 */ 399 INT32 length; 400 INT32 msgs_sent; 401 INT32 msgs_received; 402 INT32 errors; 403 INT32 bkpts_hit; 404 INT32 bkpts_free; 405 INT32 traps; 406 INT32 fills; 407 INT32 spills; 408 INT32 cycles; 409 INT32 reserved; 410 }; 411 412 413 struct read_ack_msg_t 414 { 415 INT32 code; /* 35 */ 416 INT32 length; 417 INT32 memory_space; 418 ADDR32 address; 419 INT32 byte_count; 420 BYTE data[DUMMY]; 421 }; 422 423 struct read_r_ack_msg_t 424 { 425 INT32 code; /* 35 */ 426 INT32 length; 427 INT32 memory_space; 428 ADDR32 address; 429 INT32 byte_count; 430 INT32 data[DUMMY]; 431 }; 432 433 434 struct write_ack_msg_t 435 { 436 INT32 code; /* 36 */ 437 INT32 length; 438 INT32 memory_space; 439 ADDR32 address; 440 INT32 byte_count; 441 }; 442 443 444 struct bkpt_set_ack_msg_t 445 { 446 INT32 code; /* 37 */ 447 INT32 length; 448 INT32 memory_space; 449 ADDR32 address; 450 INT32 pass_count; 451 INT32 bkpt_type; 452 }; 453 454 455 struct bkpt_rm_ack_msg_t 456 { 457 INT32 code; /* 38 */ 458 INT32 length; 459 INT32 memory_space; 460 ADDR32 address; 461 }; 462 463 464 struct bkpt_stat_ack_msg_t 465 { 466 INT32 code; /* 39 */ 467 INT32 length; 468 INT32 memory_space; 469 ADDR32 address; 470 INT32 pass_count; 471 INT32 bkpt_type; 472 }; 473 474 475 struct copy_ack_msg_t 476 { 477 INT32 code; /* 40 */ 478 INT32 length; 479 INT32 source_space; 480 ADDR32 source_addr; 481 INT32 dest_space; 482 ADDR32 dest_addr; 483 INT32 byte_count; 484 }; 485 486 487 struct fill_ack_msg_t 488 { 489 INT32 code; /* 41 */ 490 INT32 length; 491 INT32 memory_space; 492 ADDR32 start_addr; 493 INT32 fill_count; 494 INT32 byte_count; 495 }; 496 497 498 struct init_ack_msg_t 499 { 500 INT32 code; /* 42 */ 501 INT32 length; 502 }; 503 504 505 struct halt_msg_t 506 { 507 INT32 code; /* 43 */ 508 INT32 length; 509 INT32 memory_space; 510 ADDR32 pc0; 511 ADDR32 pc1; 512 INT32 trap_number; 513 }; 514 515 516 struct error_msg_t 517 { 518 INT32 code; /* 63 */ 519 INT32 length; 520 INT32 error_code; 521 INT32 memory_space; 522 ADDR32 address; 523 }; 524 525 526 struct hif_call_msg_t 527 { 528 INT32 code; /* 96 */ 529 INT32 length; 530 INT32 service_number; 531 INT32 lr2; 532 INT32 lr3; 533 INT32 lr4; 534 }; 535 536 537 struct channel0_ack_msg_t 538 { 539 INT32 code; /* 97 */ 540 INT32 length; 541 }; 542 543 544 struct channel1_msg_t 545 { 546 INT32 code; /* 98 */ 547 INT32 length; 548 BYTE data[DUMMY]; 549 }; 550 551 552 553 /* 554 ** Union all of the message types together 555 */ 556 557 union msg_t 558 { 559 struct generic_msg_t generic_msg; 560 struct generic_int32_msg_t generic_int32_msg; 561 562 struct reset_msg_t reset_msg; 563 struct config_req_msg_t config_req_msg; 564 struct status_req_msg_t status_req_msg; 565 struct read_req_msg_t read_req_msg; 566 struct write_req_msg_t write_req_msg; 567 struct write_r_msg_t write_r_msg; 568 struct bkpt_set_msg_t bkpt_set_msg; 569 struct bkpt_rm_msg_t bkpt_rm_msg; 570 struct bkpt_stat_msg_t bkpt_stat_msg; 571 struct copy_msg_t copy_msg; 572 struct fill_msg_t fill_msg; 573 struct init_msg_t init_msg; 574 struct go_msg_t go_msg; 575 struct step_msg_t step_msg; 576 struct break_msg_t break_msg; 577 578 struct hif_call_rtn_msg_t hif_call_rtn_msg; 579 struct channel0_msg_t channel0_msg; 580 struct channel1_ack_msg_t channel1_ack_msg; 581 582 struct reset_ack_msg_t reset_ack_msg; 583 struct config_msg_t config_msg; 584 struct status_msg_t status_msg; 585 struct read_ack_msg_t read_ack_msg; 586 struct read_r_ack_msg_t read_r_ack_msg; 587 struct write_ack_msg_t write_ack_msg; 588 struct bkpt_set_ack_msg_t bkpt_set_ack_msg; 589 struct bkpt_rm_ack_msg_t bkpt_rm_ack_msg; 590 struct bkpt_stat_ack_msg_t bkpt_stat_ack_msg; 591 struct copy_ack_msg_t copy_ack_msg; 592 struct fill_ack_msg_t fill_ack_msg; 593 struct init_ack_msg_t init_ack_msg; 594 struct halt_msg_t halt_msg; 595 596 struct error_msg_t error_msg; 597 598 struct hif_call_msg_t hif_call_msg; 599 struct channel0_ack_msg_t channel0_ack_msg; 600 struct channel1_msg_t channel1_msg; 601 }; 602