162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef _UVESAFB_H 362306a36Sopenharmony_ci#define _UVESAFB_H 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#include <uapi/video/uvesafb.h> 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci/* VBE CRTC Info Block */ 962306a36Sopenharmony_cistruct vbe_crtc_ib { 1062306a36Sopenharmony_ci u16 horiz_total; 1162306a36Sopenharmony_ci u16 horiz_start; 1262306a36Sopenharmony_ci u16 horiz_end; 1362306a36Sopenharmony_ci u16 vert_total; 1462306a36Sopenharmony_ci u16 vert_start; 1562306a36Sopenharmony_ci u16 vert_end; 1662306a36Sopenharmony_ci u8 flags; 1762306a36Sopenharmony_ci u32 pixel_clock; 1862306a36Sopenharmony_ci u16 refresh_rate; 1962306a36Sopenharmony_ci u8 reserved[40]; 2062306a36Sopenharmony_ci} __attribute__ ((packed)); 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci#define VBE_MODE_VGACOMPAT 0x20 2362306a36Sopenharmony_ci#define VBE_MODE_COLOR 0x08 2462306a36Sopenharmony_ci#define VBE_MODE_SUPPORTEDHW 0x01 2562306a36Sopenharmony_ci#define VBE_MODE_GRAPHICS 0x10 2662306a36Sopenharmony_ci#define VBE_MODE_LFB 0x80 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci#define VBE_MODE_MASK (VBE_MODE_COLOR | VBE_MODE_SUPPORTEDHW | \ 2962306a36Sopenharmony_ci VBE_MODE_GRAPHICS | VBE_MODE_LFB) 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci/* VBE Mode Info Block */ 3262306a36Sopenharmony_cistruct vbe_mode_ib { 3362306a36Sopenharmony_ci /* for all VBE revisions */ 3462306a36Sopenharmony_ci u16 mode_attr; 3562306a36Sopenharmony_ci u8 winA_attr; 3662306a36Sopenharmony_ci u8 winB_attr; 3762306a36Sopenharmony_ci u16 win_granularity; 3862306a36Sopenharmony_ci u16 win_size; 3962306a36Sopenharmony_ci u16 winA_seg; 4062306a36Sopenharmony_ci u16 winB_seg; 4162306a36Sopenharmony_ci u32 win_func_ptr; 4262306a36Sopenharmony_ci u16 bytes_per_scan_line; 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci /* for VBE 1.2+ */ 4562306a36Sopenharmony_ci u16 x_res; 4662306a36Sopenharmony_ci u16 y_res; 4762306a36Sopenharmony_ci u8 x_char_size; 4862306a36Sopenharmony_ci u8 y_char_size; 4962306a36Sopenharmony_ci u8 planes; 5062306a36Sopenharmony_ci u8 bits_per_pixel; 5162306a36Sopenharmony_ci u8 banks; 5262306a36Sopenharmony_ci u8 memory_model; 5362306a36Sopenharmony_ci u8 bank_size; 5462306a36Sopenharmony_ci u8 image_pages; 5562306a36Sopenharmony_ci u8 reserved1; 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci /* Direct color fields for direct/6 and YUV/7 memory models. */ 5862306a36Sopenharmony_ci /* Offsets are bit positions of lsb in the mask. */ 5962306a36Sopenharmony_ci u8 red_len; 6062306a36Sopenharmony_ci u8 red_off; 6162306a36Sopenharmony_ci u8 green_len; 6262306a36Sopenharmony_ci u8 green_off; 6362306a36Sopenharmony_ci u8 blue_len; 6462306a36Sopenharmony_ci u8 blue_off; 6562306a36Sopenharmony_ci u8 rsvd_len; 6662306a36Sopenharmony_ci u8 rsvd_off; 6762306a36Sopenharmony_ci u8 direct_color_info; /* direct color mode attributes */ 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci /* for VBE 2.0+ */ 7062306a36Sopenharmony_ci u32 phys_base_ptr; 7162306a36Sopenharmony_ci u8 reserved2[6]; 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci /* for VBE 3.0+ */ 7462306a36Sopenharmony_ci u16 lin_bytes_per_scan_line; 7562306a36Sopenharmony_ci u8 bnk_image_pages; 7662306a36Sopenharmony_ci u8 lin_image_pages; 7762306a36Sopenharmony_ci u8 lin_red_len; 7862306a36Sopenharmony_ci u8 lin_red_off; 7962306a36Sopenharmony_ci u8 lin_green_len; 8062306a36Sopenharmony_ci u8 lin_green_off; 8162306a36Sopenharmony_ci u8 lin_blue_len; 8262306a36Sopenharmony_ci u8 lin_blue_off; 8362306a36Sopenharmony_ci u8 lin_rsvd_len; 8462306a36Sopenharmony_ci u8 lin_rsvd_off; 8562306a36Sopenharmony_ci u32 max_pixel_clock; 8662306a36Sopenharmony_ci u16 mode_id; 8762306a36Sopenharmony_ci u8 depth; 8862306a36Sopenharmony_ci} __attribute__ ((packed)); 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ci#define UVESAFB_DEFAULT_MODE "640x480-16" 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci/* How long to wait for a reply from userspace [ms] */ 9362306a36Sopenharmony_ci#define UVESAFB_TIMEOUT 5000 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci/* Max number of concurrent tasks */ 9662306a36Sopenharmony_ci#define UVESAFB_TASKS_MAX 16 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci#define dac_reg (0x3c8) 9962306a36Sopenharmony_ci#define dac_val (0x3c9) 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_cistruct uvesafb_pal_entry { 10262306a36Sopenharmony_ci u_char blue, green, red, pad; 10362306a36Sopenharmony_ci} __attribute__ ((packed)); 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_cistruct uvesafb_ktask { 10662306a36Sopenharmony_ci struct uvesafb_task t; 10762306a36Sopenharmony_ci void *buf; 10862306a36Sopenharmony_ci struct completion *done; 10962306a36Sopenharmony_ci u32 ack; 11062306a36Sopenharmony_ci}; 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci#define UVESAFB_EXACT_RES 1 11362306a36Sopenharmony_ci#define UVESAFB_EXACT_DEPTH 2 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_cistruct uvesafb_par { 11662306a36Sopenharmony_ci struct vbe_ib vbe_ib; /* VBE Info Block */ 11762306a36Sopenharmony_ci struct vbe_mode_ib *vbe_modes; /* list of supported VBE modes */ 11862306a36Sopenharmony_ci int vbe_modes_cnt; 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_ci u8 nocrtc; 12162306a36Sopenharmony_ci u8 ypan; /* 0 - nothing, 1 - ypan, 2 - ywrap */ 12262306a36Sopenharmony_ci u8 pmi_setpal; /* PMI for palette changes */ 12362306a36Sopenharmony_ci u16 *pmi_base; /* protected mode interface location */ 12462306a36Sopenharmony_ci void *pmi_start; 12562306a36Sopenharmony_ci void *pmi_pal; 12662306a36Sopenharmony_ci u8 *vbe_state_orig; /* 12762306a36Sopenharmony_ci * original hardware state, before the 12862306a36Sopenharmony_ci * driver was loaded 12962306a36Sopenharmony_ci */ 13062306a36Sopenharmony_ci u8 *vbe_state_saved; /* state saved by fb_save_state */ 13162306a36Sopenharmony_ci int vbe_state_size; 13262306a36Sopenharmony_ci atomic_t ref_count; 13362306a36Sopenharmony_ci 13462306a36Sopenharmony_ci int mode_idx; 13562306a36Sopenharmony_ci struct vbe_crtc_ib crtc; 13662306a36Sopenharmony_ci int mtrr_handle; 13762306a36Sopenharmony_ci}; 13862306a36Sopenharmony_ci 13962306a36Sopenharmony_ci#endif /* _UVESAFB_H */ 140