Loading...
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
9int r535_fb_new(const struct nvkm_fb_func *,
10 struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **);
11
12struct nvkm_fb_func {
13 void *(*dtor)(struct nvkm_fb *);
14 u32 (*tags)(struct nvkm_fb *);
15 int (*oneinit)(struct nvkm_fb *);
16 void (*init)(struct nvkm_fb *);
17 void (*init_remapper)(struct nvkm_fb *);
18 int (*init_page)(struct nvkm_fb *);
19 void (*init_unkn)(struct nvkm_fb *);
20 void (*intr)(struct nvkm_fb *);
21
22 struct nvkm_fb_func_sysmem {
23 void (*flush_page_init)(struct nvkm_fb *);
24 } sysmem;
25
26 struct nvkm_fb_func_vidmem {
27 u64 (*size)(struct nvkm_fb *);
28 } vidmem;
29
30 struct {
31 bool (*scrub_required)(struct nvkm_fb *);
32 int (*scrub)(struct nvkm_fb *);
33 } vpr;
34
35 struct {
36 int regions;
37 void (*init)(struct nvkm_fb *, int i, u32 addr, u32 size,
38 u32 pitch, u32 flags, struct nvkm_fb_tile *);
39 void (*comp)(struct nvkm_fb *, int i, u32 size, u32 flags,
40 struct nvkm_fb_tile *);
41 void (*fini)(struct nvkm_fb *, int i, struct nvkm_fb_tile *);
42 void (*prog)(struct nvkm_fb *, int i, struct nvkm_fb_tile *);
43 } tile;
44
45 int (*ram_new)(struct nvkm_fb *, struct nvkm_ram **);
46
47 u8 default_bigpage;
48 const struct nvkm_therm_clkgate_pack *clkgate_pack;
49};
50
51int nvkm_fb_ctor(const struct nvkm_fb_func *, struct nvkm_device *device,
52 enum nvkm_subdev_type type, int inst, struct nvkm_fb *);
53int nvkm_fb_new_(const struct nvkm_fb_func *, struct nvkm_device *device,
54 enum nvkm_subdev_type type, int inst, struct nvkm_fb **);
55int nvkm_fb_bios_memtype(struct nvkm_bios *);
56
57void nv10_fb_tile_init(struct nvkm_fb *, int i, u32 addr, u32 size,
58 u32 pitch, u32 flags, struct nvkm_fb_tile *);
59void nv10_fb_tile_fini(struct nvkm_fb *, int i, struct nvkm_fb_tile *);
60void nv10_fb_tile_prog(struct nvkm_fb *, int, struct nvkm_fb_tile *);
61
62u32 nv20_fb_tags(struct nvkm_fb *);
63void nv20_fb_tile_init(struct nvkm_fb *, int i, u32 addr, u32 size,
64 u32 pitch, u32 flags, struct nvkm_fb_tile *);
65void nv20_fb_tile_fini(struct nvkm_fb *, int i, struct nvkm_fb_tile *);
66void nv20_fb_tile_prog(struct nvkm_fb *, int, struct nvkm_fb_tile *);
67
68void nv30_fb_init(struct nvkm_fb *);
69void nv30_fb_tile_init(struct nvkm_fb *, int i, u32 addr, u32 size,
70 u32 pitch, u32 flags, struct nvkm_fb_tile *);
71
72void nv40_fb_tile_comp(struct nvkm_fb *, int i, u32 size, u32 flags,
73 struct nvkm_fb_tile *);
74
75void nv41_fb_init(struct nvkm_fb *);
76void nv41_fb_tile_prog(struct nvkm_fb *, int, struct nvkm_fb_tile *);
77
78void nv44_fb_init(struct nvkm_fb *);
79void nv44_fb_tile_prog(struct nvkm_fb *, int, struct nvkm_fb_tile *);
80
81void nv46_fb_tile_init(struct nvkm_fb *, int i, u32 addr, u32 size,
82 u32 pitch, u32 flags, struct nvkm_fb_tile *);
83
84int gf100_fb_oneinit(struct nvkm_fb *);
85int gf100_fb_init_page(struct nvkm_fb *);
86void gf100_fb_sysmem_flush_page_init(struct nvkm_fb *);
87
88int gm200_fb_init_page(struct nvkm_fb *);
89
90void gp100_fb_init_remapper(struct nvkm_fb *);
91void gp100_fb_init_unkn(struct nvkm_fb *);
92
93int gp102_fb_oneinit(struct nvkm_fb *);
94u64 gp102_fb_vidmem_size(struct nvkm_fb *);
95bool gp102_fb_vpr_scrub_required(struct nvkm_fb *);
96int gp102_fb_vpr_scrub(struct nvkm_fb *);
97
98int gv100_fb_init_page(struct nvkm_fb *);
99
100bool tu102_fb_vpr_scrub_required(struct nvkm_fb *);
101#endif