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