xserver

xserver with xephyr scale patch
git clone https://git.neptards.moe/u3shit/xserver.git
Log | Files | Refs | README | LICENSE

vbe.h (12302B)


      1 
      2 /*
      3  *                   XFree86 vbe module
      4  *               Copyright 2000 Egbert Eich
      5  *
      6  * The mode query/save/set/restore functions from the vesa driver
      7  * have been moved here.
      8  * Copyright (c) 2000 by Conectiva S.A. (http://www.conectiva.com)
      9  * Authors: Paulo César Pereira de Andrade <pcpa@conectiva.com.br>
     10  */
     11 
     12 #ifndef _VBE_H
     13 #define _VBE_H
     14 #include "xf86int10.h"
     15 #include "xf86DDC.h"
     16 
     17 typedef enum {
     18     DDC_UNCHECKED,
     19     DDC_NONE,
     20     DDC_1,
     21     DDC_2,
     22     DDC_1_2
     23 } ddc_lvl;
     24 
     25 typedef struct {
     26     xf86Int10InfoPtr pInt10;
     27     int version;
     28     void *memory;
     29     int real_mode_base;
     30     int num_pages;
     31     Bool init_int10;
     32     ddc_lvl ddc;
     33     Bool ddc_blank;
     34 } vbeInfoRec, *vbeInfoPtr;
     35 
     36 #define VBE_VERSION_MAJOR(x) *((CARD8*)(&x) + 1)
     37 #define VBE_VERSION_MINOR(x) (CARD8)(x)
     38 
     39 extern _X_EXPORT vbeInfoPtr VBEInit(xf86Int10InfoPtr pInt, int entityIndex);
     40 extern _X_EXPORT vbeInfoPtr VBEExtendedInit(xf86Int10InfoPtr pInt,
     41                                             int entityIndex, int Flags);
     42 extern _X_EXPORT void vbeFree(vbeInfoPtr pVbe);
     43 extern _X_EXPORT xf86MonPtr vbeDoEDID(vbeInfoPtr pVbe, void *pDDCModule);
     44 
     45 #pragma pack(1)
     46 
     47 typedef struct vbeControllerInfoBlock {
     48     CARD8 VbeSignature[4];
     49     CARD16 VbeVersion;
     50     CARD32 OemStringPtr;
     51     CARD8 Capabilities[4];
     52     CARD32 VideoModePtr;
     53     CARD16 TotalMem;
     54     CARD16 OemSoftwareRev;
     55     CARD32 OemVendorNamePtr;
     56     CARD32 OemProductNamePtr;
     57     CARD32 OemProductRevPtr;
     58     CARD8 Scratch[222];
     59     CARD8 OemData[256];
     60 } vbeControllerInfoRec, *vbeControllerInfoPtr;
     61 
     62 #if defined(__GNUC__) || defined(__USLC__) || defined(__SUNPRO_C)
     63 #pragma pack()                  /* All GCC versions recognise this syntax */
     64 #else
     65 #pragma pack(0)
     66 #endif
     67 
     68 #if !( defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) )
     69 #define __attribute__(a)
     70 #endif
     71 
     72 typedef struct _VbeInfoBlock VbeInfoBlock;
     73 typedef struct _VbeModeInfoBlock VbeModeInfoBlock;
     74 typedef struct _VbeCRTCInfoBlock VbeCRTCInfoBlock;
     75 
     76 /*
     77  * INT 0
     78  */
     79 
     80 struct _VbeInfoBlock {
     81     /* VESA 1.2 fields */
     82     CARD8 VESASignature[4];     /* VESA */
     83     CARD16 VESAVersion;         /* Higher byte major, lower byte minor */
     84                                         /*CARD32 */ char *OEMStringPtr;
     85                                         /* Pointer to OEM string */
     86     CARD8 Capabilities[4];      /* Capabilities of the video environment */
     87 
     88                                         /*CARD32 */ CARD16 *VideoModePtr;
     89                                         /* pointer to supported Super VGA modes */
     90 
     91     CARD16 TotalMemory;         /* Number of 64kb memory blocks on board */
     92     /* if not VESA 2, 236 scratch bytes follow (256 bytes total size) */
     93 
     94     /* VESA 2 fields */
     95     CARD16 OemSoftwareRev;      /* VBE implementation Software revision */
     96                                         /*CARD32 */ char *OemVendorNamePtr;
     97                                         /* Pointer to Vendor Name String */
     98                                                 /*CARD32 */ char *OemProductNamePtr;
     99                                                 /* Pointer to Product Name String */
    100                                         /*CARD32 */ char *OemProductRevPtr;
    101                                         /* Pointer to Product Revision String */
    102     CARD8 Reserved[222];        /* Reserved for VBE implementation */
    103     CARD8 OemData[256];         /* Data Area for OEM Strings */
    104 } __attribute__ ((packed));
    105 
    106 /* Return Super VGA Information */
    107 extern _X_EXPORT VbeInfoBlock *VBEGetVBEInfo(vbeInfoPtr pVbe);
    108 extern _X_EXPORT void VBEFreeVBEInfo(VbeInfoBlock * block);
    109 
    110 /*
    111  * INT 1
    112  */
    113 
    114 struct _VbeModeInfoBlock {
    115     CARD16 ModeAttributes;      /* mode attributes */
    116     CARD8 WinAAttributes;       /* window A attributes */
    117     CARD8 WinBAttributes;       /* window B attributes */
    118     CARD16 WinGranularity;      /* window granularity */
    119     CARD16 WinSize;             /* window size */
    120     CARD16 WinASegment;         /* window A start segment */
    121     CARD16 WinBSegment;         /* window B start segment */
    122     CARD32 WinFuncPtr;          /* real mode pointer to window function */
    123     CARD16 BytesPerScanline;    /* bytes per scanline */
    124 
    125     /* Mandatory information for VBE 1.2 and above */
    126     CARD16 XResolution;         /* horizontal resolution in pixels or characters */
    127     CARD16 YResolution;         /* vertical resolution in pixels or characters */
    128     CARD8 XCharSize;            /* character cell width in pixels */
    129     CARD8 YCharSize;            /* character cell height in pixels */
    130     CARD8 NumberOfPlanes;       /* number of memory planes */
    131     CARD8 BitsPerPixel;         /* bits per pixel */
    132     CARD8 NumberOfBanks;        /* number of banks */
    133     CARD8 MemoryModel;          /* memory model type */
    134     CARD8 BankSize;             /* bank size in KB */
    135     CARD8 NumberOfImages;       /* number of images */
    136     CARD8 Reserved;             /* 1 *//* reserved for page function */
    137 
    138     /* Direct color fields (required for direct/6 and YUV/7 memory models) */
    139     CARD8 RedMaskSize;          /* size of direct color red mask in bits */
    140     CARD8 RedFieldPosition;     /* bit position of lsb of red mask */
    141     CARD8 GreenMaskSize;        /* size of direct color green mask in bits */
    142     CARD8 GreenFieldPosition;   /* bit position of lsb of green mask */
    143     CARD8 BlueMaskSize;         /* size of direct color blue mask in bits */
    144     CARD8 BlueFieldPosition;    /* bit position of lsb of blue mask */
    145     CARD8 RsvdMaskSize;         /* size of direct color reserved mask in bits */
    146     CARD8 RsvdFieldPosition;    /* bit position of lsb of reserved mask */
    147     CARD8 DirectColorModeInfo;  /* direct color mode attributes */
    148 
    149     /* Mandatory information for VBE 2.0 and above */
    150     CARD32 PhysBasePtr;         /* physical address for flat memory frame buffer */
    151     CARD32 Reserved32;          /* 0 *//* Reserved - always set to 0 */
    152     CARD16 Reserved16;          /* 0 *//* Reserved - always set to 0 */
    153 
    154     /* Mandatory information for VBE 3.0 and above */
    155     CARD16 LinBytesPerScanLine; /* bytes per scan line for linear modes */
    156     CARD8 BnkNumberOfImagePages;        /* number of images for banked modes */
    157     CARD8 LinNumberOfImagePages;        /* number of images for linear modes */
    158     CARD8 LinRedMaskSize;       /* size of direct color red mask (linear modes) */
    159     CARD8 LinRedFieldPosition;  /* bit position of lsb of red mask (linear modes) */
    160     CARD8 LinGreenMaskSize;     /* size of direct color green mask (linear modes) */
    161     CARD8 LinGreenFieldPosition;        /* bit position of lsb of green mask (linear modes) */
    162     CARD8 LinBlueMaskSize;      /* size of direct color blue mask (linear modes) */
    163     CARD8 LinBlueFieldPosition; /* bit position of lsb of blue mask (linear modes) */
    164     CARD8 LinRsvdMaskSize;      /* size of direct color reserved mask (linear modes) */
    165     CARD8 LinRsvdFieldPosition; /* bit position of lsb of reserved mask (linear modes) */
    166     CARD32 MaxPixelClock;       /* maximum pixel clock (in Hz) for graphics mode */
    167     CARD8 Reserved2[189];       /* remainder of VbeModeInfoBlock */
    168 } __attribute__ ((packed));
    169 
    170 /* Return VBE Mode Information */
    171 extern _X_EXPORT VbeModeInfoBlock *VBEGetModeInfo(vbeInfoPtr pVbe, int mode);
    172 extern _X_EXPORT void VBEFreeModeInfo(VbeModeInfoBlock * block);
    173 
    174 /*
    175  * INT2
    176  */
    177 
    178 #define CRTC_DBLSCAN	(1<<0)
    179 #define CRTC_INTERLACE	(1<<1)
    180 #define CRTC_NHSYNC	(1<<2)
    181 #define CRTC_NVSYNC	(1<<3)
    182 
    183 struct _VbeCRTCInfoBlock {
    184     CARD16 HorizontalTotal;     /* Horizontal total in pixels */
    185     CARD16 HorizontalSyncStart; /* Horizontal sync start in pixels */
    186     CARD16 HorizontalSyncEnd;   /* Horizontal sync end in pixels */
    187     CARD16 VerticalTotal;       /* Vertical total in lines */
    188     CARD16 VerticalSyncStart;   /* Vertical sync start in lines */
    189     CARD16 VerticalSyncEnd;     /* Vertical sync end in lines */
    190     CARD8 Flags;                /* Flags (Interlaced, Double Scan etc) */
    191     CARD32 PixelClock;          /* Pixel clock in units of Hz */
    192     CARD16 RefreshRate;         /* Refresh rate in units of 0.01 Hz */
    193     CARD8 Reserved[40];         /* remainder of ModeInfoBlock */
    194 } __attribute__ ((packed));
    195 
    196 /* VbeCRTCInfoBlock is in the VESA 3.0 specs */
    197 
    198 extern _X_EXPORT Bool VBESetVBEMode(vbeInfoPtr pVbe, int mode,
    199                                     VbeCRTCInfoBlock * crtc);
    200 
    201 /*
    202  * INT 3
    203  */
    204 
    205 extern _X_EXPORT Bool VBEGetVBEMode(vbeInfoPtr pVbe, int *mode);
    206 
    207 /*
    208  * INT 4
    209  */
    210 
    211 /* Save/Restore Super VGA video state */
    212 /* function values are (values stored in VESAPtr):
    213  *	0 := query & allocate amount of memory to save state
    214  *	1 := save state
    215  *	2 := restore state
    216  *
    217  *	function 0 called automatically if function 1 called without
    218  *	a previous call to function 0.
    219  */
    220 
    221 typedef enum {
    222     MODE_QUERY,
    223     MODE_SAVE,
    224     MODE_RESTORE
    225 } vbeSaveRestoreFunction;
    226 
    227 extern _X_EXPORT Bool
    228 VBESaveRestore(vbeInfoPtr pVbe, vbeSaveRestoreFunction function,
    229                void **memory, int *size, int *real_mode_pages);
    230 
    231 /*
    232  * INT 5
    233  */
    234 
    235 extern _X_EXPORT Bool
    236  VBEBankSwitch(vbeInfoPtr pVbe, unsigned int iBank, int window);
    237 
    238 /*
    239  * INT 6
    240  */
    241 
    242 typedef enum {
    243     SCANWID_SET,
    244     SCANWID_GET,
    245     SCANWID_SET_BYTES,
    246     SCANWID_GET_MAX
    247 } vbeScanwidthCommand;
    248 
    249 #define VBESetLogicalScanline(pVbe, width)	\
    250 	VBESetGetLogicalScanlineLength(pVbe, SCANWID_SET, width, \
    251 					NULL, NULL, NULL)
    252 #define VBESetLogicalScanlineBytes(pVbe, width)	\
    253 	VBESetGetLogicalScanlineLength(pVbe, SCANWID_SET_BYTES, width, \
    254 					NULL, NULL, NULL)
    255 #define VBEGetLogicalScanline(pVbe, pixels, bytes, max)	\
    256 	VBESetGetLogicalScanlineLength(pVbe, SCANWID_GET, 0, \
    257 					pixels, bytes, max)
    258 #define VBEGetMaxLogicalScanline(pVbe, pixels, bytes, max)	\
    259 	VBESetGetLogicalScanlineLength(pVbe, SCANWID_GET_MAX, 0, \
    260 					pixels, bytes, max)
    261 extern _X_EXPORT Bool VBESetGetLogicalScanlineLength(vbeInfoPtr pVbe,
    262                                                      vbeScanwidthCommand
    263                                                      command, int width,
    264                                                      int *pixels, int *bytes,
    265                                                      int *max);
    266 
    267 /*
    268  * INT 7
    269  */
    270 
    271 /* 16 bit code */
    272 extern _X_EXPORT Bool VBESetDisplayStart(vbeInfoPtr pVbe, int x, int y,
    273                                          Bool wait_retrace);
    274 extern _X_EXPORT Bool VBEGetDisplayStart(vbeInfoPtr pVbe, int *x, int *y);
    275 
    276 /*
    277  * INT 8
    278  */
    279 
    280 /* if bits is 0, then it is a GET */
    281 extern _X_EXPORT int VBESetGetDACPaletteFormat(vbeInfoPtr pVbe, int bits);
    282 
    283 /*
    284  * INT 9
    285  */
    286 
    287 /*
    288  *  If getting a palette, the data argument is not used. It will return
    289  * the data.
    290  *  If setting a palette, it will return the pointer received on success,
    291  * NULL on failure.
    292  */
    293 extern _X_EXPORT CARD32 *VBESetGetPaletteData(vbeInfoPtr pVbe, Bool set,
    294                                               int first, int num, CARD32 *data,
    295                                               Bool secondary,
    296                                               Bool wait_retrace);
    297 #define VBEFreePaletteData(data)	free(data)
    298 
    299 /*
    300  * INT A
    301  */
    302 
    303 typedef struct _VBEpmi {
    304     int seg_tbl;
    305     int tbl_off;
    306     int tbl_len;
    307 } VBEpmi;
    308 
    309 extern _X_EXPORT VBEpmi *VBEGetVBEpmi(vbeInfoPtr pVbe);
    310 
    311 #define VESAFreeVBEpmi(pmi)	free(pmi)
    312 
    313 /* high level helper functions */
    314 
    315 typedef struct _vbeModeInfoRec {
    316     int width;
    317     int height;
    318     int bpp;
    319     int n;
    320     struct _vbeModeInfoRec *next;
    321 } vbeModeInfoRec, *vbeModeInfoPtr;
    322 
    323 typedef struct {
    324     CARD8 *state;
    325     CARD8 *pstate;
    326     int statePage;
    327     int stateSize;
    328     int stateMode;
    329 } vbeSaveRestoreRec, *vbeSaveRestorePtr;
    330 
    331 extern _X_EXPORT void
    332 
    333 VBEVesaSaveRestore(vbeInfoPtr pVbe, vbeSaveRestorePtr vbe_sr,
    334                    vbeSaveRestoreFunction function);
    335 
    336 extern _X_EXPORT int VBEGetPixelClock(vbeInfoPtr pVbe, int mode, int Clock);
    337 extern _X_EXPORT Bool VBEDPMSSet(vbeInfoPtr pVbe, int mode);
    338 
    339 struct vbePanelID {
    340     short hsize;
    341     short vsize;
    342     short fptype;
    343     char redbpp;
    344     char greenbpp;
    345     char bluebpp;
    346     char reservedbpp;
    347     int reserved_offscreen_mem_size;
    348     int reserved_offscreen_mem_pointer;
    349     char reserved[14];
    350 };
    351 
    352 extern _X_EXPORT void VBEInterpretPanelID(ScrnInfoPtr pScrn,
    353                                           struct vbePanelID *data);
    354 extern _X_EXPORT struct vbePanelID *VBEReadPanelID(vbeInfoPtr pVbe);
    355 
    356 #endif