linux/drivers/gpu/drm/nouveau/nvkm/subdev/fb/priv.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: MIT */
   2#ifndef __NVKM_FB_PRIV_H__
   3#define __NVKM_FB_PRIV_H__
   4#define nvkm_fb(p) container_of((p), struct nvkm_fb, subdev)
   5#include <subdev/fb.h>
   6#include <subdev/therm.h>
   7struct nvkm_bios;
   8
   9struct nvkm_fb_func {
  10        void *(*dtor)(struct nvkm_fb *);
  11        u32 (*tags)(struct nvkm_fb *);
  12        int (*oneinit)(struct nvkm_fb *);
  13        void (*init)(struct nvkm_fb *);
  14        void (*init_remapper)(struct nvkm_fb *);
  15        int (*init_page)(struct nvkm_fb *);
  16        void (*init_unkn)(struct nvkm_fb *);
  17        void (*intr)(struct nvkm_fb *);
  18
  19        struct {
  20                bool (*scrub_required)(struct nvkm_fb *);
  21                int (*scrub)(struct nvkm_fb *);
  22        } vpr;
  23
  24        struct {
  25                int regions;
  26                void (*init)(struct nvkm_fb *, int i, u32 addr, u32 size,
  27                             u32 pitch, u32 flags, struct nvkm_fb_tile *);
  28                void (*comp)(struct nvkm_fb *, int i, u32 size, u32 flags,
  29                             struct nvkm_fb_tile *);
  30                void (*fini)(struct nvkm_fb *, int i, struct nvkm_fb_tile *);
  31                void (*prog)(struct nvkm_fb *, int i, struct nvkm_fb_tile *);
  32        } tile;
  33
  34        int (*ram_new)(struct nvkm_fb *, struct nvkm_ram **);
  35
  36        u8 default_bigpage;
  37        const struct nvkm_therm_clkgate_pack *clkgate_pack;
  38};
  39
  40void nvkm_fb_ctor(const struct nvkm_fb_func *, struct nvkm_device *device,
  41                  enum nvkm_subdev_type type, int inst, struct nvkm_fb *);
  42int nvkm_fb_new_(const struct nvkm_fb_func *, struct nvkm_device *device,
  43                 enum nvkm_subdev_type type, int inst, struct nvkm_fb **);
  44int nvkm_fb_bios_memtype(struct nvkm_bios *);
  45
  46void nv10_fb_tile_init(struct nvkm_fb *, int i, u32 addr, u32 size,
  47                       u32 pitch, u32 flags, struct nvkm_fb_tile *);
  48void nv10_fb_tile_fini(struct nvkm_fb *, int i, struct nvkm_fb_tile *);
  49void nv10_fb_tile_prog(struct nvkm_fb *, int, struct nvkm_fb_tile *);
  50
  51u32 nv20_fb_tags(struct nvkm_fb *);
  52void nv20_fb_tile_init(struct nvkm_fb *, int i, u32 addr, u32 size,
  53                       u32 pitch, u32 flags, struct nvkm_fb_tile *);
  54void nv20_fb_tile_fini(struct nvkm_fb *, int i, struct nvkm_fb_tile *);
  55void nv20_fb_tile_prog(struct nvkm_fb *, int, struct nvkm_fb_tile *);
  56
  57void nv30_fb_init(struct nvkm_fb *);
  58void nv30_fb_tile_init(struct nvkm_fb *, int i, u32 addr, u32 size,
  59                       u32 pitch, u32 flags, struct nvkm_fb_tile *);
  60
  61void nv40_fb_tile_comp(struct nvkm_fb *, int i, u32 size, u32 flags,
  62                       struct nvkm_fb_tile *);
  63
  64void nv41_fb_init(struct nvkm_fb *);
  65void nv41_fb_tile_prog(struct nvkm_fb *, int, struct nvkm_fb_tile *);
  66
  67void nv44_fb_init(struct nvkm_fb *);
  68void nv44_fb_tile_prog(struct nvkm_fb *, int, struct nvkm_fb_tile *);
  69
  70void nv46_fb_tile_init(struct nvkm_fb *, int i, u32 addr, u32 size,
  71                       u32 pitch, u32 flags, struct nvkm_fb_tile *);
  72
  73int gf100_fb_oneinit(struct nvkm_fb *);
  74int gf100_fb_init_page(struct nvkm_fb *);
  75
  76int gm200_fb_init_page(struct nvkm_fb *);
  77
  78void gp100_fb_init_remapper(struct nvkm_fb *);
  79void gp100_fb_init_unkn(struct nvkm_fb *);
  80
  81int gp102_fb_new_(const struct nvkm_fb_func *, struct nvkm_device *, enum nvkm_subdev_type, int,
  82                  struct nvkm_fb **);
  83bool gp102_fb_vpr_scrub_required(struct nvkm_fb *);
  84int gp102_fb_vpr_scrub(struct nvkm_fb *);
  85
  86int gv100_fb_init_page(struct nvkm_fb *);
  87#endif
  88