static int gf100_sw_chan_new(struct nvkm_sw *sw, struct nvkm_fifo_chan *fifoch, const struct nvkm_oclass *oclass, struct nvkm_object **pobject) { struct nvkm_disp *disp = sw->engine.subdev.device->disp; struct nv50_sw_chan *chan; int ret, i; if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL))) return -ENOMEM; *pobject = &chan->base.object; ret = nvkm_sw_chan_ctor(&gf100_sw_chan, sw, fifoch, oclass, &chan->base); if (ret) return ret; for (i = 0; disp && i < disp->vblank.index_nr; i++) { ret = nvkm_notify_init(NULL, &disp->vblank, gf100_sw_chan_vblsem_release, false, &(struct nvif_notify_head_req_v0) { .head = i, }, sizeof(struct nvif_notify_head_req_v0), sizeof(struct nvif_notify_head_rep_v0), &chan->vblank.notify[i]); if (ret) return ret; }
static int nv10_sw_chan_new(struct nvkm_sw *sw, struct nvkm_fifo_chan *fifo, const struct nvkm_oclass *oclass, struct nvkm_object **pobject) { struct nvkm_sw_chan *chan; if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL))) return -ENOMEM; *pobject = &chan->object; return nvkm_sw_chan_ctor(&nv10_sw_chan, sw, fifo, oclass, chan); }