Blame include/opensm/osm_sm.h

Packit Service 54dbc3
/*
Packit Service 54dbc3
 * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.
Packit Service 54dbc3
 * Copyright (c) 2002-2011 Mellanox Technologies LTD. All rights reserved.
Packit Service 54dbc3
 * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
Packit Service 54dbc3
 *
Packit Service 54dbc3
 * This software is available to you under a choice of one of two
Packit Service 54dbc3
 * licenses.  You may choose to be licensed under the terms of the GNU
Packit Service 54dbc3
 * General Public License (GPL) Version 2, available from the file
Packit Service 54dbc3
 * COPYING in the main directory of this source tree, or the
Packit Service 54dbc3
 * OpenIB.org BSD license below:
Packit Service 54dbc3
 *
Packit Service 54dbc3
 *     Redistribution and use in source and binary forms, with or
Packit Service 54dbc3
 *     without modification, are permitted provided that the following
Packit Service 54dbc3
 *     conditions are met:
Packit Service 54dbc3
 *
Packit Service 54dbc3
 *      - Redistributions of source code must retain the above
Packit Service 54dbc3
 *        copyright notice, this list of conditions and the following
Packit Service 54dbc3
 *        disclaimer.
Packit Service 54dbc3
 *
Packit Service 54dbc3
 *      - Redistributions in binary form must reproduce the above
Packit Service 54dbc3
 *        copyright notice, this list of conditions and the following
Packit Service 54dbc3
 *        disclaimer in the documentation and/or other materials
Packit Service 54dbc3
 *        provided with the distribution.
Packit Service 54dbc3
 *
Packit Service 54dbc3
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
Packit Service 54dbc3
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Packit Service 54dbc3
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
Packit Service 54dbc3
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
Packit Service 54dbc3
 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
Packit Service 54dbc3
 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
Packit Service 54dbc3
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
Packit Service 54dbc3
 * SOFTWARE.
Packit Service 54dbc3
 *
Packit Service 54dbc3
 */
Packit Service 54dbc3
Packit Service 54dbc3
/*
Packit Service 54dbc3
 * Abstract:
Packit Service 54dbc3
 * 	Declaration of osm_sm_t.
Packit Service 54dbc3
 *	This object represents an IBA subnet.
Packit Service 54dbc3
 *	This object is part of the OpenSM family of objects.
Packit Service 54dbc3
 */
