brintos

brintos / linux-shallow public Read only

0
0
Text · 2.1 KiB · 79f0da9 Raw
89 lines · c
1/* SPDX-License-Identifier: MIT */2#ifndef __NVKM_FALCON_QMGR_H__3#define __NVKM_FALCON_QMGR_H__4#include <core/falcon.h>5 6#define HDR_SIZE sizeof(struct nvfw_falcon_msg)7#define QUEUE_ALIGNMENT 48/* max size of the messages we can receive */9#define MSG_BUF_SIZE 12810 11/**12 * struct nvkm_falcon_qmgr_seq - keep track of ongoing commands13 *14 * Every time a command is sent, a sequence is assigned to it so the15 * corresponding message can be matched. Upon receiving the message, a callback16 * can be called and/or a completion signaled.17 *18 * @id:		sequence ID19 * @state:	current state20 * @callback:	callback to call upon receiving matching message21 * @completion:	completion to signal after callback is called22 */23struct nvkm_falcon_qmgr_seq {24	u16 id;25	enum {26		SEQ_STATE_FREE = 0,27		SEQ_STATE_PENDING,28		SEQ_STATE_USED,29		SEQ_STATE_CANCELLED30	} state;31	bool async;32	nvkm_falcon_qmgr_callback callback;33	void *priv;34	struct completion done;35	int result;36};37 38/*39 * We can have an arbitrary number of sequences, but realistically we will40 * probably not use that much simultaneously.41 */42#define NVKM_FALCON_QMGR_SEQ_NUM 1643 44struct nvkm_falcon_qmgr {45	struct nvkm_falcon *falcon;46 47	struct {48		struct mutex mutex;49		struct nvkm_falcon_qmgr_seq id[NVKM_FALCON_QMGR_SEQ_NUM];50		unsigned long tbl[BITS_TO_LONGS(NVKM_FALCON_QMGR_SEQ_NUM)];51	} seq;52};53 54struct nvkm_falcon_qmgr_seq *55nvkm_falcon_qmgr_seq_acquire(struct nvkm_falcon_qmgr *);56void nvkm_falcon_qmgr_seq_release(struct nvkm_falcon_qmgr *,57				  struct nvkm_falcon_qmgr_seq *);58 59struct nvkm_falcon_cmdq {60	struct nvkm_falcon_qmgr *qmgr;61	const char *name;62	struct mutex mutex;63	struct completion ready;64 65	u32 head_reg;66	u32 tail_reg;67	u32 offset;68	u32 size;69 70	u32 position;71};72 73struct nvkm_falcon_msgq {74	struct nvkm_falcon_qmgr *qmgr;75	const char *name;76	spinlock_t lock;77 78	u32 head_reg;79	u32 tail_reg;80	u32 offset;81 82	u32 position;83};84 85#define FLCNQ_PRINTK(q,l,p,f,a...) FLCN_PRINTK((q)->qmgr->falcon, l, p, "%s: "f, (q)->name, ##a)86#define FLCNQ_DBG(q,f,a...) FLCNQ_PRINTK((q), DEBUG, info, f, ##a)87#define FLCNQ_ERR(q,f,a...) FLCNQ_PRINTK((q), ERROR, err, f, ##a)88#endif89