linux/drivers/gpu/drm/nouveau/nvkm/engine/disp/channv50.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: MIT */
   2#ifndef __NV50_DISP_CHAN_H__
   3#define __NV50_DISP_CHAN_H__
   4#define nv50_disp_chan(p) container_of((p), struct nv50_disp_chan, object)
   5#include <core/object.h>
   6#include "nv50.h"
   7struct nv50_disp_root;
   8
   9struct nv50_disp_chan {
  10        const struct nv50_disp_chan_func *func;
  11        const struct nv50_disp_chan_mthd *mthd;
  12        struct nv50_disp *disp;
  13
  14        struct {
  15                int ctrl;
  16                int user;
  17        } chid;
  18        int head;
  19
  20        struct nvkm_object object;
  21
  22        struct nvkm_memory *memory;
  23        u64 push;
  24
  25        u32 suspend_put;
  26};
  27
  28struct nv50_disp_chan_func {
  29        int (*init)(struct nv50_disp_chan *);
  30        void (*fini)(struct nv50_disp_chan *);
  31        void (*intr)(struct nv50_disp_chan *, bool en);
  32        u64 (*user)(struct nv50_disp_chan *, u64 *size);
  33        int (*bind)(struct nv50_disp_chan *, struct nvkm_object *, u32 handle);
  34};
  35
  36int nv50_disp_chan_new_(const struct nv50_disp_chan_func *,
  37                        const struct nv50_disp_chan_mthd *,
  38                        struct nv50_disp *, int ctrl, int user, int head,
  39                        const struct nvkm_oclass *, struct nvkm_object **);
  40int nv50_disp_dmac_new_(const struct nv50_disp_chan_func *,
  41                        const struct nv50_disp_chan_mthd *,
  42                        struct nv50_disp *, int chid, int head, u64 push,
  43                        const struct nvkm_oclass *, struct nvkm_object **);
  44
  45void nv50_disp_chan_intr(struct nv50_disp_chan *, bool);
  46u64 nv50_disp_chan_user(struct nv50_disp_chan *, u64 *);
  47extern const struct nv50_disp_chan_func nv50_disp_pioc_func;
  48extern const struct nv50_disp_chan_func nv50_disp_dmac_func;
  49int nv50_disp_dmac_bind(struct nv50_disp_chan *, struct nvkm_object *, u32);
  50extern const struct nv50_disp_chan_func nv50_disp_core_func;
  51
  52void gf119_disp_chan_intr(struct nv50_disp_chan *, bool);
  53extern const struct nv50_disp_chan_func gf119_disp_pioc_func;
  54extern const struct nv50_disp_chan_func gf119_disp_dmac_func;
  55void gf119_disp_dmac_fini(struct nv50_disp_chan *);
  56int gf119_disp_dmac_bind(struct nv50_disp_chan *, struct nvkm_object *, u32);
  57extern const struct nv50_disp_chan_func gf119_disp_core_func;
  58void gf119_disp_core_fini(struct nv50_disp_chan *);
  59
  60extern const struct nv50_disp_chan_func gp102_disp_dmac_func;
  61
  62u64 gv100_disp_chan_user(struct nv50_disp_chan *, u64 *);
  63int gv100_disp_dmac_init(struct nv50_disp_chan *);
  64void gv100_disp_dmac_fini(struct nv50_disp_chan *);
  65int gv100_disp_dmac_bind(struct nv50_disp_chan *, struct nvkm_object *, u32);
  66
  67int nv50_disp_curs_new_(const struct nv50_disp_chan_func *,
  68                        struct nv50_disp *, int ctrl, int user,
  69                        const struct nvkm_oclass *, void *argv, u32 argc,
  70                        struct nvkm_object **);
  71int nv50_disp_oimm_new_(const struct nv50_disp_chan_func *,
  72                        struct nv50_disp *, int ctrl, int user,
  73                        const struct nvkm_oclass *, void *argv, u32 argc,
  74                        struct nvkm_object **);
  75int nv50_disp_base_new_(const struct nv50_disp_chan_func *,
  76                        const struct nv50_disp_chan_mthd *,
  77                        struct nv50_disp *, int chid,
  78                        const struct nvkm_oclass *, void *argv, u32 argc,
  79                        struct nvkm_object **);
  80int nv50_disp_core_new_(const struct nv50_disp_chan_func *,
  81                        const struct nv50_disp_chan_mthd *,
  82                        struct nv50_disp *, int chid,
  83                        const struct nvkm_oclass *oclass, void *argv, u32 argc,
  84                        struct nvkm_object **);
  85int nv50_disp_ovly_new_(const struct nv50_disp_chan_func *,
  86                        const struct nv50_disp_chan_mthd *,
  87                        struct nv50_disp *, int chid,
  88                        const struct nvkm_oclass *, void *argv, u32 argc,
  89                        struct nvkm_object **);
  90
  91int nv50_disp_curs_new(const struct nvkm_oclass *, void *, u32,
  92                       struct nv50_disp *, struct nvkm_object **);
  93int nv50_disp_oimm_new(const struct nvkm_oclass *, void *, u32,
  94                       struct nv50_disp *, struct nvkm_object **);
  95int nv50_disp_base_new(const struct nvkm_oclass *, void *, u32,
  96                       struct nv50_disp *, struct nvkm_object **);
  97int nv50_disp_core_new(const struct nvkm_oclass *, void *, u32,
  98                       struct nv50_disp *, struct nvkm_object **);
  99int nv50_disp_ovly_new(const struct nvkm_oclass *, void *, u32,
 100                       struct nv50_disp *, struct nvkm_object **);
 101
 102int g84_disp_base_new(const struct nvkm_oclass *, void *, u32,
 103                      struct nv50_disp *, struct nvkm_object **);
 104int g84_disp_core_new(const struct nvkm_oclass *, void *, u32,
 105                      struct nv50_disp *, struct nvkm_object **);
 106int g84_disp_ovly_new(const struct nvkm_oclass *, void *, u32,
 107                      struct nv50_disp *, struct nvkm_object **);
 108
 109int g94_disp_core_new(const struct nvkm_oclass *, void *, u32,
 110                      struct nv50_disp *, struct nvkm_object **);
 111
 112int gt200_disp_ovly_new(const struct nvkm_oclass *, void *, u32,
 113                        struct nv50_disp *, struct nvkm_object **);
 114
 115int gf119_disp_curs_new(const struct nvkm_oclass *, void *, u32,
 116                        struct nv50_disp *, struct nvkm_object **);
 117int gf119_disp_oimm_new(const struct nvkm_oclass *, void *, u32,
 118                        struct nv50_disp *, struct nvkm_object **);
 119int gf119_disp_base_new(const struct nvkm_oclass *, void *, u32,
 120                        struct nv50_disp *, struct nvkm_object **);
 121int gf119_disp_core_new(const struct nvkm_oclass *, void *, u32,
 122                        struct nv50_disp *, struct nvkm_object **);
 123int gf119_disp_ovly_new(const struct nvkm_oclass *, void *, u32,
 124                        struct nv50_disp *, struct nvkm_object **);
 125
 126int gk104_disp_core_new(const struct nvkm_oclass *, void *, u32,
 127                        struct nv50_disp *, struct nvkm_object **);
 128int gk104_disp_ovly_new(const struct nvkm_oclass *, void *, u32,
 129                        struct nv50_disp *, struct nvkm_object **);
 130
 131int gp102_disp_curs_new(const struct nvkm_oclass *, void *, u32,
 132                        struct nv50_disp *, struct nvkm_object **);
 133int gp102_disp_oimm_new(const struct nvkm_oclass *, void *, u32,
 134                        struct nv50_disp *, struct nvkm_object **);
 135int gp102_disp_base_new(const struct nvkm_oclass *, void *, u32,
 136                        struct nv50_disp *, struct nvkm_object **);
 137int gp102_disp_core_new(const struct nvkm_oclass *, void *, u32,
 138                        struct nv50_disp *, struct nvkm_object **);
 139int gp102_disp_ovly_new(const struct nvkm_oclass *, void *, u32,
 140                        struct nv50_disp *, struct nvkm_object **);
 141
 142int gv100_disp_curs_new(const struct nvkm_oclass *, void *, u32,
 143                        struct nv50_disp *, struct nvkm_object **);
 144int gv100_disp_wimm_new(const struct nvkm_oclass *, void *, u32,
 145                        struct nv50_disp *, struct nvkm_object **);
 146int gv100_disp_core_new(const struct nvkm_oclass *, void *, u32,
 147                        struct nv50_disp *, struct nvkm_object **);
 148int gv100_disp_wndw_new(const struct nvkm_oclass *, void *, u32,
 149                        struct nv50_disp *, struct nvkm_object **);
 150
 151struct nv50_disp_mthd_list {
 152        u32 mthd;
 153        u32 addr;
 154        struct {
 155                u32 mthd;
 156                u32 addr;
 157                const char *name;
 158        } data[];
 159};
 160
 161struct nv50_disp_chan_mthd {
 162        const char *name;
 163        u32 addr;
 164        s32 prev;
 165        struct {
 166                const char *name;
 167                int nr;
 168                const struct nv50_disp_mthd_list *mthd;
 169        } data[];
 170};
 171
 172void nv50_disp_chan_mthd(struct nv50_disp_chan *, int debug);
 173
 174extern const struct nv50_disp_mthd_list nv50_disp_core_mthd_base;
 175extern const struct nv50_disp_mthd_list nv50_disp_core_mthd_sor;
 176extern const struct nv50_disp_mthd_list nv50_disp_core_mthd_pior;
 177extern const struct nv50_disp_mthd_list nv50_disp_base_mthd_image;
 178
 179extern const struct nv50_disp_chan_mthd g84_disp_core_mthd;
 180extern const struct nv50_disp_mthd_list g84_disp_core_mthd_dac;
 181extern const struct nv50_disp_mthd_list g84_disp_core_mthd_head;
 182
 183extern const struct nv50_disp_chan_mthd g94_disp_core_mthd;
 184
 185extern const struct nv50_disp_mthd_list gf119_disp_core_mthd_base;
 186extern const struct nv50_disp_mthd_list gf119_disp_core_mthd_dac;
 187extern const struct nv50_disp_mthd_list gf119_disp_core_mthd_sor;
 188extern const struct nv50_disp_mthd_list gf119_disp_core_mthd_pior;
 189extern const struct nv50_disp_chan_mthd gf119_disp_base_mthd;
 190
 191extern const struct nv50_disp_chan_mthd gk104_disp_core_mthd;
 192extern const struct nv50_disp_chan_mthd gk104_disp_ovly_mthd;
 193#endif
 194