1d6b92ffaSHans Petter Selasky /*
2d6b92ffaSHans Petter Selasky  * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.
3d6b92ffaSHans Petter Selasky  * Copyright (c) 2002-2008 Mellanox Technologies LTD. All rights reserved.
4d6b92ffaSHans Petter Selasky  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
5d6b92ffaSHans Petter Selasky  * Copyright (c) 2012 Lawrence Livermore National Lab.  All rights reserved.
6d6b92ffaSHans Petter Selasky  *
7d6b92ffaSHans Petter Selasky  * This software is available to you under a choice of one of two
8d6b92ffaSHans Petter Selasky  * licenses.  You may choose to be licensed under the terms of the GNU
9d6b92ffaSHans Petter Selasky  * General Public License (GPL) Version 2, available from the file
10d6b92ffaSHans Petter Selasky  * COPYING in the main directory of this source tree, or the
11d6b92ffaSHans Petter Selasky  * OpenIB.org BSD license below:
12d6b92ffaSHans Petter Selasky  *
13d6b92ffaSHans Petter Selasky  *     Redistribution and use in source and binary forms, with or
14d6b92ffaSHans Petter Selasky  *     without modification, are permitted provided that the following
15d6b92ffaSHans Petter Selasky  *     conditions are met:
16d6b92ffaSHans Petter Selasky  *
17d6b92ffaSHans Petter Selasky  *      - Redistributions of source code must retain the above
18d6b92ffaSHans Petter Selasky  *        copyright notice, this list of conditions and the following
19d6b92ffaSHans Petter Selasky  *        disclaimer.
20d6b92ffaSHans Petter Selasky  *
21d6b92ffaSHans Petter Selasky  *      - Redistributions in binary form must reproduce the above
22d6b92ffaSHans Petter Selasky  *        copyright notice, this list of conditions and the following
23d6b92ffaSHans Petter Selasky  *        disclaimer in the documentation and/or other materials
24d6b92ffaSHans Petter Selasky  *        provided with the distribution.
25d6b92ffaSHans Petter Selasky  *
26d6b92ffaSHans Petter Selasky  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27d6b92ffaSHans Petter Selasky  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28d6b92ffaSHans Petter Selasky  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
29d6b92ffaSHans Petter Selasky  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
30d6b92ffaSHans Petter Selasky  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
31d6b92ffaSHans Petter Selasky  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
32d6b92ffaSHans Petter Selasky  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
33d6b92ffaSHans Petter Selasky  * SOFTWARE.
34d6b92ffaSHans Petter Selasky  *
35d6b92ffaSHans Petter Selasky  */
36d6b92ffaSHans Petter Selasky 
37d6b92ffaSHans Petter Selasky /*
38d6b92ffaSHans Petter Selasky  * Abstract:
39d6b92ffaSHans Petter Selasky  *    OSM Congestion Control types and prototypes
40d6b92ffaSHans Petter Selasky  *
41d6b92ffaSHans Petter Selasky  * Author:
42d6b92ffaSHans Petter Selasky  *    Albert Chu, LLNL
43d6b92ffaSHans Petter Selasky  */
44d6b92ffaSHans Petter Selasky 
45d6b92ffaSHans Petter Selasky #ifndef OSM_CONGESTION_CONTROL_H
46d6b92ffaSHans Petter Selasky #define OSM_CONGESTION_CONTROL_H
47d6b92ffaSHans Petter Selasky 
48d6b92ffaSHans Petter Selasky #include <iba/ib_types.h>
49d6b92ffaSHans Petter Selasky #include <complib/cl_types_osd.h>
50d6b92ffaSHans Petter Selasky #include <complib/cl_dispatcher.h>
51d6b92ffaSHans Petter Selasky #include <opensm/osm_subnet.h>
52d6b92ffaSHans Petter Selasky #include <opensm/osm_log.h>
53d6b92ffaSHans Petter Selasky #include <opensm/osm_sm.h>
54d6b92ffaSHans Petter Selasky #include <opensm/osm_opensm.h>
55d6b92ffaSHans Petter Selasky #include <opensm/osm_base.h>
56d6b92ffaSHans Petter Selasky 
57d6b92ffaSHans Petter Selasky /****s* OpenSM: Base/OSM_DEFAULT_CC_KEY
58d6b92ffaSHans Petter Selasky  * NAME
59d6b92ffaSHans Petter Selasky  *       OSM_DEFAULT_CC_KEY
60d6b92ffaSHans Petter Selasky  *
61d6b92ffaSHans Petter Selasky  * DESCRIPTION
62d6b92ffaSHans Petter Selasky  *       Congestion Control Key used by OpenSM.
63d6b92ffaSHans Petter Selasky  *
64d6b92ffaSHans Petter Selasky  * SYNOPSIS
65d6b92ffaSHans Petter Selasky  */
66d6b92ffaSHans Petter Selasky #define OSM_DEFAULT_CC_KEY 0
67d6b92ffaSHans Petter Selasky 
68d6b92ffaSHans Petter Selasky #define OSM_CC_DEFAULT_MAX_OUTSTANDING_QUERIES 500
69d6b92ffaSHans Petter Selasky 
70d6b92ffaSHans Petter Selasky #define OSM_CC_TIMEOUT_COUNT_THRESHOLD 3
71d6b92ffaSHans Petter Selasky 
72d6b92ffaSHans Petter Selasky /****s* OpenSM: CongestionControl/osm_congestion_control_t
73d6b92ffaSHans Petter Selasky *  This object should be treated as opaque and should
74d6b92ffaSHans Petter Selasky *  be manipulated only through the provided functions.
75d6b92ffaSHans Petter Selasky */
76d6b92ffaSHans Petter Selasky typedef struct osm_congestion_control {
77d6b92ffaSHans Petter Selasky 	struct osm_opensm *osm;
78d6b92ffaSHans Petter Selasky 	osm_subn_t *subn;
79d6b92ffaSHans Petter Selasky 	osm_sm_t *sm;
80d6b92ffaSHans Petter Selasky 	osm_log_t *log;
81d6b92ffaSHans Petter Selasky 	osm_mad_pool_t *mad_pool;
82d6b92ffaSHans Petter Selasky 	atomic32_t trans_id;
83d6b92ffaSHans Petter Selasky 	osm_vendor_t *vendor;
84d6b92ffaSHans Petter Selasky 	osm_bind_handle_t bind_handle;
85d6b92ffaSHans Petter Selasky 	cl_disp_reg_handle_t cc_disp_h;
86d6b92ffaSHans Petter Selasky 	ib_net64_t port_guid;
87d6b92ffaSHans Petter Selasky 	atomic32_t outstanding_mads;
88d6b92ffaSHans Petter Selasky 	atomic32_t outstanding_mads_on_wire;
89d6b92ffaSHans Petter Selasky 	cl_qlist_t mad_queue;
90d6b92ffaSHans Petter Selasky 	cl_spinlock_t mad_queue_lock;
91d6b92ffaSHans Petter Selasky 	cl_event_t cc_poller_wakeup;
92d6b92ffaSHans Petter Selasky 	cl_event_t outstanding_mads_done_event;
93d6b92ffaSHans Petter Selasky 	cl_event_t sig_mads_on_wire_continue;
94d6b92ffaSHans Petter Selasky 	cl_thread_t cc_poller;
95d6b92ffaSHans Petter Selasky 	osm_thread_state_t thread_state;
96d6b92ffaSHans Petter Selasky 	ib_sw_cong_setting_t sw_cong_setting;
97d6b92ffaSHans Petter Selasky 	ib_ca_cong_setting_t ca_cong_setting;
98d6b92ffaSHans Petter Selasky 	ib_cc_tbl_t cc_tbl[OSM_CCT_ENTRY_MAD_BLOCKS];
99d6b92ffaSHans Petter Selasky 	unsigned int cc_tbl_mads;
100d6b92ffaSHans Petter Selasky } osm_congestion_control_t;
101d6b92ffaSHans Petter Selasky /*
102d6b92ffaSHans Petter Selasky * FIELDS
103d6b92ffaSHans Petter Selasky *       subn
104d6b92ffaSHans Petter Selasky *             Subnet object for this subnet.
105d6b92ffaSHans Petter Selasky *
106d6b92ffaSHans Petter Selasky *       log
107d6b92ffaSHans Petter Selasky *             Pointer to the log object.
108d6b92ffaSHans Petter Selasky *
109d6b92ffaSHans Petter Selasky *       mad_pool
110d6b92ffaSHans Petter Selasky *             Pointer to the MAD pool.
111d6b92ffaSHans Petter Selasky *
112d6b92ffaSHans Petter Selasky *       mad_ctrl
113d6b92ffaSHans Petter Selasky *             Mad Controller
114d6b92ffaSHans Petter Selasky *********/
115d6b92ffaSHans Petter Selasky 
116d6b92ffaSHans Petter Selasky struct osm_opensm;
117d6b92ffaSHans Petter Selasky 
118d6b92ffaSHans Petter Selasky int osm_congestion_control_setup(struct osm_opensm *osm);
119d6b92ffaSHans Petter Selasky 
120d6b92ffaSHans Petter Selasky int osm_congestion_control_wait_pending_transactions(struct osm_opensm *osm);
121d6b92ffaSHans Petter Selasky 
122d6b92ffaSHans Petter Selasky ib_api_status_t osm_congestion_control_init(osm_congestion_control_t * p_cc,
123d6b92ffaSHans Petter Selasky 					    struct osm_opensm *osm,
124d6b92ffaSHans Petter Selasky 					    const osm_subn_opt_t * p_opt);
125d6b92ffaSHans Petter Selasky 
126d6b92ffaSHans Petter Selasky ib_api_status_t osm_congestion_control_bind(osm_congestion_control_t * p_cc,
127d6b92ffaSHans Petter Selasky 					    ib_net64_t port_guid);
128d6b92ffaSHans Petter Selasky 
129d6b92ffaSHans Petter Selasky void osm_congestion_control_shutdown(osm_congestion_control_t * p_cc);
130d6b92ffaSHans Petter Selasky 
131d6b92ffaSHans Petter Selasky void osm_congestion_control_destroy(osm_congestion_control_t * p_cc);
132d6b92ffaSHans Petter Selasky 
133d6b92ffaSHans Petter Selasky 
134d6b92ffaSHans Petter Selasky #endif				/* ifndef OSM_CONGESTION_CONTROL_H */
135