You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
drm/nouveau/nvif: modify nvif_unvers/nvif_unpack macros to be more obvious
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
@@ -1,24 +1,28 @@
|
||||
#ifndef __NVIF_UNPACK_H__
|
||||
#define __NVIF_UNPACK_H__
|
||||
|
||||
#define nvif_unvers(d) ({ \
|
||||
ret = (size == sizeof(d)) ? 0 : -ENOSYS; \
|
||||
(ret == 0); \
|
||||
#define nvif_unvers(r,d,s,m) ({ \
|
||||
void **_data = (d); __u32 *_size = (s); int _ret = (r); \
|
||||
if (_ret == -ENOSYS && *_size == sizeof(m)) { \
|
||||
*_data = NULL; \
|
||||
*_size = _ret = 0; \
|
||||
} \
|
||||
_ret; \
|
||||
})
|
||||
|
||||
#define nvif_unpack(d,vl,vh,m) ({ \
|
||||
if ((vl) == 0 || ret == -ENOSYS) { \
|
||||
int _size = sizeof(d); \
|
||||
if (_size <= size && (d).version >= (vl) && \
|
||||
(d).version <= (vh)) { \
|
||||
data = (u8 *)data + _size; \
|
||||
size = size - _size; \
|
||||
ret = ((m) || !size) ? 0 : -E2BIG; \
|
||||
} else { \
|
||||
ret = -ENOSYS; \
|
||||
#define nvif_unpack(r,d,s,m,vl,vh,x) ({ \
|
||||
void **_data = (d); __u32 *_size = (s); \
|
||||
int _ret = (r), _vl = (vl), _vh = (vh); \
|
||||
if (_ret == -ENOSYS && *_size >= sizeof(m) && \
|
||||
(m).version >= _vl && (m).version <= _vh) { \
|
||||
*_data = (__u8 *)*_data + sizeof(m); \
|
||||
*_size = *_size - sizeof(m); \
|
||||
if (_ret = 0, !(x)) { \
|
||||
_ret = *_size ? -E2BIG : 0; \
|
||||
*_data = NULL; \
|
||||
*_size = 0; \
|
||||
} \
|
||||
} \
|
||||
(ret == 0); \
|
||||
_ret; \
|
||||
})
|
||||
|
||||
#endif
|
||||
|
||||
@@ -357,9 +357,9 @@ nouveau_abi16_usif(struct drm_file *file_priv, void *data, u32 size)
|
||||
} *args = data;
|
||||
struct nouveau_abi16_chan *chan;
|
||||
struct nouveau_abi16 *abi16;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
if (nvif_unpack(args->v0, 0, 0, true)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) {
|
||||
switch (args->v0.type) {
|
||||
case NVIF_IOCTL_V0_NEW:
|
||||
case NVIF_IOCTL_V0_MTHD:
|
||||
|
||||
@@ -130,20 +130,21 @@ usif_notify_new(struct drm_file *f, void *data, u32 size, void *argv, u32 argc)
|
||||
struct nvif_notify_req_v0 v0;
|
||||
} *req;
|
||||
struct usif_notify *ntfy;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
if (nvif_unpack(args->v0, 0, 0, true)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) {
|
||||
if (usif_notify_find(f, args->v0.index))
|
||||
return -EEXIST;
|
||||
} else
|
||||
return ret;
|
||||
req = data;
|
||||
ret = -ENOSYS;
|
||||
|
||||
if (!(ntfy = kmalloc(sizeof(*ntfy), GFP_KERNEL)))
|
||||
return -ENOMEM;
|
||||
atomic_set(&ntfy->enabled, 0);
|
||||
|
||||
if (nvif_unpack(req->v0, 0, 0, true)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, req->v0, 0, 0, true))) {
|
||||
ntfy->reply = sizeof(struct nvif_notify_rep_v0) + req->v0.reply;
|
||||
ntfy->route = req->v0.route;
|
||||
ntfy->token = req->v0.token;
|
||||
@@ -171,9 +172,9 @@ usif_notify_del(struct drm_file *f, void *data, u32 size, void *argv, u32 argc)
|
||||
struct nvif_ioctl_ntfy_del_v0 v0;
|
||||
} *args = data;
|
||||
struct usif_notify *ntfy;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
if (nvif_unpack(args->v0, 0, 0, true)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) {
|
||||
if (!(ntfy = usif_notify_find(f, args->v0.index)))
|
||||
return -ENOENT;
|
||||
} else
|
||||
@@ -194,9 +195,9 @@ usif_notify_get(struct drm_file *f, void *data, u32 size, void *argv, u32 argc)
|
||||
struct nvif_ioctl_ntfy_del_v0 v0;
|
||||
} *args = data;
|
||||
struct usif_notify *ntfy;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
if (nvif_unpack(args->v0, 0, 0, true)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) {
|
||||
if (!(ntfy = usif_notify_find(f, args->v0.index)))
|
||||
return -ENOENT;
|
||||
} else
|
||||
@@ -233,9 +234,9 @@ usif_notify_put(struct drm_file *f, void *data, u32 size, void *argv, u32 argc)
|
||||
struct nvif_ioctl_ntfy_put_v0 v0;
|
||||
} *args = data;
|
||||
struct usif_notify *ntfy;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
if (nvif_unpack(args->v0, 0, 0, true)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) {
|
||||
if (!(ntfy = usif_notify_find(f, args->v0.index)))
|
||||
return -ENOENT;
|
||||
} else
|
||||
@@ -270,13 +271,13 @@ usif_object_new(struct drm_file *f, void *data, u32 size, void *argv, u32 argc)
|
||||
struct nvif_ioctl_new_v0 v0;
|
||||
} *args = data;
|
||||
struct usif_object *object;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
if (!(object = kmalloc(sizeof(*object), GFP_KERNEL)))
|
||||
return -ENOMEM;
|
||||
list_add(&object->head, &cli->objects);
|
||||
|
||||
if (nvif_unpack(args->v0, 0, 0, true)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) {
|
||||
object->route = args->v0.route;
|
||||
object->token = args->v0.token;
|
||||
args->v0.route = NVDRM_OBJECT_USIF;
|
||||
@@ -310,7 +311,7 @@ usif_ioctl(struct drm_file *filp, void __user *user, u32 argc)
|
||||
if (ret = -EFAULT, copy_from_user(argv, user, size))
|
||||
goto done;
|
||||
|
||||
if (nvif_unpack(argv->v0, 0, 0, true)) {
|
||||
if (!(ret = nvif_unpack(-ENOSYS, &data, &size, argv->v0, 0, 0, true))) {
|
||||
/* block access to objects not created via this interface */
|
||||
owner = argv->v0.owner;
|
||||
if (argv->v0.object == 0ULL)
|
||||
|
||||
@@ -97,7 +97,7 @@ nvkm_client_notify_new(struct nvkm_object *object,
|
||||
struct nvif_notify_req_v0 v0;
|
||||
} *req = data;
|
||||
u8 index, reply;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
for (index = 0; index < ARRAY_SIZE(client->notify); index++) {
|
||||
if (!client->notify[index])
|
||||
@@ -112,7 +112,7 @@ nvkm_client_notify_new(struct nvkm_object *object,
|
||||
return -ENOMEM;
|
||||
|
||||
nvif_ioctl(object, "notify new size %d\n", size);
|
||||
if (nvif_unpack(req->v0, 0, 0, true)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, req->v0, 0, 0, true))) {
|
||||
nvif_ioctl(object, "notify new vers %d reply %d route %02x "
|
||||
"token %llx\n", req->v0.version,
|
||||
req->v0.reply, req->v0.route, req->v0.token);
|
||||
@@ -144,10 +144,10 @@ nvkm_client_mthd_devlist(struct nvkm_object *object, void *data, u32 size)
|
||||
union {
|
||||
struct nv_client_devlist_v0 v0;
|
||||
} *args = data;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(object, "client devlist size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, true)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) {
|
||||
nvif_ioctl(object, "client devlist vers %d count %d\n",
|
||||
args->v0.version, args->v0.count);
|
||||
if (size == sizeof(args->v0.device[0]) * args->v0.count) {
|
||||
|
||||
@@ -34,10 +34,10 @@ nvkm_ioctl_nop(struct nvkm_object *object, void *data, u32 size)
|
||||
union {
|
||||
struct nvif_ioctl_nop_v0 v0;
|
||||
} *args = data;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(object, "nop size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(object, "nop vers %lld\n", args->v0.version);
|
||||
args->v0.version = NVIF_VERSION_LATEST;
|
||||
}
|
||||
@@ -52,10 +52,10 @@ nvkm_ioctl_sclass(struct nvkm_object *object, void *data, u32 size)
|
||||
struct nvif_ioctl_sclass_v0 v0;
|
||||
} *args = data;
|
||||
struct nvkm_oclass oclass;
|
||||
int ret, i = 0;
|
||||
int ret = -ENOSYS, i = 0;
|
||||
|
||||
nvif_ioctl(object, "sclass size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, true)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) {
|
||||
nvif_ioctl(object, "sclass vers %d count %d\n",
|
||||
args->v0.version, args->v0.count);
|
||||
if (size != args->v0.count * sizeof(args->v0.oclass[0]))
|
||||
@@ -86,10 +86,10 @@ nvkm_ioctl_new(struct nvkm_object *parent, void *data, u32 size)
|
||||
struct nvkm_client *client = parent->client;
|
||||
struct nvkm_object *object = NULL;
|
||||
struct nvkm_oclass oclass;
|
||||
int ret, i = 0;
|
||||
int ret = -ENOSYS, i = 0;
|
||||
|
||||
nvif_ioctl(parent, "new size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, true)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) {
|
||||
nvif_ioctl(parent, "new vers %d handle %08x class %08x "
|
||||
"route %02x token %llx object %016llx\n",
|
||||
args->v0.version, args->v0.handle, args->v0.oclass,
|
||||
@@ -147,10 +147,10 @@ nvkm_ioctl_del(struct nvkm_object *object, void *data, u32 size)
|
||||
union {
|
||||
struct nvif_ioctl_del none;
|
||||
} *args = data;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(object, "delete size %d\n", size);
|
||||
if (nvif_unvers(args->none)) {
|
||||
if (!(ret = nvif_unvers(ret, &data, &size, args->none))) {
|
||||
nvif_ioctl(object, "delete\n");
|
||||
nvkm_object_fini(object, false);
|
||||
nvkm_object_del(&object);
|
||||
@@ -165,10 +165,10 @@ nvkm_ioctl_mthd(struct nvkm_object *object, void *data, u32 size)
|
||||
union {
|
||||
struct nvif_ioctl_mthd_v0 v0;
|
||||
} *args = data;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(object, "mthd size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, true)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) {
|
||||
nvif_ioctl(object, "mthd vers %d mthd %02x\n",
|
||||
args->v0.version, args->v0.method);
|
||||
ret = nvkm_object_mthd(object, args->v0.method, data, size);
|
||||
@@ -189,10 +189,10 @@ nvkm_ioctl_rd(struct nvkm_object *object, void *data, u32 size)
|
||||
u16 b16;
|
||||
u32 b32;
|
||||
} v;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(object, "rd size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(object, "rd vers %d size %d addr %016llx\n",
|
||||
args->v0.version, args->v0.size, args->v0.addr);
|
||||
switch (args->v0.size) {
|
||||
@@ -223,10 +223,10 @@ nvkm_ioctl_wr(struct nvkm_object *object, void *data, u32 size)
|
||||
union {
|
||||
struct nvif_ioctl_wr_v0 v0;
|
||||
} *args = data;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(object, "wr size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(object,
|
||||
"wr vers %d size %d addr %016llx data %08x\n",
|
||||
args->v0.version, args->v0.size, args->v0.addr,
|
||||
@@ -251,10 +251,10 @@ nvkm_ioctl_map(struct nvkm_object *object, void *data, u32 size)
|
||||
union {
|
||||
struct nvif_ioctl_map_v0 v0;
|
||||
} *args = data;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(object, "map size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(object, "map vers %d\n", args->v0.version);
|
||||
ret = nvkm_object_map(object, &args->v0.handle,
|
||||
&args->v0.length);
|
||||
@@ -269,10 +269,10 @@ nvkm_ioctl_unmap(struct nvkm_object *object, void *data, u32 size)
|
||||
union {
|
||||
struct nvif_ioctl_unmap none;
|
||||
} *args = data;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(object, "unmap size %d\n", size);
|
||||
if (nvif_unvers(args->none)) {
|
||||
if (!(ret = nvif_unvers(ret, &data, &size, args->none))) {
|
||||
nvif_ioctl(object, "unmap\n");
|
||||
}
|
||||
|
||||
@@ -286,10 +286,10 @@ nvkm_ioctl_ntfy_new(struct nvkm_object *object, void *data, u32 size)
|
||||
struct nvif_ioctl_ntfy_new_v0 v0;
|
||||
} *args = data;
|
||||
struct nvkm_event *event;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(object, "ntfy new size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, true)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) {
|
||||
nvif_ioctl(object, "ntfy new vers %d event %02x\n",
|
||||
args->v0.version, args->v0.event);
|
||||
ret = nvkm_object_ntfy(object, args->v0.event, &event);
|
||||
@@ -312,10 +312,10 @@ nvkm_ioctl_ntfy_del(struct nvkm_object *object, void *data, u32 size)
|
||||
union {
|
||||
struct nvif_ioctl_ntfy_del_v0 v0;
|
||||
} *args = data;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(object, "ntfy del size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(object, "ntfy del vers %d index %d\n",
|
||||
args->v0.version, args->v0.index);
|
||||
ret = nvkm_client_notify_del(client, args->v0.index);
|
||||
@@ -331,10 +331,10 @@ nvkm_ioctl_ntfy_get(struct nvkm_object *object, void *data, u32 size)
|
||||
union {
|
||||
struct nvif_ioctl_ntfy_get_v0 v0;
|
||||
} *args = data;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(object, "ntfy get size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(object, "ntfy get vers %d index %d\n",
|
||||
args->v0.version, args->v0.index);
|
||||
ret = nvkm_client_notify_get(client, args->v0.index);
|
||||
@@ -350,10 +350,10 @@ nvkm_ioctl_ntfy_put(struct nvkm_object *object, void *data, u32 size)
|
||||
union {
|
||||
struct nvif_ioctl_ntfy_put_v0 v0;
|
||||
} *args = data;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(object, "ntfy put size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(object, "ntfy put vers %d index %d\n",
|
||||
args->v0.version, args->v0.index);
|
||||
ret = nvkm_client_notify_put(client, args->v0.index);
|
||||
@@ -421,12 +421,12 @@ nvkm_ioctl(struct nvkm_client *client, bool supervisor,
|
||||
union {
|
||||
struct nvif_ioctl_v0 v0;
|
||||
} *args = data;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
client->super = supervisor;
|
||||
nvif_ioctl(object, "size %d\n", size);
|
||||
|
||||
if (nvif_unpack(args->v0, 0, 0, true)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) {
|
||||
nvif_ioctl(object,
|
||||
"vers %d type %02x object %016llx owner %02x\n",
|
||||
args->v0.version, args->v0.type, args->v0.object,
|
||||
|
||||
@@ -38,10 +38,10 @@ nvkm_control_mthd_pstate_info(struct nvkm_control *ctrl, void *data, u32 size)
|
||||
struct nvif_control_pstate_info_v0 v0;
|
||||
} *args = data;
|
||||
struct nvkm_clk *clk = ctrl->device->clk;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(&ctrl->object, "control pstate info size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(&ctrl->object, "control pstate info vers %d\n",
|
||||
args->v0.version);
|
||||
} else
|
||||
@@ -76,10 +76,10 @@ nvkm_control_mthd_pstate_attr(struct nvkm_control *ctrl, void *data, u32 size)
|
||||
struct nvkm_cstate *cstate;
|
||||
int i = 0, j = -1;
|
||||
u32 lo, hi;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(&ctrl->object, "control pstate attr size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(&ctrl->object,
|
||||
"control pstate attr vers %d state %d index %d\n",
|
||||
args->v0.version, args->v0.state, args->v0.index);
|
||||
@@ -144,10 +144,10 @@ nvkm_control_mthd_pstate_user(struct nvkm_control *ctrl, void *data, u32 size)
|
||||
struct nvif_control_pstate_user_v0 v0;
|
||||
} *args = data;
|
||||
struct nvkm_clk *clk = ctrl->device->clk;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(&ctrl->object, "control pstate user size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(&ctrl->object,
|
||||
"control pstate user vers %d ustate %d pwrsrc %d\n",
|
||||
args->v0.version, args->v0.ustate, args->v0.pwrsrc);
|
||||
|
||||
@@ -49,10 +49,10 @@ nvkm_udevice_info(struct nvkm_udevice *udev, void *data, u32 size)
|
||||
union {
|
||||
struct nv_device_info_v0 v0;
|
||||
} *args = data;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(object, "device info size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(object, "device info vers %d\n", args->v0.version);
|
||||
} else
|
||||
return ret;
|
||||
@@ -124,13 +124,16 @@ nvkm_udevice_info(struct nvkm_udevice *udev, void *data, u32 size)
|
||||
static int
|
||||
nvkm_udevice_time(struct nvkm_udevice *udev, void *data, u32 size)
|
||||
{
|
||||
struct nvkm_object *object = &udev->object;
|
||||
struct nvkm_device *device = udev->device;
|
||||
union {
|
||||
struct nv_device_time_v0 v0;
|
||||
} *args = data;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
nvif_ioctl(object, "device time size %d\n", size);
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(object, "device time vers %d\n", args->v0.version);
|
||||
args->v0.time = nvkm_timer_read(device->timer);
|
||||
}
|
||||
|
||||
@@ -141,6 +144,7 @@ static int
|
||||
nvkm_udevice_mthd(struct nvkm_object *object, u32 mthd, void *data, u32 size)
|
||||
{
|
||||
struct nvkm_udevice *udev = nvkm_udevice(object);
|
||||
nvif_ioctl(object, "device mthd %08x\n", mthd);
|
||||
switch (mthd) {
|
||||
case NV_DEVICE_V0_INFO:
|
||||
return nvkm_udevice_info(udev, data, size);
|
||||
@@ -332,10 +336,10 @@ nvkm_udevice_new(const struct nvkm_oclass *oclass, void *data, u32 size,
|
||||
struct nvkm_object *parent = &client->object;
|
||||
const struct nvkm_object_func *func;
|
||||
struct nvkm_udevice *udev;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(parent, "create device size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(parent, "create device v%d device %016llx\n",
|
||||
args->v0.version, args->v0.device);
|
||||
} else
|
||||
|
||||
@@ -59,9 +59,9 @@ nvkm_disp_vblank_ctor(struct nvkm_object *object, void *data, u32 size,
|
||||
union {
|
||||
struct nvif_notify_head_req_v0 v0;
|
||||
} *req = data;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
if (nvif_unpack(req->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, req->v0, 0, 0, false))) {
|
||||
notify->size = sizeof(struct nvif_notify_head_rep_v0);
|
||||
if (ret = -ENXIO, req->v0.head <= disp->vblank.index_nr) {
|
||||
notify->types = 1;
|
||||
@@ -97,9 +97,9 @@ nvkm_disp_hpd_ctor(struct nvkm_object *object, void *data, u32 size,
|
||||
struct nvif_notify_conn_req_v0 v0;
|
||||
} *req = data;
|
||||
struct nvkm_output *outp;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
if (nvif_unpack(req->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, req->v0, 0, 0, false))) {
|
||||
notify->size = sizeof(struct nvif_notify_conn_rep_v0);
|
||||
list_for_each_entry(outp, &disp->outp, head) {
|
||||
if (ret = -ENXIO, outp->conn->index == req->v0.conn) {
|
||||
|
||||
@@ -42,11 +42,11 @@ nv50_disp_base_new(const struct nv50_disp_dmac_func *func,
|
||||
} *args = data;
|
||||
struct nvkm_object *parent = oclass->parent;
|
||||
struct nv50_disp *disp = root->disp;
|
||||
int head, ret;
|
||||
int head, ret = -ENOSYS;
|
||||
u64 push;
|
||||
|
||||
nvif_ioctl(parent, "create disp base channel dma size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(parent, "create disp base channel dma vers %d "
|
||||
"pushbuf %016llx head %d\n",
|
||||
args->v0.version, args->v0.pushbuf, args->v0.head);
|
||||
|
||||
@@ -134,9 +134,9 @@ nv50_disp_chan_uevent_ctor(struct nvkm_object *object, void *data, u32 size,
|
||||
union {
|
||||
struct nvif_notify_uevent_req none;
|
||||
} *args = data;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
if (nvif_unvers(args->none)) {
|
||||
if (!(ret = nvif_unvers(ret, &data, &size, args->none))) {
|
||||
notify->size = sizeof(struct nvif_notify_uevent_rep);
|
||||
notify->types = 1;
|
||||
notify->index = chan->chid;
|
||||
|
||||
@@ -43,10 +43,10 @@ nv50_disp_core_new(const struct nv50_disp_dmac_func *func,
|
||||
} *args = data;
|
||||
struct nvkm_object *parent = oclass->parent;
|
||||
u64 push;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(parent, "create disp core channel dma size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(parent, "create disp core channel dma vers %d "
|
||||
"pushbuf %016llx\n",
|
||||
args->v0.version, args->v0.pushbuf);
|
||||
|
||||
@@ -42,10 +42,10 @@ nv50_disp_curs_new(const struct nv50_disp_chan_func *func,
|
||||
} *args = data;
|
||||
struct nvkm_object *parent = oclass->parent;
|
||||
struct nv50_disp *disp = root->disp;
|
||||
int head, ret;
|
||||
int head, ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(parent, "create disp cursor size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(parent, "create disp cursor vers %d head %d\n",
|
||||
args->v0.version, args->v0.head);
|
||||
if (args->v0.head > disp->base.head.nr)
|
||||
|
||||
@@ -39,10 +39,10 @@ nv50_dac_power(NV50_DISP_MTHD_V1)
|
||||
struct nv50_disp_dac_pwr_v0 v0;
|
||||
} *args = data;
|
||||
u32 stat;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(object, "disp dac pwr size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(object, "disp dac pwr vers %d state %d data %d "
|
||||
"vsync %d hsync %d\n",
|
||||
args->v0.version, args->v0.state, args->v0.data,
|
||||
@@ -76,10 +76,10 @@ nv50_dac_sense(NV50_DISP_MTHD_V1)
|
||||
} *args = data;
|
||||
const u32 doff = outp->or * 0x800;
|
||||
u32 loadval;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(object, "disp dac load size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(object, "disp dac load vers %d data %08x\n",
|
||||
args->v0.version, args->v0.data);
|
||||
if (args->v0.data & 0xfff00000)
|
||||
|
||||
@@ -41,10 +41,10 @@ gf119_hda_eld(NV50_DISP_MTHD_V1)
|
||||
} *args = data;
|
||||
const u32 soff = outp->or * 0x030;
|
||||
const u32 hoff = head * 0x800;
|
||||
int ret, i;
|
||||
int ret = -ENOSYS, i;
|
||||
|
||||
nvif_ioctl(object, "disp sor hda eld size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, true)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) {
|
||||
nvif_ioctl(object, "disp sor hda eld vers %d\n",
|
||||
args->v0.version);
|
||||
if (size > 0x60)
|
||||
|
||||
@@ -38,10 +38,10 @@ gt215_hda_eld(NV50_DISP_MTHD_V1)
|
||||
struct nv50_disp_sor_hda_eld_v0 v0;
|
||||
} *args = data;
|
||||
const u32 soff = outp->or * 0x800;
|
||||
int ret, i;
|
||||
int ret = -ENOSYS, i;
|
||||
|
||||
nvif_ioctl(object, "disp sor hda eld size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, true)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) {
|
||||
nvif_ioctl(object, "disp sor hda eld vers %d\n",
|
||||
args->v0.version);
|
||||
if (size > 0x60)
|
||||
|
||||
@@ -37,10 +37,10 @@ g84_hdmi_ctrl(NV50_DISP_MTHD_V1)
|
||||
struct nv50_disp_sor_hdmi_pwr_v0 v0;
|
||||
} *args = data;
|
||||
u32 ctrl;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(object, "disp sor hdmi ctrl size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(object, "disp sor hdmi ctrl vers %d state %d "
|
||||
"max_ac_packet %d rekey %d\n",
|
||||
args->v0.version, args->v0.state,
|
||||
|
||||
@@ -37,10 +37,10 @@ gf119_hdmi_ctrl(NV50_DISP_MTHD_V1)
|
||||
struct nv50_disp_sor_hdmi_pwr_v0 v0;
|
||||
} *args = data;
|
||||
u32 ctrl;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(object, "disp sor hdmi ctrl size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(object, "disp sor hdmi ctrl vers %d state %d "
|
||||
"max_ac_packet %d rekey %d\n",
|
||||
args->v0.version, args->v0.state,
|
||||
|
||||
@@ -38,10 +38,10 @@ gk104_hdmi_ctrl(NV50_DISP_MTHD_V1)
|
||||
struct nv50_disp_sor_hdmi_pwr_v0 v0;
|
||||
} *args = data;
|
||||
u32 ctrl;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(object, "disp sor hdmi ctrl size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(object, "disp sor hdmi ctrl vers %d state %d "
|
||||
"max_ac_packet %d rekey %d\n",
|
||||
args->v0.version, args->v0.state,
|
||||
|
||||
@@ -38,10 +38,10 @@ gt215_hdmi_ctrl(NV50_DISP_MTHD_V1)
|
||||
struct nv50_disp_sor_hdmi_pwr_v0 v0;
|
||||
} *args = data;
|
||||
u32 ctrl;
|
||||
int ret;
|
||||
int ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(object, "disp sor hdmi ctrl size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(object, "disp sor hdmi ctrl vers %d state %d "
|
||||
"max_ac_packet %d rekey %d\n",
|
||||
args->v0.version, args->v0.state,
|
||||
|
||||
@@ -42,10 +42,10 @@ nv50_disp_oimm_new(const struct nv50_disp_chan_func *func,
|
||||
} *args = data;
|
||||
struct nvkm_object *parent = oclass->parent;
|
||||
struct nv50_disp *disp = root->disp;
|
||||
int head, ret;
|
||||
int head, ret = -ENOSYS;
|
||||
|
||||
nvif_ioctl(parent, "create disp overlay size %d\n", size);
|
||||
if (nvif_unpack(args->v0, 0, 0, false)) {
|
||||
if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) {
|
||||
nvif_ioctl(parent, "create disp overlay vers %d head %d\n",
|
||||
args->v0.version, args->v0.head);
|
||||
if (args->v0.head > disp->base.head.nr)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user