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