|
@@ -28,24 +28,6 @@
|
|
|
|
|
|
#include <nvif/class.h>
|
|
|
|
|
|
-struct nvkm_dmaobj *
|
|
|
-nvkm_dma_search(struct nvkm_dma *dma, struct nvkm_client *client, u64 object)
|
|
|
-{
|
|
|
- struct rb_node *node = client->dmaroot.rb_node;
|
|
|
- while (node) {
|
|
|
- struct nvkm_dmaobj *dmaobj =
|
|
|
- rb_entry(node, typeof(*dmaobj), rb);
|
|
|
- if (object < dmaobj->handle)
|
|
|
- node = node->rb_left;
|
|
|
- else
|
|
|
- if (object > dmaobj->handle)
|
|
|
- node = node->rb_right;
|
|
|
- else
|
|
|
- return dmaobj;
|
|
|
- }
|
|
|
- return NULL;
|
|
|
-}
|
|
|
-
|
|
|
static int
|
|
|
nvkm_dma_oclass_new(struct nvkm_device *device,
|
|
|
const struct nvkm_oclass *oclass, void *data, u32 size,
|
|
@@ -53,34 +35,12 @@ nvkm_dma_oclass_new(struct nvkm_device *device,
|
|
|
{
|
|
|
struct nvkm_dma *dma = nvkm_dma(oclass->engine);
|
|
|
struct nvkm_dmaobj *dmaobj = NULL;
|
|
|
- struct nvkm_client *client = oclass->client;
|
|
|
- struct rb_node **ptr = &client->dmaroot.rb_node;
|
|
|
- struct rb_node *parent = NULL;
|
|
|
int ret;
|
|
|
|
|
|
ret = dma->func->class_new(dma, oclass, data, size, &dmaobj);
|
|
|
if (dmaobj)
|
|
|
*pobject = &dmaobj->object;
|
|
|
- if (ret)
|
|
|
- return ret;
|
|
|
-
|
|
|
- dmaobj->handle = oclass->object;
|
|
|
-
|
|
|
- while (*ptr) {
|
|
|
- struct nvkm_dmaobj *obj = rb_entry(*ptr, typeof(*obj), rb);
|
|
|
- parent = *ptr;
|
|
|
- if (dmaobj->handle < obj->handle)
|
|
|
- ptr = &parent->rb_left;
|
|
|
- else
|
|
|
- if (dmaobj->handle > obj->handle)
|
|
|
- ptr = &parent->rb_right;
|
|
|
- else
|
|
|
- return -EEXIST;
|
|
|
- }
|
|
|
-
|
|
|
- rb_link_node(&dmaobj->rb, parent, ptr);
|
|
|
- rb_insert_color(&dmaobj->rb, &client->dmaroot);
|
|
|
- return 0;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static const struct nvkm_device_oclass
|