brintos

brintos / linux-shallow public Read only

0
0
Text · 6.0 KiB · 7fdd8c6 Raw
182 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright 2008-2010 Cisco Systems, Inc.  All rights reserved.4 * Copyright 2007 Nuova Systems, Inc.  All rights reserved.5 */6 7#ifndef _VNIC_DEV_H_8#define _VNIC_DEV_H_9 10#include "vnic_resource.h"11#include "vnic_devcmd.h"12 13#ifndef VNIC_PADDR_TARGET14#define VNIC_PADDR_TARGET	0x0000000000000000ULL15#endif16 17#ifndef readq18static inline u64 readq(void __iomem *reg)19{20	return (((u64)readl(reg + 0x4UL) << 32) |21		(u64)readl(reg));22}23 24static inline void writeq(u64 val, void __iomem *reg)25{26	writel(val & 0xffffffff, reg);27	writel(val >> 32, reg + 0x4UL);28}29#endif30 31#undef pr_fmt32#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt33 34#define VNIC_DESC_SIZE_ALIGN	1635#define VNIC_DESC_COUNT_ALIGN	3236#define VNIC_DESC_BASE_ALIGN	51237#define VNIC_DESC_MAX_COUNT	409638 39enum vnic_dev_intr_mode {40	VNIC_DEV_INTR_MODE_UNKNOWN,41	VNIC_DEV_INTR_MODE_INTX,42	VNIC_DEV_INTR_MODE_MSI,43	VNIC_DEV_INTR_MODE_MSIX,44};45 46struct vnic_dev_bar {47	void __iomem *vaddr;48	dma_addr_t bus_addr;49	unsigned long len;50};51 52struct vnic_dev_ring {53	void *descs;54	size_t size;55	dma_addr_t base_addr;56	size_t base_align;57	void *descs_unaligned;58	size_t size_unaligned;59	dma_addr_t base_addr_unaligned;60	unsigned int desc_size;61	unsigned int desc_count;62	unsigned int desc_avail;63};64 65enum vnic_proxy_type {66	PROXY_NONE,67	PROXY_BY_BDF,68	PROXY_BY_INDEX,69};70 71struct vnic_res {72	void __iomem *vaddr;73	dma_addr_t bus_addr;74	unsigned int count;75};76 77struct vnic_intr_coal_timer_info {78	u32 mul;79	u32 div;80	u32 max_usec;81};82 83struct vnic_dev {84	void *priv;85	struct pci_dev *pdev;86	struct vnic_res res[RES_TYPE_MAX];87	enum vnic_dev_intr_mode intr_mode;88	struct vnic_devcmd __iomem *devcmd;89	struct vnic_devcmd_notify *notify;90	struct vnic_devcmd_notify notify_copy;91	dma_addr_t notify_pa;92	u32 notify_sz;93	dma_addr_t linkstatus_pa;94	struct vnic_stats *stats;95	dma_addr_t stats_pa;96	struct vnic_devcmd_fw_info *fw_info;97	dma_addr_t fw_info_pa;98	enum vnic_proxy_type proxy;99	u32 proxy_index;100	u64 args[VNIC_DEVCMD_NARGS];101	struct vnic_intr_coal_timer_info intr_coal_timer_info;102	struct devcmd2_controller *devcmd2;103	int (*devcmd_rtn)(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd,104			  int wait);105};106 107struct vnic_stats;108 109void *vnic_dev_priv(struct vnic_dev *vdev);110unsigned int vnic_dev_get_res_count(struct vnic_dev *vdev,111	enum vnic_res_type type);112void __iomem *vnic_dev_get_res(struct vnic_dev *vdev, enum vnic_res_type type,113	unsigned int index);114void vnic_dev_clear_desc_ring(struct vnic_dev_ring *ring);115int vnic_dev_alloc_desc_ring(struct vnic_dev *vdev, struct vnic_dev_ring *ring,116	unsigned int desc_count, unsigned int desc_size);117void vnic_dev_free_desc_ring(struct vnic_dev *vdev,118	struct vnic_dev_ring *ring);119int vnic_dev_cmd(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd,120	u64 *a0, u64 *a1, int wait);121void vnic_dev_cmd_proxy_by_index_start(struct vnic_dev *vdev, u16 index);122void vnic_dev_cmd_proxy_end(struct vnic_dev *vdev);123int vnic_dev_fw_info(struct vnic_dev *vdev,124	struct vnic_devcmd_fw_info **fw_info);125int vnic_dev_spec(struct vnic_dev *vdev, unsigned int offset, unsigned int size,126	void *value);127int vnic_dev_stats_dump(struct vnic_dev *vdev, struct vnic_stats **stats);128int vnic_dev_hang_notify(struct vnic_dev *vdev);129int vnic_dev_packet_filter(struct vnic_dev *vdev, int directed, int multicast,130	int broadcast, int promisc, int allmulti);131int vnic_dev_add_addr(struct vnic_dev *vdev, const u8 *addr);132int vnic_dev_del_addr(struct vnic_dev *vdev, const u8 *addr);133int vnic_dev_get_mac_addr(struct vnic_dev *vdev, u8 *mac_addr);134int vnic_dev_notify_set(struct vnic_dev *vdev, u16 intr);135int vnic_dev_notify_unset(struct vnic_dev *vdev);136int vnic_dev_link_status(struct vnic_dev *vdev);137u32 vnic_dev_port_speed(struct vnic_dev *vdev);138u32 vnic_dev_msg_lvl(struct vnic_dev *vdev);139u32 vnic_dev_mtu(struct vnic_dev *vdev);140int vnic_dev_close(struct vnic_dev *vdev);141int vnic_dev_enable_wait(struct vnic_dev *vdev);142int vnic_dev_disable(struct vnic_dev *vdev);143int vnic_dev_open(struct vnic_dev *vdev, int arg);144int vnic_dev_open_done(struct vnic_dev *vdev, int *done);145int vnic_dev_init(struct vnic_dev *vdev, int arg);146int vnic_dev_deinit(struct vnic_dev *vdev);147void vnic_dev_intr_coal_timer_info_default(struct vnic_dev *vdev);148int vnic_dev_intr_coal_timer_info(struct vnic_dev *vdev);149int vnic_dev_hang_reset(struct vnic_dev *vdev, int arg);150int vnic_dev_soft_reset(struct vnic_dev *vdev, int arg);151int vnic_dev_hang_reset_done(struct vnic_dev *vdev, int *done);152int vnic_dev_soft_reset_done(struct vnic_dev *vdev, int *done);153void vnic_dev_set_intr_mode(struct vnic_dev *vdev,154	enum vnic_dev_intr_mode intr_mode);155enum vnic_dev_intr_mode vnic_dev_get_intr_mode(struct vnic_dev *vdev);156u32 vnic_dev_intr_coal_timer_usec_to_hw(struct vnic_dev *vdev, u32 usec);157u32 vnic_dev_intr_coal_timer_hw_to_usec(struct vnic_dev *vdev, u32 hw_cycles);158u32 vnic_dev_get_intr_coal_timer_max(struct vnic_dev *vdev);159void vnic_dev_unregister(struct vnic_dev *vdev);160int vnic_dev_set_ig_vlan_rewrite_mode(struct vnic_dev *vdev,161	u8 ig_vlan_rewrite_mode);162struct vnic_dev *vnic_dev_register(struct vnic_dev *vdev,163	void *priv, struct pci_dev *pdev, struct vnic_dev_bar *bar,164	unsigned int num_bars);165struct pci_dev *vnic_dev_get_pdev(struct vnic_dev *vdev);166int vnic_dev_init_prov2(struct vnic_dev *vdev, u8 *buf, u32 len);167int vnic_dev_enable2(struct vnic_dev *vdev, int active);168int vnic_dev_enable2_done(struct vnic_dev *vdev, int *status);169int vnic_dev_deinit_done(struct vnic_dev *vdev, int *status);170int vnic_dev_set_mac_addr(struct vnic_dev *vdev, u8 *mac_addr);171int vnic_dev_classifier(struct vnic_dev *vdev, u8 cmd, u16 *entry,172			struct filter *data);173int vnic_devcmd_init(struct vnic_dev *vdev);174int vnic_dev_overlay_offload_ctrl(struct vnic_dev *vdev, u8 overlay, u8 config);175int vnic_dev_overlay_offload_cfg(struct vnic_dev *vdev, u8 overlay,176				 u16 vxlan_udp_port_number);177int vnic_dev_get_supported_feature_ver(struct vnic_dev *vdev, u8 feature,178				       u64 *supported_versions, u64 *a1);179int vnic_dev_capable_rss_hash_type(struct vnic_dev *vdev, u8 *rss_hash_type);180 181#endif /* _VNIC_DEV_H_ */182