The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/ofed/drivers/infiniband/core/smi.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0
    3  *
    4  * Copyright (c) 2004 Mellanox Technologies Ltd.  All rights reserved.
    5  * Copyright (c) 2004 Infinicon Corporation.  All rights reserved.
    6  * Copyright (c) 2004 Intel Corporation.  All rights reserved.
    7  * Copyright (c) 2004 Topspin Corporation.  All rights reserved.
    8  * Copyright (c) 2004-2007 Voltaire Corporation.  All rights reserved.
    9  *
   10  * This software is available to you under a choice of one of two
   11  * licenses.  You may choose to be licensed under the terms of the GNU
   12  * General Public License (GPL) Version 2, available from the file
   13  * COPYING in the main directory of this source tree, or the
   14  * OpenIB.org BSD license below:
   15  *
   16  *     Redistribution and use in source and binary forms, with or
   17  *     without modification, are permitted provided that the following
   18  *     conditions are met:
   19  *
   20  *      - Redistributions of source code must retain the above
   21  *        copyright notice, this list of conditions and the following
   22  *        disclaimer.
   23  *
   24  *      - Redistributions in binary form must reproduce the above
   25  *        copyright notice, this list of conditions and the following
   26  *        disclaimer in the documentation and/or other materials
   27  *        provided with the distribution.
   28  *
   29  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
   30  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
   31  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
   32  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
   33  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
   34  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
   35  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
   36  * SOFTWARE.
   37  *
   38  * $FreeBSD$
   39  */
   40 
   41 #ifndef __SMI_H_
   42 #define __SMI_H_
   43 
   44 #include <rdma/ib_smi.h>
   45 
   46 enum smi_action {
   47         IB_SMI_DISCARD,
   48         IB_SMI_HANDLE
   49 };
   50 
   51 enum smi_forward_action {
   52         IB_SMI_LOCAL,   /* SMP should be completed up the stack */
   53         IB_SMI_SEND,    /* received DR SMP should be forwarded to the send queue */
   54         IB_SMI_FORWARD  /* SMP should be forwarded (for switches only) */
   55 };
   56 
   57 enum smi_action smi_handle_dr_smp_recv(struct ib_smp *smp, bool is_switch,
   58                                        int port_num, int phys_port_cnt);
   59 int smi_get_fwd_port(struct ib_smp *smp);
   60 extern enum smi_forward_action smi_check_forward_dr_smp(struct ib_smp *smp);
   61 extern enum smi_action smi_handle_dr_smp_send(struct ib_smp *smp,
   62                                               bool is_switch, int port_num);
   63 
   64 /*
   65  * Return IB_SMI_HANDLE if the SMP should be handled by the local SMA/SM
   66  * via process_mad
   67  */
   68 static inline enum smi_action smi_check_local_smp(struct ib_smp *smp,
   69                                                   struct ib_device *device)
   70 {
   71         /* C14-9:3 -- We're at the end of the DR segment of path */
   72         /* C14-9:4 -- Hop Pointer = Hop Count + 1 -> give to SMA/SM */
   73         return ((device->process_mad &&
   74                 !ib_get_smp_direction(smp) &&
   75                 (smp->hop_ptr == smp->hop_cnt + 1)) ?
   76                 IB_SMI_HANDLE : IB_SMI_DISCARD);
   77 }
   78 
   79 /*
   80  * Return IB_SMI_HANDLE if the SMP should be handled by the local SMA/SM
   81  * via process_mad
   82  */
   83 static inline enum smi_action smi_check_local_returning_smp(struct ib_smp *smp,
   84                                                    struct ib_device *device)
   85 {
   86         /* C14-13:3 -- We're at the end of the DR segment of path */
   87         /* C14-13:4 -- Hop Pointer == 0 -> give to SM */
   88         return ((device->process_mad &&
   89                 ib_get_smp_direction(smp) &&
   90                 !smp->hop_ptr) ? IB_SMI_HANDLE : IB_SMI_DISCARD);
   91 }
   92 
   93 #endif  /* __SMI_H_ */

Cache object: b54a43ba3847535bc6352666190fcd23


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.