1 /************************************************************** 2 3 custom_video_drmkms.h - Linux DRM/KMS video management layer 4 5 --------------------------------------------------------- 6 7 Switchres Modeline generation engine for emulation 8 9 License GPL-2.0+ 10 Copyright 2010-2021 Chris Kennedy, Antonio Giner, 11 Alexandre Wodarczyk, Gil Delescluse 12 13 **************************************************************/ 14 15 #ifndef __CUSTOM_VIDEO_DRMKMS_ 16 #define __CUSTOM_VIDEO_DRMKMS_ 17 18 // DRM headers 19 #include <xf86drm.h> 20 #include <xf86drmMode.h> 21 #include "custom_video.h" 22 23 class drmkms_timing : public custom_video 24 { 25 public: 26 drmkms_timing(char *device_name, custom_video_settings *vs); 27 ~drmkms_timing(); api_name()28 const char *api_name() { return "DRMKMS"; } caps()29 int caps() { return CUSTOM_VIDEO_CAPS_ADD; } 30 bool init(); 31 32 bool add_mode(modeline *mode); 33 bool delete_mode(modeline *mode); 34 bool update_mode(modeline *mode); 35 36 bool get_timing(modeline *mode); 37 bool set_timing(modeline *mode); 38 39 private: 40 int m_id = 0; 41 42 int m_drm_fd = 0; 43 drmModeCrtc *mp_crtc_desktop = NULL; 44 int m_card_id = 0; 45 int drm_master_hook(int fd); 46 47 char m_device_name[32]; 48 unsigned int m_desktop_output = 0; 49 int m_video_modes_position = 0; 50 51 void *mp_drm_handle = NULL; 52 unsigned int m_dumb_handle = 0; 53 unsigned int m_framebuffer_id = 0; 54 55 __typeof__(drmGetVersion) *p_drmGetVersion; 56 __typeof__(drmFreeVersion) *p_drmFreeVersion; 57 __typeof__(drmModeGetResources) *p_drmModeGetResources; 58 __typeof__(drmModeGetConnector) *p_drmModeGetConnector; 59 __typeof__(drmModeFreeConnector) *p_drmModeFreeConnector; 60 __typeof__(drmModeFreeResources) *p_drmModeFreeResources; 61 __typeof__(drmModeGetEncoder) *p_drmModeGetEncoder; 62 __typeof__(drmModeFreeEncoder) *p_drmModeFreeEncoder; 63 __typeof__(drmModeGetCrtc) *p_drmModeGetCrtc; 64 __typeof__(drmModeSetCrtc) *p_drmModeSetCrtc; 65 __typeof__(drmModeFreeCrtc) *p_drmModeFreeCrtc; 66 __typeof__(drmModeAttachMode) *p_drmModeAttachMode; 67 __typeof__(drmModeAddFB) *p_drmModeAddFB; 68 __typeof__(drmModeRmFB) *p_drmModeRmFB; 69 __typeof__(drmModeGetFB) *p_drmModeGetFB; 70 __typeof__(drmModeFreeFB) *p_drmModeFreeFB; 71 __typeof__(drmPrimeHandleToFD) *p_drmPrimeHandleToFD; 72 __typeof__(drmModeGetPlaneResources) *p_drmModeGetPlaneResources; 73 __typeof__(drmModeFreePlaneResources) *p_drmModeFreePlaneResources; 74 __typeof__(drmIoctl) *p_drmIoctl; 75 __typeof__(drmGetCap) *p_drmGetCap; 76 __typeof__(drmIsMaster) *p_drmIsMaster; 77 __typeof__(drmSetMaster) *p_drmSetMaster; 78 __typeof__(drmDropMaster) *p_drmDropMaster; 79 }; 80 81 #endif 82