Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /* Copyright 2014 Cisco Systems, Inc.  All rights reserved. */
0003 
0004 #ifndef _VNIC_DEV_H_
0005 #define _VNIC_DEV_H_
0006 
0007 #include "vnic_resource.h"
0008 #include "vnic_devcmd.h"
0009 
0010 #ifndef VNIC_PADDR_TARGET
0011 #define VNIC_PADDR_TARGET   0x0000000000000000ULL
0012 #endif
0013 
0014 #ifndef readq
0015 static inline u64 readq(void __iomem *reg)
0016 {
0017     return ((u64)readl(reg + 0x4UL) << 32) | (u64)readl(reg);
0018 }
0019 
0020 static inline void writeq(u64 val, void __iomem *reg)
0021 {
0022     writel(lower_32_bits(val), reg);
0023     writel(upper_32_bits(val), reg + 0x4UL);
0024 }
0025 #endif
0026 
0027 enum vnic_dev_intr_mode {
0028     VNIC_DEV_INTR_MODE_UNKNOWN,
0029     VNIC_DEV_INTR_MODE_INTX,
0030     VNIC_DEV_INTR_MODE_MSI,
0031     VNIC_DEV_INTR_MODE_MSIX,
0032 };
0033 
0034 struct vnic_dev_bar {
0035     void __iomem *vaddr;
0036     dma_addr_t bus_addr;
0037     unsigned long len;
0038 };
0039 
0040 struct vnic_dev_ring {
0041     void *descs;
0042     size_t size;
0043     dma_addr_t base_addr;
0044     size_t base_align;
0045     void *descs_unaligned;
0046     size_t size_unaligned;
0047     dma_addr_t base_addr_unaligned;
0048     unsigned int desc_size;
0049     unsigned int desc_count;
0050     unsigned int desc_avail;
0051 };
0052 
0053 struct vnic_dev;
0054 struct vnic_stats;
0055 
0056 void *svnic_dev_priv(struct vnic_dev *vdev);
0057 unsigned int svnic_dev_get_res_count(struct vnic_dev *vdev,
0058                     enum vnic_res_type type);
0059 void __iomem *svnic_dev_get_res(struct vnic_dev *vdev, enum vnic_res_type type,
0060                    unsigned int index);
0061 unsigned int svnic_dev_desc_ring_size(struct vnic_dev_ring *ring,
0062                      unsigned int desc_count,
0063                      unsigned int desc_size);
0064 void svnic_dev_clear_desc_ring(struct vnic_dev_ring *ring);
0065 int svnic_dev_alloc_desc_ring(struct vnic_dev *vdev, struct vnic_dev_ring *ring,
0066                  unsigned int desc_count, unsigned int desc_size);
0067 void svnic_dev_free_desc_ring(struct vnic_dev *vdev,
0068                  struct vnic_dev_ring *ring);
0069 int svnic_dev_cmd(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd,
0070          u64 *a0, u64 *a1, int wait);
0071 int svnic_dev_fw_info(struct vnic_dev *vdev,
0072              struct vnic_devcmd_fw_info **fw_info);
0073 int svnic_dev_spec(struct vnic_dev *vdev, unsigned int offset,
0074           unsigned int size, void *value);
0075 int svnic_dev_stats_clear(struct vnic_dev *vdev);
0076 int svnic_dev_stats_dump(struct vnic_dev *vdev, struct vnic_stats **stats);
0077 int svnic_dev_notify_set(struct vnic_dev *vdev, u16 intr);
0078 void svnic_dev_notify_unset(struct vnic_dev *vdev);
0079 int svnic_dev_link_status(struct vnic_dev *vdev);
0080 u32 svnic_dev_link_down_cnt(struct vnic_dev *vdev);
0081 int svnic_dev_close(struct vnic_dev *vdev);
0082 int svnic_dev_enable_wait(struct vnic_dev *vdev);
0083 int svnic_dev_disable(struct vnic_dev *vdev);
0084 int svnic_dev_open(struct vnic_dev *vdev, int arg);
0085 int svnic_dev_open_done(struct vnic_dev *vdev, int *done);
0086 int svnic_dev_init(struct vnic_dev *vdev, int arg);
0087 struct vnic_dev *svnic_dev_alloc_discover(struct vnic_dev *vdev,
0088                      void *priv, struct pci_dev *pdev,
0089                      struct vnic_dev_bar *bar,
0090                      unsigned int num_bars);
0091 void svnic_dev_set_intr_mode(struct vnic_dev *vdev,
0092                 enum vnic_dev_intr_mode intr_mode);
0093 enum vnic_dev_intr_mode svnic_dev_get_intr_mode(struct vnic_dev *vdev);
0094 void svnic_dev_unregister(struct vnic_dev *vdev);
0095 int svnic_dev_cmd_init(struct vnic_dev *vdev, int fallback);
0096 #endif /* _VNIC_DEV_H_ */