nouveau_drm.h revision 1bb3f6a252c92cbc07884091e185a51b4ccb4f1d
1#ifndef __NOUVEAU_DRMCLI_H__ 2#define __NOUVEAU_DRMCLI_H__ 3 4#define DRIVER_AUTHOR "Nouveau Project" 5#define DRIVER_EMAIL "nouveau@lists.freedesktop.org" 6 7#define DRIVER_NAME "nouveau" 8#define DRIVER_DESC "nVidia Riva/TNT/GeForce/Quadro/Tesla" 9#define DRIVER_DATE "20120801" 10 11#define DRIVER_MAJOR 1 12#define DRIVER_MINOR 1 13#define DRIVER_PATCHLEVEL 1 14 15/* 16 * 1.1.1: 17 * - added support for tiled system memory buffer objects 18 * - added support for NOUVEAU_GETPARAM_GRAPH_UNITS on [nvc0,nve0]. 19 * - added support for compressed memory storage types on [nvc0,nve0]. 20 * - added support for software methods 0x600,0x644,0x6ac on nvc0 21 * to control registers on the MPs to enable performance counters, 22 * and to control the warp error enable mask (OpenGL requires out of 23 * bounds access to local memory to be silently ignored / return 0). 24 */ 25 26#include <core/client.h> 27#include <core/event.h> 28 29#include <subdev/vm.h> 30 31#include <drmP.h> 32#include <drm/nouveau_drm.h> 33 34#include <drm/ttm/ttm_bo_api.h> 35#include <drm/ttm/ttm_bo_driver.h> 36#include <drm/ttm/ttm_placement.h> 37#include <drm/ttm/ttm_memory.h> 38#include <drm/ttm/ttm_module.h> 39#include <drm/ttm/ttm_page_alloc.h> 40 41struct nouveau_channel; 42 43#define DRM_FILE_PAGE_OFFSET (0x100000000ULL >> PAGE_SHIFT) 44 45#include "nouveau_fence.h" 46#include "nouveau_bios.h" 47 48struct nouveau_drm_tile { 49 struct nouveau_fence *fence; 50 bool used; 51}; 52 53enum nouveau_drm_handle { 54 NVDRM_CLIENT = 0xffffffff, 55 NVDRM_DEVICE = 0xdddddddd, 56 NVDRM_PUSH = 0xbbbb0000, /* |= client chid */ 57 NVDRM_CHAN = 0xcccc0000, /* |= client chid */ 58}; 59 60struct nouveau_cli { 61 struct nouveau_client base; 62 struct list_head head; 63 struct mutex mutex; 64 void *abi16; 65}; 66 67static inline struct nouveau_cli * 68nouveau_cli(struct drm_file *fpriv) 69{ 70 return fpriv ? fpriv->driver_priv : NULL; 71} 72 73struct nouveau_drm { 74 struct nouveau_cli client; 75 struct drm_device *dev; 76 77 struct nouveau_object *device; 78 struct list_head clients; 79 80 struct { 81 enum { 82 UNKNOWN = 0, 83 DISABLE = 1, 84 ENABLED = 2 85 } stat; 86 u32 base; 87 u32 size; 88 } agp; 89 90 /* TTM interface support */ 91 struct { 92 struct drm_global_reference mem_global_ref; 93 struct ttm_bo_global_ref bo_global_ref; 94 struct ttm_bo_device bdev; 95 atomic_t validate_sequence; 96 int (*move)(struct nouveau_channel *, 97 struct ttm_buffer_object *, 98 struct ttm_mem_reg *, struct ttm_mem_reg *); 99 struct nouveau_channel *chan; 100 int mtrr; 101 } ttm; 102 103 /* GEM interface support */ 104 struct { 105 u64 vram_available; 106 u64 gart_available; 107 } gem; 108 109 /* synchronisation */ 110 void *fence; 111 112 /* context for accelerated drm-internal operations */ 113 struct nouveau_channel *cechan; 114 struct nouveau_channel *channel; 115 struct nouveau_gpuobj *notify; 116 struct nouveau_fbdev *fbcon; 117 118 /* nv10-nv40 tiling regions */ 119 struct { 120 struct nouveau_drm_tile reg[15]; 121 spinlock_t lock; 122 } tile; 123 124 /* modesetting */ 125 struct nvbios vbios; 126 struct nouveau_display *display; 127 struct backlight_device *backlight; 128 struct nouveau_eventh vblank[4]; 129 130 /* power management */ 131 struct nouveau_pm *pm; 132}; 133 134static inline struct nouveau_drm * 135nouveau_drm(struct drm_device *dev) 136{ 137 return dev->dev_private; 138} 139 140static inline struct nouveau_device * 141nouveau_dev(struct drm_device *dev) 142{ 143 return nv_device(nouveau_drm(dev)->device); 144} 145 146int nouveau_pmops_suspend(struct device *); 147int nouveau_pmops_resume(struct device *); 148 149#define NV_FATAL(cli, fmt, args...) nv_fatal((cli), fmt, ##args) 150#define NV_ERROR(cli, fmt, args...) nv_error((cli), fmt, ##args) 151#define NV_WARN(cli, fmt, args...) nv_warn((cli), fmt, ##args) 152#define NV_INFO(cli, fmt, args...) nv_info((cli), fmt, ##args) 153#define NV_DEBUG(cli, fmt, args...) do { \ 154 if (drm_debug & DRM_UT_DRIVER) \ 155 nv_info((cli), fmt, ##args); \ 156} while (0) 157 158extern int nouveau_modeset; 159 160#endif 161