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