Lines Matching refs:queue

36 msg_queue_open(struct nvkm_msgqueue *priv, struct nvkm_msgqueue_queue *queue)  in msg_queue_open()  argument
40 mutex_lock(&queue->mutex); in msg_queue_open()
42 queue->position = nvkm_falcon_rd32(falcon, queue->tail_reg); in msg_queue_open()
48 msg_queue_close(struct nvkm_msgqueue *priv, struct nvkm_msgqueue_queue *queue, in msg_queue_close() argument
54 nvkm_falcon_wr32(falcon, queue->tail_reg, queue->position); in msg_queue_close()
56 mutex_unlock(&queue->mutex); in msg_queue_close()
60 msg_queue_empty(struct nvkm_msgqueue *priv, struct nvkm_msgqueue_queue *queue) in msg_queue_empty() argument
65 head = nvkm_falcon_rd32(falcon, queue->head_reg); in msg_queue_empty()
66 tail = nvkm_falcon_rd32(falcon, queue->tail_reg); in msg_queue_empty()
72 msg_queue_pop(struct nvkm_msgqueue *priv, struct nvkm_msgqueue_queue *queue, in msg_queue_pop() argument
79 head = nvkm_falcon_rd32(falcon, queue->head_reg); in msg_queue_pop()
81 if (head < queue->position) in msg_queue_pop()
82 queue->position = queue->offset; in msg_queue_pop()
84 tail = queue->position; in msg_queue_pop()
99 queue->position += ALIGN(size, QUEUE_ALIGNMENT); in msg_queue_pop()
105 msg_queue_read(struct nvkm_msgqueue *priv, struct nvkm_msgqueue_queue *queue, in msg_queue_read() argument
111 err = msg_queue_open(priv, queue); in msg_queue_read()
113 nvkm_error(subdev, "fail to open queue %d\n", queue->index); in msg_queue_read()
117 if (msg_queue_empty(priv, queue)) { in msg_queue_read()
122 err = msg_queue_pop(priv, queue, hdr, HDR_SIZE); in msg_queue_read()
139 err = msg_queue_pop(priv, queue, (hdr + 1), read_size); in msg_queue_read()
149 msg_queue_close(priv, queue, (err >= 0)); in msg_queue_read()
155 cmd_queue_has_room(struct nvkm_msgqueue *priv, struct nvkm_msgqueue_queue *queue, in cmd_queue_has_room() argument
163 head = nvkm_falcon_rd32(falcon, queue->head_reg); in cmd_queue_has_room()
164 tail = nvkm_falcon_rd32(falcon, queue->tail_reg); in cmd_queue_has_room()
167 free = queue->offset + queue->size - head; in cmd_queue_has_room()
172 head = queue->offset; in cmd_queue_has_room()
183 cmd_queue_push(struct nvkm_msgqueue *priv, struct nvkm_msgqueue_queue *queue, in cmd_queue_push() argument
186 nvkm_falcon_load_dmem(priv->falcon, data, queue->position, size, 0); in cmd_queue_push()
187 queue->position += ALIGN(size, QUEUE_ALIGNMENT); in cmd_queue_push()
196 cmd_queue_rewind(struct nvkm_msgqueue *priv, struct nvkm_msgqueue_queue *queue) in cmd_queue_rewind() argument
204 err = cmd_queue_push(priv, queue, &cmd, cmd.size); in cmd_queue_rewind()
206 nvkm_error(subdev, "queue %d rewind failed\n", queue->index); in cmd_queue_rewind()
208 nvkm_error(subdev, "queue %d rewinded\n", queue->index); in cmd_queue_rewind()
210 queue->position = queue->offset; in cmd_queue_rewind()
214 cmd_queue_open(struct nvkm_msgqueue *priv, struct nvkm_msgqueue_queue *queue, in cmd_queue_open() argument
221 mutex_lock(&queue->mutex); in cmd_queue_open()
223 if (!cmd_queue_has_room(priv, queue, size, &rewind)) { in cmd_queue_open()
225 mutex_unlock(&queue->mutex); in cmd_queue_open()
229 queue->position = nvkm_falcon_rd32(falcon, queue->head_reg); in cmd_queue_open()
232 cmd_queue_rewind(priv, queue); in cmd_queue_open()
238 cmd_queue_close(struct nvkm_msgqueue *priv, struct nvkm_msgqueue_queue *queue, in cmd_queue_close() argument
244 nvkm_falcon_wr32(falcon, queue->head_reg, queue->position); in cmd_queue_close()
246 mutex_unlock(&queue->mutex); in cmd_queue_close()
251 struct nvkm_msgqueue_queue *queue) in cmd_write() argument
260 ret = cmd_queue_open(priv, queue, cmd->size); in cmd_write()
266 ret = cmd_queue_push(priv, queue, cmd, cmd->size); in cmd_write()
272 cmd_queue_close(priv, queue, commit); in cmd_write()
325 struct nvkm_msgqueue_queue *queue; in nvkm_msgqueue_post() local
332 queue = priv->func->cmd_queue(priv, prio); in nvkm_msgqueue_post()
333 if (IS_ERR(queue)) in nvkm_msgqueue_post()
334 return PTR_ERR(queue); in nvkm_msgqueue_post()
347 ret = cmd_write(priv, cmd, queue); in nvkm_msgqueue_post()
435 struct nvkm_msgqueue_queue *queue) in nvkm_msgqueue_process_msgs() argument
451 while (msg_queue_read(priv, queue, hdr) > 0) in nvkm_msgqueue_process_msgs()
457 nvkm_msgqueue_write_cmdline(struct nvkm_msgqueue *queue, void *buf) in nvkm_msgqueue_write_cmdline() argument
459 if (!queue || !queue->func || !queue->func->init_func) in nvkm_msgqueue_write_cmdline()
462 queue->func->init_func->gen_cmdline(queue, buf); in nvkm_msgqueue_write_cmdline()
466 nvkm_msgqueue_acr_boot_falcons(struct nvkm_msgqueue *queue, in nvkm_msgqueue_acr_boot_falcons() argument
471 if (!queue || !queue->func->acr_func) in nvkm_msgqueue_acr_boot_falcons()
475 if (queue->func->acr_func->boot_multiple_falcons) in nvkm_msgqueue_acr_boot_falcons()
476 return queue->func->acr_func->boot_multiple_falcons(queue, in nvkm_msgqueue_acr_boot_falcons()
480 if (!queue->func->acr_func->boot_falcon) in nvkm_msgqueue_acr_boot_falcons()
484 int ret = queue->func->acr_func->boot_falcon(queue, falcon); in nvkm_msgqueue_acr_boot_falcons()
495 const struct nvkm_secboot *sb, struct nvkm_msgqueue **queue) in nvkm_msgqueue_new() argument
502 ret = msgqueue_0137c63d_new(falcon, sb, queue); in nvkm_msgqueue_new()
505 ret = msgqueue_0137bca5_new(falcon, sb, queue); in nvkm_msgqueue_new()
510 ret = msgqueue_0148cdec_new(falcon, sb, queue); in nvkm_msgqueue_new()
520 (*queue)->fw_version = version; in nvkm_msgqueue_new()
527 nvkm_msgqueue_del(struct nvkm_msgqueue **queue) in nvkm_msgqueue_del() argument
529 if (*queue) { in nvkm_msgqueue_del()
530 (*queue)->func->dtor(*queue); in nvkm_msgqueue_del()
531 *queue = NULL; in nvkm_msgqueue_del()
536 nvkm_msgqueue_recv(struct nvkm_msgqueue *queue) in nvkm_msgqueue_recv() argument
538 if (!queue->func || !queue->func->recv) { in nvkm_msgqueue_recv()
539 const struct nvkm_subdev *subdev = queue->falcon->owner; in nvkm_msgqueue_recv()
545 queue->func->recv(queue); in nvkm_msgqueue_recv()
549 nvkm_msgqueue_reinit(struct nvkm_msgqueue *queue) in nvkm_msgqueue_reinit() argument
552 if (!queue) in nvkm_msgqueue_reinit()
555 queue->init_msg_received = false; in nvkm_msgqueue_reinit()
556 reinit_completion(&queue->init_done); in nvkm_msgqueue_reinit()
564 struct nvkm_msgqueue *queue) in nvkm_msgqueue_ctor() argument
568 queue->func = func; in nvkm_msgqueue_ctor()
569 queue->falcon = falcon; in nvkm_msgqueue_ctor()
570 mutex_init(&queue->seq_lock); in nvkm_msgqueue_ctor()
572 queue->seq[i].id = i; in nvkm_msgqueue_ctor()
574 init_completion(&queue->init_done); in nvkm_msgqueue_ctor()