nouveau: import libdrm_nouveau

Most of the code is copied as is, but there are a couple of changes:
- drop pre nvif code
- nouveau_list -> list_head
- pthread_mutex_t -> simple_mtx_t
- nvif_unwrap removed
- no assignments in if statements
- nouveau_object_mthd -> nouveau_device_info
- reworked object allocation UAPI calls

Most of the reworked code was copied from NVK or a previous version of it

Signed-off-by: Karol Herbst <kherbst@redhat.com>
Acked-by: Faith Ekstrand <faith.ekstrand@collabora.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27853>
This commit is contained in:
Karol Herbst
2024-02-26 15:50:09 +01:00
committed by Marge Bot
parent a62fba6b62
commit 821f4c8d99
25 changed files with 2203 additions and 46 deletions

View File

@@ -79,11 +79,6 @@ LOCAL_SHARED_LIBRARIES += libdrm_radeon
MESON_GEN_PKGCONFIGS += libdrm_radeon:$(LIBDRM_VERSION)
endif
ifneq ($(filter nouveau,$(BOARD_MESA3D_GALLIUM_DRIVERS)),)
LOCAL_SHARED_LIBRARIES += libdrm_nouveau
MESON_GEN_PKGCONFIGS += libdrm_nouveau:$(LIBDRM_VERSION)
endif
ifneq ($(filter d3d12,$(BOARD_MESA3D_GALLIUM_DRIVERS)),)
LOCAL_HEADER_LIBRARIES += DirectX-Headers
LOCAL_STATIC_LIBRARIES += DirectX-Guids

View File

@@ -1633,12 +1633,10 @@ endif
# bar are both on use 2.4.3 for both of them
dep_libdrm_amdgpu = null_dep
dep_libdrm_radeon = null_dep
dep_libdrm_nouveau = null_dep
dep_libdrm_intel = null_dep
_drm_amdgpu_ver = '2.4.119'
_drm_radeon_ver = '2.4.71'
_drm_nouveau_ver = '2.4.102'
_drm_intel_ver = '2.4.75'
_drm_ver = '2.4.109'
@@ -1646,7 +1644,6 @@ _libdrm_checks = [
['intel', with_gallium_i915],
['amdgpu', (with_amd_vk and not with_platform_windows) or with_gallium_radeonsi],
['radeon', (with_gallium_radeonsi or with_gallium_r300 or with_gallium_r600)],
['nouveau', with_any_nouveau],
]
# Loop over the enables versions and get the highest libdrm requirement for all

View File

@@ -7,6 +7,7 @@
- changes: &nouveau_file_list
- src/nouveau/*
- src/nouveau/codegen/**/*
- src/nouveau/drm/**/*
- src/nouveau/drm-shim/**/*
- src/nouveau/headers/**/*
- src/nouveau/winsys/**/*

View File

@@ -185,11 +185,12 @@ libnouveau = static_library(
inc_src, inc_include, inc_gallium, inc_gallium_aux, inc_mapi, inc_mesa,
],
gnu_symbol_visibility : 'hidden',
dependencies : [dep_libdrm, idep_nouveau_codegen, dep_libdrm_nouveau, idep_mesautil, idep_nir_headers],
link_with : [libnouveauwinsys],
dependencies : [dep_libdrm, idep_libnouveauwinsys, idep_nouveau_codegen, idep_mesautil, idep_nir_headers],
)
driver_nouveau = declare_dependency(
compile_args : '-DGALLIUM_NOUVEAU',
dependencies : [idep_nir, idep_nouveau_codegen],
link_with : [libnouveauwinsys, libnouveau_codegen, libnouveau],
link_with : [libnouveau_codegen, libnouveau],
)

View File

@@ -3,7 +3,7 @@
#include "pipe/p_context.h"
#include "pipe/p_state.h"
#include <nouveau.h>
#include "nouveau_winsys.h"
#define NOUVEAU_MAX_SCRATCH_BUFS 4

View File

