18c2ecf20Sopenharmony_ci/* 28c2ecf20Sopenharmony_ci * Copyright 2014 Advanced Micro Devices, Inc. 38c2ecf20Sopenharmony_ci * 48c2ecf20Sopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a 58c2ecf20Sopenharmony_ci * copy of this software and associated documentation files (the "Software"), 68c2ecf20Sopenharmony_ci * to deal in the Software without restriction, including without limitation 78c2ecf20Sopenharmony_ci * the rights to use, copy, modify, merge, publish, distribute, sublicense, 88c2ecf20Sopenharmony_ci * and/or sell copies of the Software, and to permit persons to whom the 98c2ecf20Sopenharmony_ci * Software is furnished to do so, subject to the following conditions: 108c2ecf20Sopenharmony_ci * 118c2ecf20Sopenharmony_ci * The above copyright notice and this permission notice shall be included in 128c2ecf20Sopenharmony_ci * all copies or substantial portions of the Software. 138c2ecf20Sopenharmony_ci * 148c2ecf20Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 158c2ecf20Sopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 168c2ecf20Sopenharmony_ci * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 178c2ecf20Sopenharmony_ci * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 188c2ecf20Sopenharmony_ci * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 198c2ecf20Sopenharmony_ci * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 208c2ecf20Sopenharmony_ci * OTHER DEALINGS IN THE SOFTWARE. 218c2ecf20Sopenharmony_ci * 228c2ecf20Sopenharmony_ci */ 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci#ifndef KFD_DBGMGR_H_ 258c2ecf20Sopenharmony_ci#define KFD_DBGMGR_H_ 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_ci#include "kfd_priv.h" 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci/* must align with hsakmttypes definition */ 308c2ecf20Sopenharmony_ci#pragma pack(push, 4) 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_cienum HSA_DBG_WAVEOP { 338c2ecf20Sopenharmony_ci HSA_DBG_WAVEOP_HALT = 1, /* Halts a wavefront */ 348c2ecf20Sopenharmony_ci HSA_DBG_WAVEOP_RESUME = 2, /* Resumes a wavefront */ 358c2ecf20Sopenharmony_ci HSA_DBG_WAVEOP_KILL = 3, /* Kills a wavefront */ 368c2ecf20Sopenharmony_ci HSA_DBG_WAVEOP_DEBUG = 4, /* Causes wavefront to enter dbg mode */ 378c2ecf20Sopenharmony_ci HSA_DBG_WAVEOP_TRAP = 5, /* Causes wavefront to take a trap */ 388c2ecf20Sopenharmony_ci HSA_DBG_NUM_WAVEOP = 5, 398c2ecf20Sopenharmony_ci HSA_DBG_MAX_WAVEOP = 0xFFFFFFFF 408c2ecf20Sopenharmony_ci}; 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_cienum HSA_DBG_WAVEMODE { 438c2ecf20Sopenharmony_ci /* send command to a single wave */ 448c2ecf20Sopenharmony_ci HSA_DBG_WAVEMODE_SINGLE = 0, 458c2ecf20Sopenharmony_ci /* 468c2ecf20Sopenharmony_ci * Broadcast to all wavefronts of all processes is not 478c2ecf20Sopenharmony_ci * supported for HSA user mode 488c2ecf20Sopenharmony_ci */ 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_ci /* send to waves within current process */ 518c2ecf20Sopenharmony_ci HSA_DBG_WAVEMODE_BROADCAST_PROCESS = 2, 528c2ecf20Sopenharmony_ci /* send to waves within current process on CU */ 538c2ecf20Sopenharmony_ci HSA_DBG_WAVEMODE_BROADCAST_PROCESS_CU = 3, 548c2ecf20Sopenharmony_ci HSA_DBG_NUM_WAVEMODE = 3, 558c2ecf20Sopenharmony_ci HSA_DBG_MAX_WAVEMODE = 0xFFFFFFFF 568c2ecf20Sopenharmony_ci}; 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_cienum HSA_DBG_WAVEMSG_TYPE { 598c2ecf20Sopenharmony_ci HSA_DBG_WAVEMSG_AUTO = 0, 608c2ecf20Sopenharmony_ci HSA_DBG_WAVEMSG_USER = 1, 618c2ecf20Sopenharmony_ci HSA_DBG_WAVEMSG_ERROR = 2, 628c2ecf20Sopenharmony_ci HSA_DBG_NUM_WAVEMSG, 638c2ecf20Sopenharmony_ci HSA_DBG_MAX_WAVEMSG = 0xFFFFFFFF 648c2ecf20Sopenharmony_ci}; 658c2ecf20Sopenharmony_ci 668c2ecf20Sopenharmony_cienum HSA_DBG_WATCH_MODE { 678c2ecf20Sopenharmony_ci HSA_DBG_WATCH_READ = 0, /* Read operations only */ 688c2ecf20Sopenharmony_ci HSA_DBG_WATCH_NONREAD = 1, /* Write or Atomic operations only */ 698c2ecf20Sopenharmony_ci HSA_DBG_WATCH_ATOMIC = 2, /* Atomic Operations only */ 708c2ecf20Sopenharmony_ci HSA_DBG_WATCH_ALL = 3, /* Read, Write or Atomic operations */ 718c2ecf20Sopenharmony_ci HSA_DBG_WATCH_NUM, 728c2ecf20Sopenharmony_ci HSA_DBG_WATCH_SIZE = 0xFFFFFFFF 738c2ecf20Sopenharmony_ci}; 748c2ecf20Sopenharmony_ci 758c2ecf20Sopenharmony_ci/* This structure is hardware specific and may change in the future */ 768c2ecf20Sopenharmony_cistruct HsaDbgWaveMsgAMDGen2 { 778c2ecf20Sopenharmony_ci union { 788c2ecf20Sopenharmony_ci struct ui32 { 798c2ecf20Sopenharmony_ci uint32_t UserData:8; /* user data */ 808c2ecf20Sopenharmony_ci uint32_t ShaderArray:1; /* Shader array */ 818c2ecf20Sopenharmony_ci uint32_t Priv:1; /* Privileged */ 828c2ecf20Sopenharmony_ci uint32_t Reserved0:4; /* Reserved, should be 0 */ 838c2ecf20Sopenharmony_ci uint32_t WaveId:4; /* wave id */ 848c2ecf20Sopenharmony_ci uint32_t SIMD:2; /* SIMD id */ 858c2ecf20Sopenharmony_ci uint32_t HSACU:4; /* Compute unit */ 868c2ecf20Sopenharmony_ci uint32_t ShaderEngine:2;/* Shader engine */ 878c2ecf20Sopenharmony_ci uint32_t MessageType:2; /* see HSA_DBG_WAVEMSG_TYPE */ 888c2ecf20Sopenharmony_ci uint32_t Reserved1:4; /* Reserved, should be 0 */ 898c2ecf20Sopenharmony_ci } ui32; 908c2ecf20Sopenharmony_ci uint32_t Value; 918c2ecf20Sopenharmony_ci }; 928c2ecf20Sopenharmony_ci uint32_t Reserved2; 938c2ecf20Sopenharmony_ci}; 948c2ecf20Sopenharmony_ci 958c2ecf20Sopenharmony_ciunion HsaDbgWaveMessageAMD { 968c2ecf20Sopenharmony_ci struct HsaDbgWaveMsgAMDGen2 WaveMsgInfoGen2; 978c2ecf20Sopenharmony_ci /* for future HsaDbgWaveMsgAMDGen3; */ 988c2ecf20Sopenharmony_ci}; 998c2ecf20Sopenharmony_ci 1008c2ecf20Sopenharmony_cistruct HsaDbgWaveMessage { 1018c2ecf20Sopenharmony_ci void *MemoryVA; /* ptr to associated host-accessible data */ 1028c2ecf20Sopenharmony_ci union HsaDbgWaveMessageAMD DbgWaveMsg; 1038c2ecf20Sopenharmony_ci}; 1048c2ecf20Sopenharmony_ci 1058c2ecf20Sopenharmony_ci/* 1068c2ecf20Sopenharmony_ci * TODO: This definitions to be MOVED to kfd_event, once it is implemented. 1078c2ecf20Sopenharmony_ci * 1088c2ecf20Sopenharmony_ci * HSA sync primitive, Event and HW Exception notification API definitions. 1098c2ecf20Sopenharmony_ci * The API functions allow the runtime to define a so-called sync-primitive, 1108c2ecf20Sopenharmony_ci * a SW object combining a user-mode provided "syncvar" and a scheduler event 1118c2ecf20Sopenharmony_ci * that can be signaled through a defined GPU interrupt. A syncvar is 1128c2ecf20Sopenharmony_ci * a process virtual memory location of a certain size that can be accessed 1138c2ecf20Sopenharmony_ci * by CPU and GPU shader code within the process to set and query the content 1148c2ecf20Sopenharmony_ci * within that memory. The definition of the content is determined by the HSA 1158c2ecf20Sopenharmony_ci * runtime and potentially GPU shader code interfacing with the HSA runtime. 1168c2ecf20Sopenharmony_ci * The syncvar values may be commonly written through an PM4 WRITE_DATA packet 1178c2ecf20Sopenharmony_ci * in the user mode instruction stream. The OS scheduler event is typically 1188c2ecf20Sopenharmony_ci * associated and signaled by an interrupt issued by the GPU, but other HSA 1198c2ecf20Sopenharmony_ci * system interrupt conditions from other HW (e.g. IOMMUv2) may be surfaced 1208c2ecf20Sopenharmony_ci * by the KFD by this mechanism, too. 1218c2ecf20Sopenharmony_ci */ 1228c2ecf20Sopenharmony_ci 1238c2ecf20Sopenharmony_ci/* these are the new definitions for events */ 1248c2ecf20Sopenharmony_cienum HSA_EVENTTYPE { 1258c2ecf20Sopenharmony_ci HSA_EVENTTYPE_SIGNAL = 0, /* user-mode generated GPU signal */ 1268c2ecf20Sopenharmony_ci HSA_EVENTTYPE_NODECHANGE = 1, /* HSA node change (attach/detach) */ 1278c2ecf20Sopenharmony_ci HSA_EVENTTYPE_DEVICESTATECHANGE = 2, /* HSA device state change 1288c2ecf20Sopenharmony_ci * (start/stop) 1298c2ecf20Sopenharmony_ci */ 1308c2ecf20Sopenharmony_ci HSA_EVENTTYPE_HW_EXCEPTION = 3, /* GPU shader exception event */ 1318c2ecf20Sopenharmony_ci HSA_EVENTTYPE_SYSTEM_EVENT = 4, /* GPU SYSCALL with parameter info */ 1328c2ecf20Sopenharmony_ci HSA_EVENTTYPE_DEBUG_EVENT = 5, /* GPU signal for debugging */ 1338c2ecf20Sopenharmony_ci HSA_EVENTTYPE_PROFILE_EVENT = 6,/* GPU signal for profiling */ 1348c2ecf20Sopenharmony_ci HSA_EVENTTYPE_QUEUE_EVENT = 7, /* GPU signal queue idle state 1358c2ecf20Sopenharmony_ci * (EOP pm4) 1368c2ecf20Sopenharmony_ci */ 1378c2ecf20Sopenharmony_ci /* ... */ 1388c2ecf20Sopenharmony_ci HSA_EVENTTYPE_MAXID, 1398c2ecf20Sopenharmony_ci HSA_EVENTTYPE_TYPE_SIZE = 0xFFFFFFFF 1408c2ecf20Sopenharmony_ci}; 1418c2ecf20Sopenharmony_ci 1428c2ecf20Sopenharmony_ci/* Sub-definitions for various event types: Syncvar */ 1438c2ecf20Sopenharmony_cistruct HsaSyncVar { 1448c2ecf20Sopenharmony_ci union SyncVar { 1458c2ecf20Sopenharmony_ci void *UserData; /* pointer to user mode data */ 1468c2ecf20Sopenharmony_ci uint64_t UserDataPtrValue; /* 64bit compatibility of value */ 1478c2ecf20Sopenharmony_ci } SyncVar; 1488c2ecf20Sopenharmony_ci uint64_t SyncVarSize; 1498c2ecf20Sopenharmony_ci}; 1508c2ecf20Sopenharmony_ci 1518c2ecf20Sopenharmony_ci/* Sub-definitions for various event types: NodeChange */ 1528c2ecf20Sopenharmony_ci 1538c2ecf20Sopenharmony_cienum HSA_EVENTTYPE_NODECHANGE_FLAGS { 1548c2ecf20Sopenharmony_ci HSA_EVENTTYPE_NODECHANGE_ADD = 0, 1558c2ecf20Sopenharmony_ci HSA_EVENTTYPE_NODECHANGE_REMOVE = 1, 1568c2ecf20Sopenharmony_ci HSA_EVENTTYPE_NODECHANGE_SIZE = 0xFFFFFFFF 1578c2ecf20Sopenharmony_ci}; 1588c2ecf20Sopenharmony_ci 1598c2ecf20Sopenharmony_cistruct HsaNodeChange { 1608c2ecf20Sopenharmony_ci /* HSA node added/removed on the platform */ 1618c2ecf20Sopenharmony_ci enum HSA_EVENTTYPE_NODECHANGE_FLAGS Flags; 1628c2ecf20Sopenharmony_ci}; 1638c2ecf20Sopenharmony_ci 1648c2ecf20Sopenharmony_ci/* Sub-definitions for various event types: DeviceStateChange */ 1658c2ecf20Sopenharmony_cienum HSA_EVENTTYPE_DEVICESTATECHANGE_FLAGS { 1668c2ecf20Sopenharmony_ci /* device started (and available) */ 1678c2ecf20Sopenharmony_ci HSA_EVENTTYPE_DEVICESTATUSCHANGE_START = 0, 1688c2ecf20Sopenharmony_ci /* device stopped (i.e. unavailable) */ 1698c2ecf20Sopenharmony_ci HSA_EVENTTYPE_DEVICESTATUSCHANGE_STOP = 1, 1708c2ecf20Sopenharmony_ci HSA_EVENTTYPE_DEVICESTATUSCHANGE_SIZE = 0xFFFFFFFF 1718c2ecf20Sopenharmony_ci}; 1728c2ecf20Sopenharmony_ci 1738c2ecf20Sopenharmony_cienum HSA_DEVICE { 1748c2ecf20Sopenharmony_ci HSA_DEVICE_CPU = 0, 1758c2ecf20Sopenharmony_ci HSA_DEVICE_GPU = 1, 1768c2ecf20Sopenharmony_ci MAX_HSA_DEVICE = 2 1778c2ecf20Sopenharmony_ci}; 1788c2ecf20Sopenharmony_ci 1798c2ecf20Sopenharmony_cistruct HsaDeviceStateChange { 1808c2ecf20Sopenharmony_ci uint32_t NodeId; /* F-NUMA node that contains the device */ 1818c2ecf20Sopenharmony_ci enum HSA_DEVICE Device; /* device type: GPU or CPU */ 1828c2ecf20Sopenharmony_ci enum HSA_EVENTTYPE_DEVICESTATECHANGE_FLAGS Flags; /* event flags */ 1838c2ecf20Sopenharmony_ci}; 1848c2ecf20Sopenharmony_ci 1858c2ecf20Sopenharmony_cistruct HsaEventData { 1868c2ecf20Sopenharmony_ci enum HSA_EVENTTYPE EventType; /* event type */ 1878c2ecf20Sopenharmony_ci union EventData { 1888c2ecf20Sopenharmony_ci /* 1898c2ecf20Sopenharmony_ci * return data associated with HSA_EVENTTYPE_SIGNAL 1908c2ecf20Sopenharmony_ci * and other events 1918c2ecf20Sopenharmony_ci */ 1928c2ecf20Sopenharmony_ci struct HsaSyncVar SyncVar; 1938c2ecf20Sopenharmony_ci 1948c2ecf20Sopenharmony_ci /* data associated with HSA_EVENTTYPE_NODE_CHANGE */ 1958c2ecf20Sopenharmony_ci struct HsaNodeChange NodeChangeState; 1968c2ecf20Sopenharmony_ci 1978c2ecf20Sopenharmony_ci /* data associated with HSA_EVENTTYPE_DEVICE_STATE_CHANGE */ 1988c2ecf20Sopenharmony_ci struct HsaDeviceStateChange DeviceState; 1998c2ecf20Sopenharmony_ci } EventData; 2008c2ecf20Sopenharmony_ci 2018c2ecf20Sopenharmony_ci /* the following data entries are internal to the KFD & thunk itself */ 2028c2ecf20Sopenharmony_ci 2038c2ecf20Sopenharmony_ci /* internal thunk store for Event data (OsEventHandle) */ 2048c2ecf20Sopenharmony_ci uint64_t HWData1; 2058c2ecf20Sopenharmony_ci /* internal thunk store for Event data (HWAddress) */ 2068c2ecf20Sopenharmony_ci uint64_t HWData2; 2078c2ecf20Sopenharmony_ci /* internal thunk store for Event data (HWData) */ 2088c2ecf20Sopenharmony_ci uint32_t HWData3; 2098c2ecf20Sopenharmony_ci}; 2108c2ecf20Sopenharmony_ci 2118c2ecf20Sopenharmony_cistruct HsaEventDescriptor { 2128c2ecf20Sopenharmony_ci /* event type to allocate */ 2138c2ecf20Sopenharmony_ci enum HSA_EVENTTYPE EventType; 2148c2ecf20Sopenharmony_ci /* H-NUMA node containing GPU device that is event source */ 2158c2ecf20Sopenharmony_ci uint32_t NodeId; 2168c2ecf20Sopenharmony_ci /* pointer to user mode syncvar data, syncvar->UserDataPtrValue 2178c2ecf20Sopenharmony_ci * may be NULL 2188c2ecf20Sopenharmony_ci */ 2198c2ecf20Sopenharmony_ci struct HsaSyncVar SyncVar; 2208c2ecf20Sopenharmony_ci}; 2218c2ecf20Sopenharmony_ci 2228c2ecf20Sopenharmony_cistruct HsaEvent { 2238c2ecf20Sopenharmony_ci uint32_t EventId; 2248c2ecf20Sopenharmony_ci struct HsaEventData EventData; 2258c2ecf20Sopenharmony_ci}; 2268c2ecf20Sopenharmony_ci 2278c2ecf20Sopenharmony_ci#pragma pack(pop) 2288c2ecf20Sopenharmony_ci 2298c2ecf20Sopenharmony_cienum DBGDEV_TYPE { 2308c2ecf20Sopenharmony_ci DBGDEV_TYPE_ILLEGAL = 0, 2318c2ecf20Sopenharmony_ci DBGDEV_TYPE_NODIQ = 1, 2328c2ecf20Sopenharmony_ci DBGDEV_TYPE_DIQ = 2, 2338c2ecf20Sopenharmony_ci DBGDEV_TYPE_TEST = 3 2348c2ecf20Sopenharmony_ci}; 2358c2ecf20Sopenharmony_ci 2368c2ecf20Sopenharmony_cistruct dbg_address_watch_info { 2378c2ecf20Sopenharmony_ci struct kfd_process *process; 2388c2ecf20Sopenharmony_ci enum HSA_DBG_WATCH_MODE *watch_mode; 2398c2ecf20Sopenharmony_ci uint64_t *watch_address; 2408c2ecf20Sopenharmony_ci uint64_t *watch_mask; 2418c2ecf20Sopenharmony_ci struct HsaEvent *watch_event; 2428c2ecf20Sopenharmony_ci uint32_t num_watch_points; 2438c2ecf20Sopenharmony_ci}; 2448c2ecf20Sopenharmony_ci 2458c2ecf20Sopenharmony_cistruct dbg_wave_control_info { 2468c2ecf20Sopenharmony_ci struct kfd_process *process; 2478c2ecf20Sopenharmony_ci uint32_t trapId; 2488c2ecf20Sopenharmony_ci enum HSA_DBG_WAVEOP operand; 2498c2ecf20Sopenharmony_ci enum HSA_DBG_WAVEMODE mode; 2508c2ecf20Sopenharmony_ci struct HsaDbgWaveMessage dbgWave_msg; 2518c2ecf20Sopenharmony_ci}; 2528c2ecf20Sopenharmony_ci 2538c2ecf20Sopenharmony_cistruct kfd_dbgdev { 2548c2ecf20Sopenharmony_ci 2558c2ecf20Sopenharmony_ci /* The device that owns this data. */ 2568c2ecf20Sopenharmony_ci struct kfd_dev *dev; 2578c2ecf20Sopenharmony_ci 2588c2ecf20Sopenharmony_ci /* kernel queue for DIQ */ 2598c2ecf20Sopenharmony_ci struct kernel_queue *kq; 2608c2ecf20Sopenharmony_ci 2618c2ecf20Sopenharmony_ci /* a pointer to the pqm of the calling process */ 2628c2ecf20Sopenharmony_ci struct process_queue_manager *pqm; 2638c2ecf20Sopenharmony_ci 2648c2ecf20Sopenharmony_ci /* type of debug device ( DIQ, non DIQ, etc. ) */ 2658c2ecf20Sopenharmony_ci enum DBGDEV_TYPE type; 2668c2ecf20Sopenharmony_ci 2678c2ecf20Sopenharmony_ci /* virtualized function pointers to device dbg */ 2688c2ecf20Sopenharmony_ci int (*dbgdev_register)(struct kfd_dbgdev *dbgdev); 2698c2ecf20Sopenharmony_ci int (*dbgdev_unregister)(struct kfd_dbgdev *dbgdev); 2708c2ecf20Sopenharmony_ci int (*dbgdev_address_watch)(struct kfd_dbgdev *dbgdev, 2718c2ecf20Sopenharmony_ci struct dbg_address_watch_info *adw_info); 2728c2ecf20Sopenharmony_ci int (*dbgdev_wave_control)(struct kfd_dbgdev *dbgdev, 2738c2ecf20Sopenharmony_ci struct dbg_wave_control_info *wac_info); 2748c2ecf20Sopenharmony_ci 2758c2ecf20Sopenharmony_ci}; 2768c2ecf20Sopenharmony_ci 2778c2ecf20Sopenharmony_cistruct kfd_dbgmgr { 2788c2ecf20Sopenharmony_ci u32 pasid; 2798c2ecf20Sopenharmony_ci struct kfd_dev *dev; 2808c2ecf20Sopenharmony_ci struct kfd_dbgdev *dbgdev; 2818c2ecf20Sopenharmony_ci}; 2828c2ecf20Sopenharmony_ci 2838c2ecf20Sopenharmony_ci/* prototypes for debug manager functions */ 2848c2ecf20Sopenharmony_cistruct mutex *kfd_get_dbgmgr_mutex(void); 2858c2ecf20Sopenharmony_civoid kfd_dbgmgr_destroy(struct kfd_dbgmgr *pmgr); 2868c2ecf20Sopenharmony_cibool kfd_dbgmgr_create(struct kfd_dbgmgr **ppmgr, struct kfd_dev *pdev); 2878c2ecf20Sopenharmony_cilong kfd_dbgmgr_register(struct kfd_dbgmgr *pmgr, struct kfd_process *p); 2888c2ecf20Sopenharmony_cilong kfd_dbgmgr_unregister(struct kfd_dbgmgr *pmgr, struct kfd_process *p); 2898c2ecf20Sopenharmony_cilong kfd_dbgmgr_wave_control(struct kfd_dbgmgr *pmgr, 2908c2ecf20Sopenharmony_ci struct dbg_wave_control_info *wac_info); 2918c2ecf20Sopenharmony_cilong kfd_dbgmgr_address_watch(struct kfd_dbgmgr *pmgr, 2928c2ecf20Sopenharmony_ci struct dbg_address_watch_info *adw_info); 2938c2ecf20Sopenharmony_ci#endif /* KFD_DBGMGR_H_ */ 294