diff --git a/libhsakmt/tests/kfdtest/src/BaseQueue.cpp b/libhsakmt/tests/kfdtest/src/BaseQueue.cpp index fdbc7b5a17..a6b64920af 100644 --- a/libhsakmt/tests/kfdtest/src/BaseQueue.cpp +++ b/libhsakmt/tests/kfdtest/src/BaseQueue.cpp @@ -56,14 +56,25 @@ HSAKMT_STATUS BaseQueue::Create(unsigned int NodeId, unsigned int size, HSAuint6 m_Resources.Queue_write_ptr_aql = &pointers[1]; } - status = hsaKmtCreateQueue(NodeId, - type, - DEFAULT_QUEUE_PERCENTAGE, - DEFAULT_PRIORITY, - m_QueueBuf->As(), - m_QueueBuf->Size(), - NULL, - &m_Resources); + if (type == HSA_QUEUE_SDMA_BY_ENG_ID) + status = hsaKmtCreateQueueExt(NodeId, + type, + DEFAULT_QUEUE_PERCENTAGE, + DEFAULT_PRIORITY, + m_SdmaEngineId, + m_QueueBuf->As(), + m_QueueBuf->Size(), + NULL, + &m_Resources); + else + status = hsaKmtCreateQueue(NodeId, + type, + DEFAULT_QUEUE_PERCENTAGE, + DEFAULT_PRIORITY, + m_QueueBuf->As(), + m_QueueBuf->Size(), + NULL, + &m_Resources); if (status != HSAKMT_STATUS_SUCCESS) { return status; diff --git a/libhsakmt/tests/kfdtest/src/BaseQueue.hpp b/libhsakmt/tests/kfdtest/src/BaseQueue.hpp index 570af95c8c..d0ac9ba094 100644 --- a/libhsakmt/tests/kfdtest/src/BaseQueue.hpp +++ b/libhsakmt/tests/kfdtest/src/BaseQueue.hpp @@ -88,6 +88,7 @@ class BaseQueue { virtual _HSA_QUEUE_TYPE GetQueueType() = 0; unsigned int GetNodeId() { return m_Node; } unsigned int GetFamilyId() { return m_FamilyId; } + int GetSDMAEngineId() { return m_SdmaEngineId; } protected: static const unsigned int CMD_NOP_TYPE_2 = 0x80000000; @@ -100,6 +101,7 @@ class BaseQueue { HsaMemoryBuffer *m_QueueBuf; unsigned int m_Node; unsigned int m_FamilyId; + int m_SdmaEngineId; // @return Write pointer modulo queue size in dwords virtual unsigned int Wptr() = 0; diff --git a/libhsakmt/tests/kfdtest/src/SDMAQueueByEngId.hpp b/libhsakmt/tests/kfdtest/src/SDMAQueueByEngId.hpp new file mode 100644 index 0000000000..87a278e00d --- /dev/null +++ b/libhsakmt/tests/kfdtest/src/SDMAQueueByEngId.hpp @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2025 Advanced Micro Devices, Inc. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef __KFD_SDMA_QUEUE_BY_ENG_ID__H__ +#define __KFD_SDMA_QUEUE_BY_ENG_ID__H__ + +#include "SDMAQueue.hpp" + +class SDMAQueueByEngId : public SDMAQueue { + public: + SDMAQueueByEngId(int engineId) {CMD_NOP = 0; m_SdmaEngineId = engineId;} + virtual ~SDMAQueueByEngId(void) {} + protected: + virtual _HSA_QUEUE_TYPE GetQueueType() { return HSA_QUEUE_SDMA_BY_ENG_ID; } +}; + +#endif // __KFD_SDMA_QUEUE_BY_ENG_ID__H__