Lines Matching defs:efx
14 #include "efx.h"
43 struct efx_nic *efx = rx_queue->efx;
66 dma_unmap_page(&efx->pci_dev->dev, state->dma_addr,
67 PAGE_SIZE << efx->rx_buffer_order,
84 struct efx_nic *efx = rx_queue->efx;
108 efx_unmap_rx_buffer(efx, rx_buf);
142 struct efx_nic *efx = rx_queue->efx;
155 efx->rx_bufs_per_page);
166 struct efx_nic *efx = rx_queue->efx;
181 dma_unmap_page(&efx->pci_dev->dev, state->dma_addr,
182 PAGE_SIZE << efx->rx_buffer_order,
199 efx_unmap_rx_buffer(rx_queue->efx, rx_buf);
207 struct efx_nic *efx = rx_queue->efx;
212 entries = max(roundup_pow_of_two(efx->rxq_entries), EFX_MIN_DMAQ_SIZE);
216 netif_dbg(efx, probe, efx->net_dev,
218 efx_rx_queue_index(rx_queue), efx->rxq_entries,
239 struct efx_nic *efx = rx_queue->efx;
242 netif_dbg(rx_queue->efx, drv, rx_queue->efx->net_dev,
259 max_fill = efx->rxq_entries - EFX_RXD_HEAD_ROOM;
261 max_fill - efx->rx_pages_per_batch * efx->rx_bufs_per_page;
275 rc = xdp_rxq_info_reg(&rx_queue->xdp_rxq_info, efx->net_dev,
279 netif_err(efx, rx_err, efx->net_dev,
282 efx->xdp_rxq_info_failed = true;
296 netif_dbg(rx_queue->efx, drv, rx_queue->efx->net_dev,
322 netif_dbg(rx_queue->efx, drv, rx_queue->efx->net_dev,
334 void efx_unmap_rx_buffer(struct efx_nic *efx,
342 dma_unmap_page(&efx->pci_dev->dev,
344 PAGE_SIZE << efx->rx_buffer_order,
388 struct efx_nic *efx = rx_queue->efx;
400 efx->rx_buffer_order);
404 dma_map_page(&efx->pci_dev->dev, page, 0,
405 PAGE_SIZE << efx->rx_buffer_order,
407 if (unlikely(dma_mapping_error(&efx->pci_dev->dev,
409 __free_pages(page, efx->rx_buffer_order);
425 rx_buf->dma_addr = dma_addr + efx->rx_ip_align +
428 rx_buf->page_offset = page_offset + efx->rx_ip_align +
430 rx_buf->len = efx->rx_dma_len;
434 dma_addr += efx->rx_page_buf_step;
435 page_offset += efx->rx_page_buf_step;
436 } while (page_offset + efx->rx_page_buf_step <= PAGE_SIZE);
439 } while (++count < efx->rx_pages_per_batch);
444 void efx_rx_config_page_split(struct efx_nic *efx)
446 efx->rx_page_buf_step = ALIGN(efx->rx_dma_len + efx->rx_ip_align +
449 efx->rx_bufs_per_page = efx->rx_buffer_order ? 1 :
451 efx->rx_page_buf_step);
452 efx->rx_buffer_truesize = (PAGE_SIZE << efx->rx_buffer_order) /
453 efx->rx_bufs_per_page;
454 efx->rx_pages_per_batch = DIV_ROUND_UP(EFX_RX_PREFERRED_BATCH,
455 efx->rx_bufs_per_page);
471 struct efx_nic *efx = rx_queue->efx;
480 EFX_WARN_ON_ONCE_PARANOID(fill_level > rx_queue->efx->rxq_entries);
490 batch_size = efx->rx_pages_per_batch * efx->rx_bufs_per_page;
494 netif_vdbg(rx_queue->efx, rx_status, rx_queue->efx->net_dev,
509 netif_vdbg(rx_queue->efx, rx_status, rx_queue->efx->net_dev,
527 struct efx_nic *efx = channel->efx;
539 if (efx->net_dev->features & NETIF_F_RXHASH &&
540 efx_rx_buf_hash_valid(efx, eh))
541 skb_set_hash(skb, efx_rx_buf_hash(efx, eh),
565 skb->truesize += n_frags * efx->rx_buffer_truesize;
575 struct efx_rss_context *efx_alloc_rss_context_entry(struct efx_nic *efx)
577 struct list_head *head = &efx->rss_context.list;
581 WARN_ON(!mutex_is_locked(&efx->rss_lock));
608 struct efx_rss_context *efx_find_rss_context_entry(struct efx_nic *efx, u32 id)
610 struct list_head *head = &efx->rss_context.list;
613 WARN_ON(!mutex_is_locked(&efx->rss_lock));
627 void efx_set_default_rx_indir_table(struct efx_nic *efx,
634 ethtool_rxfh_indir_default(i, efx->rss_spread);
721 struct hlist_head *efx_rps_hash_bucket(struct efx_nic *efx,
726 lockdep_assert_held(&efx->rps_hash_lock);
727 if (!efx->rps_hash_table)
729 return &efx->rps_hash_table[hash % EFX_ARFS_HASH_TABLE_SIZE];
732 struct efx_arfs_rule *efx_rps_hash_find(struct efx_nic *efx,
739 head = efx_rps_hash_bucket(efx, spec);
750 struct efx_arfs_rule *efx_rps_hash_add(struct efx_nic *efx,
758 head = efx_rps_hash_bucket(efx, spec);
777 void efx_rps_hash_del(struct efx_nic *efx, const struct efx_filter_spec *spec)
783 head = efx_rps_hash_bucket(efx, spec);
807 int efx_probe_filters(struct efx_nic *efx)
811 mutex_lock(&efx->mac_lock);
812 down_write(&efx->filter_sem);
813 rc = efx->type->filter_table_probe(efx);
818 if (efx->type->offload_features & NETIF_F_NTUPLE) {
822 efx_for_each_channel(channel, efx) {
824 kcalloc(efx->type->max_rx_ip_filters,
831 i < efx->type->max_rx_ip_filters;
840 efx_for_each_channel(channel, efx) {
844 efx->type->filter_table_remove(efx);
851 up_write(&efx->filter_sem);
852 mutex_unlock(&efx->mac_lock);
856 void efx_remove_filters(struct efx_nic *efx)
861 efx_for_each_channel(channel, efx) {
867 down_write(&efx->filter_sem);
868 efx->type->filter_table_remove(efx);
869 up_write(&efx->filter_sem);
878 struct efx_nic *efx = netdev_priv(req->net_dev);
879 struct efx_channel *channel = efx_get_channel(efx, req->rxq_index);
880 int slot_idx = req - efx->rps_slot;
885 rc = efx->type->filter_insert(efx, &req->spec, true);
888 rc %= efx->type->max_rx_ip_filters;
889 if (efx->rps_hash_table) {
890 spin_lock_bh(&efx->rps_hash_lock);
891 rule = efx_rps_hash_find(efx, &req->spec);
905 spin_unlock_bh(&efx->rps_hash_lock);
911 mutex_lock(&efx->rps_mutex);
915 mutex_unlock(&efx->rps_mutex);
918 netif_info(efx, rx_status, efx->net_dev,
925 netif_info(efx, rx_status, efx->net_dev,
934 netif_dbg(efx, rx_status, efx->net_dev,
941 netif_dbg(efx, rx_status, efx->net_dev,
956 clear_bit(slot_idx, &efx->rps_slot_map);
963 struct efx_nic *efx = netdev_priv(net_dev);
973 if (!test_and_set_bit(slot_idx, &efx->rps_slot_map))
997 req = efx->rps_slot + slot_idx;
999 efx->rx_scatter ? EFX_FILTER_FLAG_RX_SCATTER : 0,
1021 if (efx->rps_hash_table) {
1023 spin_lock(&efx->rps_hash_lock);
1024 rule = efx_rps_hash_add(efx, &req->spec, &new);
1030 rule->arfs_id = efx->rps_next_id++ % RPS_NO_FILTER;
1038 spin_unlock(&efx->rps_hash_lock);
1056 spin_unlock(&efx->rps_hash_lock);
1058 clear_bit(slot_idx, &efx->rps_slot_map);
1064 bool (*expire_one)(struct efx_nic *efx, u32 flow_id, unsigned int index);
1065 struct efx_nic *efx = channel->efx;
1069 if (!mutex_trylock(&efx->rps_mutex))
1071 expire_one = efx->type->filter_rfs_expire_one;
1074 size = efx->type->max_rx_ip_filters;
1080 if (expire_one(efx, flow_id, index)) {
1081 netif_info(efx, rx_status, efx->net_dev,
1100 mutex_unlock(&efx->rps_mutex);