/* * 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 EMA Interface functions.
*/
#include"opa_vnic_internal.h"
/** * opa_vnic_vema_report_event - sent trap to report the specified event * @adapter: vnic port adapter * @event: event to be reported * * This function calls vema api to sent a trap for the given event.
*/ void opa_vnic_vema_report_event(struct opa_vnic_adapter *adapter, u8 event)
{ struct __opa_veswport_info *info = &adapter->info; struct __opa_veswport_trap trap_data;
/** * opa_vnic_get_summary_counters - get summary counters * @adapter: vnic port adapter * @cntrs: pointer to destination summary counters structure * * This function populates the summary counters that is maintained by the * given adapter to destination address provided.
*/ void opa_vnic_get_summary_counters(struct opa_vnic_adapter *adapter, struct opa_veswport_summary_counters *cntrs)
{ struct opa_vnic_stats vstats;
__be64 *dst;
u64 *src;
/* * This loop depends on layout of * opa_veswport_summary_counters opa_vnic_stats structures.
*/ for (dst = &cntrs->tx_unicast, src = &vstats.tx_grp.unicast;
dst < &cntrs->reserved[0]; dst++, src++) {
*dst = cpu_to_be64(*src);
}
}
/** * opa_vnic_get_error_counters - get error counters * @adapter: vnic port adapter * @cntrs: pointer to destination error counters structure * * This function populates the error counters that is maintained by the * given adapter to destination address provided.
*/ void opa_vnic_get_error_counters(struct opa_vnic_adapter *adapter, struct opa_veswport_error_counters *cntrs)
{ struct opa_vnic_stats vstats;
/** * opa_vnic_get_vesw_info -- Get the vesw information * @adapter: vnic port adapter * @info: pointer to destination vesw info structure * * This function copies the vesw info that is maintained by the * given adapter to destination address provided.
*/ void opa_vnic_get_vesw_info(struct opa_vnic_adapter *adapter, struct opa_vesw_info *info)
{ struct __opa_vesw_info *src = &adapter->info.vesw; int i;
/** * opa_vnic_set_vesw_info -- Set the vesw information * @adapter: vnic port adapter * @info: pointer to vesw info structure * * This function updates the vesw info that is maintained by the * given adapter with vesw info provided. Reserved fields are stored * and returned back to EM as is.
*/ void opa_vnic_set_vesw_info(struct opa_vnic_adapter *adapter, struct opa_vesw_info *info)
{ struct __opa_vesw_info *dst = &adapter->info.vesw; int i;
/** * opa_vnic_get_per_veswport_info -- Get the vesw per port information * @adapter: vnic port adapter * @info: pointer to destination vport info structure * * This function copies the vesw per port info that is maintained by the * given adapter to destination address provided. * Note that the read only fields are not copied.
*/ void opa_vnic_get_per_veswport_info(struct opa_vnic_adapter *adapter, struct opa_per_veswport_info *info)
{ struct __opa_per_veswport_info *src = &adapter->info.vport;
/** * opa_vnic_set_per_veswport_info -- Set vesw per port information * @adapter: vnic port adapter * @info: pointer to vport info structure * * This function updates the vesw per port info that is maintained by the * given adapter with vesw per port info provided. Reserved fields are * stored and returned back to EM as is.
*/ void opa_vnic_set_per_veswport_info(struct opa_vnic_adapter *adapter, struct opa_per_veswport_info *info)
{ struct __opa_per_veswport_info *dst = &adapter->info.vport;
/** * opa_vnic_query_mcast_macs - query multicast mac list * @adapter: vnic port adapter * @macs: pointer mac list * * This function populates the provided mac list with the configured * multicast addresses in the adapter.
*/ void opa_vnic_query_mcast_macs(struct opa_vnic_adapter *adapter, struct opa_veswport_iface_macs *macs)
{
u16 start_idx, num_macs, idx = 0, count = 0; struct netdev_hw_addr *ha;
/** * opa_vnic_query_ucast_macs - query unicast mac list * @adapter: vnic port adapter * @macs: pointer mac list * * This function populates the provided mac list with the configured * unicast addresses in the adapter.
*/ void opa_vnic_query_ucast_macs(struct opa_vnic_adapter *adapter, struct opa_veswport_iface_macs *macs)
{
u16 start_idx, tot_macs, num_macs, idx = 0, count = 0, em_macs = 0; struct netdev_hw_addr *ha;
start_idx = be16_to_cpu(macs->start_idx);
num_macs = be16_to_cpu(macs->num_macs_in_msg); /* loop through dev_addrs list first */
for_each_dev_addr(adapter->netdev, ha) { struct opa_vnic_iface_mac_entry *entry = &macs->entry[count];
/* Do not include EM specified MAC address */ if (!memcmp(adapter->info.vport.base_mac_addr, ha->addr,
ARRAY_SIZE(adapter->info.vport.base_mac_addr))) {
em_macs++; continue;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.