#include <acpi/video.h>
#include <drm/drm_atomic.h>
#include <drm/drm_atomic_helper.h>
#include <drm/drm_crtc_helper.h>
#include <drm/drm_fb_helper.h>
#include <drm/drm_fourcc.h>
#include <drm/drm_gem_framebuffer_helper.h>
#include <drm/drm_probe_helper.h>
#include <drm/drm_vblank.h>
#include "nouveau_crtc.h"
#include "nouveau_gem.h"
#include "nouveau_connector.h"
#include "nv50_display.h"
#include <nvif/class.h>
#include <nvif/if0011.h>
#include <nvif/if0013.h>
#include <dispnv50/crc.h>
int
nouveau_display_vblank_enable(struct drm_crtc *crtc)
{ … }
void
nouveau_display_vblank_disable(struct drm_crtc *crtc)
{ … }
static inline int
calc(int blanks, int blanke, int total, int line)
{ … }
static bool
nouveau_display_scanoutpos_head(struct drm_crtc *crtc, int *vpos, int *hpos,
ktime_t *stime, ktime_t *etime)
{ … }
bool
nouveau_display_scanoutpos(struct drm_crtc *crtc,
bool in_vblank_irq, int *vpos, int *hpos,
ktime_t *stime, ktime_t *etime,
const struct drm_display_mode *mode)
{ … }
static const struct drm_framebuffer_funcs nouveau_framebuffer_funcs = …;
static void
nouveau_decode_mod(struct nouveau_drm *drm,
uint64_t modifier,
uint32_t *tile_mode,
uint8_t *kind)
{ … }
void
nouveau_framebuffer_get_layout(struct drm_framebuffer *fb,
uint32_t *tile_mode,
uint8_t *kind)
{ … }
static const u64 legacy_modifiers[] = …;
static int
nouveau_validate_decode_mod(struct nouveau_drm *drm,
uint64_t modifier,
uint32_t *tile_mode,
uint8_t *kind)
{ … }
static inline uint32_t
nouveau_get_width_in_blocks(uint32_t stride)
{ … }
static inline uint32_t
nouveau_get_height_in_blocks(struct nouveau_drm *drm,
uint32_t height,
uint32_t log_block_height_in_gobs)
{ … }
static int
nouveau_check_bl_size(struct nouveau_drm *drm, struct nouveau_bo *nvbo,
uint32_t offset, uint32_t stride, uint32_t h,
uint32_t tile_mode)
{ … }
int
nouveau_framebuffer_new(struct drm_device *dev,
const struct drm_mode_fb_cmd2 *mode_cmd,
struct drm_gem_object *gem,
struct drm_framebuffer **pfb)
{ … }
struct drm_framebuffer *
nouveau_user_framebuffer_create(struct drm_device *dev,
struct drm_file *file_priv,
const struct drm_mode_fb_cmd2 *mode_cmd)
{ … }
static const struct drm_mode_config_funcs nouveau_mode_config_funcs = …;
struct nouveau_drm_prop_enum_list { … };
static struct nouveau_drm_prop_enum_list underscan[] = …;
static struct nouveau_drm_prop_enum_list dither_mode[] = …;
static struct nouveau_drm_prop_enum_list dither_depth[] = …;
#define PROP_ENUM(p,gen,n,list) …
void
nouveau_display_hpd_resume(struct drm_device *dev)
{ … }
static void
nouveau_display_hpd_work(struct work_struct *work)
{ … }
#ifdef CONFIG_ACPI
static int
nouveau_display_acpi_ntfy(struct notifier_block *nb, unsigned long val,
void *data)
{ … }
#endif
int
nouveau_display_init(struct drm_device *dev, bool resume, bool runtime)
{ … }
void
nouveau_display_fini(struct drm_device *dev, bool suspend, bool runtime)
{ … }
static void
nouveau_display_create_properties(struct drm_device *dev)
{ … }
int
nouveau_display_create(struct drm_device *dev)
{ … }
void
nouveau_display_destroy(struct drm_device *dev)
{ … }
int
nouveau_display_suspend(struct drm_device *dev, bool runtime)
{ … }
void
nouveau_display_resume(struct drm_device *dev, bool runtime)
{ … }
int
nouveau_display_dumb_create(struct drm_file *file_priv, struct drm_device *dev,
struct drm_mode_create_dumb *args)
{ … }