1  /* SPDX-License-Identifier: GPL-2.0 */
2  #ifndef _UVESAFB_H
3  #define _UVESAFB_H
4  
5  #include <uapi/video/uvesafb.h>
6  
7  
8  /* VBE CRTC Info Block */
9  struct vbe_crtc_ib {
10  	u16 horiz_total;
11  	u16 horiz_start;
12  	u16 horiz_end;
13  	u16 vert_total;
14  	u16 vert_start;
15  	u16 vert_end;
16  	u8  flags;
17  	u32 pixel_clock;
18  	u16 refresh_rate;
19  	u8  reserved[40];
20  } __attribute__ ((packed));
21  
22  #define VBE_MODE_VGACOMPAT	0x20
23  #define VBE_MODE_COLOR		0x08
24  #define VBE_MODE_SUPPORTEDHW	0x01
25  #define VBE_MODE_GRAPHICS	0x10
26  #define VBE_MODE_LFB		0x80
27  
28  #define VBE_MODE_MASK		(VBE_MODE_COLOR | VBE_MODE_SUPPORTEDHW | \
29  				VBE_MODE_GRAPHICS | VBE_MODE_LFB)
30  
31  /* VBE Mode Info Block */
32  struct vbe_mode_ib {
33  	/* for all VBE revisions */
34  	u16 mode_attr;
35  	u8  winA_attr;
36  	u8  winB_attr;
37  	u16 win_granularity;
38  	u16 win_size;
39  	u16 winA_seg;
40  	u16 winB_seg;
41  	u32 win_func_ptr;
42  	u16 bytes_per_scan_line;
43  
44  	/* for VBE 1.2+ */
45  	u16 x_res;
46  	u16 y_res;
47  	u8  x_char_size;
48  	u8  y_char_size;
49  	u8  planes;
50  	u8  bits_per_pixel;
51  	u8  banks;
52  	u8  memory_model;
53  	u8  bank_size;
54  	u8  image_pages;
55  	u8  reserved1;
56  
57  	/* Direct color fields for direct/6 and YUV/7 memory models. */
58  	/* Offsets are bit positions of lsb in the mask. */
59  	u8  red_len;
60  	u8  red_off;
61  	u8  green_len;
62  	u8  green_off;
63  	u8  blue_len;
64  	u8  blue_off;
65  	u8  rsvd_len;
66  	u8  rsvd_off;
67  	u8  direct_color_info;	/* direct color mode attributes */
68  
69  	/* for VBE 2.0+ */
70  	u32 phys_base_ptr;
71  	u8  reserved2[6];
72  
73  	/* for VBE 3.0+ */
74  	u16 lin_bytes_per_scan_line;
75  	u8  bnk_image_pages;
76  	u8  lin_image_pages;
77  	u8  lin_red_len;
78  	u8  lin_red_off;
79  	u8  lin_green_len;
80  	u8  lin_green_off;
81  	u8  lin_blue_len;
82  	u8  lin_blue_off;
83  	u8  lin_rsvd_len;
84  	u8  lin_rsvd_off;
85  	u32 max_pixel_clock;
86  	u16 mode_id;
87  	u8  depth;
88  } __attribute__ ((packed));
89  
90  #define UVESAFB_DEFAULT_MODE "640x480-16"
91  
92  /* How long to wait for a reply from userspace [ms] */
93  #define UVESAFB_TIMEOUT 5000
94  
95  /* Max number of concurrent tasks */
96  #define UVESAFB_TASKS_MAX 16
97  
98  #define dac_reg	(0x3c8)
99  #define dac_val	(0x3c9)
100  
101  struct uvesafb_pal_entry {
102  	u_char blue, green, red, pad;
103  } __attribute__ ((packed));
104  
105  struct uvesafb_ktask {
106  	struct uvesafb_task t;
107  	void *buf;
108  	struct completion *done;
109  	u32 ack;
110  };
111  
112  #define UVESAFB_EXACT_RES	1
113  #define UVESAFB_EXACT_DEPTH	2
114  
115  struct uvesafb_par {
116  	struct vbe_ib vbe_ib;		/* VBE Info Block */
117  	struct vbe_mode_ib *vbe_modes;	/* list of supported VBE modes */
118  	int vbe_modes_cnt;
119  
120  	u8 nocrtc;
121  	u8 ypan;			/* 0 - nothing, 1 - ypan, 2 - ywrap */
122  	u8 pmi_setpal;			/* PMI for palette changes */
123  	u16 *pmi_base;			/* protected mode interface location */
124  	void *pmi_start;
125  	void *pmi_pal;
126  	u8 *vbe_state_orig;		/*
127  					 * original hardware state, before the
128  					 * driver was loaded
129  					 */
130  	u8 *vbe_state_saved;		/* state saved by fb_save_state */
131  	int vbe_state_size;
132  	atomic_t ref_count;
133  
134  	int mode_idx;
135  	struct vbe_crtc_ib crtc;
136  	int mtrr_handle;
137  };
138  
139  #endif /* _UVESAFB_H */
140