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