1 /* 2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28 29 #ifndef _KDP_PROTOCOL_H_ 30 #define _KDP_PROTOCOL_H_ 31 32 /* 33 * Definition of remote debugger protocol. 34 */ 35 36 37 #ifdef MACH_KERNEL_PRIVATE 38 #include <mach/vm_prot.h> 39 #include <mach/boolean.h> 40 #include <stdint.h> 41 #endif 42 43 #ifdef KDP_PROXY_PACK_SUPPORT 44 #pragma pack(1) 45 #define KDP_PACKED 46 #else 47 #define KDP_PACKED __attribute__((packed)) 48 #endif 49 50 /* 51 * Retransmit parameters 52 */ 53 #if DDEBUG_DEBUG || DEBUG_DEBUG 54 #define KDP_REXMIT_SECS 20 /* rexmit if no ack in 3 secs */ 55 #else /* DDEBUG_DEBUG || DEBUG_DEBUG */ 56 #define KDP_REXMIT_SECS 3 /* rexmit if no ack in 3 secs */ 57 #endif /* DDEBUG_DEBUG || DEBUG_DEBUG */ 58 #define KDP_REXMIT_TRIES 8 /* xmit 8 times, then give up */ 59 60 61 /* 62 * (NMI) Attention Max Wait Time 63 * Remote will resume unless KDP requests is received within this 64 * many seconds after an attention (nmi) packet is sent. 65 */ 66 #define KDP_MAX_ATTN_WAIT 30 /* wait max of 30 seconds */ 67 68 /* 69 * Well-known UDP port, debugger side. 70 * FIXME: This is what the 68K guys use, but beats me how they chose it... 71 */ 72 #define KDP_REMOTE_PORT 41139 /* pick one and register it */ 73 74 /* 75 * UDP ports, KDB side. 5 port numbers are reserved for each port (request 76 * and exception). This allows multiple KDBs to run on one host. 77 */ 78 #define UDP_HOST_COMM_BASE 41140 79 #define UDP_HOST_EXCEP_BASE 41145 80 #define NUM_UDP_HOST_PORTS 5 81 82 /* 83 * Requests 84 */ 85 typedef enum { 86 /* connection oriented requests */ 87 KDP_CONNECT, KDP_DISCONNECT, 88 89 /* obtaining client info */ 90 KDP_HOSTINFO, KDP_VERSION, KDP_MAXBYTES, 91 92 /* memory access */ 93 KDP_READMEM, KDP_WRITEMEM, 94 95 /* register access */ 96 KDP_READREGS, KDP_WRITEREGS, 97 98 /* executable image info */ 99 KDP_LOAD, KDP_IMAGEPATH, 100 101 /* execution control */ 102 KDP_SUSPEND, KDP_RESUMECPUS, 103 104 /* exception and termination notification, NOT true requests */ 105 KDP_EXCEPTION, KDP_TERMINATION, 106 107 /* breakpoint control */ 108 KDP_BREAKPOINT_SET, KDP_BREAKPOINT_REMOVE, 109 110 /* vm regions */ 111 KDP_REGIONS, 112 113 /* reattach to a connected host */ 114 KDP_REATTACH, 115 116 /* remote reboot request */ 117 KDP_HOSTREBOOT, 118 119 /* memory access (64-bit wide addresses). Version 11 protocol */ 120 KDP_READMEM64, KDP_WRITEMEM64, 121 122 /* breakpoint control (64-bit wide addresses). Version 11 protocol */ 123 KDP_BREAKPOINT64_SET, KDP_BREAKPOINT64_REMOVE, 124 125 /* kernel version string, like "xnu-1234.5~6". Version 11 protocol */ 126 KDP_KERNELVERSION, 127 128 /* physical memory access (64-bit wide addresses). Version 12 protocol */ 129 KDP_READPHYSMEM64, KDP_WRITEPHYSMEM64, 130 131 /* ioport access (8-, 16-, and 32-bit) */ 132 KDP_READIOPORT, KDP_WRITEIOPORT, 133 134 /* msr access (64-bit) */ 135 KDP_READMSR64, KDP_WRITEMSR64, 136 137 /* get/dump panic/corefile info */ 138 KDP_DUMPINFO, 139 140 /* keep this last */ 141 KDP_INVALID_REQUEST 142 } kdp_req_t; 143 144 typedef enum { 145 KDP_DUMPINFO_GETINFO = 0x00000000, 146 KDP_DUMPINFO_SETINFO = 0x00000001, 147 KDP_DUMPINFO_CORE = 0x00000102, 148 KDP_DUMPINFO_PANICLOG = 0x00000103, 149 KDP_DUMPINFO_SYSTEMLOG = 0x00000104, 150 KDP_DUMPINFO_DISABLE = 0x00000105, 151 KDP_DUMPINFO_MASK = 0x00000FFF, 152 KDP_DUMPINFO_DUMP = 0x00000100, 153 154 KDP_DUMPINFO_REBOOT = 0x10000000, 155 KDP_DUMPINFO_NORESUME = 0x20000000, 156 KDP_DUMPINFO_RESUME = 0x00000000, /* default behaviour */ 157 KDP_DUMPINFO_NOINTR = 0x40000000, /* don't interrupt */ 158 KDP_DUMPINFO_INTR = 0x00000000, /* default behaviour */ 159 } kdp_dumpinfo_t; 160 161 /* 162 * Common KDP packet header 163 * NOTE: kgmacros has a non-symboled version of kdp_hdr_t so that some basic information. 164 * can be gathered from a kernel without any symbols. changes to this structure 165 * need to be reflected in kgmacros as well. 166 */ 167 typedef struct { 168 kdp_req_t request:7; /* kdp_req_t, request type */ 169 unsigned is_reply:1; /* 0 => request, 1 => reply */ 170 unsigned seq:8; /* sequence number within session */ 171 unsigned len:16; /* length of entire pkt including hdr */ 172 unsigned key; /* session key */ 173 } KDP_PACKED kdp_hdr_t; 174 175 /* 176 * KDP errors 177 */ 178 typedef enum { 179 KDPERR_NO_ERROR = 0, 180 KDPERR_ALREADY_CONNECTED, 181 KDPERR_BAD_NBYTES, 182 KDPERR_BADFLAVOR, /* bad flavor in w/r regs */ 183 KDPERR_BAD_ACCESS, /* memory reference failure */ 184 185 KDPERR_MAX_BREAKPOINTS = 100, 186 KDPERR_BREAKPOINT_NOT_FOUND = 101, 187 KDPERR_BREAKPOINT_ALREADY_SET = 102 188 } kdp_error_t; 189 190 #if defined(__x86_64__) 191 #define KDPERR_ACCESS(_req, _ret) \ 192 (((_req) == (uint32_t)(_ret)) ? KDPERR_NO_ERROR : KDPERR_BAD_ACCESS) 193 #else 194 #define KDPERR_ACCESS(req, cnt) (KDPERR_NO_ERROR) 195 #endif /* x86_64 */ 196 197 198 /* 199 * KDP requests and reply packet formats 200 */ 201 202 /* 203 * KDP_CONNECT 204 */ 205 typedef struct { /* KDP_CONNECT request */ 206 kdp_hdr_t hdr; 207 uint16_t req_reply_port; /* udp port which to send replies */ 208 uint16_t exc_note_port; /* udp port which to send exc notes */ 209 char greeting[0]; /* "greetings", nul-terminated */ 210 } KDP_PACKED kdp_connect_req_t; 211 212 typedef struct { /* KDP_CONNECT reply */ 213 kdp_hdr_t hdr; 214 kdp_error_t error; 215 } KDP_PACKED kdp_connect_reply_t; 216 217 /* 218 * KDP_DISCONNECT 219 */ 220 typedef struct { /* KDP_DISCONNECT request */ 221 kdp_hdr_t hdr; 222 } KDP_PACKED kdp_disconnect_req_t; 223 224 typedef struct { /* KDP_DISCONNECT reply */ 225 kdp_hdr_t hdr; 226 } KDP_PACKED kdp_disconnect_reply_t; 227 228 /* 229 * KDP_REATTACH 230 */ 231 typedef struct { 232 kdp_hdr_t hdr; 233 uint16_t req_reply_port; /* udp port which to send replies */ 234 } KDP_PACKED kdp_reattach_req_t; 235 236 /* 237 * KDP_HOSTINFO 238 */ 239 typedef struct { /* KDP_HOSTINFO request */ 240 kdp_hdr_t hdr; 241 } KDP_PACKED kdp_hostinfo_req_t; 242 243 typedef struct { 244 uint32_t cpus_mask; /* bit is 1 if cpu present */ 245 uint32_t cpu_type; 246 uint32_t cpu_subtype; 247 } KDP_PACKED kdp_hostinfo_t; 248 249 typedef struct { /* KDP_HOSTINFO reply */ 250 kdp_hdr_t hdr; 251 kdp_hostinfo_t hostinfo; 252 } KDP_PACKED kdp_hostinfo_reply_t; 253 254 /* 255 * KDP_VERSION 256 */ 257 typedef struct { /* KDP_VERSION request */ 258 kdp_hdr_t hdr; 259 } KDP_PACKED kdp_version_req_t; 260 261 #define KDP_FEATURE_BP 0x1 /* local breakpoint support */ 262 263 typedef struct { /* KDP_VERSION reply */ 264 kdp_hdr_t hdr; 265 uint32_t version; 266 uint32_t feature; 267 uint32_t pad0; 268 uint32_t pad1; 269 } KDP_PACKED kdp_version_reply_t; 270 271 #define VM_PROT_VOLATILE ((vm_prot_t) 0x08) /* not cacheable */ 272 #define VM_PROT_SPARSE ((vm_prot_t) 0x10) /* sparse addr space */ 273 274 /* 275 * KDP_REGIONS 276 */ 277 typedef struct { /* KDP_REGIONS request */ 278 kdp_hdr_t hdr; 279 } KDP_PACKED kdp_regions_req_t; 280 281 typedef struct { 282 uint32_t address; 283 uint32_t nbytes; 284 uint32_t protection; /* vm_prot_t */ 285 } KDP_PACKED kdp_region_t; 286 287 typedef struct { /* KDP_REGIONS reply */ 288 kdp_hdr_t hdr; 289 uint32_t nregions; 290 kdp_region_t regions[0]; 291 } KDP_PACKED kdp_regions_reply_t; 292 293 /* 294 * KDP_MAXBYTES 295 */ 296 typedef struct { /* KDP_MAXBYTES request */ 297 kdp_hdr_t hdr; 298 } KDP_PACKED kdp_maxbytes_req_t; 299 300 typedef struct { /* KDP_MAXBYTES reply */ 301 kdp_hdr_t hdr; 302 uint32_t max_bytes; 303 } KDP_PACKED kdp_maxbytes_reply_t; 304 305 /* 306 * KDP_READMEM 307 */ 308 typedef struct { /* KDP_READMEM request */ 309 kdp_hdr_t hdr; 310 uint32_t address; 311 uint32_t nbytes; 312 } KDP_PACKED kdp_readmem_req_t; 313 314 typedef struct { /* KDP_READMEM reply */ 315 kdp_hdr_t hdr; 316 kdp_error_t error; 317 char data[0]; 318 } KDP_PACKED kdp_readmem_reply_t; 319 320 /* 321 * KDP_READMEM64 322 */ 323 typedef struct { /* KDP_READMEM64 request */ 324 kdp_hdr_t hdr; 325 uint64_t address; 326 uint32_t nbytes; 327 } KDP_PACKED kdp_readmem64_req_t; 328 329 typedef struct { /* KDP_READMEM64 reply */ 330 kdp_hdr_t hdr; 331 kdp_error_t error; 332 char data[0]; 333 } KDP_PACKED kdp_readmem64_reply_t; 334 335 /* 336 * KDP_READPHYSMEM64 337 */ 338 typedef struct { /* KDP_READPHYSMEM64 request */ 339 kdp_hdr_t hdr; 340 uint64_t address; 341 uint32_t nbytes; 342 uint16_t lcpu; 343 } KDP_PACKED kdp_readphysmem64_req_t; 344 345 typedef struct { /* KDP_READPHYSMEM64 reply */ 346 kdp_hdr_t hdr; 347 kdp_error_t error; 348 char data[0]; 349 } KDP_PACKED kdp_readphysmem64_reply_t; 350 351 /* 352 * KDP_WRITEMEM 353 */ 354 typedef struct { /* KDP_WRITEMEM request */ 355 kdp_hdr_t hdr; 356 uint32_t address; 357 uint32_t nbytes; 358 char data[0]; 359 } KDP_PACKED kdp_writemem_req_t; 360 361 typedef struct { /* KDP_WRITEMEM reply */ 362 kdp_hdr_t hdr; 363 kdp_error_t error; 364 } KDP_PACKED kdp_writemem_reply_t; 365 366 /* 367 * KDP_WRITEMEM64 368 */ 369 typedef struct { /* KDP_WRITEMEM64 request */ 370 kdp_hdr_t hdr; 371 uint64_t address; 372 uint32_t nbytes; 373 char data[0]; 374 } KDP_PACKED kdp_writemem64_req_t; 375 376 typedef struct { /* KDP_WRITEMEM64 reply */ 377 kdp_hdr_t hdr; 378 kdp_error_t error; 379 } KDP_PACKED kdp_writemem64_reply_t; 380 381 /* 382 * KDP_WRITEPHYSMEM64 383 */ 384 typedef struct { /* KDP_WRITEPHYSMEM64 request */ 385 kdp_hdr_t hdr; 386 uint64_t address; 387 uint32_t nbytes; 388 uint16_t lcpu; 389 char data[0]; 390 } KDP_PACKED kdp_writephysmem64_req_t; 391 392 typedef struct { /* KDP_WRITEPHYSMEM64 reply */ 393 kdp_hdr_t hdr; 394 kdp_error_t error; 395 } KDP_PACKED kdp_writephysmem64_reply_t; 396 397 /* 398 * KDP_WRITEIOPORT 399 */ 400 typedef struct { /* KDP_WRITEIOPORT request */ 401 kdp_hdr_t hdr; 402 uint16_t lcpu; 403 uint16_t address; 404 uint16_t nbytes; 405 char data[0]; 406 } KDP_PACKED kdp_writeioport_req_t; 407 408 typedef struct { /* KDP_WRITEIOPORT reply */ 409 kdp_hdr_t hdr; 410 kdp_error_t error; 411 } KDP_PACKED kdp_writeioport_reply_t; 412 413 /* 414 * KDP_READIOPORT 415 */ 416 typedef struct { /* KDP_READIOPORT request */ 417 kdp_hdr_t hdr; 418 uint16_t lcpu; 419 uint16_t address; 420 uint16_t nbytes; 421 } KDP_PACKED kdp_readioport_req_t; 422 423 typedef struct { /* KDP_READIOPORT reply */ 424 kdp_hdr_t hdr; 425 kdp_error_t error; 426 char data[0]; 427 } KDP_PACKED kdp_readioport_reply_t; 428 429 430 /* 431 * KDP_WRITEMSR64 432 */ 433 typedef struct { /* KDP_WRITEMSR64 request */ 434 kdp_hdr_t hdr; 435 uint32_t address; 436 uint16_t lcpu; 437 char data[0]; 438 } KDP_PACKED kdp_writemsr64_req_t; 439 440 typedef struct { /* KDP_WRITEMSR64 reply */ 441 kdp_hdr_t hdr; 442 kdp_error_t error; 443 } KDP_PACKED kdp_writemsr64_reply_t; 444 445 /* 446 * KDP_READMSR64 447 */ 448 typedef struct { /* KDP_READMSR64 request */ 449 kdp_hdr_t hdr; 450 uint32_t address; 451 uint16_t lcpu; 452 } KDP_PACKED kdp_readmsr64_req_t; 453 454 typedef struct { /* KDP_READMSR64 reply */ 455 kdp_hdr_t hdr; 456 kdp_error_t error; 457 char data[0]; 458 } KDP_PACKED kdp_readmsr64_reply_t; 459 460 461 /* 462 * KDP_READREGS 463 */ 464 typedef struct { /* KDP_READREGS request */ 465 kdp_hdr_t hdr; 466 uint32_t cpu; 467 uint32_t flavor; 468 } KDP_PACKED kdp_readregs_req_t; 469 470 typedef struct { /* KDP_READREGS reply */ 471 kdp_hdr_t hdr; 472 kdp_error_t error; /* could be KDPERR_BADFLAVOR */ 473 char data[0]; 474 } KDP_PACKED kdp_readregs_reply_t; 475 476 /* 477 * KDP_WRITEREGS 478 */ 479 typedef struct { /* KDP_WRITEREGS request */ 480 kdp_hdr_t hdr; 481 uint32_t cpu; 482 uint32_t flavor; 483 char data[0]; 484 } KDP_PACKED kdp_writeregs_req_t; 485 486 typedef struct { /* KDP_WRITEREGS reply */ 487 kdp_hdr_t hdr; 488 kdp_error_t error; 489 } KDP_PACKED kdp_writeregs_reply_t; 490 491 /* 492 * KDP_LOAD 493 */ 494 typedef struct { /* KDP_LOAD request */ 495 kdp_hdr_t hdr; 496 char file_args[0]; 497 } KDP_PACKED kdp_load_req_t; 498 499 typedef struct { /* KDP_LOAD reply */ 500 kdp_hdr_t hdr; 501 kdp_error_t error; 502 } KDP_PACKED kdp_load_reply_t; 503 504 /* 505 * KDP_IMAGEPATH 506 */ 507 typedef struct { /* KDP_IMAGEPATH request */ 508 kdp_hdr_t hdr; 509 } KDP_PACKED kdp_imagepath_req_t; 510 511 typedef struct { /* KDP_IMAGEPATH reply */ 512 kdp_hdr_t hdr; 513 char path[0]; 514 } KDP_PACKED kdp_imagepath_reply_t; 515 516 /* 517 * KDP_SUSPEND 518 */ 519 typedef struct { /* KDP_SUSPEND request */ 520 kdp_hdr_t hdr; 521 } KDP_PACKED kdp_suspend_req_t; 522 523 typedef struct { /* KDP_SUSPEND reply */ 524 kdp_hdr_t hdr; 525 } KDP_PACKED kdp_suspend_reply_t; 526 527 /* 528 * KDP_RESUMECPUS 529 */ 530 typedef struct { /* KDP_RESUMECPUS request */ 531 kdp_hdr_t hdr; 532 uint32_t cpu_mask; 533 } KDP_PACKED kdp_resumecpus_req_t; 534 535 typedef struct { /* KDP_RESUMECPUS reply */ 536 kdp_hdr_t hdr; 537 } KDP_PACKED kdp_resumecpus_reply_t; 538 539 /* 540 * KDP_BREAKPOINT_SET and KDP_BREAKPOINT_REMOVE 541 */ 542 543 typedef struct { 544 kdp_hdr_t hdr; 545 uint32_t address; 546 } KDP_PACKED kdp_breakpoint_req_t; 547 548 typedef struct { 549 kdp_hdr_t hdr; 550 kdp_error_t error; 551 } KDP_PACKED kdp_breakpoint_reply_t; 552 553 /* 554 * KDP_BREAKPOINT64_SET and KDP_BREAKPOINT64_REMOVE 555 */ 556 557 typedef struct { 558 kdp_hdr_t hdr; 559 uint64_t address; 560 } KDP_PACKED kdp_breakpoint64_req_t; 561 562 typedef struct { 563 kdp_hdr_t hdr; 564 kdp_error_t error; 565 } KDP_PACKED kdp_breakpoint64_reply_t; 566 567 /* 568 * Exception notifications 569 * (Exception notifications are not requests, and in fact travel from 570 * the remote debugger to the gdb agent KDB.) 571 */ 572 typedef struct { /* exc. info for one cpu */ 573 uint32_t cpu; 574 /* 575 * Following info is defined as 576 * per <mach/exception.h> 577 */ 578 uint32_t exception; 579 uint32_t code; 580 uint32_t subcode; 581 } KDP_PACKED kdp_exc_info_t; 582 583 typedef struct { /* KDP_EXCEPTION notification */ 584 kdp_hdr_t hdr; 585 uint32_t n_exc_info; 586 kdp_exc_info_t exc_info[0]; 587 } KDP_PACKED kdp_exception_t; 588 589 typedef struct { /* KDP_EXCEPTION acknowledgement */ 590 kdp_hdr_t hdr; 591 } KDP_PACKED kdp_exception_ack_t; 592 593 /* 594 * KDP_KERNELVERSION 595 */ 596 typedef struct { /* KDP_KERNELVERSION request */ 597 kdp_hdr_t hdr; 598 } KDP_PACKED kdp_kernelversion_req_t; 599 600 typedef struct { /* KDP_KERNELVERSION reply */ 601 kdp_hdr_t hdr; 602 char version[0]; 603 } KDP_PACKED kdp_kernelversion_reply_t; 604 605 606 /* 607 * Child termination messages 608 */ 609 typedef enum { 610 KDP_FAULT = 0, /* child took fault (internal use) */ 611 KDP_EXIT, /* child exited */ 612 KDP_POWEROFF, /* child power-off */ 613 KDP_REBOOT, /* child reboot */ 614 KDP_COMMAND_MODE /* child exit to mon command_mode */ 615 } kdp_termination_code_t; 616 617 typedef struct { /* KDP_TERMINATION notification */ 618 kdp_hdr_t hdr; 619 uint32_t term_code; /* kdp_termination_code_t */ 620 uint32_t exit_code; 621 } KDP_PACKED kdp_termination_t; 622 623 typedef struct { 624 kdp_hdr_t hdr; 625 } KDP_PACKED kdp_termination_ack_t; 626 627 /* 628 * KDP_DUMPINFO 629 */ 630 typedef struct { /* KDP_DUMPINFO request */ 631 kdp_hdr_t hdr; 632 char name[50]; 633 char destip[16]; 634 char routerip[16]; 635 uint32_t port; 636 kdp_dumpinfo_t type; 637 } KDP_PACKED kdp_dumpinfo_req_t; 638 639 typedef struct { /* KDP_DUMPINFO reply */ 640 kdp_hdr_t hdr; 641 char name[50]; 642 char destip[16]; 643 char routerip[16]; 644 uint32_t port; 645 kdp_dumpinfo_t type; 646 } KDP_PACKED kdp_dumpinfo_reply_t; 647 648 649 typedef union { 650 kdp_hdr_t hdr; 651 kdp_connect_req_t connect_req; 652 kdp_connect_reply_t connect_reply; 653 kdp_disconnect_req_t disconnect_req; 654 kdp_disconnect_reply_t disconnect_reply; 655 kdp_hostinfo_req_t hostinfo_req; 656 kdp_hostinfo_reply_t hostinfo_reply; 657 kdp_version_req_t version_req; 658 kdp_version_reply_t version_reply; 659 kdp_maxbytes_req_t maxbytes_req; 660 kdp_maxbytes_reply_t maxbytes_reply; 661 kdp_readmem_req_t readmem_req; 662 kdp_readmem_reply_t readmem_reply; 663 kdp_readmem64_req_t readmem64_req; 664 kdp_readmem64_reply_t readmem64_reply; 665 kdp_readphysmem64_req_t readphysmem64_req; 666 kdp_readphysmem64_reply_t readphysmem64_reply; 667 kdp_writemem_req_t writemem_req; 668 kdp_writemem_reply_t writemem_reply; 669 kdp_writemem64_req_t writemem64_req; 670 kdp_writemem64_reply_t writemem64_reply; 671 kdp_writephysmem64_req_t writephysmem64_req; 672 kdp_writephysmem64_reply_t writephysmem64_reply; 673 kdp_readregs_req_t readregs_req; 674 kdp_readregs_reply_t readregs_reply; 675 kdp_writeregs_req_t writeregs_req; 676 kdp_writeregs_reply_t writeregs_reply; 677 kdp_load_req_t load_req; 678 kdp_load_reply_t load_reply; 679 kdp_imagepath_req_t imagepath_req; 680 kdp_imagepath_reply_t imagepath_reply; 681 kdp_suspend_req_t suspend_req; 682 kdp_suspend_reply_t suspend_reply; 683 kdp_resumecpus_req_t resumecpus_req; 684 kdp_resumecpus_reply_t resumecpus_reply; 685 kdp_exception_t exception; 686 kdp_exception_ack_t exception_ack; 687 kdp_termination_t termination; 688 kdp_termination_ack_t termination_ack; 689 kdp_breakpoint_req_t breakpoint_req; 690 kdp_breakpoint_reply_t breakpoint_reply; 691 kdp_breakpoint64_req_t breakpoint64_req; 692 kdp_breakpoint64_reply_t breakpoint64_reply; 693 kdp_reattach_req_t reattach_req; 694 kdp_regions_req_t regions_req; 695 kdp_regions_reply_t regions_reply; 696 kdp_kernelversion_req_t kernelversion_req; 697 kdp_kernelversion_reply_t kernelversion_reply; 698 kdp_readioport_req_t readioport_req; 699 kdp_readioport_reply_t readioport_reply; 700 kdp_writeioport_req_t writeioport_req; 701 kdp_writeioport_reply_t writeioport_reply; 702 kdp_readmsr64_req_t readmsr64_req; 703 kdp_readmsr64_reply_t readmsr64_reply; 704 kdp_writemsr64_req_t writemsr64_req; 705 kdp_writemsr64_reply_t writemsr64_reply; 706 kdp_dumpinfo_req_t dumpinfo_req; 707 kdp_dumpinfo_reply_t dumpinfo_reply; 708 } kdp_pkt_t; 709 710 #define MAX_KDP_PKT_SIZE 1200 /* max packet size */ 711 #define MAX_KDP_DATA_SIZE 1024 /* max r/w data per packet */ 712 713 /* 714 * Support relatively small request/responses here. 715 * If kgmacros needs to make a larger request, increase 716 * this buffer size 717 */ 718 #define KDP_MANUAL_PACKET_SIZE 128 719 struct kdp_manual_pkt { 720 unsigned char data[KDP_MANUAL_PACKET_SIZE]; 721 unsigned int len; 722 boolean_t input; 723 } KDP_PACKED; 724 725 #ifdef KDP_PROXY_PACK_SUPPORT 726 #pragma pack() 727 #endif 728 729 #endif // _KDP_PROTOCOL_H_ 730