mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-23 11:04:44 +08:00
drm/nouveau/nvif: use negative oclass identifier for internal classes
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
5c15bf709e
commit
315a8b2edf
@ -9,7 +9,7 @@ struct nvif_device {
|
||||
struct nv_device_info_v0 info;
|
||||
};
|
||||
|
||||
int nvif_device_init(struct nvif_object *, u32 handle, u32 oclass, void *, u32,
|
||||
int nvif_device_init(struct nvif_object *, u32 handle, s32 oclass, void *, u32,
|
||||
struct nvif_device *);
|
||||
void nvif_device_fini(struct nvif_device *);
|
||||
u64 nvif_device_time(struct nvif_device *);
|
||||
|
@ -40,7 +40,7 @@ struct nvif_ioctl_sclass_v0 {
|
||||
__u8 version;
|
||||
__u8 count;
|
||||
__u8 pad02[6];
|
||||
__u32 oclass[];
|
||||
__s32 oclass[];
|
||||
};
|
||||
|
||||
struct nvif_ioctl_new_v0 {
|
||||
@ -52,10 +52,10 @@ struct nvif_ioctl_new_v0 {
|
||||
__u64 object;
|
||||
__u32 handle;
|
||||
/* these class numbers are made up by us, and not nvidia-assigned */
|
||||
#define NVIF_IOCTL_NEW_V0_PERFMON 0x0000ffff
|
||||
#define NVIF_IOCTL_NEW_V0_PERFDOM 0x0000fffe
|
||||
#define NVIF_IOCTL_NEW_V0_CONTROL 0x0000fffd
|
||||
__u32 oclass;
|
||||
#define NVIF_IOCTL_NEW_V0_CONTROL -1
|
||||
#define NVIF_IOCTL_NEW_V0_PERFMON -2
|
||||
#define NVIF_IOCTL_NEW_V0_PERFDOM -3
|
||||
__s32 oclass;
|
||||
__u8 data[]; /* class data (class.h) */
|
||||
};
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
struct nvif_object {
|
||||
struct nvif_client *client;
|
||||
u32 handle;
|
||||
u32 oclass;
|
||||
s32 oclass;
|
||||
void *priv; /*XXX: hack */
|
||||
struct {
|
||||
void __iomem *ptr;
|
||||
@ -14,11 +14,11 @@ struct nvif_object {
|
||||
} map;
|
||||
};
|
||||
|
||||
int nvif_object_init(struct nvif_object *, u32 handle, u32 oclass, void *, u32,
|
||||
int nvif_object_init(struct nvif_object *, u32 handle, s32 oclass, void *, u32,
|
||||
struct nvif_object *);
|
||||
void nvif_object_fini(struct nvif_object *);
|
||||
int nvif_object_ioctl(struct nvif_object *, void *, u32, void **);
|
||||
int nvif_object_sclass(struct nvif_object *, u32 *, int);
|
||||
int nvif_object_sclass(struct nvif_object *, s32 *, int);
|
||||
u32 nvif_object_rd(struct nvif_object *, int, u64);
|
||||
void nvif_object_wr(struct nvif_object *, int, u64, u32);
|
||||
int nvif_object_mthd(struct nvif_object *, u32, void *, u32);
|
||||
|
@ -22,20 +22,11 @@ bool nvkm_client_insert(struct nvkm_client *, struct nvkm_handle *);
|
||||
void nvkm_client_remove(struct nvkm_client *, struct nvkm_handle *);
|
||||
struct nvkm_handle *nvkm_client_search(struct nvkm_client *, u64 handle);
|
||||
|
||||
static inline struct nvkm_client *
|
||||
nv_client(void *obj)
|
||||
{
|
||||
#if CONFIG_NOUVEAU_DEBUG >= NV_DBG_PARANOIA
|
||||
BUG_ON(!nv_iclass(obj, NV_CLIENT_CLASS));
|
||||
#endif
|
||||
return obj;
|
||||
}
|
||||
|
||||
static inline struct nvkm_client *
|
||||
nvkm_client(void *obj)
|
||||
{
|
||||
struct nvkm_object *client = nv_object(obj);
|
||||
while (client && !(nv_iclass(client, NV_CLIENT_CLASS)))
|
||||
while (client && client->parent)
|
||||
client = client->parent;
|
||||
return (void *)client;
|
||||
}
|
||||
|
@ -62,7 +62,7 @@ extern struct nvkm_ofuncs nvkm_object_ofuncs;
|
||||
/* Don't allocate dynamically, because lockdep needs lock_class_keys to be in
|
||||
* ".data". */
|
||||
struct nvkm_oclass {
|
||||
u32 handle;
|
||||
s32 handle;
|
||||
struct nvkm_ofuncs * const ofuncs;
|
||||
struct nvkm_omthds * const omthds;
|
||||
struct lock_class_key lock_class_key;
|
||||
|
@ -44,8 +44,8 @@ void _nvkm_parent_dtor(struct nvkm_object *);
|
||||
#define _nvkm_parent_init nvkm_object_init
|
||||
#define _nvkm_parent_fini nvkm_object_fini
|
||||
|
||||
int nvkm_parent_sclass(struct nvkm_object *, u16 handle,
|
||||
int nvkm_parent_sclass(struct nvkm_object *, s32 handle,
|
||||
struct nvkm_object **pengine,
|
||||
struct nvkm_oclass **poclass);
|
||||
int nvkm_parent_lclass(struct nvkm_object *, u32 *, int);
|
||||
int nvkm_parent_lclass(struct nvkm_object *, s32 *, int);
|
||||
#endif
|
||||
|
@ -1104,7 +1104,7 @@ nouveau_bo_move_init(struct nouveau_drm *drm)
|
||||
static const struct {
|
||||
const char *name;
|
||||
int engine;
|
||||
u32 oclass;
|
||||
s32 oclass;
|
||||
int (*exec)(struct nouveau_channel *,
|
||||
struct ttm_buffer_object *,
|
||||
struct ttm_mem_reg *, struct ttm_mem_reg *);
|
||||
|
@ -153,7 +153,7 @@ nouveau_accel_init(struct nouveau_drm *drm)
|
||||
{
|
||||
struct nvif_device *device = &drm->device;
|
||||
u32 arg0, arg1;
|
||||
u32 sclass[16];
|
||||
s32 sclass[16];
|
||||
int ret, i;
|
||||
|
||||
if (nouveau_noaccel)
|
||||
|
@ -65,11 +65,11 @@ struct nv50_chan {
|
||||
|
||||
static int
|
||||
nv50_chan_create(struct nvif_device *device, struct nvif_object *disp,
|
||||
const u32 *oclass, u8 head, void *data, u32 size,
|
||||
const s32 *oclass, u8 head, void *data, u32 size,
|
||||
struct nv50_chan *chan)
|
||||
{
|
||||
const u32 handle = (oclass[0] << 16) | head;
|
||||
u32 sclass[8];
|
||||
s32 sclass[8];
|
||||
int ret, i;
|
||||
|
||||
chan->device = device;
|
||||
@ -117,7 +117,7 @@ nv50_pioc_destroy(struct nv50_pioc *pioc)
|
||||
|
||||
static int
|
||||
nv50_pioc_create(struct nvif_device *device, struct nvif_object *disp,
|
||||
const u32 *oclass, u8 head, void *data, u32 size,
|
||||
const s32 *oclass, u8 head, void *data, u32 size,
|
||||
struct nv50_pioc *pioc)
|
||||
{
|
||||
return nv50_chan_create(device, disp, oclass, head, data, size,
|
||||
@ -139,7 +139,7 @@ nv50_curs_create(struct nvif_device *device, struct nvif_object *disp,
|
||||
struct nv50_disp_cursor_v0 args = {
|
||||
.head = head,
|
||||
};
|
||||
static const u32 oclass[] = {
|
||||
static const s32 oclass[] = {
|
||||
GK104_DISP_CURSOR,
|
||||
GF110_DISP_CURSOR,
|
||||
GT214_DISP_CURSOR,
|
||||
@ -167,7 +167,7 @@ nv50_oimm_create(struct nvif_device *device, struct nvif_object *disp,
|
||||
struct nv50_disp_cursor_v0 args = {
|
||||
.head = head,
|
||||
};
|
||||
static const u32 oclass[] = {
|
||||
static const s32 oclass[] = {
|
||||
GK104_DISP_OVERLAY,
|
||||
GF110_DISP_OVERLAY,
|
||||
GT214_DISP_OVERLAY,
|
||||
@ -216,7 +216,7 @@ nv50_dmac_destroy(struct nv50_dmac *dmac, struct nvif_object *disp)
|
||||
|
||||
static int
|
||||
nv50_dmac_create(struct nvif_device *device, struct nvif_object *disp,
|
||||
const u32 *oclass, u8 head, void *data, u32 size, u64 syncbuf,
|
||||
const s32 *oclass, u8 head, void *data, u32 size, u64 syncbuf,
|
||||
struct nv50_dmac *dmac)
|
||||
{
|
||||
struct nv50_disp_core_channel_dma_v0 *args = data;
|
||||
@ -288,7 +288,7 @@ nv50_core_create(struct nvif_device *device, struct nvif_object *disp,
|
||||
struct nv50_disp_core_channel_dma_v0 args = {
|
||||
.pushbuf = 0xb0007d00,
|
||||
};
|
||||
static const u32 oclass[] = {
|
||||
static const s32 oclass[] = {
|
||||
GM204_DISP_CORE_CHANNEL_DMA,
|
||||
GM107_DISP_CORE_CHANNEL_DMA,
|
||||
GK110_DISP_CORE_CHANNEL_DMA,
|
||||
@ -324,7 +324,7 @@ nv50_base_create(struct nvif_device *device, struct nvif_object *disp,
|
||||
.pushbuf = 0xb0007c00 | head,
|
||||
.head = head,
|
||||
};
|
||||
static const u32 oclass[] = {
|
||||
static const s32 oclass[] = {
|
||||
GK110_DISP_BASE_CHANNEL_DMA,
|
||||
GK104_DISP_BASE_CHANNEL_DMA,
|
||||
GF110_DISP_BASE_CHANNEL_DMA,
|
||||
@ -355,7 +355,7 @@ nv50_ovly_create(struct nvif_device *device, struct nvif_object *disp,
|
||||
.pushbuf = 0xb0007e00 | head,
|
||||
.head = head,
|
||||
};
|
||||
static const u32 oclass[] = {
|
||||
static const s32 oclass[] = {
|
||||
GK104_DISP_OVERLAY_CONTROL_DMA,
|
||||
GF110_DISP_OVERLAY_CONTROL_DMA,
|
||||
GT214_DISP_OVERLAY_CHANNEL_DMA,
|
||||
|
@ -37,7 +37,7 @@ nvif_device_fini(struct nvif_device *device)
|
||||
}
|
||||
|
||||
int
|
||||
nvif_device_init(struct nvif_object *parent, u32 handle, u32 oclass,
|
||||
nvif_device_init(struct nvif_object *parent, u32 handle, s32 oclass,
|
||||
void *data, u32 size, struct nvif_device *device)
|
||||
{
|
||||
int ret = nvif_object_init(parent, handle, oclass, data, size,
|
||||
|
@ -49,7 +49,7 @@ nvif_object_ioctl(struct nvif_object *object, void *data, u32 size, void **hack)
|
||||
}
|
||||
|
||||
int
|
||||
nvif_object_sclass(struct nvif_object *object, u32 *oclass, int count)
|
||||
nvif_object_sclass(struct nvif_object *object, s32 *oclass, int count)
|
||||
{
|
||||
struct {
|
||||
struct nvif_ioctl_v0 ioctl;
|
||||
@ -65,7 +65,6 @@ nvif_object_sclass(struct nvif_object *object, u32 *oclass, int count)
|
||||
args->sclass.version = 0;
|
||||
args->sclass.count = count;
|
||||
|
||||
memcpy(args->sclass.oclass, oclass, size);
|
||||
ret = nvif_object_ioctl(object, args, sizeof(*args) + size, NULL);
|
||||
ret = ret ? ret : args->sclass.count;
|
||||
memcpy(oclass, args->sclass.oclass, size);
|
||||
@ -203,7 +202,7 @@ nvif_object_fini(struct nvif_object *object)
|
||||
}
|
||||
|
||||
int
|
||||
nvif_object_init(struct nvif_object *parent, u32 handle, u32 oclass,
|
||||
nvif_object_init(struct nvif_object *parent, u32 handle, s32 oclass,
|
||||
void *data, u32 size, struct nvif_object *object)
|
||||
{
|
||||
struct {
|
||||
|
@ -26,7 +26,7 @@
|
||||
#include <core/engine.h>
|
||||
|
||||
int
|
||||
nvkm_parent_sclass(struct nvkm_object *parent, u16 handle,
|
||||
nvkm_parent_sclass(struct nvkm_object *parent, s32 handle,
|
||||
struct nvkm_object **pengine,
|
||||
struct nvkm_oclass **poclass)
|
||||
{
|
||||
@ -66,7 +66,7 @@ nvkm_parent_sclass(struct nvkm_object *parent, u16 handle,
|
||||
}
|
||||
|
||||
int
|
||||
nvkm_parent_lclass(struct nvkm_object *parent, u32 *lclass, int size)
|
||||
nvkm_parent_lclass(struct nvkm_object *parent, s32 *lclass, int size)
|
||||
{
|
||||
struct nvkm_oclass *sclass, *oclass;
|
||||
struct nvkm_engine *engine;
|
||||
|
Loading…
Reference in New Issue
Block a user