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