xref: /openbmc/linux/include/video/uvesafb.h (revision 0c37bffa)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
28bdb3a2dSMichal Januszewski #ifndef _UVESAFB_H
38bdb3a2dSMichal Januszewski #define _UVESAFB_H
48bdb3a2dSMichal Januszewski 
5b889fcf6SDavid Howells #include <uapi/video/uvesafb.h>
6de4d3795SJaswinder Singh Rajput 
78bdb3a2dSMichal Januszewski 
88bdb3a2dSMichal Januszewski /* VBE CRTC Info Block */
98bdb3a2dSMichal Januszewski struct vbe_crtc_ib {
108bdb3a2dSMichal Januszewski 	u16 horiz_total;
118bdb3a2dSMichal Januszewski 	u16 horiz_start;
128bdb3a2dSMichal Januszewski 	u16 horiz_end;
138bdb3a2dSMichal Januszewski 	u16 vert_total;
148bdb3a2dSMichal Januszewski 	u16 vert_start;
158bdb3a2dSMichal Januszewski 	u16 vert_end;
168bdb3a2dSMichal Januszewski 	u8  flags;
178bdb3a2dSMichal Januszewski 	u32 pixel_clock;
188bdb3a2dSMichal Januszewski 	u16 refresh_rate;
198bdb3a2dSMichal Januszewski 	u8  reserved[40];
208bdb3a2dSMichal Januszewski } __attribute__ ((packed));
218bdb3a2dSMichal Januszewski 
228bdb3a2dSMichal Januszewski #define VBE_MODE_VGACOMPAT	0x20
238bdb3a2dSMichal Januszewski #define VBE_MODE_COLOR		0x08
248bdb3a2dSMichal Januszewski #define VBE_MODE_SUPPORTEDHW	0x01
258bdb3a2dSMichal Januszewski #define VBE_MODE_GRAPHICS	0x10
268bdb3a2dSMichal Januszewski #define VBE_MODE_LFB		0x80
278bdb3a2dSMichal Januszewski 
288bdb3a2dSMichal Januszewski #define VBE_MODE_MASK		(VBE_MODE_COLOR | VBE_MODE_SUPPORTEDHW | \
298bdb3a2dSMichal Januszewski 				VBE_MODE_GRAPHICS | VBE_MODE_LFB)
308bdb3a2dSMichal Januszewski 
318bdb3a2dSMichal Januszewski /* VBE Mode Info Block */
328bdb3a2dSMichal Januszewski struct vbe_mode_ib {
338bdb3a2dSMichal Januszewski 	/* for all VBE revisions */
348bdb3a2dSMichal Januszewski 	u16 mode_attr;
358bdb3a2dSMichal Januszewski 	u8  winA_attr;
368bdb3a2dSMichal Januszewski 	u8  winB_attr;
378bdb3a2dSMichal Januszewski 	u16 win_granularity;
388bdb3a2dSMichal Januszewski 	u16 win_size;
398bdb3a2dSMichal Januszewski 	u16 winA_seg;
408bdb3a2dSMichal Januszewski 	u16 winB_seg;
418bdb3a2dSMichal Januszewski 	u32 win_func_ptr;
428bdb3a2dSMichal Januszewski 	u16 bytes_per_scan_line;
438bdb3a2dSMichal Januszewski 
448bdb3a2dSMichal Januszewski 	/* for VBE 1.2+ */
458bdb3a2dSMichal Januszewski 	u16 x_res;
468bdb3a2dSMichal Januszewski 	u16 y_res;
478bdb3a2dSMichal Januszewski 	u8  x_char_size;
488bdb3a2dSMichal Januszewski 	u8  y_char_size;
498bdb3a2dSMichal Januszewski 	u8  planes;
508bdb3a2dSMichal Januszewski 	u8  bits_per_pixel;
518bdb3a2dSMichal Januszewski 	u8  banks;
528bdb3a2dSMichal Januszewski 	u8  memory_model;
538bdb3a2dSMichal Januszewski 	u8  bank_size;
548bdb3a2dSMichal Januszewski 	u8  image_pages;
558bdb3a2dSMichal Januszewski 	u8  reserved1;
568bdb3a2dSMichal Januszewski 
578bdb3a2dSMichal Januszewski 	/* Direct color fields for direct/6 and YUV/7 memory models. */
588bdb3a2dSMichal Januszewski 	/* Offsets are bit positions of lsb in the mask. */
598bdb3a2dSMichal Januszewski 	u8  red_len;
608bdb3a2dSMichal Januszewski 	u8  red_off;
618bdb3a2dSMichal Januszewski 	u8  green_len;
628bdb3a2dSMichal Januszewski 	u8  green_off;
638bdb3a2dSMichal Januszewski 	u8  blue_len;
648bdb3a2dSMichal Januszewski 	u8  blue_off;
658bdb3a2dSMichal Januszewski 	u8  rsvd_len;
668bdb3a2dSMichal Januszewski 	u8  rsvd_off;
678bdb3a2dSMichal Januszewski 	u8  direct_color_info;	/* direct color mode attributes */
688bdb3a2dSMichal Januszewski 
698bdb3a2dSMichal Januszewski 	/* for VBE 2.0+ */
708bdb3a2dSMichal Januszewski 	u32 phys_base_ptr;
718bdb3a2dSMichal Januszewski 	u8  reserved2[6];
728bdb3a2dSMichal Januszewski 
738bdb3a2dSMichal Januszewski 	/* for VBE 3.0+ */
748bdb3a2dSMichal Januszewski 	u16 lin_bytes_per_scan_line;
758bdb3a2dSMichal Januszewski 	u8  bnk_image_pages;
768bdb3a2dSMichal Januszewski 	u8  lin_image_pages;
778bdb3a2dSMichal Januszewski 	u8  lin_red_len;
788bdb3a2dSMichal Januszewski 	u8  lin_red_off;
798bdb3a2dSMichal Januszewski 	u8  lin_green_len;
808bdb3a2dSMichal Januszewski 	u8  lin_green_off;
818bdb3a2dSMichal Januszewski 	u8  lin_blue_len;
828bdb3a2dSMichal Januszewski 	u8  lin_blue_off;
838bdb3a2dSMichal Januszewski 	u8  lin_rsvd_len;
848bdb3a2dSMichal Januszewski 	u8  lin_rsvd_off;
858bdb3a2dSMichal Januszewski 	u32 max_pixel_clock;
868bdb3a2dSMichal Januszewski 	u16 mode_id;
878bdb3a2dSMichal Januszewski 	u8  depth;
888bdb3a2dSMichal Januszewski } __attribute__ ((packed));
898bdb3a2dSMichal Januszewski 
908bdb3a2dSMichal Januszewski #define UVESAFB_DEFAULT_MODE "640x480-16"
918bdb3a2dSMichal Januszewski 
928bdb3a2dSMichal Januszewski /* How long to wait for a reply from userspace [ms] */
938bdb3a2dSMichal Januszewski #define UVESAFB_TIMEOUT 5000
948bdb3a2dSMichal Januszewski 
958bdb3a2dSMichal Januszewski /* Max number of concurrent tasks */
968bdb3a2dSMichal Januszewski #define UVESAFB_TASKS_MAX 16
978bdb3a2dSMichal Januszewski 
988bdb3a2dSMichal Januszewski #define dac_reg	(0x3c8)
998bdb3a2dSMichal Januszewski #define dac_val	(0x3c9)
1008bdb3a2dSMichal Januszewski 
1018bdb3a2dSMichal Januszewski struct uvesafb_pal_entry {
1028bdb3a2dSMichal Januszewski 	u_char blue, green, red, pad;
1038bdb3a2dSMichal Januszewski } __attribute__ ((packed));
1048bdb3a2dSMichal Januszewski 
1058bdb3a2dSMichal Januszewski struct uvesafb_ktask {
1068bdb3a2dSMichal Januszewski 	struct uvesafb_task t;
1078bdb3a2dSMichal Januszewski 	void *buf;
1088bdb3a2dSMichal Januszewski 	struct completion *done;
1098bdb3a2dSMichal Januszewski 	u32 ack;
1108bdb3a2dSMichal Januszewski };
1118bdb3a2dSMichal Januszewski 
1128bdb3a2dSMichal Januszewski #define UVESAFB_EXACT_RES	1
1138bdb3a2dSMichal Januszewski #define UVESAFB_EXACT_DEPTH	2
1148bdb3a2dSMichal Januszewski 
1158bdb3a2dSMichal Januszewski struct uvesafb_par {
1168bdb3a2dSMichal Januszewski 	struct vbe_ib vbe_ib;		/* VBE Info Block */
1178bdb3a2dSMichal Januszewski 	struct vbe_mode_ib *vbe_modes;	/* list of supported VBE modes */
1188bdb3a2dSMichal Januszewski 	int vbe_modes_cnt;
1198bdb3a2dSMichal Januszewski 
1208bdb3a2dSMichal Januszewski 	u8 nocrtc;
1218bdb3a2dSMichal Januszewski 	u8 ypan;			/* 0 - nothing, 1 - ypan, 2 - ywrap */
1228bdb3a2dSMichal Januszewski 	u8 pmi_setpal;			/* PMI for palette changes */
1238bdb3a2dSMichal Januszewski 	u16 *pmi_base;			/* protected mode interface location */
1248bdb3a2dSMichal Januszewski 	void *pmi_start;
1258bdb3a2dSMichal Januszewski 	void *pmi_pal;
1268bdb3a2dSMichal Januszewski 	u8 *vbe_state_orig;		/*
1278bdb3a2dSMichal Januszewski 					 * original hardware state, before the
1288bdb3a2dSMichal Januszewski 					 * driver was loaded
1298bdb3a2dSMichal Januszewski 					 */
1308bdb3a2dSMichal Januszewski 	u8 *vbe_state_saved;		/* state saved by fb_save_state */
1318bdb3a2dSMichal Januszewski 	int vbe_state_size;
1328bdb3a2dSMichal Januszewski 	atomic_t ref_count;
1338bdb3a2dSMichal Januszewski 
1348bdb3a2dSMichal Januszewski 	int mode_idx;
1358bdb3a2dSMichal Januszewski 	struct vbe_crtc_ib crtc;
13663e28a7aSAndy Lutomirski 	int mtrr_handle;
1378bdb3a2dSMichal Januszewski };
1388bdb3a2dSMichal Januszewski 
1398bdb3a2dSMichal Januszewski #endif /* _UVESAFB_H */
140