1 /* 2 * Copyright (c) 2000-2004 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 /* 30 * Internal definitions for kdp module 31 */ 32 33 #include <kdp/kdp.h> 34 #include <kern/machine.h> 35 #include <kdp/kdp_protocol.h> 36 #include <mach/vm_types.h> 37 #include <mach/boolean.h> 38 #include <mach/mach_types.h> 39 #include <libsa/types.h> 40 41 typedef struct { 42 void *saved_state; 43 thread_t kdp_thread; 44 int kdp_cpu; 45 uint32_t session_key; 46 unsigned int conn_seq; 47 unsigned short reply_port; 48 unsigned short exception_port; 49 boolean_t is_conn; 50 boolean_t is_halted; 51 unsigned char exception_seq; 52 boolean_t exception_ack_needed; 53 } kdp_glob_t; 54 55 extern kdp_glob_t kdp; 56 57 extern volatile int kdp_flag; 58 extern int noresume_on_disconnect; 59 60 extern char kdp_kernelversion_string[256]; 61 62 #define KDP_READY 0x1 63 #define KDP_ARP 0x2 64 #define KDP_BP_DIS 0x4 65 #define KDP_GETC_ENA 0x8 66 #define KDP_PANIC_DUMP_ENABLED 0x10 67 #define PANIC_CORE_ON_NMI 0x20 68 #define DBG_POST_CORE 0x40 69 #define PANIC_LOG_DUMP 0x80 70 #define REBOOT_POST_CORE 0x100 71 #define SYSTEM_LOG_DUMP 0x200 72 typedef boolean_t 73 (*kdp_dispatch_t) ( 74 kdp_pkt_t *, 75 int *, 76 unsigned short * 77 ); 78 79 extern 80 boolean_t 81 kdp_packet( 82 unsigned char *, 83 int *, 84 unsigned short * 85 ); 86 87 extern 88 boolean_t 89 kdp_remove_all_breakpoints(void); 90 91 extern 92 void 93 kdp_exception( 94 unsigned char *, 95 int *, 96 unsigned short *, 97 unsigned int, 98 unsigned int, 99 unsigned int 100 ); 101 102 extern 103 boolean_t 104 kdp_exception_ack( 105 unsigned char *, 106 int 107 ); 108 109 extern 110 void 111 kdp_panic( 112 const char *fmt, 113 ... 114 ) __printflike(1, 2); 115 116 extern 117 void 118 kdp_machine_reboot( 119 void 120 ); 121 122 extern 123 void 124 kdp_us_spin( 125 int usec 126 ); 127 128 extern 129 int 130 kdp_intr_disbl( 131 void 132 ); 133 134 extern 135 void 136 kdp_intr_enbl( 137 int s 138 ); 139 140 extern 141 kdp_error_t 142 kdp_machine_read_regs( 143 unsigned int cpu, 144 unsigned int flavor, 145 char *data, 146 int *size 147 ); 148 149 extern 150 kdp_error_t 151 kdp_machine_write_regs( 152 unsigned int cpu, 153 unsigned int flavor, 154 char *data, 155 int *size 156 ); 157 158 extern 159 void 160 kdp_machine_hostinfo( 161 kdp_hostinfo_t *hostinfo 162 ); 163 164 extern 165 void 166 kdp_sync_cache( 167 void 168 ); 169 170 /* Return a byte array that can be byte-copied to a memory address 171 * to trap into the debugger. Must be 4 bytes or less in the current 172 * implementation 173 */ 174 #define MAX_BREAKINSN_BYTES 4 175 176 void 177 kdp_machine_get_breakinsn( 178 uint8_t *bytes, 179 uint32_t *size 180 ); 181 182 extern void 183 kdp_ml_enter_debugger( 184 void 185 ); 186 187 mach_vm_size_t 188 kdp_machine_vm_read( mach_vm_address_t, caddr_t, mach_vm_size_t); 189 190 mach_vm_size_t 191 kdp_machine_vm_write( caddr_t, mach_vm_address_t, mach_vm_size_t); 192 193 mach_vm_size_t 194 kdp_machine_phys_read(kdp_readphysmem64_req_t * rq, caddr_t /* data */, 195 uint16_t /* lcpu */); 196 197 mach_vm_size_t 198 kdp_machine_phys_write(kdp_writephysmem64_req_t * rq, caddr_t /* data */, 199 uint16_t /* lcpu */); 200 201 int 202 kdp_machine_ioport_read(kdp_readioport_req_t *, caddr_t /* data */, uint16_t /* lcpu */); 203 204 int 205 kdp_machine_ioport_write(kdp_writeioport_req_t *, caddr_t /* data */, uint16_t /* lcpu */); 206 207 int 208 kdp_machine_msr64_read(kdp_readmsr64_req_t *, caddr_t /* data */, uint16_t /* lcpu */); 209 210 int 211 kdp_machine_msr64_write(kdp_writemsr64_req_t *, caddr_t /* data */, uint16_t /* lcpu */); 212 213 vm_map_offset_t 214 kdp_core_start_addr(void); 215