#ifndef _OPA_VNIC_INTERNAL_H #define _OPA_VNIC_INTERNAL_H /* * Copyright(c) 2017 Intel Corporation. * * This file is provided under a dual BSD/GPLv2 license. When using or * redistributing this file, you may do so under either license. * * GPL LICENSE SUMMARY * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * BSD LICENSE * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * - Neither the name of Intel Corporation nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /* * This file contains OPA VNIC driver internal declarations */ #include <linux/bitops.h> #include <linux/etherdevice.h> #include <linux/hashtable.h> #include <linux/sizes.h> #include <rdma/opa_vnic.h> #include "opa_vnic_encap.h" #define OPA_VNIC_VLAN_PCP(vlan_tci) … /* Flow to default port redirection table size */ #define OPA_VNIC_FLOW_TBL_SIZE … /* Invalid port number */ #define OPA_VNIC_INVALID_PORT … struct opa_vnic_adapter; /* * struct __opa_vesw_info - OPA vnic virtual switch info * * Same as opa_vesw_info without bitwise attribute. */ struct __opa_vesw_info { … } __packed; /* * struct __opa_per_veswport_info - OPA vnic per port info * * Same as opa_per_veswport_info without bitwise attribute. */ struct __opa_per_veswport_info { … } __packed; /* * struct __opa_veswport_info - OPA vnic port info * * Same as opa_veswport_info without bitwise attribute. */ struct __opa_veswport_info { … }; /* * struct __opa_veswport_trap - OPA vnic trap info * * Same as opa_veswport_trap without bitwise attribute. */ struct __opa_veswport_trap { … } __packed; /** * struct opa_vnic_ctrl_port - OPA virtual NIC control port * @ibdev: pointer to ib device * @ops: opa vnic control operations * @num_ports: number of opa ports */ struct opa_vnic_ctrl_port { … }; /** * struct opa_vnic_adapter - OPA VNIC netdev private data structure * @netdev: pointer to associated netdev * @ibdev: ib device * @cport: pointer to opa vnic control port * @rn_ops: rdma netdev's net_device_ops * @port_num: OPA port number * @vport_num: vesw port number * @lock: adapter lock * @info: virtual ethernet switch port information * @vema_mac_addr: mac address configured by vema * @umac_hash: unicast maclist hash * @mmac_hash: multicast maclist hash * @mactbl: hash table of MAC entries * @mactbl_lock: mac table lock * @stats_lock: statistics lock * @flow_tbl: flow to default port redirection table * @trap_timeout: trap timeout * @trap_count: no. of traps allowed within timeout period */ struct opa_vnic_adapter { … }; /* Same as opa_veswport_mactable_entry, but without bitwise attribute */ struct __opa_vnic_mactable_entry { … } __packed; /** * struct opa_vnic_mac_tbl_node - OPA VNIC mac table node * @hlist: hash list handle * @index: index of entry in the mac table * @entry: entry in the table */ struct opa_vnic_mac_tbl_node { … }; #define v_dbg(format, arg...) … #define v_err(format, arg...) … #define v_info(format, arg...) … #define v_warn(format, arg...) … #define c_err(format, arg...) … #define c_info(format, arg...) … #define c_dbg(format, arg...) … /* The maximum allowed entries in the mac table */ #define OPA_VNIC_MAC_TBL_MAX_ENTRIES … /* Limit of smac entries in mac table */ #define OPA_VNIC_MAX_SMAC_LIMIT … /* The last octet of the MAC address is used as the key to the hash table */ #define OPA_VNIC_MAC_HASH_IDX … /* The VNIC MAC hash table is of size 2^8 */ #define OPA_VNIC_MAC_TBL_HASH_BITS … #define OPA_VNIC_MAC_TBL_SIZE … /* VNIC HASH MACROS */ #define vnic_hash_init(hashtable) … #define vnic_hash_add(hashtable, node, key) … #define vnic_hash_for_each_safe(name, bkt, tmp, obj, member) … #define vnic_hash_for_each_possible(name, obj, member, key) … #define vnic_hash_for_each(name, bkt, obj, member) … extern char opa_vnic_driver_name[]; struct opa_vnic_adapter *opa_vnic_add_netdev(struct ib_device *ibdev, u8 port_num, u8 vport_num); void opa_vnic_rem_netdev(struct opa_vnic_adapter *adapter); void opa_vnic_encap_skb(struct opa_vnic_adapter *adapter, struct sk_buff *skb); u8 opa_vnic_get_vl(struct opa_vnic_adapter *adapter, struct sk_buff *skb); u8 opa_vnic_calc_entropy(struct sk_buff *skb); void opa_vnic_process_vema_config(struct opa_vnic_adapter *adapter); void opa_vnic_release_mac_tbl(struct opa_vnic_adapter *adapter); void opa_vnic_query_mac_tbl(struct opa_vnic_adapter *adapter, struct opa_veswport_mactable *tbl); int opa_vnic_update_mac_tbl(struct opa_vnic_adapter *adapter, struct opa_veswport_mactable *tbl); void opa_vnic_query_ucast_macs(struct opa_vnic_adapter *adapter, struct opa_veswport_iface_macs *macs); void opa_vnic_query_mcast_macs(struct opa_vnic_adapter *adapter, struct opa_veswport_iface_macs *macs); void opa_vnic_get_summary_counters(struct opa_vnic_adapter *adapter, struct opa_veswport_summary_counters *cntrs); void opa_vnic_get_error_counters(struct opa_vnic_adapter *adapter, struct opa_veswport_error_counters *cntrs); void opa_vnic_get_vesw_info(struct opa_vnic_adapter *adapter, struct opa_vesw_info *info); void opa_vnic_set_vesw_info(struct opa_vnic_adapter *adapter, struct opa_vesw_info *info); void opa_vnic_get_per_veswport_info(struct opa_vnic_adapter *adapter, struct opa_per_veswport_info *info); void opa_vnic_set_per_veswport_info(struct opa_vnic_adapter *adapter, struct opa_per_veswport_info *info); void opa_vnic_vema_report_event(struct opa_vnic_adapter *adapter, u8 event); void opa_vnic_set_ethtool_ops(struct net_device *netdev); void opa_vnic_vema_send_trap(struct opa_vnic_adapter *adapter, struct __opa_veswport_trap *data, u32 lid); #endif /* _OPA_VNIC_INTERNAL_H */