1*19df707eSJunyang Han /* SPDX-License-Identifier: GPL-2.0-only */ 2*19df707eSJunyang Han /* 3*19df707eSJunyang Han * ZTE DingHai Ethernet driver - PCI capability definitions 4*19df707eSJunyang Han * Copyright (c) 2022-2026, ZTE Corporation. 5*19df707eSJunyang Han */ 6*19df707eSJunyang Han 7*19df707eSJunyang Han #ifndef __DH_QUEUE_H__ 8*19df707eSJunyang Han #define __DH_QUEUE_H__ 9*19df707eSJunyang Han 10*19df707eSJunyang Han #include <linux/types.h> 11*19df707eSJunyang Han 12*19df707eSJunyang Han /* This is the PCI capability header: */ 13*19df707eSJunyang Han struct zxdh_pf_pci_cap { 14*19df707eSJunyang Han __u8 cap_vndr; /* Generic PCI field: PCI_CAP_ID_VNDR */ 15*19df707eSJunyang Han __u8 cap_next; /* Generic PCI field: next ptr. */ 16*19df707eSJunyang Han __u8 cap_len; /* Generic PCI field: capability length */ 17*19df707eSJunyang Han __u8 cfg_type; /* Identifies the structure. */ 18*19df707eSJunyang Han __u8 bar; /* Where to find it. */ 19*19df707eSJunyang Han __u8 id; /* Multiple capabilities of the same type */ 20*19df707eSJunyang Han __u8 padding[2]; /* Pad to full dword. */ 21*19df707eSJunyang Han __le32 offset; /* Offset within bar. */ 22*19df707eSJunyang Han __le32 length; /* Length of the structure, in bytes. */ 23*19df707eSJunyang Han }; 24*19df707eSJunyang Han 25*19df707eSJunyang Han /* Fields in ZXDH_PF_PCI_CAP_COMMON_CFG: */ 26*19df707eSJunyang Han struct zxdh_pf_pci_common_cfg { 27*19df707eSJunyang Han /* About the whole device. */ 28*19df707eSJunyang Han __le32 device_feature_select; /* read-write */ 29*19df707eSJunyang Han __le32 device_feature; /* read-only */ 30*19df707eSJunyang Han __le32 guest_feature_select; /* read-write */ 31*19df707eSJunyang Han __le32 guest_feature; /* read-write */ 32*19df707eSJunyang Han __le16 msix_config; /* read-write */ 33*19df707eSJunyang Han __le16 num_queues; /* read-only */ 34*19df707eSJunyang Han __u8 device_status; /* read-write */ 35*19df707eSJunyang Han __u8 config_generation; /* read-only */ 36*19df707eSJunyang Han 37*19df707eSJunyang Han /* About a specific virtqueue. */ 38*19df707eSJunyang Han __le16 queue_select; /* read-write */ 39*19df707eSJunyang Han __le16 queue_size; /* read-write, power of 2. */ 40*19df707eSJunyang Han __le16 queue_msix_vector; /* read-write */ 41*19df707eSJunyang Han __le16 queue_enable; /* read-write */ 42*19df707eSJunyang Han __le16 queue_notify_off; /* read-only */ 43*19df707eSJunyang Han __le32 queue_desc_lo; /* read-write */ 44*19df707eSJunyang Han __le32 queue_desc_hi; /* read-write */ 45*19df707eSJunyang Han __le32 queue_avail_lo; /* read-write */ 46*19df707eSJunyang Han __le32 queue_avail_hi; /* read-write */ 47*19df707eSJunyang Han __le32 queue_used_lo; /* read-write */ 48*19df707eSJunyang Han __le32 queue_used_hi; /* read-write */ 49*19df707eSJunyang Han }; 50*19df707eSJunyang Han 51*19df707eSJunyang Han struct zxdh_pf_pci_notify_cap { 52*19df707eSJunyang Han struct zxdh_pf_pci_cap cap; 53*19df707eSJunyang Han __le32 notify_off_multiplier; /* Multiplier for queue_notify_off. */ 54*19df707eSJunyang Han }; 55*19df707eSJunyang Han 56*19df707eSJunyang Han #endif /* __DH_QUEUE_H__ */ 57