/* SPDX-License-Identifier: GPL-2.0-only */ /**************************************************************************** * Driver for Solarflare network controllers and boards * Copyright 2005-2006 Fen Systems Ltd. * Copyright 2006-2013 Solarflare Communications Inc.
*/
#ifndef EF4_EFX_H #define EF4_EFX_H
#include"net_driver.h" #include"filter.h"
/* All controllers use BAR 0 for I/O space and BAR 2(&3) for memory */ /* All VFs use BAR 0/1 for memory */ #define EF4_MEM_BAR 2 #define EF4_MEM_VF_BAR 0
int ef4_net_open(struct net_device *net_dev); int ef4_net_stop(struct net_device *net_dev);
/* Maximum number of TCP segments we support for soft-TSO */ #define EF4_TSO_MAX_SEGS 100
/* The smallest [rt]xq_entries that the driver supports. RX minimum * is a bit arbitrary. For TX, we must have space for at least 2 * TSO skbs.
*/ #define EF4_RXQ_MIN_ENT 128U #define EF4_TXQ_MIN_ENT(efx) (2 * ef4_tx_max_skb_descs(efx))
/** * ef4_filter_insert_filter - add or replace a filter * @efx: NIC in which to insert the filter * @spec: Specification for the filter * @replace_equal: Flag for whether the specified filter may replace an * existing filter with equal priority * * On success, return the filter ID. * On failure, return a negative error code. * * If existing filters have equal match values to the new filter spec, * then the new filter might replace them or the function might fail, * as follows. * * 1. If the existing filters have lower priority, or @replace_equal * is set and they have equal priority, replace them. * * 2. If the existing filters have higher priority, return -%EPERM. * * 3. If !ef4_filter_is_mc_recipient(@spec), or the NIC does not * support delivery to multiple recipients, return -%EEXIST. * * This implies that filters for multiple multicast recipients must * all be inserted with the same priority and @replace_equal = %false.
*/ staticinline s32 ef4_filter_insert_filter(struct ef4_nic *efx, struct ef4_filter_spec *spec, bool replace_equal)
{ return efx->type->filter_insert(efx, spec, replace_equal);
}
/** * ef4_filter_remove_id_safe - remove a filter by ID, carefully * @efx: NIC from which to remove the filter * @priority: Priority of filter, as passed to @ef4_filter_insert_filter * @filter_id: ID of filter, as returned by @ef4_filter_insert_filter * * This function will range-check @filter_id, so it is safe to call * with a value passed from userland.
*/ staticinlineint ef4_filter_remove_id_safe(struct ef4_nic *efx, enum ef4_filter_priority priority,
u32 filter_id)
{ return efx->type->filter_remove_safe(efx, priority, filter_id);
}
/** * ef4_filter_get_filter_safe - retrieve a filter by ID, carefully * @efx: NIC from which to remove the filter * @priority: Priority of filter, as passed to @ef4_filter_insert_filter * @filter_id: ID of filter, as returned by @ef4_filter_insert_filter * @spec: Buffer in which to store filter specification * * This function will range-check @filter_id, so it is safe to call * with a value passed from userland.
*/ staticinlineint
ef4_filter_get_filter_safe(struct ef4_nic *efx, enum ef4_filter_priority priority,
u32 filter_id, struct ef4_filter_spec *spec)
{ return efx->type->filter_get_safe(efx, priority, filter_id, spec);
}
/* Lock/freeze all TX queues so that we can be sure the * TX scheduler is stopped when we're done and before * netif_device_present() becomes false.
*/
netif_tx_lock_bh(dev);
netif_device_detach(dev);
netif_tx_unlock_bh(dev);
}
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.