1d6b92ffaSHans Petter Selasky /*
2d6b92ffaSHans Petter Selasky  * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.
3d6b92ffaSHans Petter Selasky  * Copyright (c) 2002-2011 Mellanox Technologies LTD. All rights reserved.
4d6b92ffaSHans Petter Selasky  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
5d6b92ffaSHans Petter Selasky  *
6d6b92ffaSHans Petter Selasky  * This software is available to you under a choice of one of two
7d6b92ffaSHans Petter Selasky  * licenses.  You may choose to be licensed under the terms of the GNU
8d6b92ffaSHans Petter Selasky  * General Public License (GPL) Version 2, available from the file
9d6b92ffaSHans Petter Selasky  * COPYING in the main directory of this source tree, or the
10d6b92ffaSHans Petter Selasky  * OpenIB.org BSD license below:
11d6b92ffaSHans Petter Selasky  *
12d6b92ffaSHans Petter Selasky  *     Redistribution and use in source and binary forms, with or
13d6b92ffaSHans Petter Selasky  *     without modification, are permitted provided that the following
14d6b92ffaSHans Petter Selasky  *     conditions are met:
15d6b92ffaSHans Petter Selasky  *
16d6b92ffaSHans Petter Selasky  *      - Redistributions of source code must retain the above
17d6b92ffaSHans Petter Selasky  *        copyright notice, this list of conditions and the following
18d6b92ffaSHans Petter Selasky  *        disclaimer.
19d6b92ffaSHans Petter Selasky  *
20d6b92ffaSHans Petter Selasky  *      - Redistributions in binary form must reproduce the above
21d6b92ffaSHans Petter Selasky  *        copyright notice, this list of conditions and the following
22d6b92ffaSHans Petter Selasky  *        disclaimer in the documentation and/or other materials
23d6b92ffaSHans Petter Selasky  *        provided with the distribution.
24d6b92ffaSHans Petter Selasky  *
25d6b92ffaSHans Petter Selasky  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26d6b92ffaSHans Petter Selasky  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27d6b92ffaSHans Petter Selasky  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28d6b92ffaSHans Petter Selasky  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
29d6b92ffaSHans Petter Selasky  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
30d6b92ffaSHans Petter Selasky  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
31d6b92ffaSHans Petter Selasky  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32d6b92ffaSHans Petter Selasky  * SOFTWARE.
33d6b92ffaSHans Petter Selasky  *
34d6b92ffaSHans Petter Selasky  */
35d6b92ffaSHans Petter Selasky 
36d6b92ffaSHans Petter Selasky /*
37d6b92ffaSHans Petter Selasky  * Abstract:
38d6b92ffaSHans Petter Selasky  * 	Declaration of port related objects.
39d6b92ffaSHans Petter Selasky  *	These objects comprise an IBA port.
40d6b92ffaSHans Petter Selasky  *	These objects are part of the OpenSM family of objects.
41d6b92ffaSHans Petter Selasky  */
42d6b92ffaSHans Petter Selasky 
43d6b92ffaSHans Petter Selasky #ifndef _OSM_PORT_H_
44d6b92ffaSHans Petter Selasky #define _OSM_PORT_H_
45d6b92ffaSHans Petter Selasky 
46d6b92ffaSHans Petter Selasky #include <complib/cl_qmap.h>
47d6b92ffaSHans Petter Selasky #include <iba/ib_types.h>
48d6b92ffaSHans Petter Selasky #include <opensm/osm_base.h>
49d6b92ffaSHans Petter Selasky #include <opensm/osm_subnet.h>
50d6b92ffaSHans Petter Selasky #include <opensm/osm_madw.h>
51d6b92ffaSHans Petter Selasky #include <opensm/osm_path.h>
52d6b92ffaSHans Petter Selasky #include <opensm/osm_pkey.h>
53d6b92ffaSHans Petter Selasky 
54d6b92ffaSHans Petter Selasky #ifdef __cplusplus
55d6b92ffaSHans Petter Selasky #  define BEGIN_C_DECLS extern "C" {
56d6b92ffaSHans Petter Selasky #  define END_C_DECLS   }
57d6b92ffaSHans Petter Selasky #else				/* !__cplusplus */
58d6b92ffaSHans Petter Selasky #  define BEGIN_C_DECLS
59d6b92ffaSHans Petter Selasky #  define END_C_DECLS
60d6b92ffaSHans Petter Selasky #endif				/* __cplusplus */
61d6b92ffaSHans Petter Selasky 
62d6b92ffaSHans Petter Selasky BEGIN_C_DECLS
63d6b92ffaSHans Petter Selasky /*
64d6b92ffaSHans Petter Selasky 	Forward references.
65d6b92ffaSHans Petter Selasky */
66d6b92ffaSHans Petter Selasky struct osm_port;
67d6b92ffaSHans Petter Selasky struct osm_node;
68d6b92ffaSHans Petter Selasky struct osm_mgrp;
69d6b92ffaSHans Petter Selasky struct osm_sm;
70d6b92ffaSHans Petter Selasky 
71d6b92ffaSHans Petter Selasky /****h* OpenSM/Physical Port
72d6b92ffaSHans Petter Selasky * NAME
73d6b92ffaSHans Petter Selasky *	Physical Port
74d6b92ffaSHans Petter Selasky *
75d6b92ffaSHans Petter Selasky * DESCRIPTION
76d6b92ffaSHans Petter Selasky *	The Physical Port object encapsulates the information needed by the
77d6b92ffaSHans Petter Selasky *	OpenSM to manage physical ports.  The OpenSM allocates one Physical Port
78d6b92ffaSHans Petter Selasky *	per physical port in the IBA subnet.
79d6b92ffaSHans Petter Selasky *
80d6b92ffaSHans Petter Selasky *	In a switch, one multiple Physical Port objects share the same port GUID.
81d6b92ffaSHans Petter Selasky *	In an end-point, Physical Ports do not share GUID values.
82d6b92ffaSHans Petter Selasky *
83d6b92ffaSHans Petter Selasky *	The Physical Port is not thread safe, thus callers must provide
84d6b92ffaSHans Petter Selasky *	serialization.
85d6b92ffaSHans Petter Selasky *
86d6b92ffaSHans Petter Selasky *	These objects should be treated as opaque and should be
87d6b92ffaSHans Petter Selasky *	manipulated only through the provided functions.
88d6b92ffaSHans Petter Selasky *
89d6b92ffaSHans Petter Selasky * AUTHOR
90d6b92ffaSHans Petter Selasky *	Steve King, Intel
91d6b92ffaSHans Petter Selasky *
92d6b92ffaSHans Petter Selasky *********/
93d6b92ffaSHans Petter Selasky 
94d6b92ffaSHans Petter Selasky /****s* OpenSM: Physical Port/osm_physp_t
95d6b92ffaSHans Petter Selasky * NAME
96d6b92ffaSHans Petter Selasky *	osm_physp_t
97d6b92ffaSHans Petter Selasky *
98d6b92ffaSHans Petter Selasky * DESCRIPTION
99d6b92ffaSHans Petter Selasky *	This object represents a physical port on a switch, router or end-point.
100d6b92ffaSHans Petter Selasky *
101d6b92ffaSHans Petter Selasky *	The osm_physp_t object should be treated as opaque and should
102d6b92ffaSHans Petter Selasky *	be manipulated only through the provided functions.
103d6b92ffaSHans Petter Selasky *
104d6b92ffaSHans Petter Selasky * SYNOPSIS
105d6b92ffaSHans Petter Selasky */
106d6b92ffaSHans Petter Selasky typedef struct osm_physp {
107d6b92ffaSHans Petter Selasky 	ib_port_info_t port_info;
108d6b92ffaSHans Petter Selasky 	ib_mlnx_ext_port_info_t ext_port_info;
109d6b92ffaSHans Petter Selasky 	ib_net64_t port_guid;
110d6b92ffaSHans Petter Selasky 	ib_net64_t (*p_guids)[];
111d6b92ffaSHans Petter Selasky 	uint8_t port_num;
112d6b92ffaSHans Petter Selasky 	struct osm_node *p_node;
113d6b92ffaSHans Petter Selasky 	struct osm_physp *p_remote_physp;
114d6b92ffaSHans Petter Selasky 	boolean_t healthy;
115d6b92ffaSHans Petter Selasky 	uint8_t vl_high_limit;
116d6b92ffaSHans Petter Selasky 	unsigned need_update;
117d6b92ffaSHans Petter Selasky 	unsigned is_prof_ignored;
118d6b92ffaSHans Petter Selasky 	osm_dr_path_t dr_path;
119d6b92ffaSHans Petter Selasky 	osm_pkey_tbl_t pkeys;
120d6b92ffaSHans Petter Selasky 	ib_vl_arb_table_t vl_arb[4];
121d6b92ffaSHans Petter Selasky 	cl_ptr_vector_t slvl_by_port;
122d6b92ffaSHans Petter Selasky 	uint8_t hop_wf;
123d6b92ffaSHans Petter Selasky 	union {
124d6b92ffaSHans Petter Selasky 		struct {
125d6b92ffaSHans Petter Selasky 			ib_sw_cong_setting_t sw_cong_setting;
126d6b92ffaSHans Petter Selasky 		} sw;
127d6b92ffaSHans Petter Selasky 		struct {
128d6b92ffaSHans Petter Selasky 			ib_ca_cong_setting_t ca_cong_setting;
129d6b92ffaSHans Petter Selasky 			ib_cc_tbl_t cc_tbl[OSM_CCT_ENTRY_MAD_BLOCKS];
130d6b92ffaSHans Petter Selasky 		} ca;
131d6b92ffaSHans Petter Selasky 	} cc;
132d6b92ffaSHans Petter Selasky } osm_physp_t;
133d6b92ffaSHans Petter Selasky /*
134d6b92ffaSHans Petter Selasky * FIELDS
135d6b92ffaSHans Petter Selasky *	port_info
136d6b92ffaSHans Petter Selasky *		The IBA defined PortInfo data for this port.
137d6b92ffaSHans Petter Selasky *
138d6b92ffaSHans Petter Selasky *	ext_port_info
139d6b92ffaSHans Petter Selasky *		Mellanox vendor specific ExtendedPortInfo data for this port.
140d6b92ffaSHans Petter Selasky *
141d6b92ffaSHans Petter Selasky *	port_guid
142d6b92ffaSHans Petter Selasky *		Port GUID value of this port.  For switches,
143d6b92ffaSHans Petter Selasky *		all ports share the same GUID value.
144d6b92ffaSHans Petter Selasky *
145d6b92ffaSHans Petter Selasky *	p_guids
146d6b92ffaSHans Petter Selasky *		Pointer to array of GUIDs obtained from GUIDInfo.
147d6b92ffaSHans Petter Selasky *		This pointer is null for switch physical/external ports
148d6b92ffaSHans Petter Selasky *		(used for endports only).
149d6b92ffaSHans Petter Selasky *
150d6b92ffaSHans Petter Selasky *	port_num
151d6b92ffaSHans Petter Selasky *		The port number of this port.  The PortInfo also
152d6b92ffaSHans Petter Selasky *		contains a port_number, but that number is not
153d6b92ffaSHans Petter Selasky *		the port number of this port, but rather the number
154d6b92ffaSHans Petter Selasky *		of the port that received the SMP during discovery.
155d6b92ffaSHans Petter Selasky *		Therefore, we must keep a separate record for this
156d6b92ffaSHans Petter Selasky *		port's port number.
157d6b92ffaSHans Petter Selasky *
158d6b92ffaSHans Petter Selasky *	p_node
159d6b92ffaSHans Petter Selasky *		Pointer to the parent Node object of this Physical Port.
160d6b92ffaSHans Petter Selasky *
161d6b92ffaSHans Petter Selasky *	p_remote_physp
162d6b92ffaSHans Petter Selasky *		Pointer to the Physical Port on the other side of the wire.
163d6b92ffaSHans Petter Selasky *		If this pointer is NULL no link exists at this port.
164d6b92ffaSHans Petter Selasky *
165d6b92ffaSHans Petter Selasky *	healthy
166d6b92ffaSHans Petter Selasky *		Tracks the health of the port. Normally should be TRUE but
167d6b92ffaSHans Petter Selasky *		might change as a result of incoming traps indicating the port
168d6b92ffaSHans Petter Selasky *		healthy is questionable.
169d6b92ffaSHans Petter Selasky *
170d6b92ffaSHans Petter Selasky *	vl_high_limit
171d6b92ffaSHans Petter Selasky *		PortInfo:VLHighLimit value which installed by QoS manager
172d6b92ffaSHans Petter Selasky *		and should be uploaded to port's PortInfo
173d6b92ffaSHans Petter Selasky *
174d6b92ffaSHans Petter Selasky *	need_update
175d6b92ffaSHans Petter Selasky *		When set indicates that port was probably reset and port
176d6b92ffaSHans Petter Selasky *		related tables (PKey, SL2VL, VLArb) require refreshing.
177d6b92ffaSHans Petter Selasky *
178d6b92ffaSHans Petter Selasky *	is_prof_ignored
179d6b92ffaSHans Petter Selasky *		When set indicates that switch port will be ignored by
180d6b92ffaSHans Petter Selasky *		the link load equalization algorithm.
181d6b92ffaSHans Petter Selasky *
182d6b92ffaSHans Petter Selasky *	dr_path
183d6b92ffaSHans Petter Selasky *		The directed route path to this port.
184d6b92ffaSHans Petter Selasky *
185d6b92ffaSHans Petter Selasky *	pkeys
186d6b92ffaSHans Petter Selasky *		osm_pkey_tbl_t object holding the port PKeys.
187d6b92ffaSHans Petter Selasky *
188d6b92ffaSHans Petter Selasky *	vl_arb[]
189d6b92ffaSHans Petter Selasky *		Each Physical Port has 4 sections of VL Arbitration table.
190d6b92ffaSHans Petter Selasky *
191d6b92ffaSHans Petter Selasky *	slvl_by_port
192d6b92ffaSHans Petter Selasky *		A vector of pointers to the sl2vl tables (ordered by input port).
193d6b92ffaSHans Petter Selasky *		Switches have an entry for every other input port (inc SMA=0).
194d6b92ffaSHans Petter Selasky *		On CAs only one per port.
195d6b92ffaSHans Petter Selasky *
196d6b92ffaSHans Petter Selasky *	hop_wf
197d6b92ffaSHans Petter Selasky *		Hop weighting factor to be used in the routing.
198d6b92ffaSHans Petter Selasky *
199d6b92ffaSHans Petter Selasky *	sw_cong_setting
200d6b92ffaSHans Petter Selasky *		Physical port switch congestion settings (switches only)
201d6b92ffaSHans Petter Selasky *
202d6b92ffaSHans Petter Selasky *	ca_cong_setting
203d6b92ffaSHans Petter Selasky *		Physical port ca congestion settings (cas only)
204d6b92ffaSHans Petter Selasky *
205d6b92ffaSHans Petter Selasky *	cc_tbl
206d6b92ffaSHans Petter Selasky *		Physical port ca congestion control table (cas only)
207d6b92ffaSHans Petter Selasky *
208d6b92ffaSHans Petter Selasky * SEE ALSO
209d6b92ffaSHans Petter Selasky *	Port
210d6b92ffaSHans Petter Selasky *********/
211d6b92ffaSHans Petter Selasky 
212d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_construct
213d6b92ffaSHans Petter Selasky * NAME
214d6b92ffaSHans Petter Selasky *	osm_physp_construct
215d6b92ffaSHans Petter Selasky *
216d6b92ffaSHans Petter Selasky * DESCRIPTION
217d6b92ffaSHans Petter Selasky *	Constructs a Physical Port.
218d6b92ffaSHans Petter Selasky *
219d6b92ffaSHans Petter Selasky * SYNOPSIS
220d6b92ffaSHans Petter Selasky */
221d6b92ffaSHans Petter Selasky void osm_physp_construct(IN osm_physp_t * p_physp);
222d6b92ffaSHans Petter Selasky /*
223d6b92ffaSHans Petter Selasky * PARAMETERS
224d6b92ffaSHans Petter Selasky *	p_physp
225d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object to initialize.
226d6b92ffaSHans Petter Selasky *
227d6b92ffaSHans Petter Selasky * RETURN VALUES
228d6b92ffaSHans Petter Selasky *	This function does not return a value.
229d6b92ffaSHans Petter Selasky *
230d6b92ffaSHans Petter Selasky * NOTES
231d6b92ffaSHans Petter Selasky *
232d6b92ffaSHans Petter Selasky * SEE ALSO
233d6b92ffaSHans Petter Selasky *	Port, Physical Port
234d6b92ffaSHans Petter Selasky *********/
235d6b92ffaSHans Petter Selasky 
236d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_init
237d6b92ffaSHans Petter Selasky * NAME
238d6b92ffaSHans Petter Selasky *	osm_physp_init
239d6b92ffaSHans Petter Selasky *
240d6b92ffaSHans Petter Selasky * DESCRIPTION
241d6b92ffaSHans Petter Selasky *	Initializes a Physical Port for use.
242d6b92ffaSHans Petter Selasky *
243d6b92ffaSHans Petter Selasky * SYNOPSIS
244d6b92ffaSHans Petter Selasky */
245d6b92ffaSHans Petter Selasky void osm_physp_init(IN osm_physp_t * p_physp, IN ib_net64_t port_guid,
246d6b92ffaSHans Petter Selasky 		    IN uint8_t port_num, IN const struct osm_node *p_node,
247d6b92ffaSHans Petter Selasky 		    IN osm_bind_handle_t h_bind, IN uint8_t hop_count,
248d6b92ffaSHans Petter Selasky 		    IN const uint8_t * p_initial_path);
249d6b92ffaSHans Petter Selasky /*
250d6b92ffaSHans Petter Selasky * PARAMETERS
251d6b92ffaSHans Petter Selasky *	p_physp
252d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object to initialize.
253d6b92ffaSHans Petter Selasky *
254d6b92ffaSHans Petter Selasky *	port_guid
255d6b92ffaSHans Petter Selasky *		[in] GUID value of this port.  Switch ports all share
256d6b92ffaSHans Petter Selasky *		the same value.
257d6b92ffaSHans Petter Selasky *		Caller should use 0 if the guid is unknown.
258d6b92ffaSHans Petter Selasky *
259d6b92ffaSHans Petter Selasky *	port_num
260d6b92ffaSHans Petter Selasky *		[in] The port number of this port.
261d6b92ffaSHans Petter Selasky *
262d6b92ffaSHans Petter Selasky *	p_node
263d6b92ffaSHans Petter Selasky *		[in] Pointer to the parent Node object of this Physical Port.
264d6b92ffaSHans Petter Selasky *
265d6b92ffaSHans Petter Selasky *	h_bind
266d6b92ffaSHans Petter Selasky *		[in] Bind handle on which this port is accessed.
267d6b92ffaSHans Petter Selasky *		Caller should use OSM_BIND_INVALID_HANDLE if the bind
268d6b92ffaSHans Petter Selasky *		handle to this port is unknown.
269d6b92ffaSHans Petter Selasky *
270d6b92ffaSHans Petter Selasky *	hop_count
271d6b92ffaSHans Petter Selasky *		[in] Directed route hop count to reach this port.
272d6b92ffaSHans Petter Selasky *		Caller should use 0 if the hop count is unknown.
273d6b92ffaSHans Petter Selasky *
274d6b92ffaSHans Petter Selasky *	p_initial_path
275d6b92ffaSHans Petter Selasky *		[in] Pointer to the directed route path to reach this node.
276d6b92ffaSHans Petter Selasky *		Caller should use NULL if the path is unknown.
277d6b92ffaSHans Petter Selasky *
278d6b92ffaSHans Petter Selasky * RETURN VALUES
279d6b92ffaSHans Petter Selasky *	This function does not return a value.
280d6b92ffaSHans Petter Selasky *
281d6b92ffaSHans Petter Selasky * NOTES
282d6b92ffaSHans Petter Selasky *
283d6b92ffaSHans Petter Selasky * SEE ALSO
284d6b92ffaSHans Petter Selasky *	Port, Physical Port
285d6b92ffaSHans Petter Selasky *********/
286d6b92ffaSHans Petter Selasky 
287d6b92ffaSHans Petter Selasky /****f* OpenSM: Port/void osm_physp_destroy
288d6b92ffaSHans Petter Selasky * NAME
289d6b92ffaSHans Petter Selasky *	osm_physp_destroy
290d6b92ffaSHans Petter Selasky *
291d6b92ffaSHans Petter Selasky * DESCRIPTION
292d6b92ffaSHans Petter Selasky *	This function destroys a Port object.
293d6b92ffaSHans Petter Selasky *
294d6b92ffaSHans Petter Selasky * SYNOPSIS
295d6b92ffaSHans Petter Selasky */
296d6b92ffaSHans Petter Selasky void osm_physp_destroy(IN osm_physp_t * p_physp);
297d6b92ffaSHans Petter Selasky /*
298d6b92ffaSHans Petter Selasky * PARAMETERS
299d6b92ffaSHans Petter Selasky *	p_port
300d6b92ffaSHans Petter Selasky *		[in] Pointer to a PhysPort object to destroy.
301d6b92ffaSHans Petter Selasky *
302d6b92ffaSHans Petter Selasky * RETURN VALUE
303d6b92ffaSHans Petter Selasky *	This function does not return a value.
304d6b92ffaSHans Petter Selasky *
305d6b92ffaSHans Petter Selasky * NOTES
306d6b92ffaSHans Petter Selasky *	Performs any necessary cleanup of the specified PhysPort object.
307d6b92ffaSHans Petter Selasky *	Further operations should not be attempted on the destroyed object.
308d6b92ffaSHans Petter Selasky *	This function should only be called after a call to osm_physp_construct or
309d6b92ffaSHans Petter Selasky *	osm_physp_init.
310d6b92ffaSHans Petter Selasky *
311d6b92ffaSHans Petter Selasky * SEE ALSO
312d6b92ffaSHans Petter Selasky *	Port
313d6b92ffaSHans Petter Selasky *********/
314d6b92ffaSHans Petter Selasky 
315d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_is_valid
316d6b92ffaSHans Petter Selasky * NAME
317d6b92ffaSHans Petter Selasky *	osm_physp_is_valid
318d6b92ffaSHans Petter Selasky *
319d6b92ffaSHans Petter Selasky * DESCRIPTION
320d6b92ffaSHans Petter Selasky *	Returns TRUE if the Physical Port has been successfully initialized.
321d6b92ffaSHans Petter Selasky *	FALSE otherwise.
322d6b92ffaSHans Petter Selasky *
323d6b92ffaSHans Petter Selasky * SYNOPSIS
324d6b92ffaSHans Petter Selasky */
osm_physp_is_valid(IN const osm_physp_t * p_physp)325d6b92ffaSHans Petter Selasky static inline boolean_t osm_physp_is_valid(IN const osm_physp_t * p_physp)
326d6b92ffaSHans Petter Selasky {
327d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_physp);
328d6b92ffaSHans Petter Selasky 	return (p_physp->port_guid != 0);
329d6b92ffaSHans Petter Selasky }
330d6b92ffaSHans Petter Selasky 
331d6b92ffaSHans Petter Selasky /*
332d6b92ffaSHans Petter Selasky * PARAMETERS
333d6b92ffaSHans Petter Selasky *	p_physp
334d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
335d6b92ffaSHans Petter Selasky *
336d6b92ffaSHans Petter Selasky * RETURN VALUES
337d6b92ffaSHans Petter Selasky *	Returns TRUE if the Physical Port has been successfully initialized.
338d6b92ffaSHans Petter Selasky *	FALSE otherwise.
339d6b92ffaSHans Petter Selasky *
340d6b92ffaSHans Petter Selasky * NOTES
341d6b92ffaSHans Petter Selasky *
342d6b92ffaSHans Petter Selasky * SEE ALSO
343d6b92ffaSHans Petter Selasky *	Port, Physical Port
344d6b92ffaSHans Petter Selasky *********/
345d6b92ffaSHans Petter Selasky 
346d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_is_healthy
347d6b92ffaSHans Petter Selasky * NAME
348d6b92ffaSHans Petter Selasky *	osm_physp_is_healthy
349d6b92ffaSHans Petter Selasky *
350d6b92ffaSHans Petter Selasky * DESCRIPTION
351d6b92ffaSHans Petter Selasky *	Returns TRUE if the Physical Port has been maked as healthy
352d6b92ffaSHans Petter Selasky *	FALSE otherwise.
353d6b92ffaSHans Petter Selasky *
354d6b92ffaSHans Petter Selasky * SYNOPSIS
355d6b92ffaSHans Petter Selasky */
osm_physp_is_healthy(IN const osm_physp_t * p_physp)356d6b92ffaSHans Petter Selasky static inline boolean_t osm_physp_is_healthy(IN const osm_physp_t * p_physp)
357d6b92ffaSHans Petter Selasky {
358d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_physp);
359d6b92ffaSHans Petter Selasky 	return p_physp->healthy;
360d6b92ffaSHans Petter Selasky }
361d6b92ffaSHans Petter Selasky 
362d6b92ffaSHans Petter Selasky /*
363d6b92ffaSHans Petter Selasky * PARAMETERS
364d6b92ffaSHans Petter Selasky *	p_physp
365d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
366d6b92ffaSHans Petter Selasky *
367d6b92ffaSHans Petter Selasky * RETURN VALUES
368d6b92ffaSHans Petter Selasky *	Returns TRUE if the Physical Port has been maked as healthy
369d6b92ffaSHans Petter Selasky *	FALSE otherwise.
370d6b92ffaSHans Petter Selasky *  All physical ports are initialized as "healthy" but may be marked
371d6b92ffaSHans Petter Selasky *  otherwise if a received trap claims otherwise.
372d6b92ffaSHans Petter Selasky *
373d6b92ffaSHans Petter Selasky * NOTES
374d6b92ffaSHans Petter Selasky *
375d6b92ffaSHans Petter Selasky * SEE ALSO
376d6b92ffaSHans Petter Selasky *	Port, Physical Port
377d6b92ffaSHans Petter Selasky *********/
378d6b92ffaSHans Petter Selasky 
379d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_link_is_healthy
380d6b92ffaSHans Petter Selasky * NAME
381d6b92ffaSHans Petter Selasky *	osm_link_is_healthy
382d6b92ffaSHans Petter Selasky *
383d6b92ffaSHans Petter Selasky * DESCRIPTION
384d6b92ffaSHans Petter Selasky *	Returns TRUE if the link given by the physical port is health,
385d6b92ffaSHans Petter Selasky *  and FALSE otherwise. Link is healthy if both its physical ports are
386d6b92ffaSHans Petter Selasky *  healthy
387d6b92ffaSHans Petter Selasky *
388d6b92ffaSHans Petter Selasky * SYNOPSIS
389d6b92ffaSHans Petter Selasky */
390d6b92ffaSHans Petter Selasky boolean_t osm_link_is_healthy(IN const osm_physp_t * p_physp);
391d6b92ffaSHans Petter Selasky /*
392d6b92ffaSHans Petter Selasky * PARAMETERS
393d6b92ffaSHans Petter Selasky *	p_physp
394d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
395d6b92ffaSHans Petter Selasky *
396d6b92ffaSHans Petter Selasky * RETURN VALUES
397d6b92ffaSHans Petter Selasky *	TRUE if both physical ports on the link are healthy, and FALSE otherwise.
398d6b92ffaSHans Petter Selasky *  All physical ports are initialized as "healthy" but may be marked
399d6b92ffaSHans Petter Selasky *  otherwise if a received trap claiming otherwise.
400d6b92ffaSHans Petter Selasky *
401d6b92ffaSHans Petter Selasky * NOTES
402d6b92ffaSHans Petter Selasky *
403d6b92ffaSHans Petter Selasky * SEE ALSO
404d6b92ffaSHans Petter Selasky *	Port, Physical Port
405d6b92ffaSHans Petter Selasky *********/
406d6b92ffaSHans Petter Selasky 
407d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_set_health
408d6b92ffaSHans Petter Selasky * NAME
409d6b92ffaSHans Petter Selasky *	osm_physp_set_health
410d6b92ffaSHans Petter Selasky *
411d6b92ffaSHans Petter Selasky * DESCRIPTION
412d6b92ffaSHans Petter Selasky *	Sets the port health flag. TRUE means the port is healthy and
413d6b92ffaSHans Petter Selasky *  should be used for packet routing. FALSE means it should be avoided.
414d6b92ffaSHans Petter Selasky *
415d6b92ffaSHans Petter Selasky * SYNOPSIS
416d6b92ffaSHans Petter Selasky */
osm_physp_set_health(IN osm_physp_t * p_physp,IN boolean_t is_healthy)417d6b92ffaSHans Petter Selasky static inline void osm_physp_set_health(IN osm_physp_t * p_physp,
418d6b92ffaSHans Petter Selasky 					IN boolean_t is_healthy)
419d6b92ffaSHans Petter Selasky {
420d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_physp);
421d6b92ffaSHans Petter Selasky 	p_physp->healthy = is_healthy;
422d6b92ffaSHans Petter Selasky }
423d6b92ffaSHans Petter Selasky 
424d6b92ffaSHans Petter Selasky /*
425d6b92ffaSHans Petter Selasky * PARAMETERS
426d6b92ffaSHans Petter Selasky *	p_physp
427d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
428d6b92ffaSHans Petter Selasky *
429d6b92ffaSHans Petter Selasky *	is_healthy
430d6b92ffaSHans Petter Selasky *		[in] The health value to be assigned to the port.
431d6b92ffaSHans Petter Selasky *		     TRUE if the Physical Port should been maked as healthy
432d6b92ffaSHans Petter Selasky *		     FALSE otherwise.
433d6b92ffaSHans Petter Selasky *
434d6b92ffaSHans Petter Selasky * RETURN VALUES
435d6b92ffaSHans Petter Selasky *  NONE
436d6b92ffaSHans Petter Selasky *
437d6b92ffaSHans Petter Selasky * NOTES
438d6b92ffaSHans Petter Selasky *
439d6b92ffaSHans Petter Selasky * SEE ALSO
440d6b92ffaSHans Petter Selasky *	Port, Physical Port
441d6b92ffaSHans Petter Selasky *********/
442d6b92ffaSHans Petter Selasky 
443d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_set_port_info
444d6b92ffaSHans Petter Selasky * NAME
445d6b92ffaSHans Petter Selasky *	osm_physp_set_port_info
446d6b92ffaSHans Petter Selasky *
447d6b92ffaSHans Petter Selasky * DESCRIPTION
448d6b92ffaSHans Petter Selasky *	Copies the PortInfo attribute into the Physical Port object
449d6b92ffaSHans Petter Selasky *	based on the PortState.
450d6b92ffaSHans Petter Selasky *
451d6b92ffaSHans Petter Selasky * SYNOPSIS
452d6b92ffaSHans Petter Selasky */
453d6b92ffaSHans Petter Selasky void osm_physp_set_port_info(IN osm_physp_t * p_physp,
454d6b92ffaSHans Petter Selasky 					   IN const ib_port_info_t * p_pi,
455d6b92ffaSHans Petter Selasky 					   IN const struct osm_sm * p_sm);
456d6b92ffaSHans Petter Selasky 
457d6b92ffaSHans Petter Selasky /*
458d6b92ffaSHans Petter Selasky * PARAMETERS
459d6b92ffaSHans Petter Selasky *	p_physp
460d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
461d6b92ffaSHans Petter Selasky *
462d6b92ffaSHans Petter Selasky *	p_pi
463d6b92ffaSHans Petter Selasky *		[in] Pointer to the IBA defined PortInfo at this port number.
464d6b92ffaSHans Petter Selasky *
465d6b92ffaSHans Petter Selasky *	p_sm
466d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_sm_t object.
467d6b92ffaSHans Petter Selasky *
468d6b92ffaSHans Petter Selasky * RETURN VALUES
469d6b92ffaSHans Petter Selasky *	This function does not return a value.
470d6b92ffaSHans Petter Selasky *
471d6b92ffaSHans Petter Selasky * NOTES
472d6b92ffaSHans Petter Selasky *
473d6b92ffaSHans Petter Selasky * SEE ALSO
474d6b92ffaSHans Petter Selasky *	Port, Physical Port
475d6b92ffaSHans Petter Selasky *********/
476d6b92ffaSHans Petter Selasky 
477d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_set_base_lid
478d6b92ffaSHans Petter Selasky * NAME
479d6b92ffaSHans Petter Selasky *	osm_physp_set_base_lid
480d6b92ffaSHans Petter Selasky *
481d6b92ffaSHans Petter Selasky * DESCRIPTION
482d6b92ffaSHans Petter Selasky *	Sets the base lid for this Physical Port.
483d6b92ffaSHans Petter Selasky *
484d6b92ffaSHans Petter Selasky * SYNOPSIS
485d6b92ffaSHans Petter Selasky */
osm_physp_set_base_lid(IN osm_physp_t * p_physp,IN ib_net16_t base_lid)486d6b92ffaSHans Petter Selasky static inline void osm_physp_set_base_lid(IN osm_physp_t * p_physp,
487d6b92ffaSHans Petter Selasky 					  IN ib_net16_t base_lid)
488d6b92ffaSHans Petter Selasky {
489d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_physp);
490d6b92ffaSHans Petter Selasky 	CL_ASSERT(osm_physp_is_valid(p_physp));
491d6b92ffaSHans Petter Selasky 	p_physp->port_info.base_lid = base_lid;
492d6b92ffaSHans Petter Selasky }
493d6b92ffaSHans Petter Selasky 
494d6b92ffaSHans Petter Selasky /*
495d6b92ffaSHans Petter Selasky * PARAMETERS
496d6b92ffaSHans Petter Selasky *	p_physp
497d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
498d6b92ffaSHans Petter Selasky *
499d6b92ffaSHans Petter Selasky *	base_lid
500d6b92ffaSHans Petter Selasky *		[in] Lid to set.
501d6b92ffaSHans Petter Selasky *
502d6b92ffaSHans Petter Selasky * NOTES
503d6b92ffaSHans Petter Selasky *
504d6b92ffaSHans Petter Selasky * SEE ALSO
505d6b92ffaSHans Petter Selasky *********/
506d6b92ffaSHans Petter Selasky 
507d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_set_pkey_tbl
508d6b92ffaSHans Petter Selasky * NAME
509d6b92ffaSHans Petter Selasky *  osm_physp_set_pkey_tbl
510d6b92ffaSHans Petter Selasky *
511d6b92ffaSHans Petter Selasky * DESCRIPTION
512d6b92ffaSHans Petter Selasky *  Copies the P_Key table into the Physical Port object.
513d6b92ffaSHans Petter Selasky *
514d6b92ffaSHans Petter Selasky * SYNOPSIS
515d6b92ffaSHans Petter Selasky */
516d6b92ffaSHans Petter Selasky void osm_physp_set_pkey_tbl(IN osm_log_t * p_log, IN const osm_subn_t * p_subn,
517d6b92ffaSHans Petter Selasky 			    IN osm_physp_t * p_physp,
518d6b92ffaSHans Petter Selasky 			    IN ib_pkey_table_t * p_pkey_tbl,
519d6b92ffaSHans Petter Selasky 			    IN uint16_t block_num,
520d6b92ffaSHans Petter Selasky 			    IN boolean_t is_set);
521d6b92ffaSHans Petter Selasky /*
522d6b92ffaSHans Petter Selasky * PARAMETERS
523d6b92ffaSHans Petter Selasky *	p_log
524d6b92ffaSHans Petter Selasky *		[in] Pointer to a log object.
525d6b92ffaSHans Petter Selasky *
526d6b92ffaSHans Petter Selasky *	p_subn
527d6b92ffaSHans Petter Selasky *		[in] Pointer to the subnet data structure.
528d6b92ffaSHans Petter Selasky *
529d6b92ffaSHans Petter Selasky *	p_physp
530d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
531d6b92ffaSHans Petter Selasky *
532d6b92ffaSHans Petter Selasky *	p_pkey_tbl
533d6b92ffaSHans Petter Selasky *		[in] Pointer to the IBA defined P_Key table for this port
534d6b92ffaSHans Petter Selasky *		     number.
535d6b92ffaSHans Petter Selasky *
536d6b92ffaSHans Petter Selasky *	block_num
537d6b92ffaSHans Petter Selasky *		[in] The part of the P_Key table as defined in the IBA
538d6b92ffaSHans Petter Selasky *		     (valid values 0-2047, and is further limited by the
539d6b92ffaSHans Petter Selasky *		     partitionCap).
540d6b92ffaSHans Petter Selasky *
541d6b92ffaSHans Petter Selasky * RETURN VALUES
542d6b92ffaSHans Petter Selasky *  This function does not return a value.
543d6b92ffaSHans Petter Selasky *
544d6b92ffaSHans Petter Selasky * NOTES
545d6b92ffaSHans Petter Selasky *
546d6b92ffaSHans Petter Selasky * SEE ALSO
547d6b92ffaSHans Petter Selasky *  Port, Physical Port
548d6b92ffaSHans Petter Selasky *********/
549d6b92ffaSHans Petter Selasky 
550d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_get_pkey_tbl
551d6b92ffaSHans Petter Selasky * NAME
552d6b92ffaSHans Petter Selasky *  osm_physp_get_pkey_tbl
553d6b92ffaSHans Petter Selasky *
554d6b92ffaSHans Petter Selasky * DESCRIPTION
555d6b92ffaSHans Petter Selasky *  Returns a pointer to the P_Key table object of the Physical Port object.
556d6b92ffaSHans Petter Selasky *
557d6b92ffaSHans Petter Selasky * SYNOPSIS
558d6b92ffaSHans Petter Selasky */
osm_physp_get_pkey_tbl(IN const osm_physp_t * p_physp)559d6b92ffaSHans Petter Selasky static inline const osm_pkey_tbl_t *osm_physp_get_pkey_tbl(IN const osm_physp_t
560d6b92ffaSHans Petter Selasky 							   * p_physp)
561d6b92ffaSHans Petter Selasky {
562d6b92ffaSHans Petter Selasky 	CL_ASSERT(osm_physp_is_valid(p_physp));
563d6b92ffaSHans Petter Selasky 	/*
564d6b92ffaSHans Petter Selasky 	   (14.2.5.7) - the block number valid values are 0-2047, and are
565d6b92ffaSHans Petter Selasky 	   further limited by the size of the P_Key table specified by the
566d6b92ffaSHans Petter Selasky 	   PartitionCap on the node.
567d6b92ffaSHans Petter Selasky 	 */
568d6b92ffaSHans Petter Selasky 	return &p_physp->pkeys;
569d6b92ffaSHans Petter Selasky };
570d6b92ffaSHans Petter Selasky 
571d6b92ffaSHans Petter Selasky /*
572d6b92ffaSHans Petter Selasky * PARAMETERS
573d6b92ffaSHans Petter Selasky *	p_physp
574d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
575d6b92ffaSHans Petter Selasky *
576d6b92ffaSHans Petter Selasky * RETURN VALUES
577d6b92ffaSHans Petter Selasky *  The pointer to the P_Key table object.
578d6b92ffaSHans Petter Selasky *
579d6b92ffaSHans Petter Selasky * NOTES
580d6b92ffaSHans Petter Selasky *
581d6b92ffaSHans Petter Selasky * SEE ALSO
582d6b92ffaSHans Petter Selasky *  Port, Physical Port
583d6b92ffaSHans Petter Selasky *********/
584d6b92ffaSHans Petter Selasky 
585d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_set_slvl_tbl
586d6b92ffaSHans Petter Selasky * NAME
587d6b92ffaSHans Petter Selasky *	osm_physp_set_slvl_tbl
588d6b92ffaSHans Petter Selasky *
589d6b92ffaSHans Petter Selasky * DESCRIPTION
590d6b92ffaSHans Petter Selasky *	Copies the SLtoVL attribute into the Physical Port object.
591d6b92ffaSHans Petter Selasky *
592d6b92ffaSHans Petter Selasky * SYNOPSIS
593d6b92ffaSHans Petter Selasky */
osm_physp_set_slvl_tbl(IN osm_physp_t * p_physp,IN ib_slvl_table_t * p_slvl_tbl,IN uint8_t in_port_num)594d6b92ffaSHans Petter Selasky static inline void osm_physp_set_slvl_tbl(IN osm_physp_t * p_physp,
595d6b92ffaSHans Petter Selasky 					  IN ib_slvl_table_t * p_slvl_tbl,
596d6b92ffaSHans Petter Selasky 					  IN uint8_t in_port_num)
597d6b92ffaSHans Petter Selasky {
598d6b92ffaSHans Petter Selasky 	ib_slvl_table_t *p_tbl;
599d6b92ffaSHans Petter Selasky 
600d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_slvl_tbl);
601d6b92ffaSHans Petter Selasky 	CL_ASSERT(osm_physp_is_valid(p_physp));
602d6b92ffaSHans Petter Selasky 	p_tbl = (ib_slvl_table_t *)cl_ptr_vector_get(&p_physp->slvl_by_port, in_port_num);
603d6b92ffaSHans Petter Selasky 	*p_tbl = *p_slvl_tbl;
604d6b92ffaSHans Petter Selasky }
605d6b92ffaSHans Petter Selasky 
606d6b92ffaSHans Petter Selasky /*
607d6b92ffaSHans Petter Selasky * PARAMETERS
608d6b92ffaSHans Petter Selasky *	p_physp
609d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
610d6b92ffaSHans Petter Selasky *
611d6b92ffaSHans Petter Selasky *	p_slvl_tbl
612d6b92ffaSHans Petter Selasky *		[in] Pointer to the IBA defined SLtoVL map table for this
613d6b92ffaSHans Petter Selasky *		     port number.
614d6b92ffaSHans Petter Selasky *
615d6b92ffaSHans Petter Selasky *	in_port_num
616d6b92ffaSHans Petter Selasky *		[in] Input Port Number for this SLtoVL.
617d6b92ffaSHans Petter Selasky *
618d6b92ffaSHans Petter Selasky * RETURN VALUES
619d6b92ffaSHans Petter Selasky *	This function does not return a value.
620d6b92ffaSHans Petter Selasky *
621d6b92ffaSHans Petter Selasky * NOTES
622d6b92ffaSHans Petter Selasky *
623d6b92ffaSHans Petter Selasky * SEE ALSO
624d6b92ffaSHans Petter Selasky *	Port, Physical Port
625d6b92ffaSHans Petter Selasky *********/
626d6b92ffaSHans Petter Selasky 
627d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_get_slvl_tbl
628d6b92ffaSHans Petter Selasky * NAME
629d6b92ffaSHans Petter Selasky *	osm_physp_get_slvl_tbl
630d6b92ffaSHans Petter Selasky *
631d6b92ffaSHans Petter Selasky * DESCRIPTION
632d6b92ffaSHans Petter Selasky *	Returns a pointer to the SLtoVL attribute of the Physical Port object.
633d6b92ffaSHans Petter Selasky *
634d6b92ffaSHans Petter Selasky * SYNOPSIS
635d6b92ffaSHans Petter Selasky */
osm_physp_get_slvl_tbl(IN const osm_physp_t * p_physp,IN uint8_t in_port_num)636d6b92ffaSHans Petter Selasky static inline ib_slvl_table_t *osm_physp_get_slvl_tbl(IN const osm_physp_t *
637d6b92ffaSHans Petter Selasky 						      p_physp,
638d6b92ffaSHans Petter Selasky 						      IN uint8_t in_port_num)
639d6b92ffaSHans Petter Selasky {
640d6b92ffaSHans Petter Selasky 	ib_slvl_table_t *p_tbl;
641d6b92ffaSHans Petter Selasky 
642d6b92ffaSHans Petter Selasky 	CL_ASSERT(osm_physp_is_valid(p_physp));
643d6b92ffaSHans Petter Selasky 	p_tbl = (ib_slvl_table_t *)cl_ptr_vector_get(&p_physp->slvl_by_port, in_port_num);
644d6b92ffaSHans Petter Selasky 	return p_tbl;
645d6b92ffaSHans Petter Selasky }
646d6b92ffaSHans Petter Selasky 
647d6b92ffaSHans Petter Selasky /*
648d6b92ffaSHans Petter Selasky * PARAMETERS
649d6b92ffaSHans Petter Selasky *	p_physp
650d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
651d6b92ffaSHans Petter Selasky *
652d6b92ffaSHans Petter Selasky *	in_port_num
653d6b92ffaSHans Petter Selasky *		[in] Input Port Number for this SLtoVL.
654d6b92ffaSHans Petter Selasky *
655d6b92ffaSHans Petter Selasky * RETURN VALUES
656d6b92ffaSHans Petter Selasky *	The pointer to the slvl table
657d6b92ffaSHans Petter Selasky *
658d6b92ffaSHans Petter Selasky * NOTES
659d6b92ffaSHans Petter Selasky *
660d6b92ffaSHans Petter Selasky * SEE ALSO
661d6b92ffaSHans Petter Selasky *	Port, Physical Port
662d6b92ffaSHans Petter Selasky *********/
663d6b92ffaSHans Petter Selasky 
664d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_set_vla_tbl
665d6b92ffaSHans Petter Selasky * NAME
666d6b92ffaSHans Petter Selasky *	osm_physp_set_vla_tbl
667d6b92ffaSHans Petter Selasky *
668d6b92ffaSHans Petter Selasky * DESCRIPTION
669d6b92ffaSHans Petter Selasky *	Copies the VL Arbitration attribute into the Physical Port object.
670d6b92ffaSHans Petter Selasky *
671d6b92ffaSHans Petter Selasky * SYNOPSIS
672d6b92ffaSHans Petter Selasky */
osm_physp_set_vla_tbl(IN osm_physp_t * p_physp,IN ib_vl_arb_table_t * p_vla_tbl,IN uint8_t block_num)673d6b92ffaSHans Petter Selasky static inline void osm_physp_set_vla_tbl(IN osm_physp_t * p_physp,
674d6b92ffaSHans Petter Selasky 					 IN ib_vl_arb_table_t * p_vla_tbl,
675d6b92ffaSHans Petter Selasky 					 IN uint8_t block_num)
676d6b92ffaSHans Petter Selasky {
677d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_vla_tbl);
678d6b92ffaSHans Petter Selasky 	CL_ASSERT(osm_physp_is_valid(p_physp));
679d6b92ffaSHans Petter Selasky 	CL_ASSERT((1 <= block_num) && (block_num <= 4));
680d6b92ffaSHans Petter Selasky 	p_physp->vl_arb[block_num - 1] = *p_vla_tbl;
681d6b92ffaSHans Petter Selasky }
682d6b92ffaSHans Petter Selasky 
683d6b92ffaSHans Petter Selasky /*
684d6b92ffaSHans Petter Selasky * PARAMETERS
685d6b92ffaSHans Petter Selasky *	p_physp
686d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
687d6b92ffaSHans Petter Selasky *
688d6b92ffaSHans Petter Selasky *	p_vla_tbl
689d6b92ffaSHans Petter Selasky *		[in] Pointer to the IBA defined VL Arbitration table for this
690d6b92ffaSHans Petter Selasky *		     port number.
691d6b92ffaSHans Petter Selasky *
692d6b92ffaSHans Petter Selasky *	block_num
693d6b92ffaSHans Petter Selasky *		[in] The part of the VL arbitration as defined in the IBA
694d6b92ffaSHans Petter Selasky *		     (valid values 1-4)
695d6b92ffaSHans Petter Selasky *
696d6b92ffaSHans Petter Selasky * RETURN VALUES
697d6b92ffaSHans Petter Selasky *	This function does not return a value.
698d6b92ffaSHans Petter Selasky *
699d6b92ffaSHans Petter Selasky * NOTES
700d6b92ffaSHans Petter Selasky *
701d6b92ffaSHans Petter Selasky * SEE ALSO
702d6b92ffaSHans Petter Selasky *	Port, Physical Port
703d6b92ffaSHans Petter Selasky *********/
704d6b92ffaSHans Petter Selasky 
705d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_get_vla_tbl
706d6b92ffaSHans Petter Selasky * NAME
707d6b92ffaSHans Petter Selasky *	osm_physp_get_vla_tbl
708d6b92ffaSHans Petter Selasky *
709d6b92ffaSHans Petter Selasky * DESCRIPTION
710d6b92ffaSHans Petter Selasky *	Returns a pointer to the VL Arbitration table of the Physical Port object.
711d6b92ffaSHans Petter Selasky *
712d6b92ffaSHans Petter Selasky * SYNOPSIS
713d6b92ffaSHans Petter Selasky */
osm_physp_get_vla_tbl(IN osm_physp_t * p_physp,IN uint8_t block_num)714d6b92ffaSHans Petter Selasky static inline ib_vl_arb_table_t *osm_physp_get_vla_tbl(IN osm_physp_t * p_physp,
715d6b92ffaSHans Petter Selasky 						       IN uint8_t block_num)
716d6b92ffaSHans Petter Selasky {
717d6b92ffaSHans Petter Selasky 	CL_ASSERT(osm_physp_is_valid(p_physp));
718d6b92ffaSHans Petter Selasky 	CL_ASSERT((1 <= block_num) && (block_num <= 4));
719d6b92ffaSHans Petter Selasky 	return &(p_physp->vl_arb[block_num - 1]);
720d6b92ffaSHans Petter Selasky }
721d6b92ffaSHans Petter Selasky 
722d6b92ffaSHans Petter Selasky /*
723d6b92ffaSHans Petter Selasky * PARAMETERS
724d6b92ffaSHans Petter Selasky *	p_physp
725d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
726d6b92ffaSHans Petter Selasky *
727d6b92ffaSHans Petter Selasky *	block_num
728d6b92ffaSHans Petter Selasky *		[in] The part of the VL arbitration as defined in the IBA
729d6b92ffaSHans Petter Selasky *		     (valid values 1-4)
730d6b92ffaSHans Petter Selasky *
731d6b92ffaSHans Petter Selasky * RETURN VALUES
732d6b92ffaSHans Petter Selasky *  The pointer to the VL Arbitration table
733d6b92ffaSHans Petter Selasky *
734d6b92ffaSHans Petter Selasky * NOTES
735d6b92ffaSHans Petter Selasky *
736d6b92ffaSHans Petter Selasky * SEE ALSO
737d6b92ffaSHans Petter Selasky *	Port, Physical Port
738d6b92ffaSHans Petter Selasky *********/
739d6b92ffaSHans Petter Selasky 
740d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_get_remote
741d6b92ffaSHans Petter Selasky * NAME
742d6b92ffaSHans Petter Selasky *	osm_physp_get_remote
743d6b92ffaSHans Petter Selasky *
744d6b92ffaSHans Petter Selasky * DESCRIPTION
745d6b92ffaSHans Petter Selasky *	Returns a pointer to the Physical Port on the other side the wire.
746d6b92ffaSHans Petter Selasky *
747d6b92ffaSHans Petter Selasky * SYNOPSIS
748d6b92ffaSHans Petter Selasky */
osm_physp_get_remote(IN const osm_physp_t * p_physp)749d6b92ffaSHans Petter Selasky static inline osm_physp_t *osm_physp_get_remote(IN const osm_physp_t * p_physp)
750d6b92ffaSHans Petter Selasky {
751d6b92ffaSHans Petter Selasky 	CL_ASSERT(osm_physp_is_valid(p_physp));
752d6b92ffaSHans Petter Selasky 	return p_physp->p_remote_physp;
753d6b92ffaSHans Petter Selasky }
754d6b92ffaSHans Petter Selasky 
755d6b92ffaSHans Petter Selasky /*
756d6b92ffaSHans Petter Selasky * PARAMETERS
757d6b92ffaSHans Petter Selasky *	p_physp
758d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
759d6b92ffaSHans Petter Selasky *
760d6b92ffaSHans Petter Selasky * RETURN VALUES
761d6b92ffaSHans Petter Selasky *	Returns a pointer to the Physical Port on the other side of
762d6b92ffaSHans Petter Selasky *	the wire.  A return value of NULL means there is no link at this port.
763d6b92ffaSHans Petter Selasky *
764d6b92ffaSHans Petter Selasky * NOTES
765d6b92ffaSHans Petter Selasky *
766d6b92ffaSHans Petter Selasky * SEE ALSO
767d6b92ffaSHans Petter Selasky *	Port, Physical Port
768d6b92ffaSHans Petter Selasky *********/
769d6b92ffaSHans Petter Selasky 
770d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_get_port_guid
771d6b92ffaSHans Petter Selasky * NAME
772d6b92ffaSHans Petter Selasky *	osm_physp_get_port_guid
773d6b92ffaSHans Petter Selasky *
774d6b92ffaSHans Petter Selasky * DESCRIPTION
775d6b92ffaSHans Petter Selasky *	Returns the port guid of this physical port.
776d6b92ffaSHans Petter Selasky *
777d6b92ffaSHans Petter Selasky * SYNOPSIS
778d6b92ffaSHans Petter Selasky */
osm_physp_get_port_guid(IN const osm_physp_t * p_physp)779d6b92ffaSHans Petter Selasky static inline ib_net64_t osm_physp_get_port_guid(IN const osm_physp_t * p_physp)
780d6b92ffaSHans Petter Selasky {
781d6b92ffaSHans Petter Selasky 	CL_ASSERT(osm_physp_is_valid(p_physp));
782d6b92ffaSHans Petter Selasky 	return p_physp->port_guid;
783d6b92ffaSHans Petter Selasky }
784d6b92ffaSHans Petter Selasky 
785d6b92ffaSHans Petter Selasky /*
786d6b92ffaSHans Petter Selasky * PARAMETERS
787d6b92ffaSHans Petter Selasky *	p_physp
788d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
789d6b92ffaSHans Petter Selasky *
790d6b92ffaSHans Petter Selasky * RETURN VALUES
791d6b92ffaSHans Petter Selasky *	Returns the port guid of this physical port.
792d6b92ffaSHans Petter Selasky *
793d6b92ffaSHans Petter Selasky * NOTES
794d6b92ffaSHans Petter Selasky *
795d6b92ffaSHans Petter Selasky * SEE ALSO
796d6b92ffaSHans Petter Selasky *	Port, Physical Port
797d6b92ffaSHans Petter Selasky *********/
798d6b92ffaSHans Petter Selasky 
799d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_get_subnet_prefix
800d6b92ffaSHans Petter Selasky * NAME
801d6b92ffaSHans Petter Selasky *	osm_physp_get_subnet_prefix
802d6b92ffaSHans Petter Selasky *
803d6b92ffaSHans Petter Selasky * DESCRIPTION
804d6b92ffaSHans Petter Selasky *	Returns the subnet prefix for this physical port.
805d6b92ffaSHans Petter Selasky *
806d6b92ffaSHans Petter Selasky * SYNOPSIS
807d6b92ffaSHans Petter Selasky */
808d6b92ffaSHans Petter Selasky static inline ib_net64_t
osm_physp_get_subnet_prefix(IN const osm_physp_t * p_physp)809d6b92ffaSHans Petter Selasky osm_physp_get_subnet_prefix(IN const osm_physp_t * p_physp)
810d6b92ffaSHans Petter Selasky {
811d6b92ffaSHans Petter Selasky 	CL_ASSERT(osm_physp_is_valid(p_physp));
812d6b92ffaSHans Petter Selasky 	return p_physp->port_info.subnet_prefix;
813d6b92ffaSHans Petter Selasky }
814d6b92ffaSHans Petter Selasky 
815d6b92ffaSHans Petter Selasky /*
816d6b92ffaSHans Petter Selasky * PARAMETERS
817d6b92ffaSHans Petter Selasky *	p_physp
818d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
819d6b92ffaSHans Petter Selasky *
820d6b92ffaSHans Petter Selasky * RETURN VALUES
821d6b92ffaSHans Petter Selasky *	Returns the subnet prefix for this physical port.
822d6b92ffaSHans Petter Selasky *
823d6b92ffaSHans Petter Selasky * NOTES
824d6b92ffaSHans Petter Selasky *
825d6b92ffaSHans Petter Selasky * SEE ALSO
826d6b92ffaSHans Petter Selasky *	Port, Physical Port
827d6b92ffaSHans Petter Selasky *********/
828d6b92ffaSHans Petter Selasky 
829d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_link_exists
830d6b92ffaSHans Petter Selasky * NAME
831d6b92ffaSHans Petter Selasky *	osm_physp_link_exists
832d6b92ffaSHans Petter Selasky *
833d6b92ffaSHans Petter Selasky * DESCRIPTION
834d6b92ffaSHans Petter Selasky *	Returns TRUE if the Physical Port has a link to the specified port.
835d6b92ffaSHans Petter Selasky *	FALSE otherwise.
836d6b92ffaSHans Petter Selasky *
837d6b92ffaSHans Petter Selasky * SYNOPSIS
838d6b92ffaSHans Petter Selasky */
osm_physp_link_exists(IN const osm_physp_t * p_physp,IN const osm_physp_t * p_remote_physp)839d6b92ffaSHans Petter Selasky static inline boolean_t osm_physp_link_exists(IN const osm_physp_t * p_physp,
840d6b92ffaSHans Petter Selasky 					      IN const osm_physp_t * p_remote_physp)
841d6b92ffaSHans Petter Selasky {
842d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_physp);
843d6b92ffaSHans Petter Selasky 	CL_ASSERT(osm_physp_is_valid(p_physp));
844d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_remote_physp);
845d6b92ffaSHans Petter Selasky 	CL_ASSERT(osm_physp_is_valid(p_remote_physp));
846d6b92ffaSHans Petter Selasky 	return ((p_physp->p_remote_physp == p_remote_physp) &&
847d6b92ffaSHans Petter Selasky 		(p_remote_physp->p_remote_physp == p_physp));
848d6b92ffaSHans Petter Selasky }
849d6b92ffaSHans Petter Selasky 
850d6b92ffaSHans Petter Selasky /*
851d6b92ffaSHans Petter Selasky * PARAMETERS
852d6b92ffaSHans Petter Selasky *	p_physp
853d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
854d6b92ffaSHans Petter Selasky *
855d6b92ffaSHans Petter Selasky *	p_remote_physp
856d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
857d6b92ffaSHans Petter Selasky *
858d6b92ffaSHans Petter Selasky * RETURN VALUES
859d6b92ffaSHans Petter Selasky *	Returns TRUE if the Physical Port has a link to another port.
860d6b92ffaSHans Petter Selasky *	FALSE otherwise.
861d6b92ffaSHans Petter Selasky *
862d6b92ffaSHans Petter Selasky * NOTES
863d6b92ffaSHans Petter Selasky *
864d6b92ffaSHans Petter Selasky * SEE ALSO
865d6b92ffaSHans Petter Selasky *	Port, Physical Port
866d6b92ffaSHans Petter Selasky *********/
867d6b92ffaSHans Petter Selasky 
868d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_link
869d6b92ffaSHans Petter Selasky * NAME
870d6b92ffaSHans Petter Selasky *	osm_physp_link
871d6b92ffaSHans Petter Selasky *
872d6b92ffaSHans Petter Selasky * DESCRIPTION
873d6b92ffaSHans Petter Selasky *	Sets the pointers to the Physical Ports on the other side the wire.
874d6b92ffaSHans Petter Selasky *
875d6b92ffaSHans Petter Selasky * SYNOPSIS
876d6b92ffaSHans Petter Selasky */
osm_physp_link(IN osm_physp_t * p_physp,IN osm_physp_t * p_remote_physp)877d6b92ffaSHans Petter Selasky static inline void osm_physp_link(IN osm_physp_t * p_physp,
878d6b92ffaSHans Petter Selasky 				  IN osm_physp_t * p_remote_physp)
879d6b92ffaSHans Petter Selasky {
880d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_physp);
881d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_remote_physp);
882d6b92ffaSHans Petter Selasky 	p_physp->p_remote_physp = p_remote_physp;
883d6b92ffaSHans Petter Selasky 	p_remote_physp->p_remote_physp = p_physp;
884d6b92ffaSHans Petter Selasky }
885d6b92ffaSHans Petter Selasky 
886d6b92ffaSHans Petter Selasky /*
887d6b92ffaSHans Petter Selasky * PARAMETERS
888d6b92ffaSHans Petter Selasky *	p_physp
889d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object to link.
890d6b92ffaSHans Petter Selasky *
891d6b92ffaSHans Petter Selasky *	p_remote_physp
892d6b92ffaSHans Petter Selasky *		[in] Pointer to the adjacent osm_physp_t object to link.
893d6b92ffaSHans Petter Selasky *
894d6b92ffaSHans Petter Selasky * RETURN VALUES
895d6b92ffaSHans Petter Selasky *	None.
896d6b92ffaSHans Petter Selasky *
897d6b92ffaSHans Petter Selasky * NOTES
898d6b92ffaSHans Petter Selasky *
899d6b92ffaSHans Petter Selasky * SEE ALSO
900d6b92ffaSHans Petter Selasky *	Port, Physical Port
901d6b92ffaSHans Petter Selasky *********/
902d6b92ffaSHans Petter Selasky 
903d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_unlink
904d6b92ffaSHans Petter Selasky * NAME
905d6b92ffaSHans Petter Selasky *	osm_physp_unlink
906d6b92ffaSHans Petter Selasky *
907d6b92ffaSHans Petter Selasky * DESCRIPTION
908d6b92ffaSHans Petter Selasky *	Clears the pointers to the Physical Port on the other side the wire.
909d6b92ffaSHans Petter Selasky *
910d6b92ffaSHans Petter Selasky * SYNOPSIS
911d6b92ffaSHans Petter Selasky */
osm_physp_unlink(IN osm_physp_t * p_physp,IN osm_physp_t * p_remote_physp)912d6b92ffaSHans Petter Selasky static inline void osm_physp_unlink(IN osm_physp_t * p_physp,
913d6b92ffaSHans Petter Selasky 				    IN osm_physp_t * p_remote_physp)
914d6b92ffaSHans Petter Selasky {
915d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_physp);
916d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_remote_physp);
917d6b92ffaSHans Petter Selasky 	CL_ASSERT(osm_physp_link_exists(p_physp, p_remote_physp));
918d6b92ffaSHans Petter Selasky 	p_physp->p_remote_physp = NULL;
919d6b92ffaSHans Petter Selasky 	p_remote_physp->p_remote_physp = NULL;
920d6b92ffaSHans Petter Selasky }
921d6b92ffaSHans Petter Selasky 
922d6b92ffaSHans Petter Selasky /*
923d6b92ffaSHans Petter Selasky * PARAMETERS
924d6b92ffaSHans Petter Selasky *	p_physp
925d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object to link.
926d6b92ffaSHans Petter Selasky *
927d6b92ffaSHans Petter Selasky *	p_remote_physp
928d6b92ffaSHans Petter Selasky *		[in] Pointer to the adjacent osm_physp_t object to link.
929d6b92ffaSHans Petter Selasky *
930d6b92ffaSHans Petter Selasky * RETURN VALUES
931d6b92ffaSHans Petter Selasky *	None.
932d6b92ffaSHans Petter Selasky *
933d6b92ffaSHans Petter Selasky * NOTES
934d6b92ffaSHans Petter Selasky *
935d6b92ffaSHans Petter Selasky * SEE ALSO
936d6b92ffaSHans Petter Selasky *	Port, Physical Port
937d6b92ffaSHans Petter Selasky *********/
938d6b92ffaSHans Petter Selasky 
939d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_has_any_link
940d6b92ffaSHans Petter Selasky * NAME
941d6b92ffaSHans Petter Selasky *	osm_physp_has_any_link
942d6b92ffaSHans Petter Selasky *
943d6b92ffaSHans Petter Selasky * DESCRIPTION
944d6b92ffaSHans Petter Selasky *	Returns TRUE if the Physical Port has a link to another port.
945d6b92ffaSHans Petter Selasky *	FALSE otherwise.
946d6b92ffaSHans Petter Selasky *
947d6b92ffaSHans Petter Selasky * SYNOPSIS
948d6b92ffaSHans Petter Selasky */
osm_physp_has_any_link(IN const osm_physp_t * p_physp)949d6b92ffaSHans Petter Selasky static inline boolean_t osm_physp_has_any_link(IN const osm_physp_t * p_physp)
950d6b92ffaSHans Petter Selasky {
951d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_physp);
952d6b92ffaSHans Petter Selasky 	if (osm_physp_is_valid(p_physp))
953d6b92ffaSHans Petter Selasky 		return (p_physp->p_remote_physp != NULL);
954d6b92ffaSHans Petter Selasky 	else
955d6b92ffaSHans Petter Selasky 		return FALSE;
956d6b92ffaSHans Petter Selasky }
957d6b92ffaSHans Petter Selasky 
958d6b92ffaSHans Petter Selasky /*
959d6b92ffaSHans Petter Selasky * PARAMETERS
960d6b92ffaSHans Petter Selasky *	p_physp
961d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
962d6b92ffaSHans Petter Selasky *
963d6b92ffaSHans Petter Selasky * RETURN VALUES
964d6b92ffaSHans Petter Selasky *	Returns TRUE if the Physical Port has a link to another port.
965d6b92ffaSHans Petter Selasky *	FALSE otherwise.
966d6b92ffaSHans Petter Selasky *
967d6b92ffaSHans Petter Selasky * NOTES
968d6b92ffaSHans Petter Selasky *
969d6b92ffaSHans Petter Selasky * SEE ALSO
970d6b92ffaSHans Petter Selasky *	Port, Physical Port
971d6b92ffaSHans Petter Selasky *********/
972d6b92ffaSHans Petter Selasky 
973d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_get_port_num
974d6b92ffaSHans Petter Selasky * NAME
975d6b92ffaSHans Petter Selasky *	osm_physp_get_port_num
976d6b92ffaSHans Petter Selasky *
977d6b92ffaSHans Petter Selasky * DESCRIPTION
978d6b92ffaSHans Petter Selasky *	Returns the local port number of this Physical Port.
979d6b92ffaSHans Petter Selasky *
980d6b92ffaSHans Petter Selasky * SYNOPSIS
981d6b92ffaSHans Petter Selasky */
osm_physp_get_port_num(IN const osm_physp_t * p_physp)982d6b92ffaSHans Petter Selasky static inline uint8_t osm_physp_get_port_num(IN const osm_physp_t * p_physp)
983d6b92ffaSHans Petter Selasky {
984d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_physp);
985d6b92ffaSHans Petter Selasky 	CL_ASSERT(osm_physp_is_valid(p_physp));
986d6b92ffaSHans Petter Selasky 	return p_physp->port_num;
987d6b92ffaSHans Petter Selasky }
988d6b92ffaSHans Petter Selasky 
989d6b92ffaSHans Petter Selasky /*
990d6b92ffaSHans Petter Selasky * PARAMETERS
991d6b92ffaSHans Petter Selasky *	p_physp
992d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
993d6b92ffaSHans Petter Selasky *
994d6b92ffaSHans Petter Selasky * RETURN VALUES
995d6b92ffaSHans Petter Selasky *	Returns the local port number of this Physical Port.
996d6b92ffaSHans Petter Selasky *
997d6b92ffaSHans Petter Selasky * NOTES
998d6b92ffaSHans Petter Selasky *
999d6b92ffaSHans Petter Selasky * SEE ALSO
1000d6b92ffaSHans Petter Selasky *********/
1001d6b92ffaSHans Petter Selasky 
1002d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_get_node_ptr
1003d6b92ffaSHans Petter Selasky * NAME
1004d6b92ffaSHans Petter Selasky *	osm_physp_get_node_ptr
1005d6b92ffaSHans Petter Selasky *
1006d6b92ffaSHans Petter Selasky * DESCRIPTION
1007d6b92ffaSHans Petter Selasky *	Returns a pointer to the parent Node object for this port.
1008d6b92ffaSHans Petter Selasky *
1009d6b92ffaSHans Petter Selasky * SYNOPSIS
1010d6b92ffaSHans Petter Selasky */
osm_physp_get_node_ptr(IN const osm_physp_t * p_physp)1011d6b92ffaSHans Petter Selasky static inline struct osm_node *osm_physp_get_node_ptr(IN const osm_physp_t *
1012d6b92ffaSHans Petter Selasky 						       p_physp)
1013d6b92ffaSHans Petter Selasky {
1014d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_physp);
1015d6b92ffaSHans Petter Selasky 	CL_ASSERT(osm_physp_is_valid(p_physp));
1016d6b92ffaSHans Petter Selasky 	return p_physp->p_node;
1017d6b92ffaSHans Petter Selasky }
1018d6b92ffaSHans Petter Selasky 
1019d6b92ffaSHans Petter Selasky /*
1020d6b92ffaSHans Petter Selasky * PARAMETERS
1021d6b92ffaSHans Petter Selasky *	p_physp
1022d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
1023d6b92ffaSHans Petter Selasky *
1024d6b92ffaSHans Petter Selasky * RETURN VALUES
1025d6b92ffaSHans Petter Selasky *	Returns a pointer to the parent Node object for this port.
1026d6b92ffaSHans Petter Selasky *
1027d6b92ffaSHans Petter Selasky * NOTES
1028d6b92ffaSHans Petter Selasky *
1029d6b92ffaSHans Petter Selasky * SEE ALSO
1030d6b92ffaSHans Petter Selasky *********/
1031d6b92ffaSHans Petter Selasky 
1032d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_get_port_state
1033d6b92ffaSHans Petter Selasky * NAME
1034d6b92ffaSHans Petter Selasky *	osm_physp_get_port_state
1035d6b92ffaSHans Petter Selasky *
1036d6b92ffaSHans Petter Selasky * DESCRIPTION
1037d6b92ffaSHans Petter Selasky *	Returns the port state of this Physical Port.
1038d6b92ffaSHans Petter Selasky *
1039d6b92ffaSHans Petter Selasky * SYNOPSIS
1040d6b92ffaSHans Petter Selasky */
osm_physp_get_port_state(IN const osm_physp_t * p_physp)1041d6b92ffaSHans Petter Selasky static inline uint8_t osm_physp_get_port_state(IN const osm_physp_t * p_physp)
1042d6b92ffaSHans Petter Selasky {
1043d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_physp);
1044d6b92ffaSHans Petter Selasky 	CL_ASSERT(osm_physp_is_valid(p_physp));
1045d6b92ffaSHans Petter Selasky 	return ib_port_info_get_port_state(&p_physp->port_info);
1046d6b92ffaSHans Petter Selasky }
1047d6b92ffaSHans Petter Selasky 
1048d6b92ffaSHans Petter Selasky /*
1049d6b92ffaSHans Petter Selasky * PARAMETERS
1050d6b92ffaSHans Petter Selasky *	p_physp
1051d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
1052d6b92ffaSHans Petter Selasky *
1053d6b92ffaSHans Petter Selasky * RETURN VALUES
1054d6b92ffaSHans Petter Selasky *	Returns the local port number of this Physical Port.
1055d6b92ffaSHans Petter Selasky *
1056d6b92ffaSHans Petter Selasky * NOTES
1057d6b92ffaSHans Petter Selasky *
1058d6b92ffaSHans Petter Selasky * SEE ALSO
1059d6b92ffaSHans Petter Selasky *********/
1060d6b92ffaSHans Petter Selasky 
1061d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_get_base_lid
1062d6b92ffaSHans Petter Selasky * NAME
1063d6b92ffaSHans Petter Selasky *	osm_physp_get_base_lid
1064d6b92ffaSHans Petter Selasky *
1065d6b92ffaSHans Petter Selasky * DESCRIPTION
1066d6b92ffaSHans Petter Selasky *	Returns the base lid of this Physical Port.
1067d6b92ffaSHans Petter Selasky *
1068d6b92ffaSHans Petter Selasky * SYNOPSIS
1069d6b92ffaSHans Petter Selasky */
osm_physp_get_base_lid(IN const osm_physp_t * p_physp)1070d6b92ffaSHans Petter Selasky static inline ib_net16_t osm_physp_get_base_lid(IN const osm_physp_t * p_physp)
1071d6b92ffaSHans Petter Selasky {
1072d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_physp);
1073d6b92ffaSHans Petter Selasky 	CL_ASSERT(osm_physp_is_valid(p_physp));
1074d6b92ffaSHans Petter Selasky 	return p_physp->port_info.base_lid;
1075d6b92ffaSHans Petter Selasky }
1076d6b92ffaSHans Petter Selasky 
1077d6b92ffaSHans Petter Selasky /*
1078d6b92ffaSHans Petter Selasky * PARAMETERS
1079d6b92ffaSHans Petter Selasky *	p_physp
1080d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
1081d6b92ffaSHans Petter Selasky *
1082d6b92ffaSHans Petter Selasky * RETURN VALUES
1083d6b92ffaSHans Petter Selasky *	Returns the base lid of this Physical Port.
1084d6b92ffaSHans Petter Selasky *
1085d6b92ffaSHans Petter Selasky * NOTES
1086d6b92ffaSHans Petter Selasky *
1087d6b92ffaSHans Petter Selasky * SEE ALSO
1088d6b92ffaSHans Petter Selasky *********/
1089d6b92ffaSHans Petter Selasky 
1090d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_get_lmc
1091d6b92ffaSHans Petter Selasky * NAME
1092d6b92ffaSHans Petter Selasky *	osm_physp_get_lmc
1093d6b92ffaSHans Petter Selasky *
1094d6b92ffaSHans Petter Selasky * DESCRIPTION
1095d6b92ffaSHans Petter Selasky *	Returns the LMC value of this Physical Port.
1096d6b92ffaSHans Petter Selasky *
1097d6b92ffaSHans Petter Selasky * SYNOPSIS
1098d6b92ffaSHans Petter Selasky */
osm_physp_get_lmc(IN const osm_physp_t * p_physp)1099d6b92ffaSHans Petter Selasky static inline uint8_t osm_physp_get_lmc(IN const osm_physp_t * p_physp)
1100d6b92ffaSHans Petter Selasky {
1101d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_physp);
1102d6b92ffaSHans Petter Selasky 	CL_ASSERT(osm_physp_is_valid(p_physp));
1103d6b92ffaSHans Petter Selasky 	return ib_port_info_get_lmc(&p_physp->port_info);
1104d6b92ffaSHans Petter Selasky }
1105d6b92ffaSHans Petter Selasky 
1106d6b92ffaSHans Petter Selasky /*
1107d6b92ffaSHans Petter Selasky * PARAMETERS
1108d6b92ffaSHans Petter Selasky *	p_physp
1109d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
1110d6b92ffaSHans Petter Selasky *
1111d6b92ffaSHans Petter Selasky * RETURN VALUES
1112d6b92ffaSHans Petter Selasky *	Returns the LMC value of this Physical Port.
1113d6b92ffaSHans Petter Selasky *
1114d6b92ffaSHans Petter Selasky * NOTES
1115d6b92ffaSHans Petter Selasky *
1116d6b92ffaSHans Petter Selasky * SEE ALSO
1117d6b92ffaSHans Petter Selasky *********/
1118d6b92ffaSHans Petter Selasky 
1119d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_get_dr_path_ptr
1120d6b92ffaSHans Petter Selasky * NAME
1121d6b92ffaSHans Petter Selasky *	osm_physp_get_dr_path_ptr
1122d6b92ffaSHans Petter Selasky *
1123d6b92ffaSHans Petter Selasky * DESCRIPTION
1124d6b92ffaSHans Petter Selasky *	Returns a pointer to the directed route path for this port.
1125d6b92ffaSHans Petter Selasky *
1126d6b92ffaSHans Petter Selasky * SYNOPSIS
1127d6b92ffaSHans Petter Selasky */
osm_physp_get_dr_path_ptr(IN const osm_physp_t * p_physp)1128d6b92ffaSHans Petter Selasky static inline osm_dr_path_t *osm_physp_get_dr_path_ptr(IN const osm_physp_t *
1129d6b92ffaSHans Petter Selasky 							p_physp)
1130d6b92ffaSHans Petter Selasky {
1131d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_physp);
1132d6b92ffaSHans Petter Selasky 	CL_ASSERT(osm_physp_is_valid(p_physp));
1133d6b92ffaSHans Petter Selasky 	return (osm_dr_path_t *) & p_physp->dr_path;
1134d6b92ffaSHans Petter Selasky }
1135d6b92ffaSHans Petter Selasky 
1136d6b92ffaSHans Petter Selasky /*
1137d6b92ffaSHans Petter Selasky * PARAMETERS
1138d6b92ffaSHans Petter Selasky *	p_physp
1139d6b92ffaSHans Petter Selasky *		[in] Pointer to a Physical Port object.
1140d6b92ffaSHans Petter Selasky *
1141d6b92ffaSHans Petter Selasky * RETURN VALUES
1142d6b92ffaSHans Petter Selasky *	Returns a pointer to the directed route path for this port.
1143d6b92ffaSHans Petter Selasky *
1144d6b92ffaSHans Petter Selasky * NOTES
1145d6b92ffaSHans Petter Selasky *
1146d6b92ffaSHans Petter Selasky * SEE ALSO
1147d6b92ffaSHans Petter Selasky *	Physical Port object
1148d6b92ffaSHans Petter Selasky *********/
1149d6b92ffaSHans Petter Selasky 
1150d6b92ffaSHans Petter Selasky /****h* OpenSM/Port
1151d6b92ffaSHans Petter Selasky * NAME
1152d6b92ffaSHans Petter Selasky *	Port
1153d6b92ffaSHans Petter Selasky *
1154d6b92ffaSHans Petter Selasky * DESCRIPTION
1155d6b92ffaSHans Petter Selasky *	The Port object encapsulates the information needed by the
1156d6b92ffaSHans Petter Selasky *	OpenSM to manage ports.  The OpenSM allocates one Port object
1157d6b92ffaSHans Petter Selasky *	per port in the IBA subnet.
1158d6b92ffaSHans Petter Selasky *
1159d6b92ffaSHans Petter Selasky *	Each Port object is associated with a single port GUID.  A Port object
1160d6b92ffaSHans Petter Selasky *	contains 1 or more Physical Port objects.  An end point node has
1161d6b92ffaSHans Petter Selasky *	one Physical Port per Port.  A switch node has more than
1162d6b92ffaSHans Petter Selasky *	one Physical Port per Port.
1163d6b92ffaSHans Petter Selasky *
1164d6b92ffaSHans Petter Selasky *	The Port object is not thread safe, thus callers must provide
1165d6b92ffaSHans Petter Selasky *	serialization.
1166d6b92ffaSHans Petter Selasky *
1167d6b92ffaSHans Petter Selasky *	These objects should be treated as opaque and should be
1168d6b92ffaSHans Petter Selasky *	manipulated only through the provided functions.
1169d6b92ffaSHans Petter Selasky *
1170d6b92ffaSHans Petter Selasky * AUTHOR
1171d6b92ffaSHans Petter Selasky *	Steve King, Intel
1172d6b92ffaSHans Petter Selasky *
1173d6b92ffaSHans Petter Selasky *********/
1174d6b92ffaSHans Petter Selasky 
1175d6b92ffaSHans Petter Selasky /****s* OpenSM: Port/osm_port_t
1176d6b92ffaSHans Petter Selasky * NAME
1177d6b92ffaSHans Petter Selasky *	osm_port_t
1178d6b92ffaSHans Petter Selasky *
1179d6b92ffaSHans Petter Selasky * DESCRIPTION
1180d6b92ffaSHans Petter Selasky *	This object represents a logical port on a switch, router, or CA.
1181d6b92ffaSHans Petter Selasky *
1182d6b92ffaSHans Petter Selasky *	The osm_port_t object should be treated as opaque and should
1183d6b92ffaSHans Petter Selasky *	be manipulated only through the provided functions.
1184d6b92ffaSHans Petter Selasky *
1185d6b92ffaSHans Petter Selasky * SYNOPSIS
1186d6b92ffaSHans Petter Selasky */
1187d6b92ffaSHans Petter Selasky typedef struct osm_port {
1188d6b92ffaSHans Petter Selasky 	cl_map_item_t map_item;
1189d6b92ffaSHans Petter Selasky 	cl_list_item_t list_item;
1190d6b92ffaSHans Petter Selasky 	struct osm_node *p_node;
1191d6b92ffaSHans Petter Selasky 	ib_net64_t guid;
1192d6b92ffaSHans Petter Selasky 	uint32_t discovery_count;
1193d6b92ffaSHans Petter Selasky 	unsigned is_new;
1194d6b92ffaSHans Petter Selasky 	osm_physp_t *p_physp;
1195d6b92ffaSHans Petter Selasky 	cl_qlist_t mcm_list;
1196d6b92ffaSHans Petter Selasky 	int flag;
1197d6b92ffaSHans Petter Selasky 	int use_scatter;
1198d6b92ffaSHans Petter Selasky 	unsigned int cc_timeout_count;
1199d6b92ffaSHans Petter Selasky 	int cc_unavailable_flag;
1200d6b92ffaSHans Petter Selasky 	void *priv;
1201d6b92ffaSHans Petter Selasky 	ib_net16_t lid;
1202d6b92ffaSHans Petter Selasky } osm_port_t;
1203d6b92ffaSHans Petter Selasky /*
1204d6b92ffaSHans Petter Selasky * FIELDS
1205d6b92ffaSHans Petter Selasky *	map_item
1206d6b92ffaSHans Petter Selasky *		Linkage structure for cl_qmap.  MUST BE FIRST MEMBER!
1207d6b92ffaSHans Petter Selasky *
1208d6b92ffaSHans Petter Selasky *	list_item
1209d6b92ffaSHans Petter Selasky *		Linkage structure for cl_qlist. Used by ucast mgr during
1210d6b92ffaSHans Petter Selasky *		LFT calculation.
1211d6b92ffaSHans Petter Selasky *
1212d6b92ffaSHans Petter Selasky *	p_node
1213d6b92ffaSHans Petter Selasky *		Points to the Node object that owns this port.
1214d6b92ffaSHans Petter Selasky *
1215d6b92ffaSHans Petter Selasky *	guid
1216d6b92ffaSHans Petter Selasky *		Manufacturer assigned GUID for this port.
1217d6b92ffaSHans Petter Selasky *
1218d6b92ffaSHans Petter Selasky *	discovery_count
1219d6b92ffaSHans Petter Selasky *		The number of times this port has been discovered
1220d6b92ffaSHans Petter Selasky *		during the current fabric sweep.  This number is reset
1221d6b92ffaSHans Petter Selasky *		to zero at the start of a sweep.
1222d6b92ffaSHans Petter Selasky *
1223d6b92ffaSHans Petter Selasky *	p_physp
1224d6b92ffaSHans Petter Selasky *		The pointer to physical port used when physical
1225d6b92ffaSHans Petter Selasky *		characteristics contained in the Physical Port are needed.
1226d6b92ffaSHans Petter Selasky *
1227d6b92ffaSHans Petter Selasky *	mcm_list
1228d6b92ffaSHans Petter Selasky *		Multicast member list
1229d6b92ffaSHans Petter Selasky *
1230d6b92ffaSHans Petter Selasky *	flag
1231d6b92ffaSHans Petter Selasky *		Utility flag for port management
1232d6b92ffaSHans Petter Selasky *
1233d6b92ffaSHans Petter Selasky *	cc_timeout_count
1234d6b92ffaSHans Petter Selasky *		Count number of times congestion control config times out.
1235d6b92ffaSHans Petter Selasky *
1236d6b92ffaSHans Petter Selasky *	cc_unavailable_flag
1237d6b92ffaSHans Petter Selasky *		Flag indicating if congestion control is not supported.
1238d6b92ffaSHans Petter Selasky *
1239d6b92ffaSHans Petter Selasky * SEE ALSO
1240d6b92ffaSHans Petter Selasky *	Port, Physical Port, Physical Port Table
1241d6b92ffaSHans Petter Selasky *********/
1242d6b92ffaSHans Petter Selasky 
1243d6b92ffaSHans Petter Selasky /****f* OpenSM: Port/osm_port_delete
1244d6b92ffaSHans Petter Selasky * NAME
1245d6b92ffaSHans Petter Selasky *	osm_port_delete
1246d6b92ffaSHans Petter Selasky *
1247d6b92ffaSHans Petter Selasky * DESCRIPTION
1248d6b92ffaSHans Petter Selasky *	This function destroys and deallocates a Port object.
1249d6b92ffaSHans Petter Selasky *
1250d6b92ffaSHans Petter Selasky * SYNOPSIS
1251d6b92ffaSHans Petter Selasky */
1252d6b92ffaSHans Petter Selasky void osm_port_delete(IN OUT osm_port_t ** pp_port);
1253d6b92ffaSHans Petter Selasky /*
1254d6b92ffaSHans Petter Selasky * PARAMETERS
1255d6b92ffaSHans Petter Selasky *	pp_port
1256d6b92ffaSHans Petter Selasky *		[in][out] Pointer to a pointer to a Port object to delete.
1257d6b92ffaSHans Petter Selasky *		On return, this pointer is NULL.
1258d6b92ffaSHans Petter Selasky *
1259d6b92ffaSHans Petter Selasky * RETURN VALUE
1260d6b92ffaSHans Petter Selasky *	This function does not return a value.
1261d6b92ffaSHans Petter Selasky *
1262d6b92ffaSHans Petter Selasky * NOTES
1263d6b92ffaSHans Petter Selasky *	Performs any necessary cleanup of the specified Port object.
1264d6b92ffaSHans Petter Selasky *
1265d6b92ffaSHans Petter Selasky * SEE ALSO
1266d6b92ffaSHans Petter Selasky *	Port
1267d6b92ffaSHans Petter Selasky *********/
1268d6b92ffaSHans Petter Selasky 
1269d6b92ffaSHans Petter Selasky /****f* OpenSM: Port/osm_port_new
1270d6b92ffaSHans Petter Selasky * NAME
1271d6b92ffaSHans Petter Selasky *	osm_port_new
1272d6b92ffaSHans Petter Selasky *
1273d6b92ffaSHans Petter Selasky * DESCRIPTION
1274d6b92ffaSHans Petter Selasky *	This function allocates and initializes a Port object.
1275d6b92ffaSHans Petter Selasky *
1276d6b92ffaSHans Petter Selasky * SYNOPSIS
1277d6b92ffaSHans Petter Selasky */
1278d6b92ffaSHans Petter Selasky osm_port_t *osm_port_new(IN const ib_node_info_t * p_ni,
1279d6b92ffaSHans Petter Selasky 			 IN struct osm_node *p_parent_node);
1280d6b92ffaSHans Petter Selasky /*
1281d6b92ffaSHans Petter Selasky * PARAMETERS
1282d6b92ffaSHans Petter Selasky *	p_ni
1283d6b92ffaSHans Petter Selasky *		[in] Pointer to the NodeInfo attribute relevant for this port.
1284d6b92ffaSHans Petter Selasky *
1285d6b92ffaSHans Petter Selasky *	p_parent_node
1286d6b92ffaSHans Petter Selasky *		[in] Pointer to the initialized parent osm_node_t object
1287d6b92ffaSHans Petter Selasky *		that owns this port.
1288d6b92ffaSHans Petter Selasky *
1289d6b92ffaSHans Petter Selasky * RETURN VALUE
1290d6b92ffaSHans Petter Selasky *	Pointer to the initialize Port object.
1291d6b92ffaSHans Petter Selasky *
1292d6b92ffaSHans Petter Selasky * NOTES
1293d6b92ffaSHans Petter Selasky *	Allows calling other port methods.
1294d6b92ffaSHans Petter Selasky *
1295d6b92ffaSHans Petter Selasky * SEE ALSO
1296d6b92ffaSHans Petter Selasky *	Port
1297d6b92ffaSHans Petter Selasky *********/
1298d6b92ffaSHans Petter Selasky 
1299d6b92ffaSHans Petter Selasky /****f* OpenSM: Port/osm_port_get_base_lid
1300d6b92ffaSHans Petter Selasky * NAME
1301d6b92ffaSHans Petter Selasky *	osm_port_get_base_lid
1302d6b92ffaSHans Petter Selasky *
1303d6b92ffaSHans Petter Selasky * DESCRIPTION
1304d6b92ffaSHans Petter Selasky *	Gets the base LID of a port.
1305d6b92ffaSHans Petter Selasky *
1306d6b92ffaSHans Petter Selasky * SYNOPSIS
1307d6b92ffaSHans Petter Selasky */
osm_port_get_base_lid(IN const osm_port_t * p_port)1308d6b92ffaSHans Petter Selasky static inline ib_net16_t osm_port_get_base_lid(IN const osm_port_t * p_port)
1309d6b92ffaSHans Petter Selasky {
1310d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_port->p_physp && osm_physp_is_valid(p_port->p_physp));
1311d6b92ffaSHans Petter Selasky 	return osm_physp_get_base_lid(p_port->p_physp);
1312d6b92ffaSHans Petter Selasky }
1313d6b92ffaSHans Petter Selasky 
1314d6b92ffaSHans Petter Selasky /*
1315d6b92ffaSHans Petter Selasky * PARAMETERS
1316d6b92ffaSHans Petter Selasky *	p_port
1317d6b92ffaSHans Petter Selasky *		[in] Pointer to a Port object.
1318d6b92ffaSHans Petter Selasky *
1319d6b92ffaSHans Petter Selasky * RETURN VALUE
1320d6b92ffaSHans Petter Selasky *	Base LID of the port.
1321d6b92ffaSHans Petter Selasky *	If the return value is 0, then this port has no assigned LID.
1322d6b92ffaSHans Petter Selasky *
1323d6b92ffaSHans Petter Selasky * NOTES
1324d6b92ffaSHans Petter Selasky *
1325d6b92ffaSHans Petter Selasky * SEE ALSO
1326d6b92ffaSHans Petter Selasky *	Port
1327d6b92ffaSHans Petter Selasky *********/
1328d6b92ffaSHans Petter Selasky 
1329d6b92ffaSHans Petter Selasky /****f* OpenSM: Port/osm_port_get_lmc
1330d6b92ffaSHans Petter Selasky * NAME
1331d6b92ffaSHans Petter Selasky *	osm_port_get_lmc
1332d6b92ffaSHans Petter Selasky *
1333d6b92ffaSHans Petter Selasky * DESCRIPTION
1334d6b92ffaSHans Petter Selasky *	Gets the LMC value of a port.
1335d6b92ffaSHans Petter Selasky *
1336d6b92ffaSHans Petter Selasky * SYNOPSIS
1337d6b92ffaSHans Petter Selasky */
osm_port_get_lmc(IN const osm_port_t * p_port)1338d6b92ffaSHans Petter Selasky static inline uint8_t osm_port_get_lmc(IN const osm_port_t * p_port)
1339d6b92ffaSHans Petter Selasky {
1340d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_port->p_physp && osm_physp_is_valid(p_port->p_physp));
1341d6b92ffaSHans Petter Selasky 	return osm_physp_get_lmc(p_port->p_physp);
1342d6b92ffaSHans Petter Selasky }
1343d6b92ffaSHans Petter Selasky 
1344d6b92ffaSHans Petter Selasky /*
1345d6b92ffaSHans Petter Selasky * PARAMETERS
1346d6b92ffaSHans Petter Selasky *	p_port
1347d6b92ffaSHans Petter Selasky *		[in] Pointer to a Port object.
1348d6b92ffaSHans Petter Selasky *
1349d6b92ffaSHans Petter Selasky * RETURN VALUE
1350d6b92ffaSHans Petter Selasky *	Gets the LMC value of a port.
1351d6b92ffaSHans Petter Selasky *
1352d6b92ffaSHans Petter Selasky * NOTES
1353d6b92ffaSHans Petter Selasky *
1354d6b92ffaSHans Petter Selasky * SEE ALSO
1355d6b92ffaSHans Petter Selasky *	Port
1356d6b92ffaSHans Petter Selasky *********/
1357d6b92ffaSHans Petter Selasky 
1358d6b92ffaSHans Petter Selasky /****f* OpenSM: Port/osm_port_get_guid
1359d6b92ffaSHans Petter Selasky * NAME
1360d6b92ffaSHans Petter Selasky *	osm_port_get_guid
1361d6b92ffaSHans Petter Selasky *
1362d6b92ffaSHans Petter Selasky * DESCRIPTION
1363d6b92ffaSHans Petter Selasky *	Gets the GUID of a port.
1364d6b92ffaSHans Petter Selasky *
1365d6b92ffaSHans Petter Selasky * SYNOPSIS
1366d6b92ffaSHans Petter Selasky */
osm_port_get_guid(IN const osm_port_t * p_port)1367d6b92ffaSHans Petter Selasky static inline ib_net64_t osm_port_get_guid(IN const osm_port_t * p_port)
1368d6b92ffaSHans Petter Selasky {
1369d6b92ffaSHans Petter Selasky 	return p_port->guid;
1370d6b92ffaSHans Petter Selasky }
1371d6b92ffaSHans Petter Selasky 
1372d6b92ffaSHans Petter Selasky /*
1373d6b92ffaSHans Petter Selasky * PARAMETERS
1374d6b92ffaSHans Petter Selasky *	p_port
1375d6b92ffaSHans Petter Selasky *		[in] Pointer to a Port object.
1376d6b92ffaSHans Petter Selasky *
1377d6b92ffaSHans Petter Selasky * RETURN VALUE
1378d6b92ffaSHans Petter Selasky *	Manufacturer assigned GUID of the port.
1379d6b92ffaSHans Petter Selasky *
1380d6b92ffaSHans Petter Selasky * NOTES
1381d6b92ffaSHans Petter Selasky *
1382d6b92ffaSHans Petter Selasky * SEE ALSO
1383d6b92ffaSHans Petter Selasky *	Port
1384d6b92ffaSHans Petter Selasky *********/
1385d6b92ffaSHans Petter Selasky 
1386d6b92ffaSHans Petter Selasky /****f* OpenSM: Port/osm_port_get_lid_range_ho
1387d6b92ffaSHans Petter Selasky * NAME
1388d6b92ffaSHans Petter Selasky *	osm_port_get_lid_range_ho
1389d6b92ffaSHans Petter Selasky *
1390d6b92ffaSHans Petter Selasky * DESCRIPTION
1391d6b92ffaSHans Petter Selasky *	Returns the HOST ORDER lid min and max values for this port,
1392d6b92ffaSHans Petter Selasky *	based on the lmc value.
1393d6b92ffaSHans Petter Selasky *
1394d6b92ffaSHans Petter Selasky * SYNOPSIS
1395d6b92ffaSHans Petter Selasky */
1396d6b92ffaSHans Petter Selasky void osm_port_get_lid_range_ho(IN const osm_port_t * p_port,
1397d6b92ffaSHans Petter Selasky 			       OUT uint16_t * p_min_lid,
1398d6b92ffaSHans Petter Selasky 			       OUT uint16_t * p_max_lid);
1399d6b92ffaSHans Petter Selasky /*
1400d6b92ffaSHans Petter Selasky * PARAMETERS
1401d6b92ffaSHans Petter Selasky *	p_port
1402d6b92ffaSHans Petter Selasky *		[in] Pointer to a Port object.
1403d6b92ffaSHans Petter Selasky *
1404d6b92ffaSHans Petter Selasky *	p_min_lid
1405d6b92ffaSHans Petter Selasky *		[out] Pointer to the minimum LID value occupied by this port.
1406d6b92ffaSHans Petter Selasky *
1407d6b92ffaSHans Petter Selasky *	p_max_lid
1408d6b92ffaSHans Petter Selasky *		[out] Pointer to the maximum LID value occupied by this port.
1409d6b92ffaSHans Petter Selasky *
1410d6b92ffaSHans Petter Selasky * RETURN VALUE
1411d6b92ffaSHans Petter Selasky *	None.
1412d6b92ffaSHans Petter Selasky *
1413d6b92ffaSHans Petter Selasky * NOTES
1414d6b92ffaSHans Petter Selasky *
1415d6b92ffaSHans Petter Selasky * SEE ALSO
1416d6b92ffaSHans Petter Selasky *	Port
1417d6b92ffaSHans Petter Selasky *********/
1418d6b92ffaSHans Petter Selasky 
1419d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_calc_link_mtu
1420d6b92ffaSHans Petter Selasky * NAME
1421d6b92ffaSHans Petter Selasky *	osm_physp_calc_link_mtu
1422d6b92ffaSHans Petter Selasky *
1423d6b92ffaSHans Petter Selasky * DESCRIPTION
1424d6b92ffaSHans Petter Selasky *	Calculate the Port MTU based on current and remote
1425d6b92ffaSHans Petter Selasky *  physical ports MTU CAP values.
1426d6b92ffaSHans Petter Selasky *
1427d6b92ffaSHans Petter Selasky * SYNOPSIS
1428d6b92ffaSHans Petter Selasky */
1429d6b92ffaSHans Petter Selasky uint8_t osm_physp_calc_link_mtu(IN osm_log_t * p_log,
1430d6b92ffaSHans Petter Selasky 				IN const osm_physp_t * p_physp,
1431d6b92ffaSHans Petter Selasky 				IN uint8_t current_mtu);
1432d6b92ffaSHans Petter Selasky /*
1433d6b92ffaSHans Petter Selasky * PARAMETERS
1434d6b92ffaSHans Petter Selasky *	p_log
1435d6b92ffaSHans Petter Selasky *		[in] Pointer to a log object.
1436d6b92ffaSHans Petter Selasky *
1437d6b92ffaSHans Petter Selasky *	p_physp
1438d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
1439d6b92ffaSHans Petter Selasky *
1440d6b92ffaSHans Petter Selasky *	current_mtu
1441d6b92ffaSHans Petter Selasky *		[in] Current neighbor mtu on this port
1442d6b92ffaSHans Petter Selasky *
1443d6b92ffaSHans Petter Selasky * RETURN VALUES
1444d6b92ffaSHans Petter Selasky *	The MTU of the link to be used.
1445d6b92ffaSHans Petter Selasky *
1446d6b92ffaSHans Petter Selasky * NOTES
1447d6b92ffaSHans Petter Selasky *
1448d6b92ffaSHans Petter Selasky * SEE ALSO
1449d6b92ffaSHans Petter Selasky *	PhysPort object
1450d6b92ffaSHans Petter Selasky *********/
1451d6b92ffaSHans Petter Selasky 
1452d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_calc_link_op_vls
1453d6b92ffaSHans Petter Selasky * NAME
1454d6b92ffaSHans Petter Selasky *	osm_physp_calc_link_op_vls
1455d6b92ffaSHans Petter Selasky *
1456d6b92ffaSHans Petter Selasky * DESCRIPTION
1457d6b92ffaSHans Petter Selasky *	Calculate the Port OP_VLS based on current and remote
1458d6b92ffaSHans Petter Selasky *  physical ports VL CAP values. Allowing user option for a max limit.
1459d6b92ffaSHans Petter Selasky *
1460d6b92ffaSHans Petter Selasky * SYNOPSIS
1461d6b92ffaSHans Petter Selasky */
1462d6b92ffaSHans Petter Selasky uint8_t osm_physp_calc_link_op_vls(IN osm_log_t * p_log,
1463d6b92ffaSHans Petter Selasky 				   IN const osm_subn_t * p_subn,
1464d6b92ffaSHans Petter Selasky 				   IN const osm_physp_t * p_physp,
1465d6b92ffaSHans Petter Selasky 				   IN uint8_t current_op_vls);
1466d6b92ffaSHans Petter Selasky /*
1467d6b92ffaSHans Petter Selasky * PARAMETERS
1468d6b92ffaSHans Petter Selasky *	p_log
1469d6b92ffaSHans Petter Selasky *		[in] Pointer to a log object.
1470d6b92ffaSHans Petter Selasky *
1471d6b92ffaSHans Petter Selasky *	p_subn
1472d6b92ffaSHans Petter Selasky *		[in] Pointer to the subnet object for accessing of the options.
1473d6b92ffaSHans Petter Selasky *
1474d6b92ffaSHans Petter Selasky *	p_physp
1475d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
1476d6b92ffaSHans Petter Selasky *
1477d6b92ffaSHans Petter Selasky *	current_op_vls
1478d6b92ffaSHans Petter Selasky *		[in] Current operational VL on the port
1479d6b92ffaSHans Petter Selasky *
1480d6b92ffaSHans Petter Selasky * RETURN VALUES
1481d6b92ffaSHans Petter Selasky *	The OP_VLS of the link to be used.
1482d6b92ffaSHans Petter Selasky *
1483d6b92ffaSHans Petter Selasky * NOTES
1484d6b92ffaSHans Petter Selasky *
1485d6b92ffaSHans Petter Selasky * SEE ALSO
1486d6b92ffaSHans Petter Selasky *  PhysPort object
1487d6b92ffaSHans Petter Selasky *********/
1488d6b92ffaSHans Petter Selasky 
1489d6b92ffaSHans Petter Selasky /****f* OpenSM: Physical Port/osm_physp_replace_dr_path_with_alternate_dr_path
1490d6b92ffaSHans Petter Selasky * NAME
1491d6b92ffaSHans Petter Selasky *	osm_physp_replace_dr_path_with_alternate_dr_path
1492d6b92ffaSHans Petter Selasky *
1493d6b92ffaSHans Petter Selasky * DESCRIPTION
1494d6b92ffaSHans Petter Selasky *	Replace the direct route path for the given phys port with an
1495d6b92ffaSHans Petter Selasky *  alternate path going through forien set of phys port.
1496d6b92ffaSHans Petter Selasky *
1497d6b92ffaSHans Petter Selasky * SYNOPSIS
1498d6b92ffaSHans Petter Selasky */
1499d6b92ffaSHans Petter Selasky void
1500d6b92ffaSHans Petter Selasky osm_physp_replace_dr_path_with_alternate_dr_path(IN osm_log_t * p_log,
1501d6b92ffaSHans Petter Selasky 						 IN osm_subn_t const *p_subn,
1502d6b92ffaSHans Petter Selasky 						 IN osm_physp_t const *p_physp,
1503d6b92ffaSHans Petter Selasky 						 IN osm_bind_handle_t * h_bind);
1504d6b92ffaSHans Petter Selasky /*
1505d6b92ffaSHans Petter Selasky * PARAMETERS
1506d6b92ffaSHans Petter Selasky *	p_log
1507d6b92ffaSHans Petter Selasky *		[in] Pointer to a log object.
1508d6b92ffaSHans Petter Selasky *
1509d6b92ffaSHans Petter Selasky *	p_subn
1510d6b92ffaSHans Petter Selasky *		[in] Pointer to the subnet object for accessing of the options.
1511d6b92ffaSHans Petter Selasky *
1512d6b92ffaSHans Petter Selasky *	p_physp
1513d6b92ffaSHans Petter Selasky *		[in] Pointer to an osm_physp_t object.
1514d6b92ffaSHans Petter Selasky *
1515d6b92ffaSHans Petter Selasky *	h_bind
1516d6b92ffaSHans Petter Selasky *		[in] Pointer to osm_bind_handle_t object.
1517d6b92ffaSHans Petter Selasky *
1518d6b92ffaSHans Petter Selasky * RETURN VALUES
1519d6b92ffaSHans Petter Selasky *	NONE
1520d6b92ffaSHans Petter Selasky *
1521d6b92ffaSHans Petter Selasky * NOTES
1522d6b92ffaSHans Petter Selasky *
1523d6b92ffaSHans Petter Selasky * SEE ALSO
1524d6b92ffaSHans Petter Selasky *	PhysPort object
1525d6b92ffaSHans Petter Selasky *********/
1526d6b92ffaSHans Petter Selasky 
1527d6b92ffaSHans Petter Selasky /****s* OpenSM: Port/osm_alias_guid_t
1528d6b92ffaSHans Petter Selasky * NAME
1529d6b92ffaSHans Petter Selasky *	osm_alias_guid_t
1530d6b92ffaSHans Petter Selasky *
1531d6b92ffaSHans Petter Selasky * DESCRIPTION
1532d6b92ffaSHans Petter Selasky *	This object represents an alias guid for an endport.
1533d6b92ffaSHans Petter Selasky *
1534d6b92ffaSHans Petter Selasky *	The osm_alias_guid_t object should be treated as opaque and should
1535d6b92ffaSHans Petter Selasky *	be manipulated only through the provided functions.
1536d6b92ffaSHans Petter Selasky *
1537d6b92ffaSHans Petter Selasky * SYNOPSIS
1538d6b92ffaSHans Petter Selasky */
1539d6b92ffaSHans Petter Selasky typedef struct osm_alias_guid {
1540d6b92ffaSHans Petter Selasky 	cl_map_item_t map_item;
1541d6b92ffaSHans Petter Selasky 	ib_net64_t alias_guid;
1542d6b92ffaSHans Petter Selasky 	osm_port_t *p_base_port;
1543d6b92ffaSHans Petter Selasky } osm_alias_guid_t;
1544d6b92ffaSHans Petter Selasky /*
1545d6b92ffaSHans Petter Selasky * FIELDS
1546d6b92ffaSHans Petter Selasky *	map_item
1547d6b92ffaSHans Petter Selasky *		Linkage structure for cl_qmap.  MUST BE FIRST MEMBER!
1548d6b92ffaSHans Petter Selasky *
1549d6b92ffaSHans Petter Selasky *	alias_guid
1550d6b92ffaSHans Petter Selasky *		Alias GUID for port obtained from SM GUIDInfo attribute
1551d6b92ffaSHans Petter Selasky *
1552d6b92ffaSHans Petter Selasky *	p_base_port
1553d6b92ffaSHans Petter Selasky *		Pointer to osm_port_t for base port GUID
1554d6b92ffaSHans Petter Selasky *
1555d6b92ffaSHans Petter Selasky * SEE ALSO
1556d6b92ffaSHans Petter Selasky *	Port, Physical Port, Physical Port Table
1557d6b92ffaSHans Petter Selasky */
1558d6b92ffaSHans Petter Selasky 
1559d6b92ffaSHans Petter Selasky /****f* OpenSM: Port/osm_alias_guid_new
1560d6b92ffaSHans Petter Selasky * NAME
1561d6b92ffaSHans Petter Selasky *	osm_alias_guid_new
1562d6b92ffaSHans Petter Selasky *
1563d6b92ffaSHans Petter Selasky * DESCRIPTION
1564d6b92ffaSHans Petter Selasky *	This function allocates and initializes an alias guid object.
1565d6b92ffaSHans Petter Selasky *
1566d6b92ffaSHans Petter Selasky * SYNOPSIS
1567d6b92ffaSHans Petter Selasky */
1568d6b92ffaSHans Petter Selasky osm_alias_guid_t *osm_alias_guid_new(IN const ib_net64_t alias_guid,
1569d6b92ffaSHans Petter Selasky 				     IN osm_port_t *p_base_port);
1570d6b92ffaSHans Petter Selasky /*
1571d6b92ffaSHans Petter Selasky * PARAMETERS
1572d6b92ffaSHans Petter Selasky *	alias_guid
1573d6b92ffaSHans Petter Selasky *		[in] Alias GUID in network order
1574d6b92ffaSHans Petter Selasky *
1575d6b92ffaSHans Petter Selasky *	p_base_port
1576d6b92ffaSHans Petter Selasky *		[in] Pointer to the port for this base GUID
1577d6b92ffaSHans Petter Selasky *
1578d6b92ffaSHans Petter Selasky * RETURN VALUE
1579d6b92ffaSHans Petter Selasky *	Pointer to the initialized alias guid object.
1580d6b92ffaSHans Petter Selasky *
1581d6b92ffaSHans Petter Selasky * NOTES
1582d6b92ffaSHans Petter Selasky *	Allows calling other alias guid methods.
1583d6b92ffaSHans Petter Selasky *
1584d6b92ffaSHans Petter Selasky * SEE ALSO
1585d6b92ffaSHans Petter Selasky *	Port
1586d6b92ffaSHans Petter Selasky *********/
1587d6b92ffaSHans Petter Selasky 
1588d6b92ffaSHans Petter Selasky /****f* OpenSM: Port/osm_alias_guid_delete
1589d6b92ffaSHans Petter Selasky * NAME
1590d6b92ffaSHans Petter Selasky *	osm_alias_guid_delete
1591d6b92ffaSHans Petter Selasky *
1592d6b92ffaSHans Petter Selasky * DESCRIPTION
1593d6b92ffaSHans Petter Selasky *	This function destroys and deallocates an alias guid object.
1594d6b92ffaSHans Petter Selasky *
1595d6b92ffaSHans Petter Selasky * SYNOPSIS
1596d6b92ffaSHans Petter Selasky */
1597d6b92ffaSHans Petter Selasky void osm_alias_guid_delete(IN OUT osm_alias_guid_t ** pp_alias_guid);
1598d6b92ffaSHans Petter Selasky /*
1599d6b92ffaSHans Petter Selasky * PARAMETERS
1600d6b92ffaSHans Petter Selasky *	pp_alias_guid
1601d6b92ffaSHans Petter Selasky *		[in][out] Pointer to a pointer to an alias guid object to delete.
1602d6b92ffaSHans Petter Selasky *		On return, this pointer is NULL.
1603d6b92ffaSHans Petter Selasky *
1604d6b92ffaSHans Petter Selasky * RETURN VALUE
1605d6b92ffaSHans Petter Selasky *	This function does not return a value.
1606d6b92ffaSHans Petter Selasky *
1607d6b92ffaSHans Petter Selasky * NOTES
1608d6b92ffaSHans Petter Selasky *	Performs any necessary cleanup of the specified alias guid object.
1609d6b92ffaSHans Petter Selasky *
1610d6b92ffaSHans Petter Selasky * SEE ALSO
1611d6b92ffaSHans Petter Selasky *	Port
1612d6b92ffaSHans Petter Selasky *********/
1613d6b92ffaSHans Petter Selasky 
1614d6b92ffaSHans Petter Selasky /****f* OpenSM: Port/osm_alias_guid_get_alias_guid
1615d6b92ffaSHans Petter Selasky * NAME
1616d6b92ffaSHans Petter Selasky *	osm_alias_guid_get_alias_guid
1617d6b92ffaSHans Petter Selasky *
1618d6b92ffaSHans Petter Selasky * DESCRIPTION
1619d6b92ffaSHans Petter Selasky *	This function retrieves alias guid from alias guid object.
1620d6b92ffaSHans Petter Selasky *
1621d6b92ffaSHans Petter Selasky * SYNOPSIS
1622d6b92ffaSHans Petter Selasky */
osm_alias_guid_get_alias_guid(IN osm_alias_guid_t * p_alias_guid)1623d6b92ffaSHans Petter Selasky static inline ib_net64_t osm_alias_guid_get_alias_guid(IN osm_alias_guid_t *p_alias_guid)
1624d6b92ffaSHans Petter Selasky {
1625d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_alias_guid);
1626d6b92ffaSHans Petter Selasky 	return p_alias_guid->alias_guid;
1627d6b92ffaSHans Petter Selasky }
1628d6b92ffaSHans Petter Selasky /*
1629d6b92ffaSHans Petter Selasky * PARAMETERS
1630d6b92ffaSHans Petter Selasky *	p_alias_guid
1631d6b92ffaSHans Petter Selasky *		[in] Pointer to a pointer to an alias guid object.
1632d6b92ffaSHans Petter Selasky *
1633d6b92ffaSHans Petter Selasky * RETURN VALUE
1634d6b92ffaSHans Petter Selasky *	This function returns the alias guid or NULL if fails.
1635d6b92ffaSHans Petter Selasky *
1636d6b92ffaSHans Petter Selasky * NOTES
1637d6b92ffaSHans Petter Selasky *
1638d6b92ffaSHans Petter Selasky * SEE ALSO
1639d6b92ffaSHans Petter Selasky *	Port
1640d6b92ffaSHans Petter Selasky *********/
1641d6b92ffaSHans Petter Selasky 
1642d6b92ffaSHans Petter Selasky /****f* OpenSM: Port/osm_alias_guid_get_base_guid
1643d6b92ffaSHans Petter Selasky * NAME
1644d6b92ffaSHans Petter Selasky *	osm_alias_guid_get_base_guid
1645d6b92ffaSHans Petter Selasky *
1646d6b92ffaSHans Petter Selasky * DESCRIPTION
1647d6b92ffaSHans Petter Selasky *	This function retrieves base guid from alias guid object.
1648d6b92ffaSHans Petter Selasky *
1649d6b92ffaSHans Petter Selasky * SYNOPSIS
1650d6b92ffaSHans Petter Selasky */
osm_alias_guid_get_base_guid(IN osm_alias_guid_t * p_alias_guid)1651d6b92ffaSHans Petter Selasky static inline ib_net64_t osm_alias_guid_get_base_guid(IN osm_alias_guid_t *p_alias_guid)
1652d6b92ffaSHans Petter Selasky {
1653d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_alias_guid);
1654d6b92ffaSHans Petter Selasky 	return osm_port_get_guid(p_alias_guid->p_base_port);
1655d6b92ffaSHans Petter Selasky }
1656d6b92ffaSHans Petter Selasky /*
1657d6b92ffaSHans Petter Selasky * PARAMETERS
1658d6b92ffaSHans Petter Selasky *	p_alias_guid
1659d6b92ffaSHans Petter Selasky *		[in] Pointer to a pointer to an alias guid object.
1660d6b92ffaSHans Petter Selasky *
1661d6b92ffaSHans Petter Selasky * RETURN VALUE
1662d6b92ffaSHans Petter Selasky *	This function returns the base guid or NULL if fails.
1663d6b92ffaSHans Petter Selasky *
1664d6b92ffaSHans Petter Selasky * NOTES
1665d6b92ffaSHans Petter Selasky *
1666d6b92ffaSHans Petter Selasky * SEE ALSO
1667d6b92ffaSHans Petter Selasky *	Port
1668d6b92ffaSHans Petter Selasky *********/
1669d6b92ffaSHans Petter Selasky 
1670d6b92ffaSHans Petter Selasky /****f* OpenSM: Port/osm_port_clear_base_lid
1671d6b92ffaSHans Petter Selasky * NAME
1672d6b92ffaSHans Petter Selasky *	osm_port_clear_base_lid
1673d6b92ffaSHans Petter Selasky *
1674d6b92ffaSHans Petter Selasky * DESCRIPTION
1675d6b92ffaSHans Petter Selasky *	Clear the base lid of a given port.
1676d6b92ffaSHans Petter Selasky *
1677d6b92ffaSHans Petter Selasky * SYNOPSIS
1678d6b92ffaSHans Petter Selasky */
osm_port_clear_base_lid(OUT osm_port_t * p_port)1679d6b92ffaSHans Petter Selasky static inline void osm_port_clear_base_lid(OUT osm_port_t * p_port)
1680d6b92ffaSHans Petter Selasky {
1681d6b92ffaSHans Petter Selasky 	CL_ASSERT(p_port);
1682d6b92ffaSHans Petter Selasky 	p_port->lid = 0;
1683d6b92ffaSHans Petter Selasky 	osm_physp_set_base_lid(p_port->p_physp, 0);
1684d6b92ffaSHans Petter Selasky }
1685d6b92ffaSHans Petter Selasky 
1686d6b92ffaSHans Petter Selasky /*
1687d6b92ffaSHans Petter Selasky * PARAMETERS
1688d6b92ffaSHans Petter Selasky *	p_port
1689d6b92ffaSHans Petter Selasky *		[out] Pointer to a Port object.
1690d6b92ffaSHans Petter Selasky *
1691d6b92ffaSHans Petter Selasky * RETURN VALUE
1692d6b92ffaSHans Petter Selasky *	None
1693d6b92ffaSHans Petter Selasky *
1694d6b92ffaSHans Petter Selasky * NOTES
1695d6b92ffaSHans Petter Selasky *
1696d6b92ffaSHans Petter Selasky * SEE ALSO
1697d6b92ffaSHans Petter Selasky *	Port
1698d6b92ffaSHans Petter Selasky *********/
1699d6b92ffaSHans Petter Selasky 
1700d6b92ffaSHans Petter Selasky END_C_DECLS
1701d6b92ffaSHans Petter Selasky #endif				/* _OSM_PORT_H_ */
1702