162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/* Copyright(c) 2023 Advanced Micro Devices, Inc */
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci#ifndef _VDPA_DEV_H_
562306a36Sopenharmony_ci#define _VDPA_DEV_H_
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#include <linux/pci.h>
862306a36Sopenharmony_ci#include <linux/vdpa.h>
962306a36Sopenharmony_ci
1062306a36Sopenharmony_cistruct pds_vdpa_vq_info {
1162306a36Sopenharmony_ci	bool ready;
1262306a36Sopenharmony_ci	u64 desc_addr;
1362306a36Sopenharmony_ci	u64 avail_addr;
1462306a36Sopenharmony_ci	u64 used_addr;
1562306a36Sopenharmony_ci	u32 q_len;
1662306a36Sopenharmony_ci	u16 qid;
1762306a36Sopenharmony_ci	int irq;
1862306a36Sopenharmony_ci	char irq_name[32];
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci	void __iomem *notify;
2162306a36Sopenharmony_ci	dma_addr_t notify_pa;
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci	u64 doorbell;
2462306a36Sopenharmony_ci	u16 avail_idx;
2562306a36Sopenharmony_ci	u16 used_idx;
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci	struct vdpa_callback event_cb;
2862306a36Sopenharmony_ci	struct pds_vdpa_device *pdsv;
2962306a36Sopenharmony_ci};
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci#define PDS_VDPA_MAX_QUEUES	65
3262306a36Sopenharmony_ci#define PDS_VDPA_MAX_QLEN	32768
3362306a36Sopenharmony_cistruct pds_vdpa_device {
3462306a36Sopenharmony_ci	struct vdpa_device vdpa_dev;
3562306a36Sopenharmony_ci	struct pds_vdpa_aux *vdpa_aux;
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci	struct pds_vdpa_vq_info vqs[PDS_VDPA_MAX_QUEUES];
3862306a36Sopenharmony_ci	u64 supported_features;		/* supported device features */
3962306a36Sopenharmony_ci	u64 negotiated_features;	/* negotiated features */
4062306a36Sopenharmony_ci	u8 vdpa_index;			/* rsvd for future subdevice use */
4162306a36Sopenharmony_ci	u8 num_vqs;			/* num vqs in use */
4262306a36Sopenharmony_ci	u8 mac[ETH_ALEN];		/* mac selected when the device was added */
4362306a36Sopenharmony_ci	struct vdpa_callback config_cb;
4462306a36Sopenharmony_ci	struct notifier_block nb;
4562306a36Sopenharmony_ci};
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci#define PDS_VDPA_PACKED_INVERT_IDX	0x8000
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ciint pds_vdpa_get_mgmt_info(struct pds_vdpa_aux *vdpa_aux);
5062306a36Sopenharmony_ci#endif /* _VDPA_DEV_H_ */
51