xref: /openbmc/linux/drivers/video/fbdev/nvidia/nv_type.h (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
1  /* SPDX-License-Identifier: GPL-2.0 */
2  #ifndef __NV_TYPE_H__
3  #define __NV_TYPE_H__
4  
5  #include <linux/fb.h>
6  #include <linux/types.h>
7  #include <linux/i2c.h>
8  #include <linux/i2c-algo-bit.h>
9  #include <video/vga.h>
10  
11  #define NV_ARCH_04  0x04
12  #define NV_ARCH_10  0x10
13  #define NV_ARCH_20  0x20
14  #define NV_ARCH_30  0x30
15  #define NV_ARCH_40  0x40
16  
17  #define BITMASK(t,b) (((unsigned)(1U << (((t)-(b)+1)))-1)  << (b))
18  #define MASKEXPAND(mask) BITMASK(1?mask,0?mask)
19  #define SetBF(mask,value) ((value) << (0?mask))
20  #define GetBF(var,mask) (((unsigned)((var) & MASKEXPAND(mask))) >> (0?mask) )
21  #define SetBitField(value,from,to) SetBF(to, GetBF(value,from))
22  #define SetBit(n) (1<<(n))
23  #define Set8Bits(value) ((value)&0xff)
24  
25  #define V_DBLSCAN  1
26  
27  typedef struct {
28  	int bitsPerPixel;
29  	int depth;
30  	int displayWidth;
31  	int weight;
32  } NVFBLayout;
33  
34  #define NUM_SEQ_REGS		0x05
35  #define NUM_CRT_REGS		0x41
36  #define NUM_GRC_REGS		0x09
37  #define NUM_ATC_REGS		0x15
38  
39  struct nvidia_par;
40  
41  struct nvidia_i2c_chan {
42  	struct nvidia_par *par;
43  	unsigned long ddc_base;
44  	struct i2c_adapter adapter;
45  	struct i2c_algo_bit_data algo;
46  };
47  
48  typedef struct _riva_hw_state {
49  	u8 attr[NUM_ATC_REGS];
50  	u8 crtc[NUM_CRT_REGS];
51  	u8 gra[NUM_GRC_REGS];
52  	u8 seq[NUM_SEQ_REGS];
53  	u8 misc_output;
54  	u32 bpp;
55  	u32 width;
56  	u32 height;
57  	u32 interlace;
58  	u32 repaint0;
59  	u32 repaint1;
60  	u32 screen;
61  	u32 scale;
62  	u32 dither;
63  	u32 extra;
64  	u32 fifo;
65  	u32 pixel;
66  	u32 horiz;
67  	u32 arbitration0;
68  	u32 arbitration1;
69  	u32 pll;
70  	u32 pllB;
71  	u32 vpll;
72  	u32 vpll2;
73  	u32 vpllB;
74  	u32 vpll2B;
75  	u32 pllsel;
76  	u32 general;
77  	u32 crtcOwner;
78  	u32 head;
79  	u32 head2;
80  	u32 config;
81  	u32 cursorConfig;
82  	u32 cursor0;
83  	u32 cursor1;
84  	u32 cursor2;
85  	u32 timingH;
86  	u32 timingV;
87  	u32 displayV;
88  	u32 crtcSync;
89  	u32 control;
90  } RIVA_HW_STATE;
91  
92  struct riva_regs {
93  	RIVA_HW_STATE ext;
94  };
95  
96  struct nvidia_par {
97  	RIVA_HW_STATE SavedReg;
98  	RIVA_HW_STATE ModeReg;
99  	RIVA_HW_STATE initial_state;
100  	RIVA_HW_STATE *CurrentState;
101  	struct vgastate vgastate;
102  	u32 pseudo_palette[16];
103  	struct pci_dev *pci_dev;
104  	u32 Architecture;
105  	u32 CursorStart;
106  	int Chipset;
107  	unsigned long FbAddress;
108  	u8 __iomem *FbStart;
109  	u32 FbMapSize;
110  	u32 FbUsableSize;
111  	u32 ScratchBufferSize;
112  	u32 ScratchBufferStart;
113  	int FpScale;
114  	u32 MinVClockFreqKHz;
115  	u32 MaxVClockFreqKHz;
116  	u32 CrystalFreqKHz;
117  	u32 RamAmountKBytes;
118  	u32 IOBase;
119  	NVFBLayout CurrentLayout;
120  	int cursor_reset;
121  	int lockup;
122  	int videoKey;
123  	int FlatPanel;
124  	int FPDither;
125  	int Television;
126  	int CRTCnumber;
127  	int alphaCursor;
128  	int twoHeads;
129  	int twoStagePLL;
130  	int fpScaler;
131  	int fpWidth;
132  	int fpHeight;
133  	int PanelTweak;
134  	int paneltweak;
135  	int LVDS;
136  	int pm_state;
137  	int reverse_i2c;
138  	u32 crtcSync_read;
139  	u32 fpSyncs;
140  	u32 dmaPut;
141  	u32 dmaCurrent;
142  	u32 dmaFree;
143  	u32 dmaMax;
144  	u32 __iomem *dmaBase;
145  	u32 currentRop;
146  	int WaitVSyncPossible;
147  	int BlendingPossible;
148  	u32 paletteEnabled;
149  	u32 forceCRTC;
150  	u32 open_count;
151  	u8 DDCBase;
152  	int wc_cookie;
153  	struct nvidia_i2c_chan chan[3];
154  
155  	volatile u32 __iomem *REGS;
156  	volatile u32 __iomem *PCRTC0;
157  	volatile u32 __iomem *PCRTC;
158  	volatile u32 __iomem *PRAMDAC0;
159  	volatile u32 __iomem *PFB;
160  	volatile u32 __iomem *PFIFO;
161  	volatile u32 __iomem *PGRAPH;
162  	volatile u32 __iomem *PEXTDEV;
163  	volatile u32 __iomem *PTIMER;
164  	volatile u32 __iomem *PMC;
165  	volatile u32 __iomem *PRAMIN;
166  	volatile u32 __iomem *FIFO;
167  	volatile u32 __iomem *CURSOR;
168  	volatile u8 __iomem *PCIO0;
169  	volatile u8 __iomem *PCIO;
170  	volatile u8 __iomem *PVIO;
171  	volatile u8 __iomem *PDIO0;
172  	volatile u8 __iomem *PDIO;
173  	volatile u32 __iomem *PRAMDAC;
174  };
175  
176  #endif				/* __NV_TYPE_H__ */
177