You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.6 KiB
C++
59 lines
1.6 KiB
C++
|
|
#ifndef LIBRARY_LOADER_LIBDRM_H
|
|
#define LIBRARY_LOADER_LIBDRM_H
|
|
|
|
#define LIBRARY_LOADER_LIBDRM_H_DLOPEN
|
|
|
|
#include <dlfcn.h>
|
|
#include <xf86drm.h>
|
|
//#include <libdrm/amdgpu_drm.h>
|
|
//#include <libdrm/amdgpu.h>
|
|
|
|
typedef struct amdgpu_device *amdgpu_device_handle;
|
|
int amdgpu_device_initialize(int fd,
|
|
uint32_t *major_version,
|
|
uint32_t *minor_version,
|
|
amdgpu_device_handle *device_handle);
|
|
int amdgpu_device_deinitialize(amdgpu_device_handle device_handle);
|
|
int amdgpu_query_info(amdgpu_device_handle dev, unsigned info_id,
|
|
unsigned size, void *value);
|
|
int amdgpu_query_sensor_info(amdgpu_device_handle dev, unsigned sensor_type,
|
|
unsigned size, void *value);
|
|
int amdgpu_read_mm_registers(amdgpu_device_handle dev, unsigned dword_offset,
|
|
unsigned count, uint32_t instance, uint32_t flags,
|
|
uint32_t *values);
|
|
|
|
class libdrm_loader {
|
|
public:
|
|
libdrm_loader();
|
|
~libdrm_loader();
|
|
|
|
bool Load();
|
|
bool IsLoaded() { return loaded_; }
|
|
|
|
decltype(&::drmGetVersion) drmGetVersion;
|
|
decltype(&::drmFreeVersion) drmFreeVersion;
|
|
|
|
decltype(&::amdgpu_device_initialize) amdgpu_device_initialize;
|
|
decltype(&::amdgpu_device_deinitialize) amdgpu_device_deinitialize;
|
|
decltype(&::amdgpu_query_info) amdgpu_query_info;
|
|
decltype(&::amdgpu_query_sensor_info) amdgpu_query_sensor_info;
|
|
decltype(&::amdgpu_read_mm_registers) amdgpu_read_mm_registers;
|
|
|
|
private:
|
|
void CleanUp(bool unload);
|
|
|
|
#if defined(LIBRARY_LOADER_LIBDRM_H_DLOPEN)
|
|
void* library_drm;
|
|
void* library_amdgpu;
|
|
#endif
|
|
|
|
bool loaded_;
|
|
|
|
// Disallow copy constructor and assignment operator.
|
|
libdrm_loader(const libdrm_loader&);
|
|
void operator=(const libdrm_loader&);
|
|
};
|
|
|
|
#endif // LIBRARY_LOADER_LIBDRM_H
|