vmwgfx_driver.h revision 22f7e8e5
13bfa90b6Smrg/*
23bfa90b6Smrg * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
33bfa90b6Smrg * Copyright 2011 VMWare, Inc.
43bfa90b6Smrg * All Rights Reserved.
53bfa90b6Smrg *
63bfa90b6Smrg * Permission is hereby granted, free of charge, to any person obtaining a
73bfa90b6Smrg * copy of this software and associated documentation files (the
83bfa90b6Smrg * "Software"), to deal in the Software without restriction, including
93bfa90b6Smrg * without limitation the rights to use, copy, modify, merge, publish,
103bfa90b6Smrg * distribute, sub license, and/or sell copies of the Software, and to
113bfa90b6Smrg * permit persons to whom the Software is furnished to do so, subject to
123bfa90b6Smrg * the following conditions:
133bfa90b6Smrg *
143bfa90b6Smrg * The above copyright n<otice and this permission notice (including the
153bfa90b6Smrg * next paragraph) shall be included in all copies or substantial portions
163bfa90b6Smrg * of the Software.
173bfa90b6Smrg *
183bfa90b6Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
193bfa90b6Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
203bfa90b6Smrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
213bfa90b6Smrg * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
223bfa90b6Smrg * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
233bfa90b6Smrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
243bfa90b6Smrg * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
253bfa90b6Smrg *
263bfa90b6Smrg *
273bfa90b6Smrg * Author: Alan Hourihane <alanh@tungstengraphics.com>
283bfa90b6Smrg * Author: Jakob Bornecrantz <wallbraker@gmail.com>
293bfa90b6Smrg * Author: Thomas Hellstrom <thellstrom@vmware.com>
303bfa90b6Smrg */
313bfa90b6Smrg
323bfa90b6Smrg#ifndef _VMWGFX_DRIVER_H_
333bfa90b6Smrg#define _VMWGFX_DRIVER_H_
343bfa90b6Smrg
353bfa90b6Smrg
363bfa90b6Smrg#include <stddef.h>
373bfa90b6Smrg#include <stdint.h>
383bfa90b6Smrg#include <errno.h>
393bfa90b6Smrg#include <drm.h>
403bfa90b6Smrg#include <xf86drm.h>
413bfa90b6Smrg#include <xf86drmMode.h>
423bfa90b6Smrg#include <xorg-server.h>
433bfa90b6Smrg#include <xf86.h>
443bfa90b6Smrg#include <xf86Crtc.h>
453bfa90b6Smrg#include <xf86xv.h>
463bfa90b6Smrg#include <xa_tracker.h>
473bfa90b6Smrg#include <xf86Module.h>
483bfa90b6Smrg
493bfa90b6Smrg#include "../src/compat-api.h"
503bfa90b6Smrg#ifdef DRI2
513bfa90b6Smrg#include <dri2.h>
523bfa90b6Smrg#if (!defined(DRI2INFOREC_VERSION) || (DRI2INFOREC_VERSION < 3))
533bfa90b6Smrg#undef DRI2
543bfa90b6Smrg#endif
553bfa90b6Smrg#endif
563bfa90b6Smrg
573bfa90b6Smrg#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 12
583bfa90b6Smrg#define _swapl(x, n) swapl(x,n)
593bfa90b6Smrg#define _swaps(x, n) swaps(x,n)
603bfa90b6Smrg#else
613bfa90b6Smrg#define _swapl(x, n) (void) n; swapl(x)
623bfa90b6Smrg#define _swaps(x, n) (void) n; swaps(x)
633bfa90b6Smrg#endif
643bfa90b6Smrg
653bfa90b6Smrg#define DRV_ERROR(msg)	xf86DrvMsg(pScrn->scrnIndex, X_ERROR, msg);
663bfa90b6Smrg#define debug_printf(...)
673bfa90b6Smrg
683bfa90b6Smrg#define VMWGFX_DRI_DEVICE_LEN 80
693bfa90b6Smrg
703bfa90b6Smrgtypedef struct
713bfa90b6Smrg{
723bfa90b6Smrg    int lastInstance;
733bfa90b6Smrg    int refCount;
743bfa90b6Smrg    ScrnInfoPtr pScrn_1;
753bfa90b6Smrg    ScrnInfoPtr pScrn_2;
763bfa90b6Smrg} EntRec, *EntPtr;
773bfa90b6Smrg
783bfa90b6Smrg#define XORG_NR_FENCES 3
793bfa90b6Smrg
803bfa90b6Smrgenum xorg_throttling_reason {
813bfa90b6Smrg    THROTTLE_RENDER,
823bfa90b6Smrg    THROTTLE_SWAP
833bfa90b6Smrg};
843bfa90b6Smrg
8522f7e8e5Smrgstruct vmwgfx_hosted;
8622f7e8e5Smrg
873bfa90b6Smrgtypedef struct _modesettingRec
883bfa90b6Smrg{
893bfa90b6Smrg    /* drm */
903bfa90b6Smrg    int fd;
913bfa90b6Smrg    int drm_major;
923bfa90b6Smrg    int drm_minor;
933bfa90b6Smrg    int drm_patch;
943bfa90b6Smrg
953bfa90b6Smrg    /* X */
963bfa90b6Smrg    EntPtr entityPrivate;
973bfa90b6Smrg
983bfa90b6Smrg    int Chipset;
993bfa90b6Smrg    EntityInfoPtr pEnt;
1003bfa90b6Smrg    struct pci_device *PciInfo;
1013bfa90b6Smrg
1023bfa90b6Smrg    /* Accel */
1033bfa90b6Smrg    Bool accelerate_render;
1043bfa90b6Smrg    MessageType from_render;
1053bfa90b6Smrg    Bool rendercheck;
1063bfa90b6Smrg    MessageType from_rendercheck;
1073bfa90b6Smrg    Bool SWCursor;
1083bfa90b6Smrg    CursorPtr cursor;
1093bfa90b6Smrg    Bool enable_dri;
1103bfa90b6Smrg    MessageType from_dri;
1113bfa90b6Smrg    Bool direct_presents;
1123bfa90b6Smrg    MessageType from_dp;
1133bfa90b6Smrg    Bool only_hw_presents;
1143bfa90b6Smrg    MessageType from_hwp;
1153bfa90b6Smrg    Bool isMaster;
1163bfa90b6Smrg
1173bfa90b6Smrg
1183bfa90b6Smrg    /* Broken-out options. */
1193bfa90b6Smrg    OptionInfoPtr Options;
1203bfa90b6Smrg
1213bfa90b6Smrg    ScreenBlockHandlerProcPtr saved_BlockHandler;
1223bfa90b6Smrg    CreateScreenResourcesProcPtr saved_CreateScreenResources;
1233bfa90b6Smrg    CloseScreenProcPtr saved_CloseScreen;
1243bfa90b6Smrg    Bool (*saved_EnterVT)(VT_FUNC_ARGS_DECL);
1253bfa90b6Smrg    void (*saved_LeaveVT)(VT_FUNC_ARGS_DECL);
1263bfa90b6Smrg    void (*saved_AdjustFrame)(ADJUST_FRAME_ARGS_DECL);
1273bfa90b6Smrg    Bool (*saved_UseHWCursor)(ScreenPtr, CursorPtr);
1283bfa90b6Smrg    Bool (*saved_UseHWCursorARGB)(ScreenPtr, CursorPtr);
1293bfa90b6Smrg
1303bfa90b6Smrg    uint16_t lut_r[256], lut_g[256], lut_b[256];
1313bfa90b6Smrg
1323bfa90b6Smrg    Bool check_fb_size;
1333bfa90b6Smrg    size_t max_fb_size;
1343bfa90b6Smrg
1353bfa90b6Smrg    struct xa_tracker *xat;
13622f7e8e5Smrg    const struct vmwgfx_hosted_driver *hdriver;
13722f7e8e5Smrg    struct vmwgfx_hosted *hosted;
1383bfa90b6Smrg#ifdef DRI2
1393bfa90b6Smrg    Bool dri2_available;
1403bfa90b6Smrg    char dri2_device_name[VMWGFX_DRI_DEVICE_LEN];
1413bfa90b6Smrg#endif
1423bfa90b6Smrg} modesettingRec, *modesettingPtr;
1433bfa90b6Smrg
1443bfa90b6Smrg#define modesettingPTR(p) ((modesettingPtr)((p)->driverPrivate))
1453bfa90b6Smrg
1463bfa90b6Smrgvoid xorg_flush(ScreenPtr pScreen);
1473bfa90b6Smrg/***********************************************************************
1483bfa90b6Smrg * xorg_dri2.c
1493bfa90b6Smrg */
1503bfa90b6SmrgBool
1513bfa90b6Smrgxorg_dri2_init(ScreenPtr pScreen);
1523bfa90b6Smrg
1533bfa90b6Smrgvoid
1543bfa90b6Smrgxorg_dri2_close(ScreenPtr pScreen);
1553bfa90b6Smrg
1563bfa90b6Smrg
1573bfa90b6Smrg/***********************************************************************
1583bfa90b6Smrg * xorg_crtc.c
1593bfa90b6Smrg */
1603bfa90b6Smrgvoid
1613bfa90b6Smrgxorg_crtc_init(ScrnInfoPtr pScrn);
1623bfa90b6Smrg
1633bfa90b6Smrgvoid
1643bfa90b6Smrgxorg_crtc_cursor_destroy(xf86CrtcPtr crtc);
1653bfa90b6Smrg
1663bfa90b6Smrgvoid
1673bfa90b6Smrgvmwgfx_disable_scanout(ScrnInfoPtr pScrn);
1683bfa90b6Smrg
1693bfa90b6SmrgPixmapPtr
1703bfa90b6Smrgcrtc_get_scanout(xf86CrtcPtr crtc);
1713bfa90b6Smrg
1723bfa90b6Smrg
1733bfa90b6Smrg/***********************************************************************
1743bfa90b6Smrg * xorg_output.c
1753bfa90b6Smrg */
1763bfa90b6Smrgvoid
1773bfa90b6Smrgxorg_output_init(ScrnInfoPtr pScrn);
1783bfa90b6Smrg
1793bfa90b6Smrgunsigned
1803bfa90b6Smrgxorg_output_get_id(xf86OutputPtr output);
1813bfa90b6Smrg
1823bfa90b6SmrgBool
1833bfa90b6Smrgvmwgfx_output_explicit_overlap(ScrnInfoPtr pScrn);
1843bfa90b6Smrg
1853bfa90b6Smrg
1863bfa90b6Smrg/***********************************************************************
1873bfa90b6Smrg * xorg_xv.c
1883bfa90b6Smrg */
1893bfa90b6Smrgvoid
1903bfa90b6Smrgxorg_xv_init(ScreenPtr pScreen);
1913bfa90b6Smrg
1923bfa90b6SmrgXF86VideoAdaptorPtr
1933bfa90b6Smrgvmw_video_init_adaptor(ScrnInfoPtr pScrn);
1943bfa90b6Smrgvoid
1953bfa90b6Smrgvmw_video_free_adaptor(XF86VideoAdaptorPtr adaptor, Bool free_ports);
1963bfa90b6Smrg
1973bfa90b6Smrgvoid
1983bfa90b6Smrgvmw_ctrl_ext_init(ScrnInfoPtr pScrn);
1993bfa90b6Smrg
2003bfa90b6Smrg#endif /* _XORG_TRACKER_H_ */
201