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 */ 26typedef long int INT32; /* 32 bit integer */ 27typedef unsigned long int UINT32; /* 32 bit integer (unsigned) */ 28typedef unsigned long int ADDR32; /* 32 bit address */ 29typedef unsigned long int INST32; /* 32 bit instruction */ 30typedef long int BOOLEAN; /* Boolean value (32 bit) */ 31typedef unsigned char BYTE; /* byte (8 bit) */ 32typedef short int INT16; /* 16 bit integer */ 33typedef 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 */ 174struct 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) */ 183struct 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 195struct reset_msg_t 196 { 197 INT32 code; /* 0 */ 198 INT32 length; 199 }; 200 201 202struct config_req_msg_t 203 { 204 INT32 code; /* 1 */ 205 INT32 length; 206 }; 207 208 209struct status_req_msg_t 210 { 211 INT32 code; /* 2 */ 212 INT32 length; 213 }; 214 215 216struct 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 226struct 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 237struct 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 248struct 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 259struct bkpt_rm_msg_t 260 { 261 INT32 code; /* 6 */ 262 INT32 length; 263 INT32 memory_space; 264 ADDR32 bkpt_addr; 265 }; 266 267 268struct bkpt_stat_msg_t 269 { 270 INT32 code; /* 7 */ 271 INT32 length; 272 INT32 memory_space; 273 ADDR32 bkpt_addr; 274 }; 275 276 277struct 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 289struct 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 301struct 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 317struct go_msg_t 318 { 319 INT32 code; /* 11 */ 320 INT32 length; 321 }; 322 323 324struct step_msg_t 325 { 326 INT32 code; /* 12 */ 327 INT32 length; 328 INT32 count; 329 }; 330 331 332struct break_msg_t 333 { 334 INT32 code; /* 13 */ 335 INT32 length; 336 }; 337 338 339struct 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 350struct channel0_msg_t 351 { 352 INT32 code; /* 65 */ 353 INT32 length; 354 BYTE data; 355 }; 356 357 358struct channel1_ack_msg_t 359 { 360 INT32 code; /* 66 */ 361 INT32 length; 362 }; 363 364 365/* 366 ** Target to host messages 367 */ 368 369 370struct reset_ack_msg_t 371 { 372 INT32 code; /* 32 */ 373 INT32 length; 374 }; 375 376 377struct 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 396struct 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 413struct 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 423struct 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 434struct 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 444struct 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 455struct bkpt_rm_ack_msg_t 456 { 457 INT32 code; /* 38 */ 458 INT32 length; 459 INT32 memory_space; 460 ADDR32 address; 461 }; 462 463 464struct 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 475struct 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 487struct 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 498struct init_ack_msg_t 499 { 500 INT32 code; /* 42 */ 501 INT32 length; 502 }; 503 504 505struct 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 516struct 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 526struct 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 537struct channel0_ack_msg_t 538 { 539 INT32 code; /* 97 */ 540 INT32 length; 541 }; 542 543 544struct 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 557union 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