Lines Matching +full:tx +full:- +full:hw +full:- +full:gso +full:- +full:packets

1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
4 /* Copyright (c) 2008-2019, IBM Corporation */
17 #include <linux/dma-mapping.h>
35 /* Restrict usage of GSO, if hardware peer iwarp is unable to process
36 * large packets. try_gso = true lets siw try to use local GSO,
37 * if peer agrees. Not using GSO severly limits siw maximum tx bandwidth.
65 struct ib_device *base_dev = &sdev->base_dev; in siw_device_register()
69 sdev->vendor_part_id = dev_id++; in siw_device_register()
77 siw_dbg(base_dev, "HWaddr=%pM\n", sdev->raw_gid); in siw_device_register()
85 xa_destroy(&sdev->qp_xa); in siw_device_cleanup()
86 xa_destroy(&sdev->mem_xa); in siw_device_cleanup()
93 * (e.g. ARPHRD_FDDI, ARPHRD_ATM, ...) - see in siw_dev_qualified()
96 if (netdev->type == ARPHRD_ETHER || netdev->type == ARPHRD_IEEE802 || in siw_dev_qualified()
97 netdev->type == ARPHRD_NONE || in siw_dev_qualified()
98 (netdev->type == ARPHRD_LOOPBACK && loopback_enabled)) in siw_dev_qualified()
134 return -ENOMEM; in siw_init_cpulist()
153 return -ENOMEM; in siw_init_cpulist()
158 * TX interface.
163 int i, num_cpus, cpu, min_use, node = sdev->numa_node, tx_cpu = -1; in siw_get_tx_cpu()
185 /* Skip any cores which have no TX thread */ in siw_get_tx_cpu()
195 siw_dbg(&sdev->base_dev, in siw_get_tx_cpu()
196 "tx cpu %d, node %d, %d qp's\n", tx_cpu, node, min_use); in siw_get_tx_cpu()
202 pr_warn("siw: no tx cpu found\n"); in siw_get_tx_cpu()
221 return &qp->base_qp; in siw_get_base_qp()
288 base_dev = &sdev->base_dev; in siw_device_create()
290 if (netdev->addr_len) { in siw_device_create()
291 memcpy(sdev->raw_gid, netdev->dev_addr, in siw_device_create()
292 min_t(unsigned int, netdev->addr_len, ETH_ALEN)); in siw_device_create()
295 * This device does not have a HW address, but in siw_device_create()
298 eth_random_addr(sdev->raw_gid); in siw_device_create()
300 addrconf_addr_eui48((u8 *)&base_dev->node_guid, sdev->raw_gid); in siw_device_create()
302 base_dev->uverbs_cmd_mask |= BIT_ULL(IB_USER_VERBS_CMD_POST_SEND); in siw_device_create()
304 base_dev->node_type = RDMA_NODE_RNIC; in siw_device_create()
305 memcpy(base_dev->node_desc, SIW_NODE_DESC_COMMON, in siw_device_create()
309 * Current model (one-to-one device association): in siw_device_create()
313 base_dev->phys_port_cnt = 1; in siw_device_create()
314 base_dev->num_comp_vectors = num_possible_cpus(); in siw_device_create()
316 xa_init_flags(&sdev->qp_xa, XA_FLAGS_ALLOC1); in siw_device_create()
317 xa_init_flags(&sdev->mem_xa, XA_FLAGS_ALLOC1); in siw_device_create()
324 memcpy(base_dev->iw_ifname, netdev->name, in siw_device_create()
325 sizeof(base_dev->iw_ifname)); in siw_device_create()
328 base_dev->iw_driver_flags = IW_F_NO_PORT_MAP; in siw_device_create()
330 sdev->attrs.max_qp = SIW_MAX_QP; in siw_device_create()
331 sdev->attrs.max_qp_wr = SIW_MAX_QP_WR; in siw_device_create()
332 sdev->attrs.max_ord = SIW_MAX_ORD_QP; in siw_device_create()
333 sdev->attrs.max_ird = SIW_MAX_IRD_QP; in siw_device_create()
334 sdev->attrs.max_sge = SIW_MAX_SGE; in siw_device_create()
335 sdev->attrs.max_sge_rd = SIW_MAX_SGE_RD; in siw_device_create()
336 sdev->attrs.max_cq = SIW_MAX_CQ; in siw_device_create()
337 sdev->attrs.max_cqe = SIW_MAX_CQE; in siw_device_create()
338 sdev->attrs.max_mr = SIW_MAX_MR; in siw_device_create()
339 sdev->attrs.max_pd = SIW_MAX_PD; in siw_device_create()
340 sdev->attrs.max_mw = SIW_MAX_MW; in siw_device_create()
341 sdev->attrs.max_srq = SIW_MAX_SRQ; in siw_device_create()
342 sdev->attrs.max_srq_wr = SIW_MAX_SRQ_WR; in siw_device_create()
343 sdev->attrs.max_srq_sge = SIW_MAX_SGE; in siw_device_create()
345 INIT_LIST_HEAD(&sdev->cep_list); in siw_device_create()
346 INIT_LIST_HEAD(&sdev->qp_list); in siw_device_create()
348 atomic_set(&sdev->num_ctx, 0); in siw_device_create()
349 atomic_set(&sdev->num_srq, 0); in siw_device_create()
350 atomic_set(&sdev->num_qp, 0); in siw_device_create()
351 atomic_set(&sdev->num_cq, 0); in siw_device_create()
352 atomic_set(&sdev->num_mr, 0); in siw_device_create()
353 atomic_set(&sdev->num_pd, 0); in siw_device_create()
355 sdev->numa_node = dev_to_node(&netdev->dev); in siw_device_create()
356 spin_lock_init(&sdev->lock); in siw_device_create()
372 dev_dbg(&netdev->dev, "siw: event %lu\n", event); in siw_netdev_event()
391 ib_unregister_device_queued(&sdev->base_dev); in siw_netdev_event()
403 ib_device_put(&sdev->base_dev); in siw_netdev_event()
416 int rv = -ENOMEM; in siw_newlink()
419 return -EINVAL; in siw_newlink()
424 return -EEXIST; in siw_newlink()
428 dev_dbg(&netdev->dev, "siw: new device\n"); in siw_newlink()
429 ib_mark_name_assigned_by_user(&sdev->base_dev); in siw_newlink()
432 ib_dealloc_device(&sdev->base_dev); in siw_newlink()
443 * siw_init_module - Initialize Softiwarp module and register with netdev
453 rv = -EINVAL; in siw_init_module()
465 pr_info("siw: Could not start any TX thread\n"); in siw_init_module()
466 rv = -ENOMEM; in siw_init_module()