@@ -16,10 +16,10 @@
#include <errno.h>
#include <stdlib.h>
#include <nouveau_drm.h>
#include "drm-uapi/nouveau_drm.h"
#include <xf86drm.h>
#include <nvif/class.h>
#include <nvif/cl0080.h>
#include "nvif/class.h"
#include "nvif/cl0080.h"
#include "nouveau_winsys.h"
#include "nouveau_screen.h"
@@ -261,13 +261,13 @@ nouveau_pushbuf_destroy(struct nouveau_pushbuf **push)
}
static bool
nouveau_check_for_uma(int chipset, struct nouveau_object *obj)
nouveau_check_for_uma(int chipset, struct nouveau_device *dev)
{
struct nv_device_info_v0 info = {
.version = 0,
};
nouveau_object_mthd(obj, NV_DEVICE_V0_INFO, &info, sizeof(info));
nouveau_device_info(dev, &info);
return (info.platform == NV_DEVICE_INFO_V0_IGP) || (info.platform == NV_DEVICE_INFO_V0_SOC);
}
@@ -286,6 +286,7 @@ nouveau_screen_init(struct nouveau_screen *screen, struct nouveau_device *dev)
struct pipe_screen *pscreen = &screen->base;
struct nv04_fifo nv04_data = { .vram = 0xbeef0201, .gart = 0xbeef0202 };
struct nvc0_fifo nvc0_data = { };
struct nve0_fifo nve0_data = { .engine = NOUVEAU_FIFO_ENGINE_GR };
uint64_t time;
int size, ret;
void *data;
@@ -313,9 +314,12 @@ nouveau_screen_init(struct nouveau_screen *screen, struct nouveau_device *dev)
if (dev->chipset < 0xc0) {
data = &nv04_data;
size = sizeof(nv04_data);
} else {
} else if (dev->chipset < 0xe0) {
data = &nvc0_data;
size = sizeof(nvc0_data);
} else {
data = &nve0_data;
size = sizeof(nve0_data);
}
bool enable_svm = debug_get_bool_option("NOUVEAU_SVM", false);
@@ -432,7 +436,7 @@ nouveau_screen_init(struct nouveau_screen *screen, struct nouveau_device *dev)
PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_STREAM_OUTPUT |
PIPE_BIND_COMMAND_ARGS_BUFFER;
screen->is_uma = nouveau_check_for_uma(dev->chipset, &dev->object);
screen->is_uma = nouveau_check_for_uma(dev->chipset, dev);
memset(&mm_config, 0, sizeof(mm_config));
nouveau_fence_list_init(&screen->fence);

View File

@@ -394,7 +394,7 @@ firmware_present(struct pipe_screen *pscreen, enum pipe_video_profile profile)
struct nouveau_object *channel = NULL, *bsp = NULL;
struct nv04_fifo nv04_data = {.vram = 0xbeef0201, .gart = 0xbeef0202};
struct nvc0_fifo nvc0_args = {};
struct nve0_fifo nve0_args = {.engine = NVE0_FIFO_ENGINE_BSP};
struct nve0_fifo nve0_args = {.engine = NOUVEAU_FIFO_ENGINE_BSP};
void *data = NULL;
int size;

View File

@@ -20,7 +20,7 @@
* OTHER DEALINGS IN THE SOFTWARE.
*/
#include <nouveau.h>
#include "nouveau_winsys.h"
#include "pipe/p_defines.h"
#include "vl/vl_video_buffer.h"

View File

@@ -8,8 +8,7 @@
#include "util/os_misc.h"
#include "drm-uapi/drm.h"
#include <nouveau.h>
#include "nouveau.h"
#include "nouveau_screen.h"
#ifndef NV04_PFIFO_MAX_PACKET_LEN

View File

@@ -24,7 +24,7 @@
*/
#include <xf86drm.h>
#include <nouveau_drm.h>
#include "drm-uapi/nouveau_drm.h"
#include "util/format/u_format.h"
#include "util/format/u_format_s3tc.h"
#include "util/u_screen.h"
@@ -719,7 +719,7 @@ nv30_screen_create(struct nouveau_device *dev)
nouveau_heap_init(&screen->vp_data_heap, 6, 468 - 6);
}
ret = nouveau_bo_wrap(screen->base.device, fifo->notify, &screen->notify);
ret = nouveau_bo_wrap(screen->base.device, fifo->base.notify, &screen->notify);
if (ret == 0)
ret = BO_MAP(&screen->base, screen->notify, 0, screen->base.client);
if (ret)

