vmwgfx_driver.h revision 34a0776d
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
5734a0776dSmrg#ifdef HAVE_LIBUDEV
5834a0776dSmrg#include <libudev.h>
5934a0776dSmrg#endif
6034a0776dSmrg
613bfa90b6Smrg#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 12
623bfa90b6Smrg#define _swapl(x, n) swapl(x,n)
633bfa90b6Smrg#define _swaps(x, n) swaps(x,n)
643bfa90b6Smrg#else
653bfa90b6Smrg#define _swapl(x, n) (void) n; swapl(x)
663bfa90b6Smrg#define _swaps(x, n) (void) n; swaps(x)
673bfa90b6Smrg#endif
683bfa90b6Smrg
693bfa90b6Smrg#define DRV_ERROR(msg)	xf86DrvMsg(pScrn->scrnIndex, X_ERROR, msg);
703bfa90b6Smrg#define debug_printf(...)
713bfa90b6Smrg
723bfa90b6Smrg#define VMWGFX_DRI_DEVICE_LEN 80
733bfa90b6Smrg
743bfa90b6Smrgtypedef struct
753bfa90b6Smrg{
763bfa90b6Smrg    int lastInstance;
773bfa90b6Smrg    int refCount;
783bfa90b6Smrg    ScrnInfoPtr pScrn_1;
793bfa90b6Smrg    ScrnInfoPtr pScrn_2;
803bfa90b6Smrg} EntRec, *EntPtr;
813bfa90b6Smrg
823bfa90b6Smrg#define XORG_NR_FENCES 3
833bfa90b6Smrg
843bfa90b6Smrgenum xorg_throttling_reason {
853bfa90b6Smrg    THROTTLE_RENDER,
863bfa90b6Smrg    THROTTLE_SWAP
873bfa90b6Smrg};
883bfa90b6Smrg
8922f7e8e5Smrgstruct vmwgfx_hosted;
90591e32d7Ssnjstruct xf86_platform_device;
9134a0776dSmrgstruct vmwgfx_layout;
9222f7e8e5Smrg
933bfa90b6Smrgtypedef struct _modesettingRec
943bfa90b6Smrg{
953bfa90b6Smrg    /* drm */
963bfa90b6Smrg    int fd;
973bfa90b6Smrg    int drm_major;
983bfa90b6Smrg    int drm_minor;
993bfa90b6Smrg    int drm_patch;
1003bfa90b6Smrg
1013bfa90b6Smrg    /* X */
1023bfa90b6Smrg    EntPtr entityPrivate;
1033bfa90b6Smrg
1043bfa90b6Smrg    int Chipset;
1053bfa90b6Smrg    EntityInfoPtr pEnt;
1063bfa90b6Smrg    struct pci_device *PciInfo;
107591e32d7Ssnj    struct xf86_platform_device *platform_dev;
1083bfa90b6Smrg
1093bfa90b6Smrg    /* Accel */
1103bfa90b6Smrg    Bool accelerate_render;
1113bfa90b6Smrg    MessageType from_render;
1123bfa90b6Smrg    Bool rendercheck;
1133bfa90b6Smrg    MessageType from_rendercheck;
1143bfa90b6Smrg    Bool SWCursor;
1153bfa90b6Smrg    CursorPtr cursor;
1163bfa90b6Smrg    Bool enable_dri;
1173bfa90b6Smrg    MessageType from_dri;
1183bfa90b6Smrg    Bool direct_presents;
1193bfa90b6Smrg    MessageType from_dp;
1203bfa90b6Smrg    Bool only_hw_presents;
1213bfa90b6Smrg    MessageType from_hwp;
1223bfa90b6Smrg    Bool isMaster;
12334a0776dSmrg    Bool has_screen_targets;
1243bfa90b6Smrg
1253bfa90b6Smrg
1263bfa90b6Smrg    /* Broken-out options. */
1273bfa90b6Smrg    OptionInfoPtr Options;
1283bfa90b6Smrg
1293bfa90b6Smrg    ScreenBlockHandlerProcPtr saved_BlockHandler;
1303bfa90b6Smrg    CreateScreenResourcesProcPtr saved_CreateScreenResources;
1313bfa90b6Smrg    CloseScreenProcPtr saved_CloseScreen;
1323bfa90b6Smrg    Bool (*saved_EnterVT)(VT_FUNC_ARGS_DECL);
1333bfa90b6Smrg    void (*saved_LeaveVT)(VT_FUNC_ARGS_DECL);
1343bfa90b6Smrg    void (*saved_AdjustFrame)(ADJUST_FRAME_ARGS_DECL);
1353bfa90b6Smrg    Bool (*saved_UseHWCursor)(ScreenPtr, CursorPtr);
1363bfa90b6Smrg    Bool (*saved_UseHWCursorARGB)(ScreenPtr, CursorPtr);
1373bfa90b6Smrg
1383bfa90b6Smrg    uint16_t lut_r[256], lut_g[256], lut_b[256];
1393bfa90b6Smrg
1403bfa90b6Smrg    Bool check_fb_size;
1413bfa90b6Smrg    size_t max_fb_size;
1423bfa90b6Smrg
1433bfa90b6Smrg    struct xa_tracker *xat;
14422f7e8e5Smrg    const struct vmwgfx_hosted_driver *hdriver;
14522f7e8e5Smrg    struct vmwgfx_hosted *hosted;
1463bfa90b6Smrg#ifdef DRI2
1473bfa90b6Smrg    Bool dri2_available;
1483bfa90b6Smrg    char dri2_device_name[VMWGFX_DRI_DEVICE_LEN];
1493bfa90b6Smrg#endif
15034a0776dSmrg#ifdef HAVE_LIBUDEV
15134a0776dSmrg    struct udev_monitor *uevent_monitor;
15234a0776dSmrg    InputHandlerProc uevent_handler;
15334a0776dSmrg    struct vmwgfx_layout *layout;
15434a0776dSmrg#endif
15534a0776dSmrg    Bool autoLayout;
1563bfa90b6Smrg} modesettingRec, *modesettingPtr;
1573bfa90b6Smrg
1583bfa90b6Smrg#define modesettingPTR(p) ((modesettingPtr)((p)->driverPrivate))
1593bfa90b6Smrg
1603bfa90b6Smrgvoid xorg_flush(ScreenPtr pScreen);
1613bfa90b6Smrg/***********************************************************************
1623bfa90b6Smrg * xorg_dri2.c
1633bfa90b6Smrg */
1643bfa90b6SmrgBool
1653bfa90b6Smrgxorg_dri2_init(ScreenPtr pScreen);
1663bfa90b6Smrg
1673bfa90b6Smrgvoid
1683bfa90b6Smrgxorg_dri2_close(ScreenPtr pScreen);
1693bfa90b6Smrg
1703bfa90b6Smrg
1713bfa90b6Smrg/***********************************************************************
1723bfa90b6Smrg * xorg_crtc.c
1733bfa90b6Smrg */
1743bfa90b6Smrgvoid
1753bfa90b6Smrgxorg_crtc_init(ScrnInfoPtr pScrn);
1763bfa90b6Smrg
1773bfa90b6Smrgvoid
1783bfa90b6Smrgxorg_crtc_cursor_destroy(xf86CrtcPtr crtc);
1793bfa90b6Smrg
1803bfa90b6Smrgvoid
1813bfa90b6Smrgvmwgfx_disable_scanout(ScrnInfoPtr pScrn);
1823bfa90b6Smrg
1833bfa90b6SmrgPixmapPtr
1843bfa90b6Smrgcrtc_get_scanout(xf86CrtcPtr crtc);
1853bfa90b6Smrg
1863bfa90b6Smrg
1873bfa90b6Smrg/***********************************************************************
1883bfa90b6Smrg * xorg_output.c
1893bfa90b6Smrg */
1903bfa90b6Smrgvoid
1913bfa90b6Smrgxorg_output_init(ScrnInfoPtr pScrn);
1923bfa90b6Smrg
1933bfa90b6Smrgunsigned
1943bfa90b6Smrgxorg_output_get_id(xf86OutputPtr output);
1953bfa90b6Smrg
1963bfa90b6SmrgBool
1973bfa90b6Smrgvmwgfx_output_explicit_overlap(ScrnInfoPtr pScrn);
19834a0776dSmrgvoid
19934a0776dSmrgvmwgfx_uevent_init(ScrnInfoPtr scrn, modesettingPtr ms);
20034a0776dSmrgvoid
20134a0776dSmrgvmwgfx_uevent_fini(ScrnInfoPtr scrn, modesettingPtr ms);
20234a0776dSmrgBool
20334a0776dSmrgvmwgfx_output_has_origin(xf86OutputPtr output);
20434a0776dSmrgvoid
20534a0776dSmrgvmwgfx_output_origin(xf86OutputPtr output, int *x, int *y);
20634a0776dSmrgvoid
20734a0776dSmrgvmwgfx_outputs_off(ScrnInfoPtr pScrn);
20834a0776dSmrgvoid
20934a0776dSmrgvmwgfx_outputs_on(ScrnInfoPtr pScrn);
2103bfa90b6Smrg
21134a0776dSmrg/***********************************************************************
21234a0776dSmrg * vmwgfx_layout.c
21334a0776dSmrg */
21434a0776dSmrgstruct vmwgfx_layout *
21534a0776dSmrgvmwgfx_layout_from_kms(ScrnInfoPtr pScrn);
21634a0776dSmrgvoid
21734a0776dSmrgvmwgfx_layout_configuration(ScrnInfoPtr pScrn, struct vmwgfx_layout *layout);
21834a0776dSmrgvoid
21934a0776dSmrgvmwgfx_layout_handler(ScrnInfoPtr pScrn);
2203bfa90b6Smrg
2213bfa90b6Smrg/***********************************************************************
2223bfa90b6Smrg * xorg_xv.c
2233bfa90b6Smrg */
2243bfa90b6Smrgvoid
2253bfa90b6Smrgxorg_xv_init(ScreenPtr pScreen);
2263bfa90b6Smrg
2273bfa90b6SmrgXF86VideoAdaptorPtr
2283bfa90b6Smrgvmw_video_init_adaptor(ScrnInfoPtr pScrn);
2293bfa90b6Smrgvoid
2303bfa90b6Smrgvmw_video_free_adaptor(XF86VideoAdaptorPtr adaptor, Bool free_ports);
2313bfa90b6Smrg
2323bfa90b6Smrgvoid
2333bfa90b6Smrgvmw_ctrl_ext_init(ScrnInfoPtr pScrn);
2343bfa90b6Smrg
2353bfa90b6Smrg#endif /* _XORG_TRACKER_H_ */
236