File: ips_path_rec.h

package info (click to toggle)
infinipath-psm 3.3%2B20.604758e7-6
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 2,452 kB
  • sloc: ansic: 34,270; makefile: 358; asm: 47; sh: 18
file content (149 lines) | stat: -rw-r--r-- 4,809 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/*
 * Copyright (c) 2013. Intel Corporation. All rights reserved.
 * 2009,2010. QLogic Corporation.  All rights reserved.
 *
 * This software is available to you under a choice of one of two
 * licenses.  You may choose to be licensed under the terms of the GNU
 * General Public License (GPL) Version 2, available from the file
 * COPYING in the main directory of this source tree, or the
 * OpenIB.org BSD license below:
 *
 *     Redistribution and use in source and binary forms, with or
 *     without modification, are permitted provided that the following
 *     conditions are met:
 *
 *      - Redistributions of source code must retain the above
 *        copyright notice, this list of conditions and the following
 *        disclaimer.
 *
 *      - Redistributions in binary form must reproduce the above
 *        copyright notice, this list of conditions and the following
 *        disclaimer in the documentation and/or other materials
 *        provided with the distribution.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

#ifndef _IPS_PATH_REC_H_
#define _IPS_PATH_REC_H_

#include <search.h>

/* Default size of path record hash table */
#define DF_PATH_REC_HASH_SIZE 2047

/* Default size of CCT table. Must be multiple of 64 */
#define DF_CCT_TABLE_SIZE 128

/* CCT max IPD delay. QLE73XX is limited to 32us */
#define DF_CCT_MAX_IPD_DELAY_US 21

/* CCA divisor shift */
#define CCA_DIVISOR_SHIFT 14

/* CCA ipd mask */
#define CCA_IPD_MASK 0x3FFF

/* A lot of these are IBTA specific defines that are available in other header
 * files. To minimize dependencies with PSM build process they are listed
 * here. Most of this is used to implement IBTA compliance features with PSM
 * like path record querye etc.
 */

enum ibta_mtu {
  IBTA_MTU_256  = 1,
  IBTA_MTU_512  = 2,
  IBTA_MTU_1024 = 3,
  IBTA_MTU_2048 = 4,
  IBTA_MTU_4096 = 5
};

typedef enum  {
  IBTA_RATE_PORT_CURRENT = 0,
  IBTA_RATE_2_5_GBPS = 2,
  IBTA_RATE_5_GBPS   = 5,
  IBTA_RATE_10_GBPS  = 3,
  IBTA_RATE_20_GBPS  = 6,
  IBTA_RATE_30_GBPS  = 4,
  IBTA_RATE_40_GBPS  = 7,
  IBTA_RATE_60_GBPS  = 8,
  IBTA_RATE_80_GBPS  = 9,
  IBTA_RATE_120_GBPS = 10
} ibta_rate;

static inline int ibta_mtu_enum_to_int(enum ibta_mtu mtu)
{
  switch (mtu) {
  case IBTA_MTU_256:  return  256;
  case IBTA_MTU_512:  return  512;
  case IBTA_MTU_1024: return 1024;
  case IBTA_MTU_2048: return 2048;
  case IBTA_MTU_4096: return 4096;
  default:          return -1;
  }
}

/* This is same as ob_path_rec from ib_types.h. Listed here to be self
 * contained to minimize dependencies during build etc.
 */
typedef struct _ibta_path_rec {
  uint64_t service_id;                /* net order */
  uint8_t  dgid[16];
  uint8_t  sgid[16];
  uint16_t dlid;                      /* net order */
  uint16_t slid;                      /* net order */
  uint32_t hop_flow_raw;              /* net order */
  uint8_t  tclass;
  uint8_t  num_path;
  uint16_t pkey;                      /* net order */
  uint16_t qos_class_sl;              /* net order */
  uint8_t  mtu;                       /* IBTA encoded */
  uint8_t  rate;                      /* IBTA encoded */
  uint8_t  pkt_life;                  /* IBTA encoded */
  uint8_t  preference;
  uint8_t  resv2[6];
} ibta_path_rec_t;

/*
 * PSM IPS path record components for endpoint. 
 */
struct ips_proto;
typedef struct ips_path_rec {
  uint16_t      epr_slid; /* For Torus/non zero LMC fabrics this can be diff */
  uint16_t	epr_dlid;
  uint16_t	epr_mtu;
  uint16_t      epr_pkey;
  uint8_t       epr_sl;
  uint8_t       epr_static_rate; 
  uint16_t      epr_static_ipd; /* Static rate IPD from path record */

  /* IBTA CCA parameters per path */
  struct ips_proto *proto;
  uint16_t      epr_ccti;
  uint16_t      epr_ccti_min;
  psmi_timer    epr_timer_cca; /* Congestion timer for epr_ccti increment. */
  uint16_t      epr_active_ipd; /* The current active IPD. max(static,cct) */
  uint8_t       epr_cca_divisor; /* CCA divisor [14:15] in CCT entry */
  uint8_t       epr_pad;

  /* TODO: The endpoint timeout should also adjust based on epr_ird */ 
  uint32_t	epr_timeout_ack_factor;
  uint64_t	epr_timeout_ack; 
  uint64_t	epr_timeout_ack_max;
} ips_path_rec_t;

typedef struct _ips_opp_path_rec {
  ibta_path_rec_t opp_response;
  ips_path_rec_t ips;
} ips_opp_path_rec_t;

psm_error_t ips_opp_init(struct ips_proto *proto);

#endif