Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Copyright 2008 Cisco Systems, Inc.  All rights reserved.
0004  * Copyright 2007 Nuova Systems, Inc.  All rights reserved.
0005  */
0006 #ifndef _VNIC_DEV_H_
0007 #define _VNIC_DEV_H_
0008 
0009 #include "vnic_resource.h"
0010 #include "vnic_devcmd.h"
0011 
0012 /*
0013  * These defines avoid symbol clash between fnic and enic (Cisco 10G Eth
0014  * Driver) when both are built with CONFIG options =y
0015  */
0016 #define vnic_dev_priv fnic_dev_priv
0017 #define vnic_dev_get_res_count fnic_dev_get_res_count
0018 #define vnic_dev_get_res fnic_dev_get_res
0019 #define vnic_dev_desc_ring_size fnic_dev_desc_ring_siz
0020 #define vnic_dev_clear_desc_ring fnic_dev_clear_desc_ring
0021 #define vnic_dev_alloc_desc_ring fnic_dev_alloc_desc_ring
0022 #define vnic_dev_free_desc_ring fnic_dev_free_desc_ring
0023 #define vnic_dev_cmd fnic_dev_cmd
0024 #define vnic_dev_fw_info fnic_dev_fw_info
0025 #define vnic_dev_spec fnic_dev_spec
0026 #define vnic_dev_stats_clear fnic_dev_stats_clear
0027 #define vnic_dev_cmd_init fnic_dev_cmd_init
0028 #define vnic_dev_stats_dump fnic_dev_stats_dump
0029 #define vnic_dev_hang_notify fnic_dev_hang_notify
0030 #define vnic_dev_packet_filter fnic_dev_packet_filter
0031 #define vnic_dev_add_addr fnic_dev_add_addr
0032 #define vnic_dev_del_addr fnic_dev_del_addr
0033 #define vnic_dev_mac_addr fnic_dev_mac_addr
0034 #define vnic_dev_notify_set fnic_dev_notify_set
0035 #define vnic_dev_notify_unset fnic_dev_notify_unset
0036 #define vnic_dev_link_status fnic_dev_link_status
0037 #define vnic_dev_port_speed fnic_dev_port_speed
0038 #define vnic_dev_msg_lvl fnic_dev_msg_lvl
0039 #define vnic_dev_mtu fnic_dev_mtu
0040 #define vnic_dev_link_down_cnt fnic_dev_link_down_cnt
0041 #define vnic_dev_close fnic_dev_close
0042 #define vnic_dev_enable fnic_dev_enable
0043 #define vnic_dev_disable fnic_dev_disable
0044 #define vnic_dev_open fnic_dev_open
0045 #define vnic_dev_open_done fnic_dev_open_done
0046 #define vnic_dev_init fnic_dev_init
0047 #define vnic_dev_soft_reset fnic_dev_soft_reset
0048 #define vnic_dev_soft_reset_done fnic_dev_soft_reset_done
0049 #define vnic_dev_set_intr_mode fnic_dev_set_intr_mode
0050 #define vnic_dev_get_intr_mode fnic_dev_get_intr_mode
0051 #define vnic_dev_unregister fnic_dev_unregister
0052 #define vnic_dev_register fnic_dev_register
0053 
0054 #ifndef VNIC_PADDR_TARGET
0055 #define VNIC_PADDR_TARGET   0x0000000000000000ULL
0056 #endif
0057 
0058 #ifndef readq
0059 static inline u64 readq(void __iomem *reg)
0060 {
0061     return ((u64)readl(reg + 0x4UL) << 32) | (u64)readl(reg);
0062 }
0063 
0064 static inline void writeq(u64 val, void __iomem *reg)
0065 {
0066     writel(val & 0xffffffff, reg);
0067     writel(val >> 32, reg + 0x4UL);
0068 }
0069 #endif
0070 
0071 enum vnic_dev_intr_mode {
0072     VNIC_DEV_INTR_MODE_UNKNOWN,
0073     VNIC_DEV_INTR_MODE_INTX,
0074     VNIC_DEV_INTR_MODE_MSI,
0075     VNIC_DEV_INTR_MODE_MSIX,
0076 };
0077 
0078 struct vnic_dev_bar {
0079     void __iomem *vaddr;
0080     dma_addr_t bus_addr;
0081     unsigned long len;
0082 };
0083 
0084 struct vnic_dev_ring {
0085     void *descs;
0086     size_t size;
0087     dma_addr_t base_addr;
0088     size_t base_align;
0089     void *descs_unaligned;
0090     size_t size_unaligned;
0091     dma_addr_t base_addr_unaligned;
0092     unsigned int desc_size;
0093     unsigned int desc_count;
0094     unsigned int desc_avail;
0095 };
0096 
0097 struct vnic_dev;
0098 struct vnic_stats;
0099 
0100 void *vnic_dev_priv(struct vnic_dev *vdev);
0101 unsigned int vnic_dev_get_res_count(struct vnic_dev *vdev,
0102                     enum vnic_res_type type);
0103 void __iomem *vnic_dev_get_res(struct vnic_dev *vdev, enum vnic_res_type type,
0104                    unsigned int index);
0105 unsigned int vnic_dev_desc_ring_size(struct vnic_dev_ring *ring,
0106                      unsigned int desc_count,
0107                      unsigned int desc_size);
0108 void vnic_dev_clear_desc_ring(struct vnic_dev_ring *ring);
0109 int vnic_dev_alloc_desc_ring(struct vnic_dev *vdev, struct vnic_dev_ring *ring,
0110                  unsigned int desc_count, unsigned int desc_size);
0111 void vnic_dev_free_desc_ring(struct vnic_dev *vdev,
0112                  struct vnic_dev_ring *ring);
0113 int vnic_dev_cmd(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd,
0114          u64 *a0, u64 *a1, int wait);
0115 int vnic_dev_fw_info(struct vnic_dev *vdev,
0116              struct vnic_devcmd_fw_info **fw_info);
0117 int vnic_dev_spec(struct vnic_dev *vdev, unsigned int offset,
0118           unsigned int size, void *value);
0119 int vnic_dev_stats_clear(struct vnic_dev *vdev);
0120 int vnic_dev_cmd_init(struct vnic_dev *vdev);
0121 int vnic_dev_stats_dump(struct vnic_dev *vdev, struct vnic_stats **stats);
0122 int vnic_dev_hang_notify(struct vnic_dev *vdev);
0123 void vnic_dev_packet_filter(struct vnic_dev *vdev, int directed, int multicast,
0124                 int broadcast, int promisc, int allmulti);
0125 void vnic_dev_add_addr(struct vnic_dev *vdev, u8 *addr);
0126 void vnic_dev_del_addr(struct vnic_dev *vdev, u8 *addr);
0127 int vnic_dev_mac_addr(struct vnic_dev *vdev, u8 *mac_addr);
0128 int vnic_dev_notify_set(struct vnic_dev *vdev, u16 intr);
0129 void vnic_dev_notify_unset(struct vnic_dev *vdev);
0130 int vnic_dev_link_status(struct vnic_dev *vdev);
0131 u32 vnic_dev_port_speed(struct vnic_dev *vdev);
0132 u32 vnic_dev_msg_lvl(struct vnic_dev *vdev);
0133 u32 vnic_dev_mtu(struct vnic_dev *vdev);
0134 u32 vnic_dev_link_down_cnt(struct vnic_dev *vdev);
0135 int vnic_dev_close(struct vnic_dev *vdev);
0136 int vnic_dev_enable(struct vnic_dev *vdev);
0137 int vnic_dev_disable(struct vnic_dev *vdev);
0138 int vnic_dev_open(struct vnic_dev *vdev, int arg);
0139 int vnic_dev_open_done(struct vnic_dev *vdev, int *done);
0140 int vnic_dev_init(struct vnic_dev *vdev, int arg);
0141 u16 vnic_dev_set_default_vlan(struct vnic_dev *vdev,
0142                 u16 new_default_vlan);
0143 int vnic_dev_soft_reset(struct vnic_dev *vdev, int arg);
0144 int vnic_dev_soft_reset_done(struct vnic_dev *vdev, int *done);
0145 void vnic_dev_set_intr_mode(struct vnic_dev *vdev,
0146                 enum vnic_dev_intr_mode intr_mode);
0147 enum vnic_dev_intr_mode vnic_dev_get_intr_mode(struct vnic_dev *vdev);
0148 void vnic_dev_unregister(struct vnic_dev *vdev);
0149 struct vnic_dev *vnic_dev_register(struct vnic_dev *vdev,
0150                    void *priv, struct pci_dev *pdev,
0151                    struct vnic_dev_bar *bar);
0152 
0153 #endif /* _VNIC_DEV_H_ */