linda.h
Go to the documentation of this file.00001 #ifndef _LINDA_H
00002 #define _LINDA_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 FILE_LICENCE ( GPL2_OR_LATER );
00023
00024
00025
00026
00027
00028
00029
00030
00031 #define BITOPS_LITTLE_ENDIAN
00032 #include <gpxe/bitops.h>
00033 #include "qib_7220_regs.h"
00034
00035 struct ib_device;
00036
00037
00038 struct QIB_7220_GPIO_pb {
00039 pseudo_bit_t GPIO[16];
00040 pseudo_bit_t Reserved[48];
00041 };
00042 struct QIB_7220_GPIO {
00043 PSEUDO_BIT_STRUCT ( struct QIB_7220_GPIO_pb );
00044 };
00045
00046
00047 struct QIB_7220_scalar_pb {
00048 pseudo_bit_t Value[64];
00049 };
00050 struct QIB_7220_scalar {
00051 PSEUDO_BIT_STRUCT ( struct QIB_7220_scalar_pb );
00052 };
00053
00054
00055 struct QIB_7220_SendPbc_pb {
00056 pseudo_bit_t LengthP1_toibc[11];
00057 pseudo_bit_t Reserved1[4];
00058 pseudo_bit_t LengthP1_trigger[11];
00059 pseudo_bit_t Reserved2[3];
00060 pseudo_bit_t TestEbp[1];
00061 pseudo_bit_t Test[1];
00062 pseudo_bit_t Intr[1];
00063 pseudo_bit_t Reserved3[31];
00064 pseudo_bit_t VL15[1];
00065 };
00066 struct QIB_7220_SendPbc {
00067 PSEUDO_BIT_STRUCT ( struct QIB_7220_SendPbc_pb );
00068 };
00069
00070
00071 struct QIB_7220_SendBufAvail_pb {
00072 pseudo_bit_t InUseCheck[144][2];
00073 pseudo_bit_t Reserved[32];
00074 };
00075 struct QIB_7220_SendBufAvail {
00076 PSEUDO_BIT_STRUCT ( struct QIB_7220_SendBufAvail_pb );
00077 };
00078
00079
00080 #define LINDA_SENDBUFAVAIL_ALIGN 64
00081
00082
00083 struct QIB_7220_RcvEgr_pb {
00084 pseudo_bit_t Addr[37];
00085 pseudo_bit_t BufSize[3];
00086 pseudo_bit_t Reserved[24];
00087 };
00088 struct QIB_7220_RcvEgr {
00089 PSEUDO_BIT_STRUCT ( struct QIB_7220_RcvEgr_pb );
00090 };
00091
00092
00093 struct QIB_7220_RcvHdrFlags_pb {
00094 pseudo_bit_t PktLen[11];
00095 pseudo_bit_t RcvType[3];
00096 pseudo_bit_t SoftB[1];
00097 pseudo_bit_t SoftA[1];
00098 pseudo_bit_t EgrIndex[12];
00099 pseudo_bit_t Reserved1[3];
00100 pseudo_bit_t UseEgrBfr[1];
00101 pseudo_bit_t RcvSeq[4];
00102 pseudo_bit_t HdrqOffset[11];
00103 pseudo_bit_t Reserved2[8];
00104 pseudo_bit_t IBErr[1];
00105 pseudo_bit_t MKErr[1];
00106 pseudo_bit_t TIDErr[1];
00107 pseudo_bit_t KHdrErr[1];
00108 pseudo_bit_t MTUErr[1];
00109 pseudo_bit_t LenErr[1];
00110 pseudo_bit_t ParityErr[1];
00111 pseudo_bit_t VCRCErr[1];
00112 pseudo_bit_t ICRCErr[1];
00113 };
00114 struct QIB_7220_RcvHdrFlags {
00115 PSEUDO_BIT_STRUCT ( struct QIB_7220_RcvHdrFlags_pb );
00116 };
00117
00118
00119 #define LINDA_BAR0_SIZE 0x400000
00120
00121
00122 #define LINDA_GPIO_SCL 0
00123
00124
00125 #define LINDA_GPIO_SDA 1
00126
00127
00128 #define LINDA_EEPROM_GUID_OFFSET 3
00129
00130
00131 #define LINDA_EEPROM_GUID_SIZE 8
00132
00133
00134 #define LINDA_EEPROM_SERIAL_OFFSET 12
00135
00136
00137 #define LINDA_EEPROM_SERIAL_SIZE 12
00138
00139
00140
00141
00142
00143
00144 #define LINDA_MAX_SEND_BUFS 32
00145
00146
00147 #define LINDA_SEND_BUF_SIZE 4096
00148
00149
00150
00151
00152
00153 #define LINDA_NUM_CONTEXTS 5
00154
00155
00156 enum linda_portcfg {
00157 LINDA_PORTCFG_5CTX = 0,
00158 LINDA_PORTCFG_9CTX = 1,
00159 LINDA_PORTCFG_17CTX = 2,
00160 };
00161
00162
00163 #define LINDA_EAGER_ARRAY_SIZE_5CTX_0 2048
00164 #define LINDA_EAGER_ARRAY_SIZE_5CTX_OTHER 4096
00165 #define LINDA_EAGER_ARRAY_SIZE_9CTX_0 2048
00166 #define LINDA_EAGER_ARRAY_SIZE_9CTX_OTHER 2048
00167 #define LINDA_EAGER_ARRAY_SIZE_17CTX_0 2048
00168 #define LINDA_EAGER_ARRAY_SIZE_17CTX_OTHER 1024
00169
00170
00171 #define LINDA_EAGER_BUFFER_ALIGN 2048
00172
00173
00174 enum linda_eager_buffer_size {
00175 LINDA_EAGER_BUFFER_NONE = 0,
00176 LINDA_EAGER_BUFFER_2K = 1,
00177 LINDA_EAGER_BUFFER_4K = 2,
00178 LINDA_EAGER_BUFFER_8K = 3,
00179 LINDA_EAGER_BUFFER_16K = 4,
00180 LINDA_EAGER_BUFFER_32K = 5,
00181 LINDA_EAGER_BUFFER_64K = 6,
00182 };
00183
00184
00185
00186
00187
00188 #define LINDA_RECV_HEADER_COUNT 8
00189
00190
00191
00192
00193
00194 #define LINDA_RECV_HEADER_SIZE 96
00195
00196
00197 #define LINDA_RECV_HEADERS_SIZE \
00198 ( LINDA_RECV_HEADER_SIZE * LINDA_RECV_HEADER_COUNT )
00199
00200
00201 #define LINDA_RECV_HEADERS_ALIGN 64
00202
00203
00204
00205
00206
00207 #define LINDA_RECV_PAYLOAD_SIZE 2048
00208
00209
00210
00211
00212
00213
00214 #define LINDA_QP_IDETH 0xdead0
00215
00216
00217 #define LINDA_EPB_REQUEST_MAX_WAIT_US 500
00218
00219
00220 #define LINDA_EPB_XACT_MAX_WAIT_US 500
00221
00222
00223 #define LINDA_EPB_CS_SERDES 1
00224 #define LINDA_EPB_CS_UC 2
00225
00226
00227 #define LINDA_EPB_WRITE 0
00228 #define LINDA_EPB_READ 1
00229
00230
00231 #define LINDA_EPB_ADDRESS( _channel, _element, _reg ) \
00232 ( (_element) | ( (_channel) << 4 ) | ( (_reg) << 9 ) )
00233 #define LINDA_EPB_ADDRESS_CHANNEL( _address ) ( ( (_address) >> 4 ) & 0x1f )
00234 #define LINDA_EPB_ADDRESS_ELEMENT( _address ) ( ( (_address) >> 0 ) & 0x0f )
00235 #define LINDA_EPB_ADDRESS_REG( _address ) ( ( (_address) >> 9 ) & 0x3f )
00236
00237
00238
00239
00240
00241
00242 #define LINDA_EPB_LOC( _cs, _channel, _element, _reg) \
00243 ( ( (_cs) << 16 ) | LINDA_EPB_ADDRESS ( _channel, _element, _reg ) )
00244 #define LINDA_EPB_LOC_ADDRESS( _loc ) ( (_loc) & 0xffff )
00245 #define LINDA_EPB_LOC_CS( _loc ) ( (_loc) >> 16 )
00246
00247
00248 #define LINDA_EPB_UC_CHANNEL 6
00249 #define LINDA_EPB_UC_LOC( _reg ) \
00250 LINDA_EPB_LOC ( LINDA_EPB_CS_UC, LINDA_EPB_UC_CHANNEL, 0, (_reg) )
00251 #define LINDA_EPB_UC_CTL LINDA_EPB_UC_LOC ( 0 )
00252 #define LINDA_EPB_UC_CTL_WRITE 1
00253 #define LINDA_EPB_UC_CTL_READ 2
00254 #define LINDA_EPB_UC_ADDR_LO LINDA_EPB_UC_LOC ( 2 )
00255 #define LINDA_EPB_UC_ADDR_HI LINDA_EPB_UC_LOC ( 3 )
00256 #define LINDA_EPB_UC_DATA LINDA_EPB_UC_LOC ( 4 )
00257 #define LINDA_EPB_UC_CHUNK_SIZE 64
00258
00259 extern uint8_t linda_ib_fw[8192];
00260
00261
00262 #define LINDA_TRIM_DONE_MAX_WAIT_MS 1000
00263
00264
00265 enum linda_link_state {
00266 LINDA_LINK_STATE_DOWN = 0,
00267 LINDA_LINK_STATE_INIT = 1,
00268 LINDA_LINK_STATE_ARM = 2,
00269 LINDA_LINK_STATE_ACTIVE = 3,
00270 LINDA_LINK_STATE_ACT_DEFER = 4,
00271 };
00272
00273
00274 #define LINDA_LINK_STATE_MAX_WAIT_US 20
00275
00276 #endif