Ejemplo n.º 1
0
HSAKMT_STATUS
HSAKMTAPI
hsaKmtCreateEvent(
    HsaEventDescriptor* EventDesc,              //IN
    bool                ManualReset,            //IN
    bool                IsSignaled,             //IN
    HsaEvent**          Event                   //OUT
    )
{
	CHECK_KFD_OPEN();

	if (EventDesc->EventType >= HSA_EVENTTYPE_MAXID)
	{
		return HSAKMT_STATUS_INVALID_PARAMETER;
	}

	HsaEvent* e = malloc(sizeof(HsaEvent));
	if (e == NULL)
	{
		return HSAKMT_STATUS_ERROR;
	}

	*Event = e;

	return HSAKMT_STATUS_SUCCESS;
}
Ejemplo n.º 2
0
HSAKMT_STATUS HSAKMTAPI hsaKmtGetClockCounters(HSAuint32 NodeId,
					       HsaClockCounters *Counters)
{
	HSAKMT_STATUS result;
	uint32_t gpu_id;
	struct kfd_ioctl_get_clock_counters_args args = {0};
	int err;

	CHECK_KFD_OPEN();

	result = validate_nodeid(NodeId, &gpu_id);
	if (result != HSAKMT_STATUS_SUCCESS)
		return result;

	args.gpu_id = gpu_id;

	err = kmtIoctl(kfd_fd, AMDKFD_IOC_GET_CLOCK_COUNTERS, &args);
	if (err < 0) {
		result = HSAKMT_STATUS_ERROR;
	} else {
		/* At this point the result is already HSAKMT_STATUS_SUCCESS */
		Counters->GPUClockCounter = args.gpu_clock_counter;
		Counters->CPUClockCounter = args.cpu_clock_counter;
		Counters->SystemClockCounter = args.system_clock_counter;
		Counters->SystemClockFrequencyHz = args.system_clock_freq;
	}

	return result;
}
Ejemplo n.º 3
0
HSAKMT_STATUS
HSAKMTAPI
hsaKmtQueryEventState(
    HsaEvent*  Event    //IN
    )
{
	CHECK_KFD_OPEN();
	return HSAKMT_STATUS_SUCCESS;
}
Ejemplo n.º 4
0
HSAKMT_STATUS
HSAKMTAPI
hsaKmtResetEvent(
    HsaEvent*  Event    //IN
    )
{
	CHECK_KFD_OPEN();
	return HSAKMT_STATUS_SUCCESS;
}
Ejemplo n.º 5
0
HSAKMT_STATUS
HSAKMTAPI
hsaKmtDestroyEvent(
    HsaEvent*   Event    //IN
    )
{
	CHECK_KFD_OPEN();

	free(Event);

	return HSAKMT_STATUS_SUCCESS;
}
Ejemplo n.º 6
0
HSAKMT_STATUS
HSAKMTAPI
hsaKmtWaitOnMultipleEvents(
    HsaEvent*   Events[],       //IN
    HSAuint32   NumEvents,      //IN
    bool        WaitOnAll,      //IN
    HSAuint32   Milliseconds    //IN
    )
{
	CHECK_KFD_OPEN();

	return hsaKmtWaitOnEvent(NULL, Milliseconds);
}
Ejemplo n.º 7
0
HSAKMT_STATUS HSAKMTAPI hsaKmtGetVersion(HsaVersionInfo *VersionInfo)
{
	CHECK_KFD_OPEN();

	struct kfd_ioctl_get_version_args args = {0};

	if (kmtIoctl(kfd_fd, AMDKFD_IOC_GET_VERSION, &args) == -1)
		return HSAKMT_STATUS_ERROR;

	VersionInfo->KernelInterfaceMajorVersion = args.major_version;
	VersionInfo->KernelInterfaceMinorVersion = args.minor_version;

	return HSAKMT_STATUS_SUCCESS;
}
Ejemplo n.º 8
0
HSAKMT_STATUS
HSAKMTAPI
hsaKmtWaitOnEvent(
    HsaEvent*   Event,          //IN
    HSAuint32   Milliseconds    //IN
    )
{
	CHECK_KFD_OPEN();

	if (Milliseconds == HSA_EVENTTIMEOUT_INFINITE)
	{
		while (1) { pause(); }
	}
	else if (Milliseconds != HSA_EVENTTIMEOUT_IMMEDIATE)
	{
		struct timespec req;

		req.tv_sec = Milliseconds / 1000;
		req.tv_nsec = (long)(Milliseconds % 1000) * 1000000;

		while (1)
		{
			struct timespec rem;

			int err = nanosleep(&req, &rem);
			if (err == -1 && errno == EINTR)
			{
				req = rem;
			}
			else
			{
				break; // success or other error
			}
		}
	}

	return HSAKMT_STATUS_WAIT_TIMEOUT;
}