1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729
|
/* @(#)messages.h 5.19 93/08/10 17:49:09, Srini, AMD */
/******************************************************************************
* Copyright 1991 Advanced Micro Devices, Inc.
*
* This software is the property of Advanced Micro Devices, Inc (AMD) which
* specifically grants the user the right to modify, use and distribute this
* software provided this notice is not removed or altered. All other rights
* are reserved by AMD.
*
* AMD MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS
* SOFTWARE. IN NO EVENT SHALL AMD BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL
* DAMAGES IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, OR
* USE OF THIS SOFTWARE.
*
* So that all may benefit from your experience, please report any problems
* or suggestions about this software to the 29K Technical Support Center at
* 800-29-29-AMD (800-292-9263) in the USA, or 0800-89-1131 in the UK, or
* 0031-11-1129 in Japan, toll free. The direct dial number is 512-462-4118.
*
* Advanced Micro Devices, Inc.
* 29K Support Products
* Mail Stop 573
* 5900 E. Ben White Blvd.
* Austin, TX 78741
* 800-292-9263
*****************************************************************************
* Engineer: Srini Subramanian.
*****************************************************************************
** This header file describes the messages which are passed
** between the target and the host. This file basically defines
** a variant record of type msg_t.
**
** Note that the messages use the types defined in the "types.h"
** header file.
*****************************************************************************
*/
#ifndef _MESSAGES_H_INCLUDED_
#define _MESSAGES_H_INCLUDED_
#include "types.h"
#include "mtip.h"
/*
** 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
#define CHANNEL2_ACK 67
#define STDIN_NEEDED_ACK 68
#define STDIN_MODE_ACK 69
/*
** 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
#define CHANNEL2 99
#define STDIN_NEEDED_REQ 100
#define STDIN_MODE_REQ 101
/*
** Endian conversion definitions
*/
#define INCOMING_MSG 0
#define OUTGOING_MSG 1
#ifdef MSDOS
#define PARAMS(x) x
#else
#define PARAMS(x) ()
#endif
/* A "generic" message */
struct generic_msg_t {
INT32 code; /* generic */
INT32 length;
BYTE byte;
};
/* A "generic" message (with an INT32 array) */
struct generic_int32_msg_t {
INT32 code; /* generic */
INT32 length;
INT32 int32;
};
/*
** Host to target messages and routines that build them
*/
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 count;
INT32 size;
};
struct write_req_msg_t {
INT32 code; /* 4 */
INT32 length;
INT32 memory_space;
ADDR32 address;
INT32 count;
INT32 size;
BYTE data;
};
struct write_r_msg_t {
INT32 code; /* 4 */
INT32 length;
INT32 memory_space;
ADDR32 address;
INT32 byte_count;
INT32 data;
};
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 count;
INT32 size;
};
struct fill_msg_t {
INT32 code; /* 9 */
INT32 length;
INT32 memory_space;
ADDR32 start_addr;
INT32 fill_count;
INT32 byte_count;
BYTE fill_data;
};
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;
ADDR32 highmem;
};
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;
INT32 gr96;
};
struct channel2_ack_msg_t {
INT32 code; /* 67 */
INT32 length;
INT32 gr96;
};
struct stdin_needed_ack_msg_t {
INT32 code; /* 68 */
INT32 length;
BYTE data;
};
struct stdin_mode_ack_msg_t {
INT32 code; /* 69 */
INT32 length;
INT32 mode;
};
/*
** 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 os_version;
};
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;
};
struct read_r_ack_msg_t {
INT32 code; /* 35 */
INT32 length;
INT32 memory_space;
ADDR32 address;
INT32 byte_count;
INT32 data;
};
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;
};
struct channel2_msg_t {
INT32 code; /* 99 */
INT32 length;
BYTE data;
};
struct stdin_needed_msg_t {
INT32 code; /* 100 */
INT32 length;
INT32 nbytes;
};
struct stdin_mode_msg_t {
INT32 code; /* 101 */
INT32 length;
INT32 mode;
};
/*
** 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 channel2_ack_msg_t channel2_ack_msg;
struct stdin_needed_ack_msg_t stdin_needed_ack_msg;
struct stdin_mode_ack_msg_t stdin_mode_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;
struct channel2_msg_t channel2_msg;
struct stdin_needed_msg_t stdin_needed_msg;
struct stdin_mode_msg_t stdin_mode_msg;
};
/*
** This macro is used to get the size of a message data
** structure. The divide then multiply by the sizeof(INT32)
** gets rid of alignment problems which would cause sizeof()
** to return an incorect result.
*/
#define MSG_LENGTH(x) (((sizeof(x) / sizeof(INT32)) *\
sizeof(INT32)) - (2 * sizeof(INT32)))
/* Functions to initialize, send, and receive messages */
INT32 msg_length PARAMS((INT32 code));
INT32 Mini_msg_init PARAMS((char *targname));
int Mini_alloc_msgbuf PARAMS((int size));
void Mini_msg_exit PARAMS((void));
INT32 Mini_msg_send PARAMS((void));
INT32 Mini_msg_recv PARAMS((INT32 RecvMode));
INT32 Mini_init_comm PARAMS((void));
INT32 Mini_reset_comm PARAMS((void));
INT32 Mini_exit_comm PARAMS((void));
void Mini_go_target PARAMS((void));
INT32 Mini_write_memory PARAMS((INT32 m_space,
ADDR32 address,
INT32 byte_count,
BYTE *buffer));
INT32 Mini_read_memory PARAMS((INT32 m_space,
ADDR32 address,
INT32 byte_count,
BYTE *buffer));
/* Function to build specific Minimon messages in "buffer" */
void Mini_build_reset_msg PARAMS((void));
void Mini_build_config_req_msg PARAMS((void));
void Mini_build_status_req_msg PARAMS((void));
void Mini_build_read_req_msg PARAMS((INT32 memory_space,
ADDR32 address,
INT32 count,
INT32 size));
void Mini_build_write_req_msg PARAMS((INT32 memory_space,
ADDR32 address,
INT32 count,
INT32 size,
BYTE *data));
void Mini_build_bkpt_set_msg PARAMS((INT32 memory_space,
ADDR32 bkpt_addr,
INT32 pass_count,
INT32 bkpt_type));
void Mini_build_bkpt_rm_msg PARAMS((INT32 memory_space,
ADDR32 bkpt_addr));
void Mini_build_bkpt_stat_msg PARAMS((INT32 memory_space,
ADDR32 bkpt_addr));
void Mini_build_copy_msg PARAMS((INT32 source_space,
ADDR32 source_addr,
INT32 dest_space,
ADDR32 dest_addr,
INT32 count,
INT32 size));
void Mini_build_fill_msg PARAMS((INT32 memory_space,
ADDR32 start_addr,
INT32 fill_count,
INT32 byte_count,
BYTE *fill_data));
void Mini_build_init_msg PARAMS((ADDR32 text_start,
ADDR32 text_end,
ADDR32 data_start,
ADDR32 data_end,
ADDR32 entry_point,
INT32 m_stack,
INT32 r_stack,
ADDR32 highmem,
ADDR32 arg_start,
INT32 os_control));
void Mini_build_go_msg PARAMS((void));
void Mini_build_step_msg PARAMS((INT32 count));
void Mini_build_break_msg PARAMS((void));
void Mini_build_hif_rtn_msg PARAMS((INT32 serv_num,
INT32 gr121,
INT32 gr96,
INT32 gr97));
void Mini_build_channel0_msg PARAMS((BYTE *data, INT32 count));
void Mini_build_channel1_ack_msg PARAMS((INT32 gr96));
void Mini_build_channel2_ack_msg PARAMS((INT32 gr96));
void Mini_build_stdin_needed_ack_msg PARAMS((UINT32 count,BYTE *data));
void Mini_build_stdin_mode_ack_msg PARAMS((INT32 mode));
/* Functions to unpack/decipher the target to host messages */
void Mini_unpack_reset_ack_msg PARAMS((void));
void Mini_unpack_config_msg PARAMS((TIP_TARGET_CONFIG *target_config));
void Mini_unpack_status_msg PARAMS((TIP_TARGET_STATUS *target_status));
void Mini_unpack_read_ack_msg PARAMS((INT32 *mspace,
ADDR32 *address,
INT32 *byte_count,
BYTE *buffer));
void Mini_unpack_write_ack_msg PARAMS((INT32 *mspace,
ADDR32 *address,
INT32 *byte_count));
void Mini_unpack_bkpt_set_ack_msg PARAMS((INT32 *mspace,
ADDR32 *address,
INT32 *pass_count,
INT32 *bkpt_type));
void Mini_unpack_bkpt_rm_ack_msg PARAMS((INT32 *memory_space,
ADDR32 *address));
void Mini_unpack_bkpt_stat_ack_msg PARAMS((INT32 *mspace,
ADDR32 *address,
INT32 *pass_count,
INT32 *bkpt_type));
void Mini_unpack_copy_ack_msg PARAMS((INT32 *srcspace,
ADDR32 *srcaddr,
INT32 *dstspace,
ADDR32 *dstaddr,
INT32 *byte_count));
void Mini_unpack_fill_ack_msg PARAMS((INT32 *mspace,
ADDR32 *startaddr,
INT32 *fillcount,
INT32 *bytecount));
void Mini_unpack_init_ack_msg PARAMS((void));
void Mini_unpack_halt_msg PARAMS((INT32 *mspace,
ADDR32 *pc0,
ADDR32 *pc1,
INT32 *trap_number));
void Mini_unpack_error_msg PARAMS((INT32 *errcode,
INT32 *mspace,
ADDR32 *address));
void Mini_unpack_ch0_ack_msg PARAMS((void));
void Mini_unpack_channel1_msg PARAMS((BYTE *data,
INT32 *len));
void Mini_unpack_channel2_msg PARAMS((BYTE *data,
INT32 *len));
void Mini_unpack_hif_msg PARAMS((INT32 *gr121,
INT32 *lr2,
INT32 *lr3,
INT32 *lr4));
void Mini_unpack_stdin_needed_msg PARAMS((INT32 *nbytes));
void Mini_unpack_stdin_mode_msg PARAMS((INT32 *mode));
void CopyMsgFromTarg PARAMS(( union msg_t *dest));
void CopyMsgToTarg PARAMS(( union msg_t *source));
#define BUFFER_SIZE 2048
#define BLOCK 1
#define NONBLOCK 0
#define MSGRETRY (INT32) -8
#endif /* _MESSAGES_H_INCLUDED_ */
|