nouveau_drm.h revision 7cdc0497
122944501Smrg/* 222944501Smrg * Copyright 2005 Stephane Marchesin. 322944501Smrg * All Rights Reserved. 422944501Smrg * 522944501Smrg * Permission is hereby granted, free of charge, to any person obtaining a 622944501Smrg * copy of this software and associated documentation files (the "Software"), 722944501Smrg * to deal in the Software without restriction, including without limitation 822944501Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 922944501Smrg * and/or sell copies of the Software, and to permit persons to whom the 1022944501Smrg * Software is furnished to do so, subject to the following conditions: 1122944501Smrg * 1222944501Smrg * The above copyright notice and this permission notice (including the next 1322944501Smrg * paragraph) shall be included in all copies or substantial portions of the 1422944501Smrg * Software. 1522944501Smrg * 1622944501Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1722944501Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1822944501Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 1922944501Smrg * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 2022944501Smrg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 2122944501Smrg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 2222944501Smrg * OTHER DEALINGS IN THE SOFTWARE. 2322944501Smrg */ 2422944501Smrg 2522944501Smrg#ifndef __NOUVEAU_DRM_H__ 2622944501Smrg#define __NOUVEAU_DRM_H__ 2722944501Smrg 2822944501Smrg#define NOUVEAU_DRM_HEADER_PATCHLEVEL 16 2922944501Smrg 3000a23bdaSmrg#include "drm.h" 3100a23bdaSmrg 3200a23bdaSmrg#if defined(__cplusplus) 3300a23bdaSmrgextern "C" { 3400a23bdaSmrg#endif 3500a23bdaSmrg 3622944501Smrgstruct drm_nouveau_channel_alloc { 3722944501Smrg uint32_t fb_ctxdma_handle; 3822944501Smrg uint32_t tt_ctxdma_handle; 3922944501Smrg 4022944501Smrg int channel; 4122944501Smrg uint32_t pushbuf_domains; 4222944501Smrg 4322944501Smrg /* Notifier memory */ 4422944501Smrg uint32_t notifier_handle; 4522944501Smrg 4622944501Smrg /* DRM-enforced subchannel assignments */ 4722944501Smrg struct { 4822944501Smrg uint32_t handle; 4922944501Smrg uint32_t grclass; 5022944501Smrg } subchan[8]; 5122944501Smrg uint32_t nr_subchan; 5222944501Smrg}; 5322944501Smrg 5422944501Smrgstruct drm_nouveau_channel_free { 5522944501Smrg int channel; 5622944501Smrg}; 5722944501Smrg 5822944501Smrgstruct drm_nouveau_grobj_alloc { 5922944501Smrg int channel; 6022944501Smrg uint32_t handle; 6122944501Smrg int class; 6222944501Smrg}; 6322944501Smrg 6422944501Smrgstruct drm_nouveau_notifierobj_alloc { 6522944501Smrg uint32_t channel; 6622944501Smrg uint32_t handle; 6722944501Smrg uint32_t size; 6822944501Smrg uint32_t offset; 6922944501Smrg}; 7022944501Smrg 7122944501Smrgstruct drm_nouveau_gpuobj_free { 7222944501Smrg int channel; 7322944501Smrg uint32_t handle; 7422944501Smrg}; 7522944501Smrg 7622944501Smrg/* FIXME : maybe unify {GET,SET}PARAMs */ 7722944501Smrg#define NOUVEAU_GETPARAM_PCI_VENDOR 3 7822944501Smrg#define NOUVEAU_GETPARAM_PCI_DEVICE 4 7922944501Smrg#define NOUVEAU_GETPARAM_BUS_TYPE 5 8022944501Smrg#define NOUVEAU_GETPARAM_FB_PHYSICAL 6 8122944501Smrg#define NOUVEAU_GETPARAM_AGP_PHYSICAL 7 8222944501Smrg#define NOUVEAU_GETPARAM_FB_SIZE 8 8322944501Smrg#define NOUVEAU_GETPARAM_AGP_SIZE 9 8422944501Smrg#define NOUVEAU_GETPARAM_PCI_PHYSICAL 10 8522944501Smrg#define NOUVEAU_GETPARAM_CHIPSET_ID 11 8622944501Smrg#define NOUVEAU_GETPARAM_VM_VRAM_BASE 12 8722944501Smrg#define NOUVEAU_GETPARAM_GRAPH_UNITS 13 88d049871aSmrg#define NOUVEAU_GETPARAM_PTIMER_TIME 14 8969dda199Smrg#define NOUVEAU_GETPARAM_HAS_BO_USAGE 15 9069dda199Smrg#define NOUVEAU_GETPARAM_HAS_PAGEFLIP 16 9122944501Smrgstruct drm_nouveau_getparam { 9222944501Smrg uint64_t param; 9322944501Smrg uint64_t value; 9422944501Smrg}; 9522944501Smrg 9622944501Smrgstruct drm_nouveau_setparam { 9722944501Smrg uint64_t param; 9822944501Smrg uint64_t value; 9922944501Smrg}; 10022944501Smrg 10122944501Smrg#define NOUVEAU_GEM_DOMAIN_CPU (1 << 0) 10222944501Smrg#define NOUVEAU_GEM_DOMAIN_VRAM (1 << 1) 10322944501Smrg#define NOUVEAU_GEM_DOMAIN_GART (1 << 2) 10422944501Smrg#define NOUVEAU_GEM_DOMAIN_MAPPABLE (1 << 3) 105e6188e58Smrg#define NOUVEAU_GEM_DOMAIN_COHERENT (1 << 4) 10622944501Smrg 1077cdc0497Smrg#define NOUVEAU_GEM_TILE_COMP 0x00030000 /* nv50-only */ 10869dda199Smrg#define NOUVEAU_GEM_TILE_LAYOUT_MASK 0x0000ff00 10969dda199Smrg#define NOUVEAU_GEM_TILE_16BPP 0x00000001 11069dda199Smrg#define NOUVEAU_GEM_TILE_32BPP 0x00000002 11169dda199Smrg#define NOUVEAU_GEM_TILE_ZETA 0x00000004 11269dda199Smrg#define NOUVEAU_GEM_TILE_NONCONTIG 0x00000008 11369dda199Smrg 11422944501Smrgstruct drm_nouveau_gem_info { 11500a23bdaSmrg __u32 handle; 11600a23bdaSmrg __u32 domain; 11700a23bdaSmrg __u64 size; 11800a23bdaSmrg __u64 offset; 11900a23bdaSmrg __u64 map_handle; 12000a23bdaSmrg __u32 tile_mode; 12100a23bdaSmrg __u32 tile_flags; 12222944501Smrg}; 12322944501Smrg 12422944501Smrgstruct drm_nouveau_gem_new { 12522944501Smrg struct drm_nouveau_gem_info info; 12600a23bdaSmrg __u32 channel_hint; 12700a23bdaSmrg __u32 align; 12822944501Smrg}; 12922944501Smrg 13022944501Smrg#define NOUVEAU_GEM_MAX_BUFFERS 1024 13122944501Smrgstruct drm_nouveau_gem_pushbuf_bo_presumed { 13200a23bdaSmrg __u32 valid; 13300a23bdaSmrg __u32 domain; 13400a23bdaSmrg __u64 offset; 13522944501Smrg}; 13622944501Smrg 13722944501Smrgstruct drm_nouveau_gem_pushbuf_bo { 13800a23bdaSmrg __u64 user_priv; 13900a23bdaSmrg __u32 handle; 14000a23bdaSmrg __u32 read_domains; 14100a23bdaSmrg __u32 write_domains; 14200a23bdaSmrg __u32 valid_domains; 14322944501Smrg struct drm_nouveau_gem_pushbuf_bo_presumed presumed; 14422944501Smrg}; 14522944501Smrg 14622944501Smrg#define NOUVEAU_GEM_RELOC_LOW (1 << 0) 14722944501Smrg#define NOUVEAU_GEM_RELOC_HIGH (1 << 1) 14822944501Smrg#define NOUVEAU_GEM_RELOC_OR (1 << 2) 14922944501Smrg#define NOUVEAU_GEM_MAX_RELOCS 1024 15022944501Smrgstruct drm_nouveau_gem_pushbuf_reloc { 15100a23bdaSmrg __u32 reloc_bo_index; 15200a23bdaSmrg __u32 reloc_bo_offset; 15300a23bdaSmrg __u32 bo_index; 15400a23bdaSmrg __u32 flags; 15500a23bdaSmrg __u32 data; 15600a23bdaSmrg __u32 vor; 15700a23bdaSmrg __u32 tor; 15822944501Smrg}; 15922944501Smrg 16022944501Smrg#define NOUVEAU_GEM_MAX_PUSH 512 16122944501Smrgstruct drm_nouveau_gem_pushbuf_push { 16200a23bdaSmrg __u32 bo_index; 16300a23bdaSmrg __u32 pad; 16400a23bdaSmrg __u64 offset; 16500a23bdaSmrg __u64 length; 16622944501Smrg}; 16722944501Smrg 16822944501Smrgstruct drm_nouveau_gem_pushbuf { 16900a23bdaSmrg __u32 channel; 17000a23bdaSmrg __u32 nr_buffers; 17100a23bdaSmrg __u64 buffers; 17200a23bdaSmrg __u32 nr_relocs; 17300a23bdaSmrg __u32 nr_push; 17400a23bdaSmrg __u64 relocs; 17500a23bdaSmrg __u64 push; 17600a23bdaSmrg __u32 suffix0; 17700a23bdaSmrg __u32 suffix1; 17800a23bdaSmrg __u64 vram_available; 17900a23bdaSmrg __u64 gart_available; 18022944501Smrg}; 18122944501Smrg 18222944501Smrg#define NOUVEAU_GEM_CPU_PREP_NOWAIT 0x00000001 18322944501Smrg#define NOUVEAU_GEM_CPU_PREP_NOBLOCK 0x00000002 18422944501Smrg#define NOUVEAU_GEM_CPU_PREP_WRITE 0x00000004 18522944501Smrgstruct drm_nouveau_gem_cpu_prep { 18600a23bdaSmrg __u32 handle; 18700a23bdaSmrg __u32 flags; 18822944501Smrg}; 18922944501Smrg 19022944501Smrgstruct drm_nouveau_gem_cpu_fini { 19100a23bdaSmrg __u32 handle; 19222944501Smrg}; 19322944501Smrg 19422944501Smrgenum nouveau_bus_type { 19522944501Smrg NV_AGP = 0, 19622944501Smrg NV_PCI = 1, 19722944501Smrg NV_PCIE = 2, 19822944501Smrg}; 19922944501Smrg 20022944501Smrgstruct drm_nouveau_sarea { 20122944501Smrg}; 20222944501Smrg 20322944501Smrg#define DRM_NOUVEAU_GETPARAM 0x00 20422944501Smrg#define DRM_NOUVEAU_SETPARAM 0x01 20522944501Smrg#define DRM_NOUVEAU_CHANNEL_ALLOC 0x02 20622944501Smrg#define DRM_NOUVEAU_CHANNEL_FREE 0x03 20722944501Smrg#define DRM_NOUVEAU_GROBJ_ALLOC 0x04 20822944501Smrg#define DRM_NOUVEAU_NOTIFIEROBJ_ALLOC 0x05 20922944501Smrg#define DRM_NOUVEAU_GPUOBJ_FREE 0x06 2103f012e29Smrg#define DRM_NOUVEAU_NVIF 0x07 21122944501Smrg#define DRM_NOUVEAU_GEM_NEW 0x40 21222944501Smrg#define DRM_NOUVEAU_GEM_PUSHBUF 0x41 21322944501Smrg#define DRM_NOUVEAU_GEM_CPU_PREP 0x42 21422944501Smrg#define DRM_NOUVEAU_GEM_CPU_FINI 0x43 21522944501Smrg#define DRM_NOUVEAU_GEM_INFO 0x44 21622944501Smrg 21700a23bdaSmrg#if defined(__cplusplus) 21800a23bdaSmrg} 21900a23bdaSmrg#endif 22000a23bdaSmrg 22122944501Smrg#endif /* __NOUVEAU_DRM_H__ */ 222