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