xref: /freebsd-src/contrib/ofed/opensm/include/opensm/osm_mesh.h (revision 87181516ef48be852d5e5fee53c6e0dbfc62f21e)
1*d6b92ffaSHans Petter Selasky /*
2*d6b92ffaSHans Petter Selasky  * Copyright (c) 2008 Voltaire, Inc. All rights reserved.
3*d6b92ffaSHans Petter Selasky  * Copyright (c) 2008,2009 System Fabric Works, Inc. All rights reserved.
4*d6b92ffaSHans Petter Selasky  *
5*d6b92ffaSHans Petter Selasky  * This software is available to you under a choice of one of two
6*d6b92ffaSHans Petter Selasky  * licenses.  You may choose to be licensed under the terms of the GNU
7*d6b92ffaSHans Petter Selasky  * General Public License (GPL) Version 2, available from the file
8*d6b92ffaSHans Petter Selasky  * COPYING in the main directory of this source tree, or the
9*d6b92ffaSHans Petter Selasky  * OpenIB.org BSD license below:
10*d6b92ffaSHans Petter Selasky  *
11*d6b92ffaSHans Petter Selasky  *     Redistribution and use in source and binary forms, with or
12*d6b92ffaSHans Petter Selasky  *     without modification, are permitted provided that the following
13*d6b92ffaSHans Petter Selasky  *     conditions are met:
14*d6b92ffaSHans Petter Selasky  *
15*d6b92ffaSHans Petter Selasky  *      - Redistributions of source code must retain the above
16*d6b92ffaSHans Petter Selasky  *        copyright notice, this list of conditions and the following
17*d6b92ffaSHans Petter Selasky  *        disclaimer.
18*d6b92ffaSHans Petter Selasky  *
19*d6b92ffaSHans Petter Selasky  *      - Redistributions in binary form must reproduce the above
20*d6b92ffaSHans Petter Selasky  *        copyright notice, this list of conditions and the following
21*d6b92ffaSHans Petter Selasky  *        disclaimer in the documentation and/or other materials
22*d6b92ffaSHans Petter Selasky  *        provided with the distribution.
23*d6b92ffaSHans Petter Selasky  *
24*d6b92ffaSHans Petter Selasky  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25*d6b92ffaSHans Petter Selasky  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26*d6b92ffaSHans Petter Selasky  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27*d6b92ffaSHans Petter Selasky  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
28*d6b92ffaSHans Petter Selasky  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
29*d6b92ffaSHans Petter Selasky  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
30*d6b92ffaSHans Petter Selasky  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
31*d6b92ffaSHans Petter Selasky  * SOFTWARE.
32*d6b92ffaSHans Petter Selasky  *
33*d6b92ffaSHans Petter Selasky  */
34*d6b92ffaSHans Petter Selasky 
35*d6b92ffaSHans Petter Selasky /*
36*d6b92ffaSHans Petter Selasky  * Abstract:
37*d6b92ffaSHans Petter Selasky  *      Declarations for mesh analysis
38*d6b92ffaSHans Petter Selasky  */
39*d6b92ffaSHans Petter Selasky 
40*d6b92ffaSHans Petter Selasky #ifndef OSM_MESH_H
41*d6b92ffaSHans Petter Selasky #define OSM_MESH_H
42*d6b92ffaSHans Petter Selasky 
43*d6b92ffaSHans Petter Selasky struct _lash;
44*d6b92ffaSHans Petter Selasky struct _switch;
45*d6b92ffaSHans Petter Selasky 
46*d6b92ffaSHans Petter Selasky /*
47*d6b92ffaSHans Petter Selasky  * per switch to switch link info
48*d6b92ffaSHans Petter Selasky  */
49*d6b92ffaSHans Petter Selasky typedef struct _link {
50*d6b92ffaSHans Petter Selasky 	int switch_id;
51*d6b92ffaSHans Petter Selasky 	int link_id;
52*d6b92ffaSHans Petter Selasky 	int next_port;
53*d6b92ffaSHans Petter Selasky 	int num_ports;
54*d6b92ffaSHans Petter Selasky 	int ports[0];
55*d6b92ffaSHans Petter Selasky } link_t;
56*d6b92ffaSHans Petter Selasky 
57*d6b92ffaSHans Petter Selasky /*
58*d6b92ffaSHans Petter Selasky  * per switch node mesh info
59*d6b92ffaSHans Petter Selasky  */
60*d6b92ffaSHans Petter Selasky typedef struct _mesh_node {
61*d6b92ffaSHans Petter Selasky 	int *axes;			/* used to hold and reorder assigned axes */
62*d6b92ffaSHans Petter Selasky 	int *coord;			/* mesh coordinates of switch */
63*d6b92ffaSHans Petter Selasky 	int **matrix;			/* distances between adjacant switches */
64*d6b92ffaSHans Petter Selasky 	int *poly;			/* characteristic polynomial of matrix */
65*d6b92ffaSHans Petter Selasky 					/* used as an invariant classification */
66*d6b92ffaSHans Petter Selasky 	int dimension;			/* apparent dimension of mesh around node */
67*d6b92ffaSHans Petter Selasky 	int temp;			/* temporary holder for distance info */
68*d6b92ffaSHans Petter Selasky 	int type;			/* index of node type in mesh_info array */
69*d6b92ffaSHans Petter Selasky 	unsigned int num_links;		/* number of 'links' to adjacent switches */
70*d6b92ffaSHans Petter Selasky 	link_t *links[0];		/* per link information */
71*d6b92ffaSHans Petter Selasky } mesh_node_t;
72*d6b92ffaSHans Petter Selasky 
73*d6b92ffaSHans Petter Selasky void osm_mesh_node_delete(struct _lash *p_lash, struct _switch *sw);
74*d6b92ffaSHans Petter Selasky int osm_mesh_node_create(struct _lash *p_lash, struct _switch *sw);
75*d6b92ffaSHans Petter Selasky int osm_do_mesh_analysis(struct _lash *p_lash);
76*d6b92ffaSHans Petter Selasky 
77*d6b92ffaSHans Petter Selasky #endif
78