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