KFDTest : Add family ID when building SDMA packet
Some SDMA packet format might be different among asic versions
Change-Id: Ic7eda7554c23e3972e168480874ca67a92677346
Signed-off-by: shaoyunl <shaoyun.liu@amd.com>
[ROCm/ROCR-Runtime commit: 395750264d]
Αυτή η υποβολή περιλαμβάνεται σε:
@@ -88,13 +88,13 @@ void KFDIPCTest::BasicTestChildProcess(int defaultGPUNode, int *pipefd) {
|
||||
/* Check for pattern in the shared Local Memory */
|
||||
ASSERT_SUCCESS(sdmaQueue.Create(defaultGPUNode));
|
||||
size = size < sharedSize ? size : sharedSize;
|
||||
sdmaQueue.PlaceAndSubmitPacket(SDMACopyDataPacket(tempSysBuffer.As<HSAuint32*>(),
|
||||
sdmaQueue.PlaceAndSubmitPacket(SDMACopyDataPacket(sdmaQueue.GetFamilyId(), tempSysBuffer.As<HSAuint32*>(),
|
||||
sharedLocalBuffer, size));
|
||||
sdmaQueue.Wait4PacketConsumption();
|
||||
EXPECT_TRUE(WaitOnValue(tempSysBuffer.As<HSAuint32*>(), 0xAAAAAAAA));
|
||||
|
||||
/* Fill in the Local Memory with different pattern */
|
||||
sdmaQueue.PlaceAndSubmitPacket(SDMAWriteDataPacket(sharedLocalBuffer, 0xBBBBBBBB));
|
||||
sdmaQueue.PlaceAndSubmitPacket(SDMAWriteDataPacket(sdmaQueue.GetFamilyId(), sharedLocalBuffer, 0xBBBBBBBB));
|
||||
sdmaQueue.Wait4PacketConsumption();
|
||||
|
||||
/* Clean up */
|
||||
@@ -125,7 +125,7 @@ void KFDIPCTest::BasicTestParentProcess(int defaultGPUNode, pid_t cpid, int *pip
|
||||
|
||||
/* Copy pattern in Local Memory before sharing it */
|
||||
ASSERT_SUCCESS(sdmaQueue.Create(defaultGPUNode));
|
||||
sdmaQueue.PlaceAndSubmitPacket(SDMACopyDataPacket(toShareLocalBuffer.As<HSAuint32*>(),
|
||||
sdmaQueue.PlaceAndSubmitPacket(SDMACopyDataPacket(sdmaQueue.GetFamilyId(), toShareLocalBuffer.As<HSAuint32*>(),
|
||||
tempSysBuffer.As<HSAuint32*>(), size));
|
||||
sdmaQueue.Wait4PacketConsumption();
|
||||
|
||||
@@ -141,7 +141,7 @@ void KFDIPCTest::BasicTestParentProcess(int defaultGPUNode, pid_t cpid, int *pip
|
||||
EXPECT_EQ(WEXITSTATUS(status), 0);
|
||||
|
||||
/* Check for the new pattern filled in by child process */
|
||||
sdmaQueue.PlaceAndSubmitPacket(SDMACopyDataPacket(tempSysBuffer.As<HSAuint32*>(),
|
||||
sdmaQueue.PlaceAndSubmitPacket(SDMACopyDataPacket(sdmaQueue.GetFamilyId(), tempSysBuffer.As<HSAuint32*>(),
|
||||
toShareLocalBuffer.As<HSAuint32*>(), size));
|
||||
sdmaQueue.Wait4PacketConsumption();
|
||||
EXPECT_TRUE(WaitOnValue(tempSysBuffer.As<HSAuint32*>(), 0xBBBBBBBB));
|
||||
|
||||
@@ -453,7 +453,7 @@ TEST_F(KFDMemoryTest, MemoryRegister) {
|
||||
dispatch0.Submit(pm4Queue);
|
||||
dispatch0.Sync(g_TestTimeOut);
|
||||
|
||||
sdmaQueue.PlaceAndSubmitPacket(SDMAWriteDataPacket(sdmaBuffer.As<HSAuint32 *>(), 0x12345678));
|
||||
sdmaQueue.PlaceAndSubmitPacket(SDMAWriteDataPacket(sdmaQueue.GetFamilyId(), sdmaBuffer.As<HSAuint32 *>(), 0x12345678));
|
||||
sdmaQueue.Wait4PacketConsumption();
|
||||
EXPECT_TRUE(WaitOnValue(&stackData[sdmaOffset], 0x12345678));
|
||||
|
||||
@@ -496,7 +496,7 @@ TEST_F(KFDMemoryTest, MemoryRegister) {
|
||||
dispatch1.Submit(pm4Queue);
|
||||
dispatch1.Sync(g_TestTimeOut);
|
||||
|
||||
sdmaQueue.PlaceAndSubmitPacket(SDMAWriteDataPacket(sdmaBuffer.As<HSAuint32 *>(), 0xD0BED0BE));
|
||||
sdmaQueue.PlaceAndSubmitPacket(SDMAWriteDataPacket(sdmaQueue.GetFamilyId(), sdmaBuffer.As<HSAuint32 *>(), 0xD0BED0BE));
|
||||
sdmaQueue.Wait4PacketConsumption();
|
||||
|
||||
EXPECT_SUCCESS(pm4Queue.Destroy());
|
||||
@@ -1021,10 +1021,10 @@ TEST_F(KFDMemoryTest, MMBench) {
|
||||
#define INTERLEAVE_SDMA() do { \
|
||||
if (interleaveSDMA) { \
|
||||
sdmaQueue[0].PlaceAndSubmitPacket( \
|
||||
SDMAWriteDataPacket(sdmaBuffer.As<HSAuint32 *>(), \
|
||||
SDMAWriteDataPacket(sdmaQueue[0].GetFamilyId(), sdmaBuffer.As<HSAuint32 *>(), \
|
||||
0x12345678)); \
|
||||
sdmaQueue[1].PlaceAndSubmitPacket( \
|
||||
SDMAWriteDataPacket(sdmaBuffer.As<HSAuint32 *>()+16, \
|
||||
SDMAWriteDataPacket(sdmaQueue[1].GetFamilyId(), sdmaBuffer.As<HSAuint32 *>()+16, \
|
||||
0x12345678)); \
|
||||
} \
|
||||
} while (0)
|
||||
@@ -1601,7 +1601,7 @@ TEST_F(KFDMemoryTest, SignalHandling) {
|
||||
|
||||
pDb[0] = 0x02020202;
|
||||
ASSERT_SUCCESS(queue.Create(defaultGPUNode));
|
||||
queue.PlaceAndSubmitPacket(SDMAWriteDataPacket(pDb, 0x01010101) );
|
||||
queue.PlaceAndSubmitPacket(SDMAWriteDataPacket(queue.GetFamilyId(), pDb, 0x01010101) );
|
||||
queue.Wait4PacketConsumption();
|
||||
EXPECT_TRUE(WaitOnValue(pDb, 0x01010101));
|
||||
EXPECT_SUCCESS(queue.Destroy());
|
||||
|
||||
@@ -155,7 +155,7 @@ TEST_F(KFDQMTest, SubmitPacketSdmaQueue) {
|
||||
|
||||
ASSERT_SUCCESS(queue.Create(defaultGPUNode));
|
||||
|
||||
queue.PlaceAndSubmitPacket(SDMAWriteDataPacket(destBuf.As<void *>(), 0x02020202));
|
||||
queue.PlaceAndSubmitPacket(SDMAWriteDataPacket(queue.GetFamilyId(), destBuf.As<void *>(), 0x02020202));
|
||||
|
||||
queue.Wait4PacketConsumption();
|
||||
|
||||
@@ -188,9 +188,9 @@ TEST_F(KFDQMTest, MultipleSdmaQueues) {
|
||||
destBuf.Fill(0x0);
|
||||
srcBuf.Fill(qidx + 0xa0);
|
||||
queues[qidx].PlaceAndSubmitPacket(
|
||||
SDMACopyDataPacket(destBuf.As<unsigned int*>(), srcBuf.As<unsigned int*>(), bufSize));
|
||||
SDMACopyDataPacket(queues[qidx].GetFamilyId(), destBuf.As<unsigned int*>(), srcBuf.As<unsigned int*>(), bufSize));
|
||||
queues[qidx].PlaceAndSubmitPacket(
|
||||
SDMAWriteDataPacket(destBuf.As<unsigned int*>() + bufSize/4, 0x02020202));
|
||||
SDMAWriteDataPacket(queues[qidx].GetFamilyId(), destBuf.As<unsigned int*>() + bufSize/4, 0x02020202));
|
||||
|
||||
queues[qidx].Wait4PacketConsumption();
|
||||
|
||||
@@ -241,7 +241,7 @@ TEST_F(KFDQMTest, SdmaConcurrentCopies) {
|
||||
|
||||
for (unsigned j = 0; j < NPACKETS; j++)
|
||||
queue.PlacePacket(
|
||||
SDMACopyDataPacket(dstBuf.As<char *>()+COPY_SIZE*j,
|
||||
SDMACopyDataPacket(queue.GetFamilyId(), dstBuf.As<char *>()+COPY_SIZE*j,
|
||||
srcBuf.As<char *>()+COPY_SIZE*j, COPY_SIZE));
|
||||
queue.SubmitPacket();
|
||||
|
||||
@@ -260,7 +260,7 @@ TEST_F(KFDQMTest, SdmaConcurrentCopies) {
|
||||
}
|
||||
log << "Done." << std::endl;
|
||||
|
||||
queue.PlaceAndSubmitPacket(SDMAWriteDataPacket(srcBuf.As<unsigned *>(), 0x02020202));
|
||||
queue.PlaceAndSubmitPacket(SDMAWriteDataPacket(queue.GetFamilyId(), srcBuf.As<unsigned *>(), 0x02020202));
|
||||
queue.Wait4PacketConsumption();
|
||||
EXPECT_TRUE(WaitOnValue(srcBuf.As<unsigned int*>(), 0x02020202));
|
||||
|
||||
@@ -326,7 +326,7 @@ TEST_F(KFDQMTest, DisableSdmaQueueByUpdateWithNullAddress) {
|
||||
|
||||
ASSERT_SUCCESS(queue.Create(defaultGPUNode));
|
||||
|
||||
queue.PlaceAndSubmitPacket(SDMAWriteDataPacket(destBuf.As<void*>(), 0));
|
||||
queue.PlaceAndSubmitPacket(SDMAWriteDataPacket(queue.GetFamilyId(), destBuf.As<void*>(), 0));
|
||||
|
||||
WaitOnValue(destBuf.As<unsigned int*>(), 0);
|
||||
|
||||
@@ -334,7 +334,7 @@ TEST_F(KFDQMTest, DisableSdmaQueueByUpdateWithNullAddress) {
|
||||
|
||||
EXPECT_SUCCESS(queue.Update(BaseQueue::DEFAULT_QUEUE_PERCENTAGE, BaseQueue::DEFAULT_PRIORITY, true));
|
||||
|
||||
queue.PlaceAndSubmitPacket(SDMAWriteDataPacket(destBuf.As<void*>(), 0));
|
||||
queue.PlaceAndSubmitPacket(SDMAWriteDataPacket(queue.GetFamilyId(), destBuf.As<void*>(), 0));
|
||||
|
||||
// Don't sync since we don't expect rptr to change when the queue is disabled.
|
||||
Delay(2000);
|
||||
@@ -1268,9 +1268,9 @@ TEST_F(KFDQMTest, SdmaQueueWraparound) {
|
||||
destBuf.Fill(0x0);
|
||||
srcBuf.Fill(pktIdx);
|
||||
queue.PlaceAndSubmitPacket(
|
||||
SDMACopyDataPacket(destBuf.As<unsigned int*>(), srcBuf.As<unsigned int*>(), bufSize));
|
||||
SDMACopyDataPacket(queue.GetFamilyId(), destBuf.As<unsigned int*>(), srcBuf.As<unsigned int*>(), bufSize));
|
||||
queue.PlaceAndSubmitPacket(
|
||||
SDMAWriteDataPacket(destBuf.As<unsigned int*>() + bufSize/4, 0x02020202));
|
||||
SDMAWriteDataPacket(queue.GetFamilyId(), destBuf.As<unsigned int*>() + bufSize/4, 0x02020202));
|
||||
queue.Wait4PacketConsumption();
|
||||
|
||||
EXPECT_TRUE(WaitOnValue(destBuf.As<unsigned int*>() + bufSize/4, 0x02020202));
|
||||
@@ -1280,7 +1280,7 @@ TEST_F(KFDQMTest, SdmaQueueWraparound) {
|
||||
}
|
||||
|
||||
for (unsigned int pktIdx = 0; pktIdx <= queue.Size()/sizeof(SDMA_PKT_WRITE_UNTILED); ++pktIdx) {
|
||||
queue.PlaceAndSubmitPacket(SDMAWriteDataPacket(destBuf.As<unsigned int*>(), pktIdx));
|
||||
queue.PlaceAndSubmitPacket(SDMAWriteDataPacket(queue.GetFamilyId(), destBuf.As<unsigned int*>(), pktIdx));
|
||||
queue.Wait4PacketConsumption();
|
||||
WaitOnValue(destBuf.As<unsigned int*>(), pktIdx);
|
||||
}
|
||||
@@ -1406,7 +1406,7 @@ sdma_copy(HSAuint32 node, void *src, void *const dst[], int n, HSAuint64 size) {
|
||||
HsaEvent *event;
|
||||
ASSERT_SUCCESS(CreateQueueTypeEvent(false, false, node, &event));
|
||||
ASSERT_SUCCESS(sdmaQueue.Create(node));
|
||||
sdmaQueue.PlaceAndSubmitPacket(SDMACopyDataPacket(dst, src, n, size));
|
||||
sdmaQueue.PlaceAndSubmitPacket(SDMACopyDataPacket(sdmaQueue.GetFamilyId(), dst, src, n, size));
|
||||
sdmaQueue.Wait4PacketConsumption(event);
|
||||
EXPECT_SUCCESS(sdmaQueue.Destroy());
|
||||
hsaKmtDestroyEvent(event);
|
||||
@@ -1418,7 +1418,7 @@ sdma_fill(HSAint32 node, void *dst, unsigned int data, HSAuint64 size) {
|
||||
HsaEvent *event;
|
||||
ASSERT_SUCCESS(CreateQueueTypeEvent(false, false, node, &event));
|
||||
ASSERT_SUCCESS(sdmaQueue.Create(node));
|
||||
sdmaQueue.PlaceAndSubmitPacket(SDMAFillDataPacket(dst, data, size));
|
||||
sdmaQueue.PlaceAndSubmitPacket(SDMAFillDataPacket(sdmaQueue.GetFamilyId(), dst, data, size));
|
||||
sdmaQueue.Wait4PacketConsumption(event);
|
||||
EXPECT_SUCCESS(sdmaQueue.Destroy());
|
||||
hsaKmtDestroyEvent(event);
|
||||
@@ -1647,10 +1647,11 @@ TEST_F(KFDQMTest, SdmaEventInterrupt) {
|
||||
/* Let sDMA have some workload first.*/
|
||||
queue[i].PlacePacket(SDMATimePacket(&ts[1]));
|
||||
queue[i].PlacePacket(
|
||||
SDMACopyDataPacket(dst[i], src, bufSize));
|
||||
SDMACopyDataPacket(queue[i].GetFamilyId(), dst[i], src, bufSize));
|
||||
queue[i].PlacePacket(SDMATimePacket(&ts[2]));
|
||||
queue[i].PlacePacket(
|
||||
SDMAFencePacket(reinterpret_cast<void*>(event[i]->EventData.HWData2), event[i]->EventId));
|
||||
SDMAFencePacket(queue[i].GetFamilyId(),
|
||||
reinterpret_cast<void*>(event[i]->EventData.HWData2), event[i]->EventId));
|
||||
queue[i].PlacePacket(SDMATimePacket(&ts[3]));
|
||||
queue[i].PlacePacket(SDMATrapPacket(event[i]->EventId));
|
||||
queue[i].PlacePacket(SDMATimePacket(&ts[4]));
|
||||
@@ -1738,9 +1739,9 @@ TEST_F(KFDQMTest, GPUDoorbellWrite) {
|
||||
* engine. This should submit the PM4 packet on the first
|
||||
* queue.
|
||||
*/
|
||||
otherQueue.PlacePacket(SDMAWriteDataPacket(qRes->Queue_write_ptr,
|
||||
otherQueue.PlacePacket(SDMAWriteDataPacket(otherQueue.GetFamilyId(), qRes->Queue_write_ptr,
|
||||
pendingWptr));
|
||||
otherQueue.PlacePacket(SDMAWriteDataPacket(qRes->Queue_DoorBell,
|
||||
otherQueue.PlacePacket(SDMAWriteDataPacket(otherQueue.GetFamilyId(), qRes->Queue_DoorBell,
|
||||
pendingWptr));
|
||||
#else
|
||||
/* Write the wptr and doorbell update using WRITE_DATA packets
|
||||
@@ -1764,9 +1765,9 @@ TEST_F(KFDQMTest, GPUDoorbellWrite) {
|
||||
* engine. This should submit the PM4 packet on the first
|
||||
* queue.
|
||||
*/
|
||||
otherQueue.PlacePacket(SDMAWriteDataPacket(qRes->Queue_write_ptr,
|
||||
otherQueue.PlacePacket(SDMAWriteDataPacket(otherQueue.GetFamilyId(), qRes->Queue_write_ptr,
|
||||
2, &pendingWptr64));
|
||||
otherQueue.PlacePacket(SDMAWriteDataPacket(qRes->Queue_DoorBell,
|
||||
otherQueue.PlacePacket(SDMAWriteDataPacket(otherQueue.GetFamilyId(), qRes->Queue_DoorBell,
|
||||
2, &pendingWptr64));
|
||||
#else
|
||||
/* Write the 64-bit wptr and doorbell update using RELEASE_MEM
|
||||
|
||||
@@ -272,8 +272,10 @@ void HsaMemoryBuffer::Fill(HSAuint32 value, BaseQueue& baseQueue, HSAuint64 offs
|
||||
size = size ? size : m_Size;
|
||||
ASSERT_TRUE(size + offset <= m_Size) << "Buffer Overflow" << std::endl;
|
||||
|
||||
baseQueue.PlacePacket(SDMAFillDataPacket((reinterpret_cast<void *>(this->As<char*>() + offset)), value, size));
|
||||
baseQueue.PlacePacket(SDMAFencePacket(reinterpret_cast<void*>(event->EventData.HWData2), event->EventId));
|
||||
baseQueue.PlacePacket(SDMAFillDataPacket(baseQueue.GetFamilyId(),
|
||||
(reinterpret_cast<void *>(this->As<char*>() + offset)), value, size));
|
||||
baseQueue.PlacePacket(SDMAFencePacket(baseQueue.GetFamilyId(),
|
||||
reinterpret_cast<void*>(event->EventData.HWData2), event->EventId));
|
||||
baseQueue.PlaceAndSubmitPacket(SDMATrapPacket(event->EventId));
|
||||
EXPECT_SUCCESS(hsaKmtWaitOnEvent(event, g_TestTimeOut));
|
||||
|
||||
@@ -326,10 +328,10 @@ bool HsaMemoryBuffer::IsPattern(HSAuint64 location, HSAuint32 pattern, BaseQueue
|
||||
return false;
|
||||
|
||||
*tmp = ~pattern;
|
||||
baseQueue.PlacePacket(SDMACopyDataPacket((void *)tmp,
|
||||
baseQueue.PlacePacket(SDMACopyDataPacket(baseQueue.GetFamilyId(), (void *)tmp,
|
||||
reinterpret_cast<void *>(this->As<HSAuint64>() + location),
|
||||
sizeof(HSAuint32)));
|
||||
baseQueue.PlacePacket(SDMAFencePacket(reinterpret_cast<void*>(event->EventData.HWData2),
|
||||
baseQueue.PlacePacket(SDMAFencePacket(baseQueue.GetFamilyId(), reinterpret_cast<void*>(event->EventData.HWData2),
|
||||
event->EventId));
|
||||
baseQueue.PlaceAndSubmitPacket(SDMATrapPacket(event->EventId));
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
#include "PM4Packet.hpp"
|
||||
#include "KFDTestUtil.hpp"
|
||||
#include "KFDTestUtilQueue.hpp"
|
||||
#include "KFDBaseComponentTest.hpp"
|
||||
|
||||
#define MB_PER_SEC(size, time) ((((size) * 1ULL) >> 20) * 1000ULL * 1000ULL * 1000ULL / (time))
|
||||
|
||||
@@ -355,7 +356,7 @@ void sdma_multicopy(std::vector<SDMACopyParams> &array, int mashup, TSPattern ts
|
||||
|
||||
for (i = 0; i < array.size(); i++) {
|
||||
sharedPacket packet(new
|
||||
SDMACopyDataPacket(array[i].dst, array[i].src, array[i].size));
|
||||
SDMACopyDataPacket(g_baseTest->GetFamilyIdFromNodeId(array[i].node), array[i].dst, array[i].src, array[i].size));
|
||||
packetList.push_back(packet);
|
||||
|
||||
/* We put the real queue_id in local handle[] to reduce some assignment.*/
|
||||
|
||||
@@ -32,18 +32,16 @@
|
||||
*/
|
||||
#define SDMA_COUNT(c) (m_FamilyId < FAMILY_AI ? (c) : (c)-1)
|
||||
|
||||
SDMAWriteDataPacket::SDMAWriteDataPacket(void):
|
||||
SDMAWriteDataPacket::SDMAWriteDataPacket(unsigned int familyId, void* destAddr, unsigned int data):
|
||||
packetData(NULL) {
|
||||
m_FamilyId = familyId;
|
||||
InitPacket(destAddr, 1, &data);
|
||||
}
|
||||
|
||||
SDMAWriteDataPacket::SDMAWriteDataPacket(void* destAddr, unsigned int data):
|
||||
packetData(NULL) {
|
||||
InitPacket(destAddr, data);
|
||||
}
|
||||
|
||||
SDMAWriteDataPacket::SDMAWriteDataPacket(void* destAddr, unsigned int ndw,
|
||||
SDMAWriteDataPacket::SDMAWriteDataPacket(unsigned int familyId, void* destAddr, unsigned int ndw,
|
||||
void *data):
|
||||
packetData(NULL) {
|
||||
m_FamilyId = familyId;
|
||||
InitPacket(destAddr, ndw, data);
|
||||
}
|
||||
|
||||
@@ -52,10 +50,6 @@ SDMAWriteDataPacket::~SDMAWriteDataPacket(void) {
|
||||
free(packetData);
|
||||
}
|
||||
|
||||
void SDMAWriteDataPacket::InitPacket(void* destAddr, unsigned int data) {
|
||||
InitPacket(destAddr, 1, &data);
|
||||
}
|
||||
|
||||
void SDMAWriteDataPacket::InitPacket(void* destAddr, unsigned int ndw,
|
||||
void *data) {
|
||||
packetSize = sizeof(SDMA_PKT_WRITE_UNTILED) +
|
||||
@@ -79,7 +73,8 @@ SDMACopyDataPacket::~SDMACopyDataPacket(void) {
|
||||
free(packetData);
|
||||
}
|
||||
|
||||
SDMACopyDataPacket::SDMACopyDataPacket(void *const dsts[], void *src, int n, unsigned int surfsize) {
|
||||
SDMACopyDataPacket::SDMACopyDataPacket(unsigned int familyId,
|
||||
void *const dsts[], void *src, int n, unsigned int surfsize) {
|
||||
int32_t size = 0, i;
|
||||
void **dst = reinterpret_cast<void**>(malloc(sizeof(void*) * n));
|
||||
const int singlePacketSize = sizeof(SDMA_PKT_COPY_LINEAR) +
|
||||
@@ -88,6 +83,7 @@ SDMACopyDataPacket::SDMACopyDataPacket(void *const dsts[], void *src, int n, uns
|
||||
if (n > 2)
|
||||
WARN() << "SDMACopyDataPacket does not support more than 2 dst addresses!" << std::endl;
|
||||
|
||||
m_FamilyId = familyId;
|
||||
memcpy(dst, dsts, sizeof(void*) * n);
|
||||
|
||||
packetSize = ((surfsize + TWO_MEG - 1) >> BITS) * singlePacketSize;
|
||||
@@ -125,18 +121,19 @@ SDMACopyDataPacket::SDMACopyDataPacket(void *const dsts[], void *src, int n, uns
|
||||
free(dst);
|
||||
}
|
||||
|
||||
SDMACopyDataPacket::SDMACopyDataPacket(void* dst, void *src, unsigned int surfsize) {
|
||||
new (this)SDMACopyDataPacket(&dst, src, 1, surfsize);
|
||||
SDMACopyDataPacket::SDMACopyDataPacket(unsigned int familyId, void* dst, void *src, unsigned int surfsize) {
|
||||
new (this)SDMACopyDataPacket(familyId, &dst, src, 1, surfsize);
|
||||
}
|
||||
|
||||
SDMAFillDataPacket::~SDMAFillDataPacket() {
|
||||
free(m_PacketData);
|
||||
}
|
||||
|
||||
SDMAFillDataPacket::SDMAFillDataPacket(void *dst, unsigned int data, unsigned int size) {
|
||||
SDMAFillDataPacket::SDMAFillDataPacket(unsigned int familyId, void *dst, unsigned int data, unsigned int size) {
|
||||
unsigned int copy_size;
|
||||
SDMA_PKT_CONSTANT_FILL *pSDMA;
|
||||
|
||||
m_FamilyId = familyId;
|
||||
/* SDMA support maximum 0x3fffe0 byte in one copy. Use 2M copy_size */
|
||||
m_PacketSize = ((size + TWO_MEG - 1) >> BITS) * sizeof(SDMA_PKT_CONSTANT_FILL);
|
||||
pSDMA = reinterpret_cast<SDMA_PKT_CONSTANT_FILL *>(calloc(1, m_PacketSize));
|
||||
@@ -174,7 +171,8 @@ SDMAFillDataPacket::SDMAFillDataPacket(void *dst, unsigned int data, unsigned in
|
||||
SDMAFencePacket::SDMAFencePacket(void) {
|
||||
}
|
||||
|
||||
SDMAFencePacket::SDMAFencePacket(void* destAddr, unsigned int data) {
|
||||
SDMAFencePacket::SDMAFencePacket(unsigned int familyId, void* destAddr, unsigned int data) {
|
||||
m_FamilyId = familyId;
|
||||
InitPacket(destAddr, data);
|
||||
}
|
||||
|
||||
|
||||
@@ -38,18 +38,15 @@ class SDMAPacket : public BasePacket {
|
||||
|
||||
class SDMAWriteDataPacket : public SDMAPacket {
|
||||
public:
|
||||
// Empty constructor, before using the packet call the init func
|
||||
SDMAWriteDataPacket(void);
|
||||
// This contructor will also init the packet, no need for additional calls
|
||||
SDMAWriteDataPacket(void* destAddr, unsigned int data);
|
||||
SDMAWriteDataPacket(void* destAddr, unsigned int ndw, void *data);
|
||||
SDMAWriteDataPacket(unsigned int familyId, void* destAddr, unsigned int data);
|
||||
SDMAWriteDataPacket(unsigned int familyId, void* destAddr, unsigned int ndw, void *data);
|
||||
|
||||
virtual ~SDMAWriteDataPacket(void);
|
||||
|
||||
// @returns Pointer to the packet
|
||||
virtual const void *GetPacket() const { return packetData; }
|
||||
// @breif Initialise the packet
|
||||
void InitPacket(void* destAddr, unsigned int data);
|
||||
void InitPacket(void* destAddr, unsigned int ndw, void *data);
|
||||
// @returns Packet size in bytes
|
||||
virtual unsigned int SizeInBytes() const { return packetSize; }
|
||||
@@ -63,8 +60,8 @@ class SDMAWriteDataPacket : public SDMAPacket {
|
||||
class SDMACopyDataPacket : public SDMAPacket {
|
||||
public:
|
||||
// This contructor will also init the packet, no need for additional calls
|
||||
SDMACopyDataPacket(void *dest, void *src, unsigned int size);
|
||||
SDMACopyDataPacket(void *const dst[], void *src, int n, unsigned int surfsize);
|
||||
SDMACopyDataPacket(unsigned int familyId, void *dest, void *src, unsigned int size);
|
||||
SDMACopyDataPacket(unsigned int familyId, void *const dst[], void *src, int n, unsigned int surfsize);
|
||||
|
||||
virtual ~SDMACopyDataPacket(void);
|
||||
|
||||
@@ -84,7 +81,7 @@ class SDMACopyDataPacket : public SDMAPacket {
|
||||
class SDMAFillDataPacket : public SDMAPacket {
|
||||
public:
|
||||
// This contructor will also init the packet, no need for additional calls
|
||||
SDMAFillDataPacket(void *dest, unsigned int data, unsigned int size);
|
||||
SDMAFillDataPacket(unsigned int familyId, void *dest, unsigned int data, unsigned int size);
|
||||
|
||||
virtual ~SDMAFillDataPacket(void);
|
||||
|
||||
@@ -106,7 +103,7 @@ class SDMAFencePacket : public SDMAPacket {
|
||||
// Empty constructor, before using the packet call the init func
|
||||
SDMAFencePacket(void);
|
||||
// This contructor will also init the packet, no need for additional calls
|
||||
SDMAFencePacket(void* destAddr, unsigned int data);
|
||||
SDMAFencePacket(unsigned int familyId, void* destAddr, unsigned int data);
|
||||
|
||||
virtual ~SDMAFencePacket(void);
|
||||
|
||||
|
||||
@@ -82,7 +82,7 @@ void SDMAQueue::SubmitPacket() {
|
||||
|
||||
void SDMAQueue::Wait4PacketConsumption(HsaEvent *event, unsigned int timeOut) {
|
||||
if (event) {
|
||||
PlacePacket(SDMAFencePacket((void*)event->EventData.HWData2, event->EventId));
|
||||
PlacePacket(SDMAFencePacket(m_FamilyId, (void*)event->EventData.HWData2, event->EventId));
|
||||
|
||||
PlaceAndSubmitPacket(SDMATrapPacket(event->EventId));
|
||||
|
||||
|
||||
Αναφορά σε νέο ζήτημα
Block a user