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 <xorg-server.h>
403bfa90b6Smrg#include <xf86.h>
413bfa90b6Smrg#include <xf86Crtc.h>
423bfa90b6Smrg#include <xf86xv.h>
433bfa90b6Smrg#include <xa_tracker.h>
443bfa90b6Smrg#include <xf86Module.h>
4525dbecb6Smrg#include <drm.h>
4625dbecb6Smrg#include <xf86drm.h>
4725dbecb6Smrg#include <xf86drmMode.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
7425dbecb6Smrg#undef VMWGFX_LIBDRM_DEVICENAME
7525dbecb6Smrg#if defined(HAVE_LIBDRM_2_4_96) || \
7625dbecb6Smrg  (defined(HAVE_LIBDRM_2_4_74) && !defined(__linux__))
7725dbecb6Smrg#define VMWGFX_LIBDRM_DEVICENAME
7825dbecb6Smrg#endif
7925dbecb6Smrg
803bfa90b6Smrgtypedef struct
813bfa90b6Smrg{
823bfa90b6Smrg    int lastInstance;
833bfa90b6Smrg    int refCount;
843bfa90b6Smrg    ScrnInfoPtr pScrn_1;
853bfa90b6Smrg    ScrnInfoPtr pScrn_2;
863bfa90b6Smrg} EntRec, *EntPtr;
873bfa90b6Smrg
883bfa90b6Smrg#define XORG_NR_FENCES 3
893bfa90b6Smrg
903bfa90b6Smrgenum xorg_throttling_reason {
913bfa90b6Smrg    THROTTLE_RENDER,
923bfa90b6Smrg    THROTTLE_SWAP
933bfa90b6Smrg};
943bfa90b6Smrg
9522f7e8e5Smrgstruct vmwgfx_hosted;
96591e32d7Ssnjstruct xf86_platform_device;
9734a0776dSmrgstruct vmwgfx_layout;
9822f7e8e5Smrg
993bfa90b6Smrgtypedef struct _modesettingRec
1003bfa90b6Smrg{
1013bfa90b6Smrg    /* drm */
1023bfa90b6Smrg    int fd;
1033bfa90b6Smrg    int drm_major;
1043bfa90b6Smrg    int drm_minor;
1053bfa90b6Smrg    int drm_patch;
1063bfa90b6Smrg
1073bfa90b6Smrg    /* X */
1083bfa90b6Smrg    EntPtr entityPrivate;
1093bfa90b6Smrg
1103bfa90b6Smrg    int Chipset;
1113bfa90b6Smrg    EntityInfoPtr pEnt;
1123bfa90b6Smrg    struct pci_device *PciInfo;
113591e32d7Ssnj    struct xf86_platform_device *platform_dev;
1143bfa90b6Smrg
1153bfa90b6Smrg    /* Accel */
1163bfa90b6Smrg    Bool accelerate_render;
1173bfa90b6Smrg    MessageType from_render;
1183bfa90b6Smrg    Bool rendercheck;
1193bfa90b6Smrg    MessageType from_rendercheck;
1203bfa90b6Smrg    Bool SWCursor;
1213bfa90b6Smrg    CursorPtr cursor;
1223bfa90b6Smrg    Bool enable_dri;
1233bfa90b6Smrg    MessageType from_dri;
1243bfa90b6Smrg    Bool direct_presents;
1253bfa90b6Smrg    MessageType from_dp;
1263bfa90b6Smrg    Bool only_hw_presents;
1273bfa90b6Smrg    MessageType from_hwp;
1283bfa90b6Smrg    Bool isMaster;
12934a0776dSmrg    Bool has_screen_targets;
1303bfa90b6Smrg
1313bfa90b6Smrg
1323bfa90b6Smrg    /* Broken-out options. */
1333bfa90b6Smrg    OptionInfoPtr Options;
1343bfa90b6Smrg
1353bfa90b6Smrg    ScreenBlockHandlerProcPtr saved_BlockHandler;
1363bfa90b6Smrg    CreateScreenResourcesProcPtr saved_CreateScreenResources;
1373bfa90b6Smrg    CloseScreenProcPtr saved_CloseScreen;
1383bfa90b6Smrg    Bool (*saved_EnterVT)(VT_FUNC_ARGS_DECL);
1393bfa90b6Smrg    void (*saved_LeaveVT)(VT_FUNC_ARGS_DECL);
1403bfa90b6Smrg    void (*saved_AdjustFrame)(ADJUST_FRAME_ARGS_DECL);
1413bfa90b6Smrg    Bool (*saved_UseHWCursor)(ScreenPtr, CursorPtr);
1423bfa90b6Smrg    Bool (*saved_UseHWCursorARGB)(ScreenPtr, CursorPtr);
1433bfa90b6Smrg
1443bfa90b6Smrg    uint16_t lut_r[256], lut_g[256], lut_b[256];
1453bfa90b6Smrg
1463bfa90b6Smrg    Bool check_fb_size;
1473bfa90b6Smrg    size_t max_fb_size;
1483bfa90b6Smrg
1493bfa90b6Smrg    struct xa_tracker *xat;
15022f7e8e5Smrg    const struct vmwgfx_hosted_driver *hdriver;
15122f7e8e5Smrg    struct vmwgfx_hosted *hosted;
1523bfa90b6Smrg#ifdef DRI2
1533bfa90b6Smrg    Bool dri2_available;
15425dbecb6Smrg#ifdef VMWGFX_LIBDRM_DEVICENAME
15525dbecb6Smrg    char *dri2_device_name;
15625dbecb6Smrg#else
1573bfa90b6Smrg    char dri2_device_name[VMWGFX_DRI_DEVICE_LEN];
1583bfa90b6Smrg#endif
15925dbecb6Smrg#endif
16034a0776dSmrg#ifdef HAVE_LIBUDEV
16134a0776dSmrg    struct udev_monitor *uevent_monitor;
16234a0776dSmrg    InputHandlerProc uevent_handler;
16334a0776dSmrg    struct vmwgfx_layout *layout;
16434a0776dSmrg#endif
16534a0776dSmrg    Bool autoLayout;
16625dbecb6Smrg#ifdef DRI3
16725dbecb6Smrg    Bool xa_dri3;
16825dbecb6Smrg    Bool dri3_available;
16925dbecb6Smrg#endif
17025dbecb6Smrg
17125dbecb6Smrg    /* Video */
17225dbecb6Smrg    XF86VideoAdaptorPtr overlay;
17325dbecb6Smrg    XF86VideoAdaptorPtr textured;
17425dbecb6Smrg
1753bfa90b6Smrg} modesettingRec, *modesettingPtr;
1763bfa90b6Smrg
1773bfa90b6Smrg#define modesettingPTR(p) ((modesettingPtr)((p)->driverPrivate))
1783bfa90b6Smrg
1793bfa90b6Smrgvoid xorg_flush(ScreenPtr pScreen);
1803bfa90b6Smrg/***********************************************************************
1813bfa90b6Smrg * xorg_dri2.c
1823bfa90b6Smrg */
1833bfa90b6SmrgBool
1843bfa90b6Smrgxorg_dri2_init(ScreenPtr pScreen);
1853bfa90b6Smrg
1863bfa90b6Smrgvoid
1873bfa90b6Smrgxorg_dri2_close(ScreenPtr pScreen);
1883bfa90b6Smrg
1893bfa90b6Smrg
1903bfa90b6Smrg/***********************************************************************
1913bfa90b6Smrg * xorg_crtc.c
1923bfa90b6Smrg */
1933bfa90b6Smrgvoid
1943bfa90b6Smrgxorg_crtc_init(ScrnInfoPtr pScrn);
1953bfa90b6Smrg
1963bfa90b6Smrgvoid
1973bfa90b6Smrgxorg_crtc_cursor_destroy(xf86CrtcPtr crtc);
1983bfa90b6Smrg
1993bfa90b6Smrgvoid
2003bfa90b6Smrgvmwgfx_disable_scanout(ScrnInfoPtr pScrn);
2013bfa90b6Smrg
2023bfa90b6SmrgPixmapPtr
2033bfa90b6Smrgcrtc_get_scanout(xf86CrtcPtr crtc);
2043bfa90b6Smrg
2053bfa90b6Smrg
2063bfa90b6Smrg/***********************************************************************
2073bfa90b6Smrg * xorg_output.c
2083bfa90b6Smrg */
2093bfa90b6Smrgvoid
2103bfa90b6Smrgxorg_output_init(ScrnInfoPtr pScrn);
2113bfa90b6Smrg
2123bfa90b6Smrgunsigned
2133bfa90b6Smrgxorg_output_get_id(xf86OutputPtr output);
2143bfa90b6Smrg
2153bfa90b6SmrgBool
2163bfa90b6Smrgvmwgfx_output_explicit_overlap(ScrnInfoPtr pScrn);
21734a0776dSmrgvoid
21834a0776dSmrgvmwgfx_uevent_init(ScrnInfoPtr scrn, modesettingPtr ms);
21934a0776dSmrgvoid
22034a0776dSmrgvmwgfx_uevent_fini(ScrnInfoPtr scrn, modesettingPtr ms);
22134a0776dSmrgBool
22234a0776dSmrgvmwgfx_output_has_origin(xf86OutputPtr output);
22334a0776dSmrgvoid
22434a0776dSmrgvmwgfx_output_origin(xf86OutputPtr output, int *x, int *y);
22534a0776dSmrgvoid
22634a0776dSmrgvmwgfx_outputs_off(ScrnInfoPtr pScrn);
22734a0776dSmrgvoid
22834a0776dSmrgvmwgfx_outputs_on(ScrnInfoPtr pScrn);
2293bfa90b6Smrg
23034a0776dSmrg/***********************************************************************
23134a0776dSmrg * vmwgfx_layout.c
23234a0776dSmrg */
23334a0776dSmrgstruct vmwgfx_layout *
23434a0776dSmrgvmwgfx_layout_from_kms(ScrnInfoPtr pScrn);
23534a0776dSmrgvoid
23634a0776dSmrgvmwgfx_layout_configuration(ScrnInfoPtr pScrn, struct vmwgfx_layout *layout);
23734a0776dSmrgvoid
23834a0776dSmrgvmwgfx_layout_handler(ScrnInfoPtr pScrn);
2393bfa90b6Smrg
2403bfa90b6Smrg/***********************************************************************
2413bfa90b6Smrg * xorg_xv.c
2423bfa90b6Smrg */
2433bfa90b6Smrgvoid
2443bfa90b6Smrgxorg_xv_init(ScreenPtr pScreen);
2453bfa90b6Smrg
2463bfa90b6SmrgXF86VideoAdaptorPtr
2473bfa90b6Smrgvmw_video_init_adaptor(ScrnInfoPtr pScrn);
2483bfa90b6Smrgvoid
24925dbecb6Smrgvmw_video_free_adaptor(XF86VideoAdaptorPtr adaptor);
25025dbecb6Smrgvoid
25125dbecb6Smrgvmw_xv_close(ScreenPtr pScreen);
2523bfa90b6Smrg
2533bfa90b6Smrgvoid
2543bfa90b6Smrgvmw_ctrl_ext_init(ScrnInfoPtr pScrn);
2553bfa90b6Smrg
25625dbecb6Smrg/***********************************************************************
25725dbecb6Smrg * vmwgfx_dri3.c
25825dbecb6Smrg */
25925dbecb6Smrg#define VMW_XA_VERSION_MAJOR_DRI3 2
26025dbecb6Smrg#define VMW_XA_VERSION_MINOR_DRI3 4
26125dbecb6Smrg
26225dbecb6SmrgBool
26325dbecb6Smrgvmwgfx_dri3_init(ScreenPtr screen);
26425dbecb6Smrg
2653bfa90b6Smrg#endif /* _XORG_TRACKER_H_ */
266