1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved. 4*4882a593Smuzhiyun * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved. 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef __IOCTL_H__ 9*4882a593Smuzhiyun #define __IOCTL_H__ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #ifndef __user 12*4882a593Smuzhiyun #define __user 13*4882a593Smuzhiyun #endif 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun /* VIAFB IOCTL definition */ 16*4882a593Smuzhiyun #define VIAFB_GET_INFO_SIZE 0x56494101 /* 'VIA\01' */ 17*4882a593Smuzhiyun #define VIAFB_GET_INFO 0x56494102 /* 'VIA\02' */ 18*4882a593Smuzhiyun #define VIAFB_HOTPLUG 0x56494103 /* 'VIA\03' */ 19*4882a593Smuzhiyun #define VIAFB_SET_HOTPLUG_FLAG 0x56494104 /* 'VIA\04' */ 20*4882a593Smuzhiyun #define VIAFB_GET_RESOLUTION 0x56494105 /* 'VIA\05' */ 21*4882a593Smuzhiyun #define VIAFB_GET_SAMM_INFO 0x56494107 /* 'VIA\07' */ 22*4882a593Smuzhiyun #define VIAFB_TURN_ON_OUTPUT_DEVICE 0x56494108 /* 'VIA\08' */ 23*4882a593Smuzhiyun #define VIAFB_TURN_OFF_OUTPUT_DEVICE 0x56494109 /* 'VIA\09' */ 24*4882a593Smuzhiyun #define VIAFB_GET_DEVICE 0x5649410B 25*4882a593Smuzhiyun #define VIAFB_GET_DRIVER_VERSION 0x56494112 /* 'VIA\12' */ 26*4882a593Smuzhiyun #define VIAFB_GET_CHIP_INFO 0x56494113 /* 'VIA\13' */ 27*4882a593Smuzhiyun #define VIAFB_GET_DEVICE_INFO 0x56494115 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun #define VIAFB_GET_DEVICE_SUPPORT 0x56494118 30*4882a593Smuzhiyun #define VIAFB_GET_DEVICE_CONNECT 0x56494119 31*4882a593Smuzhiyun #define VIAFB_GET_PANEL_SUPPORT_EXPAND 0x5649411A 32*4882a593Smuzhiyun #define VIAFB_GET_DRIVER_NAME 0x56494122 33*4882a593Smuzhiyun #define VIAFB_GET_DEVICE_SUPPORT_STATE 0x56494123 34*4882a593Smuzhiyun #define VIAFB_GET_GAMMA_LUT 0x56494124 35*4882a593Smuzhiyun #define VIAFB_SET_GAMMA_LUT 0x56494125 36*4882a593Smuzhiyun #define VIAFB_GET_GAMMA_SUPPORT_STATE 0x56494126 37*4882a593Smuzhiyun #define VIAFB_SYNC_SURFACE 0x56494130 38*4882a593Smuzhiyun #define VIAFB_GET_DRIVER_CAPS 0x56494131 39*4882a593Smuzhiyun #define VIAFB_GET_IGA_SCALING_INFO 0x56494132 40*4882a593Smuzhiyun #define VIAFB_GET_PANEL_MAX_SIZE 0x56494133 41*4882a593Smuzhiyun #define VIAFB_GET_PANEL_MAX_POSITION 0x56494134 42*4882a593Smuzhiyun #define VIAFB_SET_PANEL_SIZE 0x56494135 43*4882a593Smuzhiyun #define VIAFB_SET_PANEL_POSITION 0x56494136 44*4882a593Smuzhiyun #define VIAFB_GET_PANEL_POSITION 0x56494137 45*4882a593Smuzhiyun #define VIAFB_GET_PANEL_SIZE 0x56494138 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun #define None_Device 0x00 48*4882a593Smuzhiyun #define CRT_Device 0x01 49*4882a593Smuzhiyun #define LCD_Device 0x02 50*4882a593Smuzhiyun #define DVI_Device 0x08 51*4882a593Smuzhiyun #define CRT2_Device 0x10 52*4882a593Smuzhiyun #define LCD2_Device 0x40 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun #define OP_LCD_CENTERING 0x01 55*4882a593Smuzhiyun #define OP_LCD_PANEL_ID 0x02 56*4882a593Smuzhiyun #define OP_LCD_MODE 0x03 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun /*SAMM operation flag*/ 59*4882a593Smuzhiyun #define OP_SAMM 0x80 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun #define LCD_PANEL_ID_MAXIMUM 23 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun #define STATE_ON 0x1 64*4882a593Smuzhiyun #define STATE_OFF 0x0 65*4882a593Smuzhiyun #define STATE_DEFAULT 0xFFFF 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun #define MAX_ACTIVE_DEV_NUM 2 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun struct device_t { 70*4882a593Smuzhiyun unsigned short crt:1; 71*4882a593Smuzhiyun unsigned short dvi:1; 72*4882a593Smuzhiyun unsigned short lcd:1; 73*4882a593Smuzhiyun unsigned short samm:1; 74*4882a593Smuzhiyun unsigned short lcd_dsp_cent:1; 75*4882a593Smuzhiyun unsigned char lcd_mode:1; 76*4882a593Smuzhiyun unsigned short epia_dvi:1; 77*4882a593Smuzhiyun unsigned short lcd_dual_edge:1; 78*4882a593Smuzhiyun unsigned short lcd2:1; 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun unsigned short primary_dev; 81*4882a593Smuzhiyun unsigned char lcd_panel_id; 82*4882a593Smuzhiyun unsigned short xres, yres; 83*4882a593Smuzhiyun unsigned short xres1, yres1; 84*4882a593Smuzhiyun unsigned short refresh; 85*4882a593Smuzhiyun unsigned short bpp; 86*4882a593Smuzhiyun unsigned short refresh1; 87*4882a593Smuzhiyun unsigned short bpp1; 88*4882a593Smuzhiyun unsigned short sequence; 89*4882a593Smuzhiyun unsigned short bus_width; 90*4882a593Smuzhiyun }; 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun struct viafb_ioctl_info { 93*4882a593Smuzhiyun u32 viafb_id; /* for identifying viafb */ 94*4882a593Smuzhiyun #define VIAID 0x56494146 /* Identify myself with 'VIAF' */ 95*4882a593Smuzhiyun u16 vendor_id; 96*4882a593Smuzhiyun u16 device_id; 97*4882a593Smuzhiyun u8 version; 98*4882a593Smuzhiyun u8 revision; 99*4882a593Smuzhiyun u8 reserved[246]; /* for future use */ 100*4882a593Smuzhiyun }; 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun struct viafb_ioctl_mode { 103*4882a593Smuzhiyun u32 xres; 104*4882a593Smuzhiyun u32 yres; 105*4882a593Smuzhiyun u32 refresh; 106*4882a593Smuzhiyun u32 bpp; 107*4882a593Smuzhiyun u32 xres_sec; 108*4882a593Smuzhiyun u32 yres_sec; 109*4882a593Smuzhiyun u32 virtual_xres_sec; 110*4882a593Smuzhiyun u32 virtual_yres_sec; 111*4882a593Smuzhiyun u32 refresh_sec; 112*4882a593Smuzhiyun u32 bpp_sec; 113*4882a593Smuzhiyun }; 114*4882a593Smuzhiyun struct viafb_ioctl_samm { 115*4882a593Smuzhiyun u32 samm_status; 116*4882a593Smuzhiyun u32 size_prim; 117*4882a593Smuzhiyun u32 size_sec; 118*4882a593Smuzhiyun u32 mem_base; 119*4882a593Smuzhiyun u32 offset_sec; 120*4882a593Smuzhiyun }; 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun struct viafb_driver_version { 123*4882a593Smuzhiyun int iMajorNum; 124*4882a593Smuzhiyun int iKernelNum; 125*4882a593Smuzhiyun int iOSNum; 126*4882a593Smuzhiyun int iMinorNum; 127*4882a593Smuzhiyun }; 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun struct viafb_ioctl_lcd_attribute { 130*4882a593Smuzhiyun unsigned int panel_id; 131*4882a593Smuzhiyun unsigned int display_center; 132*4882a593Smuzhiyun unsigned int lcd_mode; 133*4882a593Smuzhiyun }; 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun struct viafb_ioctl_setting { 136*4882a593Smuzhiyun /* Enable or disable active devices */ 137*4882a593Smuzhiyun unsigned short device_flag; 138*4882a593Smuzhiyun /* Indicate which device should be turn on or turn off. */ 139*4882a593Smuzhiyun unsigned short device_status; 140*4882a593Smuzhiyun unsigned int reserved; 141*4882a593Smuzhiyun /* Indicate which LCD's attribute can be changed. */ 142*4882a593Smuzhiyun unsigned short lcd_operation_flag; 143*4882a593Smuzhiyun /* 1: SAMM ON 0: SAMM OFF */ 144*4882a593Smuzhiyun unsigned short samm_status; 145*4882a593Smuzhiyun /* horizontal resolution of first device */ 146*4882a593Smuzhiyun unsigned short first_dev_hor_res; 147*4882a593Smuzhiyun /* vertical resolution of first device */ 148*4882a593Smuzhiyun unsigned short first_dev_ver_res; 149*4882a593Smuzhiyun /* horizontal resolution of second device */ 150*4882a593Smuzhiyun unsigned short second_dev_hor_res; 151*4882a593Smuzhiyun /* vertical resolution of second device */ 152*4882a593Smuzhiyun unsigned short second_dev_ver_res; 153*4882a593Smuzhiyun /* refresh rate of first device */ 154*4882a593Smuzhiyun unsigned short first_dev_refresh; 155*4882a593Smuzhiyun /* bpp of first device */ 156*4882a593Smuzhiyun unsigned short first_dev_bpp; 157*4882a593Smuzhiyun /* refresh rate of second device */ 158*4882a593Smuzhiyun unsigned short second_dev_refresh; 159*4882a593Smuzhiyun /* bpp of second device */ 160*4882a593Smuzhiyun unsigned short second_dev_bpp; 161*4882a593Smuzhiyun /* Indicate which device are primary display device. */ 162*4882a593Smuzhiyun unsigned int primary_device; 163*4882a593Smuzhiyun unsigned int struct_reserved[35]; 164*4882a593Smuzhiyun struct viafb_ioctl_lcd_attribute lcd_attributes; 165*4882a593Smuzhiyun }; 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun struct _UTFunctionCaps { 168*4882a593Smuzhiyun unsigned int dw3DScalingState; 169*4882a593Smuzhiyun unsigned int reserved[31]; 170*4882a593Smuzhiyun }; 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun struct _POSITIONVALUE { 173*4882a593Smuzhiyun unsigned int dwX; 174*4882a593Smuzhiyun unsigned int dwY; 175*4882a593Smuzhiyun }; 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun struct _panel_size_pos_info { 178*4882a593Smuzhiyun unsigned int device_type; 179*4882a593Smuzhiyun int x; 180*4882a593Smuzhiyun int y; 181*4882a593Smuzhiyun }; 182*4882a593Smuzhiyun 183*4882a593Smuzhiyun extern int viafb_LCD_ON; 184*4882a593Smuzhiyun extern int viafb_DVI_ON; 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun int viafb_ioctl_get_viafb_info(u_long arg); 187*4882a593Smuzhiyun int viafb_ioctl_hotplug(int hres, int vres, int bpp); 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun #endif /* __IOCTL_H__ */ 190