Packit Service 54dbc3
Packit Service 54dbc3
#ifndef _OSM_SM_H_
Packit Service 54dbc3
#define _OSM_SM_H_
Packit Service 54dbc3
Packit Service 54dbc3
#include <iba/ib_types.h>
Packit Service 54dbc3
#include <complib/cl_passivelock.h>
Packit Service 54dbc3
#include <complib/cl_event.h>
Packit Service 54dbc3
#include <complib/cl_thread.h>
Packit Service 54dbc3
#include <complib/cl_dispatcher.h>
Packit Service 54dbc3
#include <complib/cl_event_wheel.h>
Packit Service 54dbc3
#include <vendor/osm_vendor_api.h>
Packit Service 54dbc3
#include <opensm/osm_stats.h>
Packit Service 54dbc3
#include <opensm/osm_subnet.h>
Packit Service 54dbc3
#include <opensm/osm_vl15intf.h>
Packit Service 54dbc3
#include <opensm/osm_mad_pool.h>
Packit Service 54dbc3
#include <opensm/osm_log.h>
Packit Service 54dbc3
#include <opensm/osm_sm_mad_ctrl.h>
Packit Service 54dbc3
#include <opensm/osm_lid_mgr.h>
Packit Service 54dbc3
#include <opensm/osm_ucast_mgr.h>
Packit Service 54dbc3
#include <opensm/osm_port.h>
Packit Service 54dbc3
#include <opensm/osm_db.h>
Packit Service 54dbc3
#include <opensm/osm_remote_sm.h>
Packit Service 54dbc3
Packit Service 54dbc3
#ifdef __cplusplus
Packit Service 54dbc3
#  define BEGIN_C_DECLS extern "C" {
Packit Service 54dbc3
#  define END_C_DECLS   }
Packit Service 54dbc3
#else				/* !__cplusplus */
Packit Service 54dbc3
#  define BEGIN_C_DECLS
Packit Service 54dbc3
#  define END_C_DECLS
Packit Service 54dbc3
#endif				/* __cplusplus */
Packit Service 54dbc3
Packit Service 54dbc3
BEGIN_C_DECLS
Packit Service 54dbc3
/****h* OpenSM/SM
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	SM
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	The SM object encapsulates the information needed by the
Packit Service 54dbc3
*	OpenSM to instantiate a subnet manager.  The OpenSM allocates
Packit Service 54dbc3
*	one SM object per subnet manager.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	The SM object is thread safe.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	This object should be treated as opaque and should
Packit Service 54dbc3
*	be manipulated only through the provided functions.
Packit Service 54dbc3
*
Packit Service 54dbc3
* AUTHOR
Packit Service 54dbc3
*	Steve King, Intel
Packit Service 54dbc3
*
Packit Service 54dbc3
*********/
Packit Service 54dbc3
/****s* OpenSM: SM/osm_sm_t
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*  osm_sm_t
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*  Subnet Manager structure.
Packit Service 54dbc3
*
Packit Service 54dbc3
*  This object should be treated as opaque and should
Packit Service 54dbc3
*  be manipulated only through the provided functions.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
typedef struct osm_sm {
Packit Service 54dbc3
	osm_thread_state_t thread_state;
Packit Service 54dbc3
	unsigned signal_mask;
Packit Service 54dbc3
	cl_spinlock_t signal_lock;
Packit Service 54dbc3
	cl_spinlock_t state_lock;
Packit Service 54dbc3
	cl_event_t signal_event;
Packit Service 54dbc3
	cl_event_t subnet_up_event;
Packit Service 54dbc3
	cl_timer_t sweep_timer;
Packit Service 54dbc3
	cl_timer_t polling_timer;
Packit Service 54dbc3
	cl_event_wheel_t trap_aging_tracker;
Packit Service 54dbc3
	cl_thread_t sweeper;
Packit Service 54dbc3
	unsigned master_sm_found;
Packit Service 54dbc3
	uint32_t retry_number;
Packit Service 54dbc3
	ib_net64_t master_sm_guid;
Packit Service 54dbc3
	ib_net64_t polling_sm_guid;
Packit Service 54dbc3
	osm_subn_t *p_subn;
Packit Service 54dbc3
	osm_db_t *p_db;
Packit Service 54dbc3
	osm_vendor_t *p_vendor;
Packit Service 54dbc3
	osm_log_t *p_log;
Packit Service 54dbc3
	osm_mad_pool_t *p_mad_pool;
Packit Service 54dbc3
	osm_vl15_t *p_vl15;
Packit Service 54dbc3
	cl_dispatcher_t *p_disp;
Packit Service 54dbc3
	cl_plock_t *p_lock;
Packit Service 54dbc3
	atomic32_t sm_trans_id;
Packit Service 54dbc3
	uint16_t mlids_init_max;
Packit Service 54dbc3
	unsigned mlids_req_max;
Packit Service 54dbc3
	uint8_t *mlids_req;
Packit Service 54dbc3
	osm_sm_mad_ctrl_t mad_ctrl;
Packit Service 54dbc3
	osm_lid_mgr_t lid_mgr;
Packit Service 54dbc3
	osm_ucast_mgr_t ucast_mgr;
Packit Service 54dbc3
	cl_disp_reg_handle_t sweep_fail_disp_h;
Packit Service 54dbc3
	cl_disp_reg_handle_t ni_disp_h;
Packit Service 54dbc3
	cl_disp_reg_handle_t pi_disp_h;
Packit Service 54dbc3
	cl_disp_reg_handle_t gi_disp_h;
Packit Service 54dbc3
	cl_disp_reg_handle_t nd_disp_h;
Packit Service 54dbc3
	cl_disp_reg_handle_t si_disp_h;
Packit Service 54dbc3
	cl_disp_reg_handle_t lft_disp_h;
Packit Service 54dbc3
	cl_disp_reg_handle_t mft_disp_h;
Packit Service 54dbc3
	cl_disp_reg_handle_t sm_info_disp_h;
Packit Service 54dbc3
	cl_disp_reg_handle_t trap_disp_h;
Packit Service 54dbc3
	cl_disp_reg_handle_t slvl_disp_h;
Packit Service 54dbc3
	cl_disp_reg_handle_t vla_disp_h;
Packit Service 54dbc3
	cl_disp_reg_handle_t pkey_disp_h;
Packit Service 54dbc3
	cl_disp_reg_handle_t mlnx_epi_disp_h;
Packit Service 54dbc3
} osm_sm_t;
Packit Service 54dbc3
/*
Packit Service 54dbc3
* FIELDS
Packit Service 54dbc3
*	p_subn
Packit Service 54dbc3
*		Pointer to the Subnet object for this subnet.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_db
Packit Service 54dbc3
*		Pointer to the database (persistency) object
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_vendor
Packit Service 54dbc3
*		Pointer to the vendor specific interfaces object.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_log
Packit Service 54dbc3
*		Pointer to the log object.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_mad_pool
Packit Service 54dbc3
*		Pointer to the MAD pool.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_vl15
Packit Service 54dbc3
*		Pointer to the VL15 interface.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	mad_ctrl
Packit Service 54dbc3
*		MAD Controller.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_disp
Packit Service 54dbc3
*		Pointer to the Dispatcher.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_lock
Packit Service 54dbc3
*		Pointer to the serializing lock.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*	SM object
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: SM/osm_sm_construct
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_sm_construct
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	This function constructs an SM object.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
void osm_sm_construct(IN osm_sm_t * p_sm);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*	p_sm
Packit Service 54dbc3
*		[in] Pointer to a SM object to construct.
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUE
Packit Service 54dbc3
*	This function does not return a value.
Packit Service 54dbc3
*
Packit Service 54dbc3
* NOTES
Packit Service 54dbc3
*	Allows calling osm_sm_init, osm_sm_destroy
Packit Service 54dbc3
*
Packit Service 54dbc3
*	Calling osm_sm_construct is a prerequisite to calling any other
Packit Service 54dbc3
*	method except osm_sm_init.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*	SM object, osm_sm_init, osm_sm_destroy
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: SM/osm_sm_shutdown
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_sm_shutdown
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	The osm_sm_shutdown function shutdowns an SM, stopping the sweeper
Packit Service 54dbc3
*	and unregistering all messages from the dispatcher
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
void osm_sm_shutdown(IN osm_sm_t * p_sm);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*	p_sm
Packit Service 54dbc3
*		[in] Pointer to a SM object to shutdown.
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUE
Packit Service 54dbc3
*	This function does not return a value.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*	SM object, osm_sm_construct, osm_sm_init
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: SM/osm_sm_destroy
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_sm_destroy
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	The osm_sm_destroy function destroys an SM, releasing
Packit Service 54dbc3
*	all resources.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
void osm_sm_destroy(IN osm_sm_t * p_sm);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*	p_sm
Packit Service 54dbc3
*		[in] Pointer to a SM object to destroy.
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUE
Packit Service 54dbc3
*	This function does not return a value.
Packit Service 54dbc3
*
Packit Service 54dbc3
* NOTES
Packit Service 54dbc3
*	Performs any necessary cleanup of the specified SM object.
Packit Service 54dbc3
*	Further operations should not be attempted on the destroyed object.
Packit Service 54dbc3
*	This function should only be called after a call to osm_sm_construct or
Packit Service 54dbc3
*	osm_sm_init.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*	SM object, osm_sm_construct, osm_sm_init
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: SM/osm_sm_init
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_sm_init
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	The osm_sm_init function initializes a SM object for use.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
ib_api_status_t osm_sm_init(IN osm_sm_t * p_sm, IN osm_subn_t * p_subn,
Packit Service 54dbc3
			    IN osm_db_t * p_db, IN osm_vendor_t * p_vendor,
Packit Service 54dbc3
			    IN osm_mad_pool_t * p_mad_pool,
Packit Service 54dbc3
			    IN osm_vl15_t * p_vl15, IN osm_log_t * p_log,
Packit Service 54dbc3
			    IN osm_stats_t * p_stats,
Packit Service 54dbc3
			    IN cl_dispatcher_t * p_disp, IN cl_plock_t * p_lock);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*	p_sm
Packit Service 54dbc3
*		[in] Pointer to an osm_sm_t object to initialize.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_subn
Packit Service 54dbc3
*		[in] Pointer to the Subnet object for this subnet.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_vendor
Packit Service 54dbc3
*		[in] Pointer to the vendor specific interfaces object.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_mad_pool
Packit Service 54dbc3
*		[in] Pointer to the MAD pool.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_vl15
Packit Service 54dbc3
*		[in] Pointer to the VL15 interface.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_log
Packit Service 54dbc3
*		[in] Pointer to the log object.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_stats
Packit Service 54dbc3
*		[in] Pointer to the statistics object.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_disp
Packit Service 54dbc3
*		[in] Pointer to the OpenSM central Dispatcher.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_lock
Packit Service 54dbc3
*		[in] Pointer to the OpenSM serializing lock.
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*	IB_SUCCESS if the SM object was initialized successfully.
Packit Service 54dbc3
*
Packit Service 54dbc3
* NOTES
Packit Service 54dbc3
*	Allows calling other SM methods.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*	SM object, osm_sm_construct, osm_sm_destroy
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: SM/osm_sm_signal
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_sm_signal
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Signal event to SM
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
void osm_sm_signal(IN osm_sm_t * p_sm, osm_signal_t signal);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*	p_sm
Packit Service 54dbc3
*		[in] Pointer to an osm_sm_t object.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	signal
Packit Service 54dbc3
*		[in] sm signal number.
Packit Service 54dbc3
*
Packit Service 54dbc3
* NOTES
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*	SM object
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: SM/osm_sm_sweep
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_sm_sweep
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Initiates a subnet sweep.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
void osm_sm_sweep(IN osm_sm_t * p_sm);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*	p_sm
Packit Service 54dbc3
*		[in] Pointer to an osm_sm_t object.
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*	IB_SUCCESS if the sweep completed successfully.
Packit Service 54dbc3
*
Packit Service 54dbc3
* NOTES
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*	SM object
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: SM/osm_sm_bind
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_sm_bind
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Binds the sm object to a port guid.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
ib_api_status_t osm_sm_bind(IN osm_sm_t * p_sm, IN ib_net64_t port_guid);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*	p_sm
Packit Service 54dbc3
*		[in] Pointer to an osm_sm_t object to bind.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	port_guid
Packit Service 54dbc3
*		[in] Local port GUID with which to bind.
Packit Service 54dbc3
*
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*	None
Packit Service 54dbc3
*
Packit Service 54dbc3
* NOTES
Packit Service 54dbc3
*	A given SM object can only be bound to one port at a time.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: SM/osm_req_get
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_req_get
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Starts the process to transmit a directed route request for
Packit Service 54dbc3
*	the attribute.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
ib_api_status_t osm_req_get(IN osm_sm_t * sm, IN const osm_dr_path_t * p_path,
Packit Service 54dbc3
			    IN ib_net16_t attr_id, IN ib_net32_t attr_mod,
Packit Service 54dbc3
			    IN boolean_t find_mkey, IN ib_net64_t m_key,
Packit Service 54dbc3
			    IN uint32_t timeout, IN cl_disp_msgid_t err_msg,
Packit Service 54dbc3
			    IN const osm_madw_context_t * p_context);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*	sm
Packit Service 54dbc3
*		[in] Pointer to an osm_sm_t object.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_path
Packit Service 54dbc3
*		[in] Pointer to the directed route path to the node
Packit Service 54dbc3
*		from which to retrieve the attribute.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	attr_id
Packit Service 54dbc3
*		[in] Attribute ID to request.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	attr_mod
Packit Service 54dbc3
*		[in] Attribute modifier for this request.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	find_mkey
Packit Service 54dbc3
*		[in] Flag to indicate whether the M_Key should be looked up for
Packit Service 54dbc3
*		     this MAD.
Packit Service 54dbc3
* 	m_key
Packit Service 54dbc3
* 		[in] M_Key value to be send with this MAD. Applied, only when
Packit Service 54dbc3
* 		     find_mkey is FALSE.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	timeout
Packit Service 54dbc3
*		[in] Transaction timeout in msec.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	err_msg
Packit Service 54dbc3
*		[in] Message id with which to post this MAD if an error occurs.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_context
Packit Service 54dbc3
*		[in] Mad wrapper context structure to be copied into the wrapper
Packit Service 54dbc3
*		context, and thus visible to the recipient of the response.
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*	IB_SUCCESS if the request was successful.
Packit Service 54dbc3
*
Packit Service 54dbc3
* NOTES
Packit Service 54dbc3
*	This function asynchronously requests the specified attribute.
Packit Service 54dbc3
*	The response from the node will be routed through the Dispatcher
Packit Service 54dbc3
*	to the appropriate receive controller object.
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: SM/osm_send_req_mad
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*       osm_send_req_mad
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Starts the process to transmit a preallocated/predefined directed route
Packit Service 54dbc3
*	Set() request.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
void osm_send_req_mad(IN osm_sm_t * sm, IN osm_madw_t *p_madw);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*	sm
Packit Service 54dbc3
*		[in] Pointer to an osm_sm_t object.
Packit Service 54dbc3
*	p_madw
Packit Service 54dbc3
*		[in] Pointer to a preallocated MAD buffer
Packit Service 54dbc3
*
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/***f* OpenSM: SM/osm_prepare_req_set
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_prepare_req_set
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Preallocate and fill a directed route Set() MAD w/o sending it.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
osm_madw_t *osm_prepare_req_set(IN osm_sm_t * sm, IN const osm_dr_path_t * p_path,
Packit Service 54dbc3
				IN const uint8_t * p_payload,
Packit Service 54dbc3
				IN size_t payload_size, IN ib_net16_t attr_id,
Packit Service 54dbc3
				IN ib_net32_t attr_mod, IN boolean_t find_mkey,
Packit Service 54dbc3
				IN ib_net64_t m_key, IN uint32_t timeout,
Packit Service 54dbc3
				IN cl_disp_msgid_t err_msg,
Packit Service 54dbc3
				IN const osm_madw_context_t * p_context);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*	sm
Packit Service 54dbc3
*		[in] Pointer to an osm_sm_t object.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_path
Packit Service 54dbc3
*		[in] Pointer to the directed route path of the recipient.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_payload
Packit Service 54dbc3
*		[in] Pointer to the SMP payload to send.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	payload_size
Packit Service 54dbc3
*		[in] The size of the payload to be copied to the SMP data field.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	attr_id
Packit Service 54dbc3
*		[in] Attribute ID to request.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	attr_mod
Packit Service 54dbc3
*		[in] Attribute modifier for this request.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	find_mkey
Packit Service 54dbc3
*		[in] Flag to indicate whether the M_Key should be looked up for
Packit Service 54dbc3
*		     this MAD.
Packit Service 54dbc3
* 	m_key
Packit Service 54dbc3
* 		[in] M_Key value to be send with this MAD. Applied, only when
Packit Service 54dbc3
* 		     find_mkey is FALSE.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	timeout
Packit Service 54dbc3
*		[in] Transaction timeout in msec.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	err_msg
Packit Service 54dbc3
*		[in] Message id with which to post this MAD if an error occurs.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_context
Packit Service 54dbc3
*		[in] Mad wrapper context structure to be copied into the wrapper
Packit Service 54dbc3
*		     context, and thus visible to the recipient of the response.
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*	Pointer the MAD buffer in case of success and NULL in case of failure.
Packit Service 54dbc3
*
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: SM/osm_req_set
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_req_set
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Starts the process to transmit a directed route Set() request.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
ib_api_status_t osm_req_set(IN osm_sm_t * sm, IN const osm_dr_path_t * p_path,
Packit Service 54dbc3
			    IN const uint8_t * p_payload,
Packit Service 54dbc3
			    IN size_t payload_size, IN ib_net16_t attr_id,
Packit Service 54dbc3
			    IN ib_net32_t attr_mod, IN boolean_t find_mkey,
Packit Service 54dbc3
			    IN ib_net64_t m_key, IN uint32_t timeout,
Packit Service 54dbc3
			    IN cl_disp_msgid_t err_msg,
Packit Service 54dbc3
			    IN const osm_madw_context_t * p_context);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*	sm
Packit Service 54dbc3
*		[in] Pointer to an osm_sm_t object.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_path
Packit Service 54dbc3
*		[in] Pointer to the directed route path of the recipient.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_payload
Packit Service 54dbc3
*		[in] Pointer to the SMP payload to send.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	payload_size
Packit Service 54dbc3
*		[in] The size of the payload to be copied to the SMP data field.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	attr_id
Packit Service 54dbc3
*		[in] Attribute ID to request.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	attr_mod
Packit Service 54dbc3
*		[in] Attribute modifier for this request.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	find_mkey
Packit Service 54dbc3
*		[in] Flag to indicate whether the M_Key should be looked up for
Packit Service 54dbc3
*		     this MAD.
Packit Service 54dbc3
*
Packit Service 54dbc3
* 	m_key
Packit Service 54dbc3
* 		[in] M_Key value to be send with this MAD. Applied, only when
Packit Service 54dbc3
* 		     find_mkey is FALSE.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	timeout
Packit Service 54dbc3
*		[in] Transaction timeout in msec.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	err_msg
Packit Service 54dbc3
*		[in] Message id with which to post this MAD if an error occurs.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_context
Packit Service 54dbc3
*		[in] Mad wrapper context structure to be copied into the wrapper
Packit Service 54dbc3
*		context, and thus visible to the recipient of the response.
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*	IB_SUCCESS if the request was successful.
Packit Service 54dbc3
*
Packit Service 54dbc3
* NOTES
Packit Service 54dbc3
*	This function asynchronously requests the specified attribute.
Packit Service 54dbc3
*	The response from the node will be routed through the Dispatcher
Packit Service 54dbc3
*	to the appropriate receive controller object.
Packit Service 54dbc3
*********/
Packit Service 54dbc3
/****f* OpenSM: SM/osm_resp_send
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_resp_send
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Starts the process to transmit a directed route response.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
ib_api_status_t osm_resp_send(IN osm_sm_t * sm,
Packit Service 54dbc3
			      IN const osm_madw_t * p_req_madw,
Packit Service 54dbc3
			      IN ib_net16_t status,
Packit Service 54dbc3
			      IN const uint8_t * p_payload);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*	p_resp
Packit Service 54dbc3
*		[in] Pointer to an osm_resp_t object.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_madw
Packit Service 54dbc3
*		[in] Pointer to the MAD Wrapper object for the requesting MAD
Packit Service 54dbc3
*		to which this response is generated.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	status
Packit Service 54dbc3
*		[in] Status for this response.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_payload
Packit Service 54dbc3
*		[in] Pointer to the payload of the response MAD.
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*	IB_SUCCESS if the response was successful.
Packit Service 54dbc3
*
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: SM/osm_sm_reroute_mlid
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_sm_reroute_mlid
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Requests (schedules) MLID rerouting
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
void osm_sm_reroute_mlid(osm_sm_t * sm, ib_net16_t mlid);
Packit Service 54dbc3
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*	sm
Packit Service 54dbc3
*		[in] Pointer to an osm_sm_t object.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	mlid
Packit Service 54dbc3
*		[in] MLID value
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*	None
Packit Service 54dbc3
*
Packit Service 54dbc3
* NOTES
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: OpenSM/osm_sm_wait_for_subnet_up
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_sm_wait_for_subnet_up
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Blocks the calling thread until the subnet is up.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
static inline cl_status_t osm_sm_wait_for_subnet_up(IN osm_sm_t * p_sm,
Packit Service 54dbc3
						    IN uint32_t wait_us,
Packit Service 54dbc3
						    IN boolean_t interruptible)
Packit Service 54dbc3
{
Packit Service 54dbc3
	return cl_event_wait_on(&p_sm->subnet_up_event, wait_us, interruptible);
Packit Service 54dbc3
}
Packit Service 54dbc3
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*	p_sm
Packit Service 54dbc3
*		[in] Pointer to an osm_sm_t object.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	wait_us
Packit Service 54dbc3
*		[in] Number of microseconds to wait.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	interruptible
Packit Service 54dbc3
*		[in] Indicates whether the wait operation can be interrupted
Packit Service 54dbc3
*		by external signals.
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*	CL_SUCCESS if the wait operation succeeded in response to the event
Packit Service 54dbc3
*	being set.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	CL_TIMEOUT if the specified time period elapses.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	CL_NOT_DONE if the wait was interrupted by an external signal.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	CL_ERROR if the wait operation failed.
Packit Service 54dbc3
*
Packit Service 54dbc3
* NOTES
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: State Manager/osm_sm_is_greater_than
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_sm_is_greater_than
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Compares two SM's (14.4.1.2)
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
static inline boolean_t osm_sm_is_greater_than(IN uint8_t l_priority,
Packit Service 54dbc3
					       IN ib_net64_t l_guid,
Packit Service 54dbc3
					       IN uint8_t r_priority,
Packit Service 54dbc3
					       IN ib_net64_t r_guid)
Packit Service 54dbc3
{
Packit Service 54dbc3
	return (l_priority > r_priority
Packit Service 54dbc3
		|| (l_priority == r_priority
Packit Service 54dbc3
		    && cl_ntoh64(l_guid) < cl_ntoh64(r_guid)));
Packit Service 54dbc3
}
Packit Service 54dbc3
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*	l_priority
Packit Service 54dbc3
*		[in] Priority of the SM on the "left"
Packit Service 54dbc3
*
Packit Service 54dbc3
*	l_guid
Packit Service 54dbc3
*		[in] GUID of the SM on the "left"
Packit Service 54dbc3
*
Packit Service 54dbc3
*	r_priority
Packit Service 54dbc3
*		[in] Priority of the SM on the "right"
Packit Service 54dbc3
*
Packit Service 54dbc3
*	r_guid
Packit Service 54dbc3
*		[in] GUID of the SM on the "right"
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*	Return TRUE if an sm with l_priority and l_guid is higher than an sm
Packit Service 54dbc3
*	with r_priority and r_guid, return FALSE otherwise.
Packit Service 54dbc3
*
Packit Service 54dbc3
* NOTES
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*	State Manager
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: SM State Manager/osm_sm_state_mgr_process
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_sm_state_mgr_process
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Processes and maintains the states of the SM.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
ib_api_status_t osm_sm_state_mgr_process(IN osm_sm_t *sm,
Packit Service 54dbc3
					 IN osm_sm_signal_t signal);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*	sm
Packit Service 54dbc3
*		[in] Pointer to an osm_sm_t object.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	signal
Packit Service 54dbc3
*		[in] Signal to the state SM engine.
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*	None.
Packit Service 54dbc3
*
Packit Service 54dbc3
* NOTES
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*	State Manager
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: SM State Manager/osm_sm_state_mgr_signal_master_is_alive
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_sm_state_mgr_signal_master_is_alive
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Signals that the remote Master SM is alive.
Packit Service 54dbc3
*	Need to clear the retry_number variable.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
void osm_sm_state_mgr_signal_master_is_alive(IN osm_sm_t *sm);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*	sm
Packit Service 54dbc3
*		[in] Pointer to an osm_sm_t object.
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*	None.
Packit Service 54dbc3
*
Packit Service 54dbc3
* NOTES
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*	State Manager
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: SM State Manager/osm_sm_state_mgr_check_legality
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_sm_state_mgr_check_legality
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Checks the legality of the signal received, according to the
Packit Service 54dbc3
*  current state of the SM state machine.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
ib_api_status_t osm_sm_state_mgr_check_legality(IN osm_sm_t *sm,
Packit Service 54dbc3
						IN osm_sm_signal_t signal);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*	sm
Packit Service 54dbc3
*		[in] Pointer to an osm_sm_t object.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	signal
Packit Service 54dbc3
*		[in] Signal to the state SM engine.
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*	None.
Packit Service 54dbc3
*
Packit Service 54dbc3
* NOTES
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*	State Manager
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
void osm_report_sm_state(osm_sm_t *sm);
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: SM State Manager/osm_send_trap144
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_send_trap144
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Send trap 144 to the master SM.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
int osm_send_trap144(osm_sm_t *sm, ib_net16_t local);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*	sm
Packit Service 54dbc3
*		[in] Pointer to an osm_sm_t object.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	local
Packit Service 54dbc3
*		[in] OtherLocalChanges mask in network byte order.
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*	0 on success, non-zero value otherwise.
Packit Service 54dbc3
*
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
void osm_set_sm_priority(osm_sm_t *sm, uint8_t priority);
Packit Service 54dbc3
Packit Service 54dbc3
END_C_DECLS
Packit Service 54dbc3
#endif				/* _OSM_SM_H_ */