summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/nouveau/nouveau_fb.h
blob: 9da2f866d4160227d69d5485f6023bd862c96ae9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#ifndef __NOUVEAU_FB_H__
#define __NOUVEAU_FB_H__

struct nouveau_fb {
	struct nouveau_subdev base;

	bool (*memtype_valid)(struct nouveau_fb *, u32 memtype);

	struct {
		enum {
			NV_MEM_TYPE_UNKNOWN = 0,
			NV_MEM_TYPE_STOLEN,
			NV_MEM_TYPE_SGRAM,
			NV_MEM_TYPE_SDRAM,
			NV_MEM_TYPE_DDR1,
			NV_MEM_TYPE_DDR2,
			NV_MEM_TYPE_DDR3,
			NV_MEM_TYPE_GDDR2,
			NV_MEM_TYPE_GDDR3,
			NV_MEM_TYPE_GDDR4,
			NV_MEM_TYPE_GDDR5
		} type;
		u64 stolen;
		u64 size;
		int ranks;

		struct nouveau_mm mm;

		int  (*get)(struct nouveau_fb *, u64 size, u32 align,
			    u32 size_nc, u32 type, struct nouveau_mem **);
		void (*put)(struct nouveau_fb *, struct nouveau_mem **);
	} ram;

	int num_tiles;
	void (*init_tile_region)(struct nouveau_fb *, int i, u32 addr,
				 u32 size, u32 pitch, u32 flags);
	void (*set_tile_region)(struct nouveau_fb *, int i);
	void (*free_tile_region)(struct nouveau_fb *, int i);

	struct drm_mm tag_heap;
};

int  nv04_fb_create(struct nouveau_device *, int);
bool nv04_fb_memtype_valid(struct nouveau_fb *, u32 memtype);

int  nv10_fb_create(struct nouveau_device *, int);
void nv10_fb_destroy(struct nouveau_device *, int);
int  nv10_fb_init(struct nouveau_device *, int);
void nv10_fb_set_tile_region(struct nouveau_fb *, int i);

int  nv20_fb_create(struct nouveau_device *, int);

int  nv30_fb_create(struct nouveau_device *, int);
void nv30_fb_init_tile_region(struct nouveau_fb *, int i, u32 addr,
			      u32 size, u32 pitch, u32 flags);
void nv30_fb_free_tile_region(struct nouveau_fb *, int i);

int  nv40_fb_create(struct nouveau_device *, int);

int  nv50_fb_create(struct nouveau_device *, int);
void nv50_fb_vram_del(struct nouveau_fb *, struct nouveau_mem **);
void nv50_fb_vm_trap(struct nouveau_device *, int display);

int  nvc0_fb_create(struct nouveau_device *, int);

#endif