#include <linux/kthread.h>
#include <linux/sched/mm.h>
#include <uapi/linux/sched/types.h>
#include <drm/drm_aperture.h>
#include <drm/drm_drv.h>
#include <drm/drm_mode_config.h>
#include <drm/drm_vblank.h>
#include "disp/msm_disp_snapshot.h"
#include "msm_drv.h"
#include "msm_gem.h"
#include "msm_kms.h"
#include "msm_mmu.h"
static const struct drm_mode_config_funcs mode_config_funcs = …;
static const struct drm_mode_config_helper_funcs mode_config_helper_funcs = …;
static irqreturn_t msm_irq(int irq, void *arg)
{ … }
static void msm_irq_preinstall(struct drm_device *dev)
{ … }
static int msm_irq_postinstall(struct drm_device *dev)
{ … }
static int msm_irq_install(struct drm_device *dev, unsigned int irq)
{ … }
static void msm_irq_uninstall(struct drm_device *dev)
{ … }
struct msm_vblank_work { … };
static void vblank_ctrl_worker(struct work_struct *work)
{ … }
static int vblank_ctrl_queue_work(struct msm_drm_private *priv,
struct drm_crtc *crtc, bool enable)
{ … }
int msm_crtc_enable_vblank(struct drm_crtc *crtc)
{ … }
void msm_crtc_disable_vblank(struct drm_crtc *crtc)
{ … }
struct msm_gem_address_space *msm_kms_init_aspace(struct drm_device *dev)
{ … }
void msm_drm_kms_uninit(struct device *dev)
{ … }
int msm_drm_kms_init(struct device *dev, const struct drm_driver *drv)
{ … }
int msm_kms_pm_prepare(struct device *dev)
{ … }
void msm_kms_pm_complete(struct device *dev)
{ … }
void msm_kms_shutdown(struct platform_device *pdev)
{ … }