brintos

brintos / linux-shallow public Read only

0
0
Text · 2.8 KiB · 64e2822 Raw
79 lines · c
1/*2 * Copyright (c) 2014 Intel Corporation.  All rights reserved.3 *4 * This software is available to you under a choice of one of two5 * licenses.  You may choose to be licensed under the terms of the GNU6 * General Public License (GPL) Version 2, available from the file7 * COPYING in the main directory of this source tree, or the8 * OpenIB.org BSD license below:9 *10 *     Redistribution and use in source and binary forms, with or11 *     without modification, are permitted provided that the following12 *     conditions are met:13 *14 *      - Redistributions of source code must retain the above15 *        copyright notice, this list of conditions and the following16 *        disclaimer.17 *18 *      - Redistributions in binary form must reproduce the above19 *        copyright notice, this list of conditions and the following20 *        disclaimer in the documentation and/or other materials21 *        provided with the distribution.22 *23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE30 * SOFTWARE.31 *32 */33 34#ifndef __OPA_SMI_H_35#define __OPA_SMI_H_36 37#include <rdma/ib_smi.h>38#include <rdma/opa_smi.h>39 40#include "smi.h"41 42enum smi_action opa_smi_handle_dr_smp_recv(struct opa_smp *smp, bool is_switch,43				       u32 port_num, int phys_port_cnt);44int opa_smi_get_fwd_port(struct opa_smp *smp);45extern enum smi_forward_action opa_smi_check_forward_dr_smp(struct opa_smp *smp);46extern enum smi_action opa_smi_handle_dr_smp_send(struct opa_smp *smp,47					      bool is_switch, u32 port_num);48 49/*50 * Return IB_SMI_HANDLE if the SMP should be handled by the local SMA/SM51 * via process_mad52 */53static inline enum smi_action opa_smi_check_local_smp(struct opa_smp *smp,54						      struct ib_device *device)55{56	/* C14-9:3 -- We're at the end of the DR segment of path */57	/* C14-9:4 -- Hop Pointer = Hop Count + 1 -> give to SMA/SM */58	return (device->ops.process_mad &&59		!opa_get_smp_direction(smp) &&60		(smp->hop_ptr == smp->hop_cnt + 1)) ?61		IB_SMI_HANDLE : IB_SMI_DISCARD;62}63 64/*65 * Return IB_SMI_HANDLE if the SMP should be handled by the local SMA/SM66 * via process_mad67 */68static inline enum smi_action opa_smi_check_local_returning_smp(struct opa_smp *smp,69								struct ib_device *device)70{71	/* C14-13:3 -- We're at the end of the DR segment of path */72	/* C14-13:4 -- Hop Pointer == 0 -> give to SM */73	return (device->ops.process_mad &&74		opa_get_smp_direction(smp) &&75		!smp->hop_ptr) ? IB_SMI_HANDLE : IB_SMI_DISCARD;76}77 78#endif	/* __OPA_SMI_H_ */79