nouveau_drm.h revision 77145f1cbdf8d28b46ff8070ca749bad821e0774
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 0 14 15#include <core/client.h> 16 17#include <subdev/vm.h> 18 19#include <drmP.h> 20#include <drm/nouveau_drm.h> 21 22#include "ttm/ttm_bo_api.h" 23#include "ttm/ttm_bo_driver.h" 24#include "ttm/ttm_placement.h" 25#include "ttm/ttm_memory.h" 26#include "ttm/ttm_module.h" 27#include "ttm/ttm_page_alloc.h" 28 29struct nouveau_channel; 30 31#define DRM_FILE_PAGE_OFFSET (0x100000000ULL >> PAGE_SHIFT) 32 33#include "nouveau_fence.h" 34#include "nouveau_bios.h" 35 36struct nouveau_drm_tile { 37 struct nouveau_fence *fence; 38 bool used; 39}; 40 41enum nouveau_drm_handle { 42 NVDRM_CLIENT = 0xffffffff, 43 NVDRM_DEVICE = 0xdddddddd, 44 NVDRM_PUSH = 0xbbbb0000, /* |= client chid */ 45 NVDRM_CHAN = 0xcccc0000, /* |= client chid */ 46}; 47 48struct nouveau_cli { 49 struct nouveau_client base; 50 struct list_head head; 51 struct mutex mutex; 52 void *abi16; 53}; 54 55static inline struct nouveau_cli * 56nouveau_cli(struct drm_file *fpriv) 57{ 58 return fpriv ? fpriv->driver_priv : NULL; 59} 60 61struct nouveau_drm { 62 struct nouveau_cli client; 63 struct drm_device *dev; 64 65 struct nouveau_object *device; 66 struct list_head clients; 67 68 struct { 69 enum { 70 UNKNOWN = 0, 71 DISABLE = 1, 72 ENABLED = 2 73 } stat; 74 u32 base; 75 u32 size; 76 } agp; 77 78 /* TTM interface support */ 79 struct { 80 struct drm_global_reference mem_global_ref; 81 struct ttm_bo_global_ref bo_global_ref; 82 struct ttm_bo_device bdev; 83 atomic_t validate_sequence; 84 int (*move)(struct nouveau_channel *, 85 struct ttm_buffer_object *, 86 struct ttm_mem_reg *, struct ttm_mem_reg *); 87 int mtrr; 88 } ttm; 89 90 /* GEM interface support */ 91 struct { 92 u64 vram_available; 93 u64 gart_available; 94 } gem; 95 96 /* synchronisation */ 97 void *fence; 98 99 /* context for accelerated drm-internal operations */ 100 struct nouveau_channel *channel; 101 struct nouveau_gpuobj *notify; 102 struct nouveau_fbdev *fbcon; 103 104 /* nv10-nv40 tiling regions */ 105 struct { 106 struct nouveau_drm_tile reg[15]; 107 spinlock_t lock; 108 } tile; 109 110 /* modesetting */ 111 struct nvbios vbios; 112 struct nouveau_display *display; 113 struct backlight_device *backlight; 114 115 /* power management */ 116 struct nouveau_pm *pm; 117}; 118 119static inline struct nouveau_drm * 120nouveau_drm(struct drm_device *dev) 121{ 122 return dev->dev_private; 123} 124 125static inline struct nouveau_device * 126nouveau_dev(struct drm_device *dev) 127{ 128 return nv_device(nouveau_drm(dev)->device); 129} 130 131int nouveau_drm_suspend(struct pci_dev *, pm_message_t); 132int nouveau_drm_resume(struct pci_dev *); 133 134#define NV_PRINTK(level, code, drm, fmt, args...) \ 135 printk(level "nouveau " code "[ DRM][%s] " fmt, \ 136 pci_name((drm)->dev->pdev), ##args) 137#define NV_FATAL(drm, fmt, args...) \ 138 NV_PRINTK(KERN_CRIT, "!", (drm), fmt, ##args) 139#define NV_ERROR(drm, fmt, args...) \ 140 NV_PRINTK(KERN_ERR, "E", (drm), fmt, ##args) 141#define NV_WARN(drm, fmt, args...) \ 142 NV_PRINTK(KERN_WARNING, "W", (drm), fmt, ##args) 143#define NV_INFO(drm, fmt, args...) \ 144 NV_PRINTK(KERN_INFO, " ", (drm), fmt, ##args) 145#define NV_DEBUG(drm, fmt, args...) do { \ 146 if (drm_debug & DRM_UT_DRIVER) \ 147 NV_PRINTK(KERN_DEBUG, "D", drm, fmt, ##args); \ 148} while (0) 149 150#endif 151