/* * Copyright (c) 2012 - 2019 Intel Corporation. All rights reserved. * Copyright (c) 2006, 2007, 2008, 2009 QLogic Corporation. All rights reserved. * Copyright (c) 2005, 2006 PathScale, Inc. All rights reserved. * * This software is available to you under a choice of one of two * licenses. You may choose to be licensed under the terms of the GNU * General Public License (GPL) Version 2, available from the file * COPYING in the main directory of this source tree, or the * OpenIB.org BSD license below: * * 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. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ #include <rdma/ib_smi.h> #include <rdma/ib_verbs.h> #include "qib.h" #include "qib_mad.h" /** * qib_ud_loopback - handle send on loopback QPs * @sqp: the sending QP * @swqe: the send work request * * This is called from qib_make_ud_req() to forward a WQE addressed * to the same HCA. * Note that the receive interrupt handler may be calling qib_ud_rcv() * while this is being called. */ static void qib_ud_loopback(struct rvt_qp *sqp, struct rvt_swqe *swqe) { … } /** * qib_make_ud_req - construct a UD request packet * @qp: the QP * @flags: flags to modify and pass back to caller * * Assumes the s_lock is held. * * Return 1 if constructed; otherwise, return 0. */ int qib_make_ud_req(struct rvt_qp *qp, unsigned long *flags) { … } static unsigned qib_lookup_pkey(struct qib_ibport *ibp, u16 pkey) { … } /** * qib_ud_rcv - receive an incoming UD packet * @ibp: the port the packet came in on * @hdr: the packet header * @has_grh: true if the packet has a GRH * @data: the packet data * @tlen: the packet length * @qp: the QP the packet came on * * This is called from qib_qp_rcv() to process an incoming UD packet * for the given QP. * Called at interrupt level. */ void qib_ud_rcv(struct qib_ibport *ibp, struct ib_header *hdr, int has_grh, void *data, u32 tlen, struct rvt_qp *qp) { … }