View File

@@ -440,8 +440,8 @@ out_err:
void
nv50_bufctx_fence(struct nv50_context *nv50, struct nouveau_bufctx *bufctx, bool on_flush)
{
struct nouveau_list *list = on_flush ? &bufctx->current : &bufctx->pending;
struct nouveau_list *it;
struct list_head *list = on_flush ? &bufctx->current : &bufctx->pending;
struct list_head *it;
for (it = list->next; it != list; it = it->next) {
struct nouveau_bufref *ref = (struct nouveau_bufref *)it;

View File

@@ -22,7 +22,7 @@
#include <errno.h>
#include <xf86drm.h>
#include <nouveau_drm.h>
#include "drm-uapi/nouveau_drm.h"
#include "util/format/u_format.h"
#include "util/format/u_format_s3tc.h"
#include "util/u_screen.h"

View File

@@ -30,7 +30,7 @@
#include "xf86drm.h"
#include "nouveau_drm.h"
#include "drm-uapi/nouveau_drm.h"
static void
@@ -578,8 +578,8 @@ void
nvc0_bufctx_fence(struct nvc0_context *nvc0, struct nouveau_bufctx *bufctx,
bool on_flush)
{
struct nouveau_list *list = on_flush ? &bufctx->current : &bufctx->pending;
struct nouveau_list *it;
struct list_head *list = on_flush ? &bufctx->current : &bufctx->pending;
struct list_head *it;
NOUVEAU_DRV_STAT_IFD(unsigned count = 0);
for (it = list->next; it != list; it = it->next) {

View File

@@ -21,7 +21,7 @@
*/
#include <xf86drm.h>
#include <nouveau_drm.h>
#include "drm-uapi/nouveau_drm.h"
#include <nvif/class.h>
#include "util/format/u_format.h"
#include "util/format/u_format_s3tc.h"

View File

@@ -143,9 +143,9 @@ nvc0_create_decoder(struct pipe_context *context,
data = &nvc0_args;
} else {
unsigned engine[] = {
NVE0_FIFO_ENGINE_BSP,
NVE0_FIFO_ENGINE_VP,
NVE0_FIFO_ENGINE_PPP
NOUVEAU_FIFO_ENGINE_BSP,
NOUVEAU_FIFO_ENGINE_VP,
NOUVEAU_FIFO_ENGINE_PPP
};
nve0_args.engine = engine[i];

View File

@@ -18,12 +18,35 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
files_libnouveauwinsys = files(
'nouveau.h',
'nouveau.c',
'nouveau_drm_public.h',
'nouveau_drm_winsys.c',
)
libnouveauwinsys = static_library(
'nouveauwinsys',
files('nouveau_drm_public.h', 'nouveau_drm_winsys.c'),
files_libnouveauwinsys,
include_directories : [
inc_src, inc_include, inc_gallium, inc_gallium_aux, inc_gallium_drivers,
inc_src,
inc_include,
inc_nouveau_drm,
inc_gallium,
inc_gallium_aux,
inc_gallium_drivers,
],
c_args: [
cc.get_supported_arguments('-Wno-gnu-variable-sized-type-not-at-end')
],
gnu_symbol_visibility : 'hidden',
dependencies : [dep_libdrm_nouveau, idep_mesautil],
dependencies : [dep_libdrm, idep_mesautil],
)
idep_libnouveauwinsys = declare_dependency(
include_directories : [
include_directories('.'),
inc_nouveau_drm,
],
link_with : [libnouveauwinsys],
)

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,204 @@
#ifndef NOUVEAU_H
#define NOUVEAU_H
#include <stdbool.h>
#include <stdint.h>
#include "util/list.h"
#include "drm-uapi/nouveau_drm.h"
#define NOUVEAU_FIFO_CHANNEL_CLASS 0x80000001
#define NOUVEAU_NOTIFIER_CLASS 0x80000002
#define NOUVEAU_BO_VRAM 0x00000001
#define NOUVEAU_BO_GART 0x00000002
#define NOUVEAU_BO_APER (NOUVEAU_BO_VRAM | NOUVEAU_BO_GART)
#define NOUVEAU_BO_RD 0x00000100
#define NOUVEAU_BO_WR 0x00000200
#define NOUVEAU_BO_RDWR (NOUVEAU_BO_RD | NOUVEAU_BO_WR)
#define NOUVEAU_BO_NOBLOCK 0x00000400
#define NOUVEAU_BO_LOW 0x00001000
#define NOUVEAU_BO_OR 0x00004000
#define NOUVEAU_BO_COHERENT 0x10000000
#define NOUVEAU_BO_NOSNOOP 0x20000000
#define NOUVEAU_BO_CONTIG 0x40000000
#define NOUVEAU_BO_MAP 0x80000000
struct nouveau_mclass {
int32_t oclass;
int version;
};
struct nouveau_object {
struct nouveau_object *parent;
uint64_t handle;
uint32_t oclass;
void *data;
};
struct nouveau_drm {
struct nouveau_object client;
int fd;
uint32_t version;
};
struct nouveau_device {
struct nouveau_object object;
uint32_t chipset;
uint64_t vram_size;
uint64_t gart_size;
uint64_t vram_limit;
uint64_t gart_limit;
};
struct nouveau_client {
struct nouveau_device *device;
int id;
};
union nouveau_bo_config {
struct {
uint32_t memtype;
uint32_t tile_mode;
} nv50;
struct {
uint32_t memtype;
uint32_t tile_mode;
} nvc0;
};
struct nouveau_bo {
struct nouveau_device *device;
uint32_t handle;
uint64_t size;
uint32_t flags;
uint64_t offset;
void *map;
union nouveau_bo_config config;
};
struct nouveau_bufref {
struct list_head thead;
struct nouveau_bo *bo;
uint32_t packet;
uint32_t flags;
uint32_t data;
uint32_t vor;
uint32_t tor;
uint32_t priv_data;
void *priv;
};
struct nouveau_bufctx {
struct nouveau_client *client;
struct list_head head;
struct list_head pending;
struct list_head current;
int relocs;
};
struct nouveau_pushbuf {
struct nouveau_client *client;
struct nouveau_object *channel;
struct nouveau_bufctx *bufctx;
void (*kick_notify)(struct nouveau_pushbuf *);
void *user_priv;
uint32_t rsvd_kick;
uint32_t flags;
uint32_t *cur;
uint32_t *end;
};
struct nouveau_pushbuf_refn {
struct nouveau_bo *bo;
uint32_t flags;
};
struct nouveau_fifo {
uint32_t pushbuf;
uint32_t notify;
};
struct nv04_fifo {
struct nouveau_fifo base;
uint32_t vram;
uint32_t gart;
};
struct nv04_notify {
uint32_t offset;
uint32_t length;
};
struct nvc0_fifo {
struct nouveau_fifo base;
};
struct nve0_fifo {
struct nouveau_fifo base;
uint32_t engine;
};
int nouveau_drm_new(int fd, struct nouveau_drm **);
void nouveau_drm_del(struct nouveau_drm **);
static inline struct nouveau_drm *
nouveau_drm(struct nouveau_object *obj)
{
while (obj && obj->parent)
obj = obj->parent;
return (struct nouveau_drm *)obj;
}
struct nv_device_info_v0;
int nouveau_device_new(struct nouveau_object *parent, struct nouveau_device **);
void nouveau_device_del(struct nouveau_device **);
int nouveau_device_info(struct nouveau_device *, struct nv_device_info_v0 *);
int nouveau_getparam(struct nouveau_device *, uint64_t param, uint64_t *value);
int nouveau_client_new(struct nouveau_device *, struct nouveau_client **);
void nouveau_client_del(struct nouveau_client **);
int nouveau_object_new(struct nouveau_object *parent, uint64_t handle, uint32_t oclass, void *data,
uint32_t length, struct nouveau_object **);
void nouveau_object_del(struct nouveau_object **);
int nouveau_object_mclass(struct nouveau_object *, const struct nouveau_mclass *);
int nouveau_bo_new(struct nouveau_device *, uint32_t flags, uint32_t align, uint64_t size,
union nouveau_bo_config *, struct nouveau_bo **);
int nouveau_bo_map(struct nouveau_bo *, uint32_t access, struct nouveau_client *);
int nouveau_bo_name_get(struct nouveau_bo *, uint32_t *name);
int nouveau_bo_name_ref(struct nouveau_device *, uint32_t name, struct nouveau_bo **);
int nouveau_bo_prime_handle_ref(struct nouveau_device *, int prime_fd, struct nouveau_bo **);
void nouveau_bo_ref(struct nouveau_bo *, struct nouveau_bo **);
int nouveau_bo_set_prime(struct nouveau_bo *, int *prime_fd);
int nouveau_bo_wait(struct nouveau_bo *, uint32_t access, struct nouveau_client *);
int nouveau_bo_wrap(struct nouveau_device *, uint32_t handle, struct nouveau_bo **);
int nouveau_bufctx_new(struct nouveau_client *, int bins, struct nouveau_bufctx **);
void nouveau_bufctx_del(struct nouveau_bufctx **);
struct nouveau_bufref *
nouveau_bufctx_refn(struct nouveau_bufctx *, int bin, struct nouveau_bo *, uint32_t flags);
struct nouveau_bufref *
nouveau_bufctx_mthd(struct nouveau_bufctx *, int bin, uint32_t packet, struct nouveau_bo *,
uint64_t data, uint32_t flags, uint32_t vor, uint32_t tor);
void nouveau_bufctx_reset(struct nouveau_bufctx *, int bin);
int nouveau_pushbuf_new(struct nouveau_client *, struct nouveau_object *chan, int nr, uint32_t size,
bool immediate, struct nouveau_pushbuf **);
void nouveau_pushbuf_del(struct nouveau_pushbuf **);
struct nouveau_bufctx *
nouveau_pushbuf_bufctx(struct nouveau_pushbuf *, struct nouveau_bufctx *);
void nouveau_pushbuf_data(struct nouveau_pushbuf *, struct nouveau_bo *, uint64_t offset,
uint64_t length);
int nouveau_pushbuf_kick(struct nouveau_pushbuf *, struct nouveau_object *chan);
int nouveau_pushbuf_refn(struct nouveau_pushbuf *, struct nouveau_pushbuf_refn *, int nr);
void nouveau_pushbuf_reloc(struct nouveau_pushbuf *, struct nouveau_bo *, uint32_t data,
uint32_t flags, uint32_t vor, uint32_t tor);
int nouveau_pushbuf_space(struct nouveau_pushbuf *, uint32_t dwords, uint32_t relocs,
uint32_t pushes);
int nouveau_pushbuf_validate(struct nouveau_pushbuf *);
#endif

View File

@@ -17,8 +17,8 @@
#include "nouveau/nouveau_winsys.h"
#include "nouveau/nouveau_screen.h"
#include <nvif/class.h>
#include <nvif/cl0080.h>
#include "nvif/class.h"
#include "nvif/cl0080.h"
static struct hash_table *fd_tab = NULL;
@@ -79,10 +79,7 @@ nouveau_drm_screen_create(int fd)
if (ret)
goto err;
ret = nouveau_device_new(&drm->client, NV_DEVICE,
&(struct nv_device_v0) {
.device = ~0ULL,
}, sizeof(struct nv_device_v0), &dev);
ret = nouveau_device_new(&drm->client, &dev);
if (ret)
goto err;

View File

@@ -0,0 +1 @@
inc_nouveau_drm = include_directories('.')

View File

@@ -0,0 +1,45 @@
#ifndef __NVIF_CL0080_H__
#define __NVIF_CL0080_H__
struct nv_device_v0 {
__u8 version;
__u8 pad01[7];
__u64 device; /* device identifier, ~0 for client default */
};
#define NV_DEVICE_V0_INFO 0x00
#define NV_DEVICE_V0_TIME 0x01
struct nv_device_info_v0 {
__u8 version;
#define NV_DEVICE_INFO_V0_IGP 0x00
#define NV_DEVICE_INFO_V0_PCI 0x01
#define NV_DEVICE_INFO_V0_AGP 0x02
#define NV_DEVICE_INFO_V0_PCIE 0x03
#define NV_DEVICE_INFO_V0_SOC 0x04
__u8 platform;
__u16 chipset; /* from NV_PMC_BOOT_0 */
__u8 revision; /* from NV_PMC_BOOT_0 */
#define NV_DEVICE_INFO_V0_TNT 0x01
#define NV_DEVICE_INFO_V0_CELSIUS 0x02
#define NV_DEVICE_INFO_V0_KELVIN 0x03
#define NV_DEVICE_INFO_V0_RANKINE 0x04
#define NV_DEVICE_INFO_V0_CURIE 0x05
#define NV_DEVICE_INFO_V0_TESLA 0x06
#define NV_DEVICE_INFO_V0_FERMI 0x07
#define NV_DEVICE_INFO_V0_KEPLER 0x08
#define NV_DEVICE_INFO_V0_MAXWELL 0x09
__u8 family;
__u8 pad06[2];
__u64 ram_size;
__u64 ram_user;
char chip[16];
char name[64];
};
struct nv_device_time_v0 {
__u8 version;
__u8 pad01[7];
__u64 time;
};
#endif

View File

@@ -0,0 +1,141 @@
#ifndef __NVIF_CLASS_H__
#define __NVIF_CLASS_H__
/* these class numbers are made up by us, and not nvidia-assigned */
#define NVIF_CLASS_CONTROL /* if0001.h */ -1
#define NVIF_CLASS_PERFMON /* if0002.h */ -2
#define NVIF_CLASS_PERFDOM /* if0003.h */ -3
#define NVIF_CLASS_SW_NV04 /* if0004.h */ -4
#define NVIF_CLASS_SW_NV10 /* if0005.h */ -5
#define NVIF_CLASS_SW_NV50 /* if0005.h */ -6
#define NVIF_CLASS_SW_GF100 /* if0005.h */ -7
/* the below match nvidia-assigned (either in hw, or sw) class numbers */
#define NV_DEVICE /* cl0080.h */ 0x00000080
#define NV_DMA_FROM_MEMORY /* cl0002.h */ 0x00000002
#define NV_DMA_TO_MEMORY /* cl0002.h */ 0x00000003
#define NV_DMA_IN_MEMORY /* cl0002.h */ 0x0000003d
#define FERMI_TWOD_A 0x0000902d
#define FERMI_MEMORY_TO_MEMORY_FORMAT_A 0x00009039
#define KEPLER_INLINE_TO_MEMORY_A 0x0000a040
#define KEPLER_INLINE_TO_MEMORY_B 0x0000a140
#define NV04_DISP /* cl0046.h */ 0x00000046
#define NV03_CHANNEL_DMA /* cl506b.h */ 0x0000006b
#define NV10_CHANNEL_DMA /* cl506b.h */ 0x0000006e
#define NV17_CHANNEL_DMA /* cl506b.h */ 0x0000176e
#define NV40_CHANNEL_DMA /* cl506b.h */ 0x0000406e
#define NV50_CHANNEL_DMA /* cl506e.h */ 0x0000506e
#define G82_CHANNEL_DMA /* cl826e.h */ 0x0000826e
#define NV50_CHANNEL_GPFIFO /* cl506f.h */ 0x0000506f
#define G82_CHANNEL_GPFIFO /* cl826f.h */ 0x0000826f
#define FERMI_CHANNEL_GPFIFO /* cl906f.h */ 0x0000906f
#define KEPLER_CHANNEL_GPFIFO_A /* cla06f.h */ 0x0000a06f
#define MAXWELL_CHANNEL_GPFIFO_A /* cla06f.h */ 0x0000b06f
#define NV50_DISP /* cl5070.h */ 0x00005070
#define G82_DISP /* cl5070.h */ 0x00008270
#define GT200_DISP /* cl5070.h */ 0x00008370
#define GT214_DISP /* cl5070.h */ 0x00008570
#define GT206_DISP /* cl5070.h */ 0x00008870
#define GF110_DISP /* cl5070.h */ 0x00009070
#define GK104_DISP /* cl5070.h */ 0x00009170
#define GK110_DISP /* cl5070.h */ 0x00009270
#define GM107_DISP /* cl5070.h */ 0x00009470
#define GM204_DISP /* cl5070.h */ 0x00009570
#define NV31_MPEG 0x00003174
#define G82_MPEG 0x00008274
#define NV74_VP2 0x00007476
#define NV50_DISP_CURSOR /* cl507a.h */ 0x0000507a
#define G82_DISP_CURSOR /* cl507a.h */ 0x0000827a
#define GT214_DISP_CURSOR /* cl507a.h */ 0x0000857a
#define GF110_DISP_CURSOR /* cl507a.h */ 0x0000907a
#define GK104_DISP_CURSOR /* cl507a.h */ 0x0000917a
#define NV50_DISP_OVERLAY /* cl507b.h */ 0x0000507b
#define G82_DISP_OVERLAY /* cl507b.h */ 0x0000827b
#define GT214_DISP_OVERLAY /* cl507b.h */ 0x0000857b
#define GF110_DISP_OVERLAY /* cl507b.h */ 0x0000907b
#define GK104_DISP_OVERLAY /* cl507b.h */ 0x0000917b
#define NV50_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000507c
#define G82_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000827c
#define GT200_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000837c
#define GT214_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000857c
#define GF110_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000907c
#define GK104_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000917c
#define GK110_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000927c
#define NV50_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000507d
#define G82_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000827d
#define GT200_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000837d
#define GT214_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000857d
#define GT206_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000887d
#define GF110_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000907d
#define GK104_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000917d
#define GK110_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000927d
#define GM107_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000947d
#define GM204_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000957d
#define NV50_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000507e
#define G82_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000827e
#define GT200_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000837e
#define GT214_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000857e
#define GF110_DISP_OVERLAY_CONTROL_DMA /* cl507e.h */ 0x0000907e
#define GK104_DISP_OVERLAY_CONTROL_DMA /* cl507e.h */ 0x0000917e
#define FERMI_A /* cl9097.h */ 0x00009097
#define FERMI_B /* cl9097.h */ 0x00009197
#define FERMI_C /* cl9097.h */ 0x00009297
#define KEPLER_A /* cl9097.h */ 0x0000a097
#define KEPLER_B /* cl9097.h */ 0x0000a197
#define KEPLER_C /* cl9097.h */ 0x0000a297
#define MAXWELL_A /* cl9097.h */ 0x0000b097
#define MAXWELL_B /* cl9097.h */ 0x0000b197
#define NV74_BSP 0x000074b0
#define GT212_MSVLD 0x000085b1
#define IGT21A_MSVLD 0x000086b1
#define G98_MSVLD 0x000088b1
#define GF100_MSVLD 0x000090b1
#define GK104_MSVLD 0x000095b1
#define GT212_MSPDEC 0x000085b2
#define G98_MSPDEC 0x000088b2
#define GF100_MSPDEC 0x000090b2
#define GK104_MSPDEC 0x000095b2
#define GT212_MSPPP 0x000085b3
#define G98_MSPPP 0x000088b3
#define GF100_MSPPP 0x000090b3
#define G98_SEC 0x000088b4
#define GT212_DMA 0x000085b5
#define FERMI_DMA 0x000090b5
#define KEPLER_DMA_COPY_A 0x0000a0b5
#define MAXWELL_DMA_COPY_A 0x0000b0b5
#define FERMI_DECOMPRESS 0x000090b8
#define FERMI_COMPUTE_A 0x000090c0
#define FERMI_COMPUTE_B 0x000091c0
#define KEPLER_COMPUTE_A 0x0000a0c0
#define KEPLER_COMPUTE_B 0x0000a1c0
#define MAXWELL_COMPUTE_A 0x0000b0c0
#define MAXWELL_COMPUTE_B 0x0000b1c0
#define NV74_CIPHER 0x000074c1
#endif

View File

@@ -18,6 +18,7 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
subdir('drm')
subdir('headers')
if with_nouveau_vk
subdir('compiler')

View File

@@ -13,11 +13,11 @@ libnouveau_ws = static_library(
include_directories : [
inc_include,
inc_src,
inc_nouveau_drm,
],
c_args: [ cc.get_supported_arguments('-Wno-gnu-variable-sized-type-not-at-end') ],
dependencies : [
dep_libdrm,
dep_libdrm_nouveau,
dep_valgrind,
idep_nvidia_headers,
],

View File

@@ -12,8 +12,8 @@
#include <fcntl.h>
#include <nouveau/nvif/ioctl.h>
#include <nvif/cl0080.h>
#include <nvif/class.h>
#include "nvif/cl0080.h"
#include "nvif/class.h"
#include <unistd.h>
#include <xf86drm.h>