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:
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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/**/*
|
||||
|
@@ -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],
|
||||
)
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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"
|
||||
|
@@ -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
|
||||
|
@@ -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)
|
||||
|
@@ -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;
|
||||
|
@@ -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"
|
||||
|
@@ -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) {
|
||||
|
@@ -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"
|
||||
|
@@ -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];
|
||||
|
@@ -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],
|
||||
)
|
||||
|
1748
src/gallium/winsys/nouveau/drm/nouveau.c
Normal file
1748
src/gallium/winsys/nouveau/drm/nouveau.c
Normal file
File diff suppressed because it is too large
Load Diff
204
src/gallium/winsys/nouveau/drm/nouveau.h
Normal file
204
src/gallium/winsys/nouveau/drm/nouveau.h
Normal 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
|
@@ -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;
|
||||
|
||||
|
1
src/nouveau/drm/meson.build
Normal file
1
src/nouveau/drm/meson.build
Normal file
@@ -0,0 +1 @@
|
||||
inc_nouveau_drm = include_directories('.')
|
45
src/nouveau/drm/nvif/cl0080.h
Normal file
45
src/nouveau/drm/nvif/cl0080.h
Normal 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
|
141
src/nouveau/drm/nvif/class.h
Normal file
141
src/nouveau/drm/nvif/class.h
Normal 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
|
@@ -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')
|
||||
|
@@ -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,
|
||||
],
|
||||
|
@@ -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>
|
||||
|
||||
|
Reference in New Issue
Block a user