00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 FILE_LICENCE(GPL2_ONLY);
00016
00017 #ifndef VXGE_CONFIG_H
00018 #define VXGE_CONFIG_H
00019
00020 #include <stdint.h>
00021 #include <gpxe/list.h>
00022 #include <gpxe/pci.h>
00023
00024 #ifndef VXGE_CACHE_LINE_SIZE
00025 #define VXGE_CACHE_LINE_SIZE 4096
00026 #endif
00027
00028 #define WAIT_FACTOR 1
00029
00030 #ifndef ARRAY_SIZE
00031 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
00032 #endif
00033
00034 #define VXGE_HW_MAC_MAX_WIRE_PORTS 2
00035 #define VXGE_HW_MAC_MAX_AGGR_PORTS 2
00036 #define VXGE_HW_MAC_MAX_PORTS 3
00037
00038 #define VXGE_HW_MIN_MTU 68
00039 #define VXGE_HW_MAX_MTU 9600
00040 #define VXGE_HW_DEFAULT_MTU 1500
00041
00042 #ifndef __iomem
00043 #define __iomem
00044 #endif
00045
00046 #ifndef ____cacheline_aligned
00047 #define ____cacheline_aligned
00048 #endif
00049
00050
00051
00052
00053 #define VXGE_NONE 0x00
00054 #define VXGE_INFO 0x01
00055 #define VXGE_INTR 0x02
00056 #define VXGE_XMIT 0x04
00057 #define VXGE_POLL 0x08
00058 #define VXGE_ERR 0x10
00059 #define VXGE_TRACE 0x20
00060 #define VXGE_ALL (VXGE_INFO|VXGE_INTR|VXGE_XMIT\
00061 |VXGE_POLL|VXGE_ERR|VXGE_TRACE)
00062
00063 #define NULL_VPID 0xFFFFFFFF
00064
00065 #define VXGE_HW_EVENT_BASE 0
00066 #define VXGE_LL_EVENT_BASE 100
00067
00068 #define VXGE_HW_BASE_INF 100
00069 #define VXGE_HW_BASE_ERR 200
00070 #define VXGE_HW_BASE_BADCFG 300
00071 #define VXGE_HW_DEF_DEVICE_POLL_MILLIS 1000
00072 #define VXGE_HW_MAX_PAYLOAD_SIZE_512 2
00073
00074 enum vxge_hw_status {
00075 VXGE_HW_OK = 0,
00076 VXGE_HW_FAIL = 1,
00077 VXGE_HW_PENDING = 2,
00078 VXGE_HW_COMPLETIONS_REMAIN = 3,
00079
00080 VXGE_HW_INF_NO_MORE_COMPLETED_DESCRIPTORS = VXGE_HW_BASE_INF + 1,
00081 VXGE_HW_INF_OUT_OF_DESCRIPTORS = VXGE_HW_BASE_INF + 2,
00082 VXGE_HW_INF_SW_LRO_BEGIN = VXGE_HW_BASE_INF + 3,
00083 VXGE_HW_INF_SW_LRO_CONT = VXGE_HW_BASE_INF + 4,
00084 VXGE_HW_INF_SW_LRO_UNCAPABLE = VXGE_HW_BASE_INF + 5,
00085 VXGE_HW_INF_SW_LRO_FLUSH_SESSION = VXGE_HW_BASE_INF + 6,
00086 VXGE_HW_INF_SW_LRO_FLUSH_BOTH = VXGE_HW_BASE_INF + 7,
00087
00088 VXGE_HW_ERR_INVALID_HANDLE = VXGE_HW_BASE_ERR + 1,
00089 VXGE_HW_ERR_OUT_OF_MEMORY = VXGE_HW_BASE_ERR + 2,
00090 VXGE_HW_ERR_VPATH_NOT_AVAILABLE = VXGE_HW_BASE_ERR + 3,
00091 VXGE_HW_ERR_VPATH_NOT_OPEN = VXGE_HW_BASE_ERR + 4,
00092 VXGE_HW_ERR_WRONG_IRQ = VXGE_HW_BASE_ERR + 5,
00093 VXGE_HW_ERR_SWAPPER_CTRL = VXGE_HW_BASE_ERR + 6,
00094 VXGE_HW_ERR_INVALID_MTU_SIZE = VXGE_HW_BASE_ERR + 7,
00095 VXGE_HW_ERR_INVALID_INDEX = VXGE_HW_BASE_ERR + 8,
00096 VXGE_HW_ERR_INVALID_TYPE = VXGE_HW_BASE_ERR + 9,
00097 VXGE_HW_ERR_INVALID_OFFSET = VXGE_HW_BASE_ERR + 10,
00098 VXGE_HW_ERR_INVALID_DEVICE = VXGE_HW_BASE_ERR + 11,
00099 VXGE_HW_ERR_VERSION_CONFLICT = VXGE_HW_BASE_ERR + 12,
00100 VXGE_HW_ERR_INVALID_PCI_INFO = VXGE_HW_BASE_ERR + 13,
00101 VXGE_HW_ERR_INVALID_TCODE = VXGE_HW_BASE_ERR + 14,
00102 VXGE_HW_ERR_INVALID_BLOCK_SIZE = VXGE_HW_BASE_ERR + 15,
00103 VXGE_HW_ERR_INVALID_STATE = VXGE_HW_BASE_ERR + 16,
00104 VXGE_HW_ERR_PRIVILAGED_OPEARATION = VXGE_HW_BASE_ERR + 17,
00105 VXGE_HW_ERR_INVALID_PORT = VXGE_HW_BASE_ERR + 18,
00106 VXGE_HW_ERR_FIFO = VXGE_HW_BASE_ERR + 19,
00107 VXGE_HW_ERR_VPATH = VXGE_HW_BASE_ERR + 20,
00108 VXGE_HW_ERR_CRITICAL = VXGE_HW_BASE_ERR + 21,
00109 VXGE_HW_ERR_SLOT_FREEZE = VXGE_HW_BASE_ERR + 22,
00110 VXGE_HW_ERR_INVALID_MIN_BANDWIDTH = VXGE_HW_BASE_ERR + 25,
00111 VXGE_HW_ERR_INVALID_MAX_BANDWIDTH = VXGE_HW_BASE_ERR + 26,
00112 VXGE_HW_ERR_INVALID_TOTAL_BANDWIDTH = VXGE_HW_BASE_ERR + 27,
00113 VXGE_HW_ERR_INVALID_BANDWIDTH_LIMIT = VXGE_HW_BASE_ERR + 28,
00114 VXGE_HW_ERR_RESET_IN_PROGRESS = VXGE_HW_BASE_ERR + 29,
00115 VXGE_HW_ERR_OUT_OF_SPACE = VXGE_HW_BASE_ERR + 30,
00116 VXGE_HW_ERR_INVALID_FUNC_MODE = VXGE_HW_BASE_ERR + 31,
00117 VXGE_HW_ERR_INVALID_DP_MODE = VXGE_HW_BASE_ERR + 32,
00118 VXGE_HW_ERR_INVALID_FAILURE_BEHAVIOUR = VXGE_HW_BASE_ERR + 33,
00119 VXGE_HW_ERR_INVALID_L2_SWITCH_STATE = VXGE_HW_BASE_ERR + 34,
00120 VXGE_HW_ERR_INVALID_CATCH_BASIN_MODE = VXGE_HW_BASE_ERR + 35,
00121
00122 VXGE_HW_BADCFG_RING_INDICATE_MAX_PKTS = VXGE_HW_BASE_BADCFG + 1,
00123 VXGE_HW_BADCFG_FIFO_BLOCKS = VXGE_HW_BASE_BADCFG + 2,
00124 VXGE_HW_BADCFG_VPATH_MTU = VXGE_HW_BASE_BADCFG + 3,
00125 VXGE_HW_BADCFG_VPATH_RPA_STRIP_VLAN_TAG = VXGE_HW_BASE_BADCFG + 4,
00126 VXGE_HW_BADCFG_VPATH_MIN_BANDWIDTH = VXGE_HW_BASE_BADCFG + 5,
00127 VXGE_HW_BADCFG_VPATH_BANDWIDTH_LIMIT = VXGE_HW_BASE_BADCFG + 6,
00128 VXGE_HW_BADCFG_INTR_MODE = VXGE_HW_BASE_BADCFG + 7,
00129 VXGE_HW_BADCFG_RTS_MAC_EN = VXGE_HW_BASE_BADCFG + 8,
00130 VXGE_HW_BADCFG_VPATH_AGGR_ACK = VXGE_HW_BASE_BADCFG + 9,
00131 VXGE_HW_BADCFG_VPATH_PRIORITY = VXGE_HW_BASE_BADCFG + 10,
00132
00133 VXGE_HW_EOF_TRACE_BUF = -1
00134 };
00135
00136
00137
00138
00139
00140
00141
00142
00143 enum vxge_hw_device_link_state {
00144 VXGE_HW_LINK_NONE,
00145 VXGE_HW_LINK_DOWN,
00146 VXGE_HW_LINK_UP
00147 };
00148
00149
00150 struct vxge_vpath;
00151 struct __vxge_hw_virtualpath;
00152
00153
00154
00155
00156
00157
00158 struct vxge_hw_ring_rxd_1 {
00159 u64 host_control;
00160 u64 control_0;
00161 #define VXGE_HW_RING_RXD_RTH_BUCKET_GET(ctrl0) vxge_bVALn(ctrl0, 0, 7)
00162
00163 #define VXGE_HW_RING_RXD_LIST_OWN_ADAPTER vxge_mBIT(7)
00164
00165 #define VXGE_HW_RING_RXD_FAST_PATH_ELIGIBLE_GET(ctrl0) vxge_bVALn(ctrl0, 8, 1)
00166
00167 #define VXGE_HW_RING_RXD_L3_CKSUM_CORRECT_GET(ctrl0) vxge_bVALn(ctrl0, 9, 1)
00168
00169 #define VXGE_HW_RING_RXD_L4_CKSUM_CORRECT_GET(ctrl0) vxge_bVALn(ctrl0, 10, 1)
00170
00171 #define VXGE_HW_RING_RXD_T_CODE_GET(ctrl0) vxge_bVALn(ctrl0, 12, 4)
00172 #define VXGE_HW_RING_RXD_T_CODE(val) vxge_vBIT(val, 12, 4)
00173
00174 #define VXGE_HW_RING_RXD_T_CODE_UNUSED VXGE_HW_RING_T_CODE_UNUSED
00175
00176 #define VXGE_HW_RING_RXD_SYN_GET(ctrl0) vxge_bVALn(ctrl0, 16, 1)
00177
00178 #define VXGE_HW_RING_RXD_IS_ICMP_GET(ctrl0) vxge_bVALn(ctrl0, 17, 1)
00179
00180 #define VXGE_HW_RING_RXD_RTH_SPDM_HIT_GET(ctrl0) vxge_bVALn(ctrl0, 18, 1)
00181
00182 #define VXGE_HW_RING_RXD_RTH_IT_HIT_GET(ctrl0) vxge_bVALn(ctrl0, 19, 1)
00183
00184 #define VXGE_HW_RING_RXD_RTH_HASH_TYPE_GET(ctrl0) vxge_bVALn(ctrl0, 20, 4)
00185
00186 #define VXGE_HW_RING_RXD_IS_VLAN_GET(ctrl0) vxge_bVALn(ctrl0, 24, 1)
00187
00188 #define VXGE_HW_RING_RXD_ETHER_ENCAP_GET(ctrl0) vxge_bVALn(ctrl0, 25, 2)
00189
00190 #define VXGE_HW_RING_RXD_FRAME_PROTO_GET(ctrl0) vxge_bVALn(ctrl0, 27, 5)
00191
00192 #define VXGE_HW_RING_RXD_L3_CKSUM_GET(ctrl0) vxge_bVALn(ctrl0, 32, 16)
00193
00194 #define VXGE_HW_RING_RXD_L4_CKSUM_GET(ctrl0) vxge_bVALn(ctrl0, 48, 16)
00195
00196 u64 control_1;
00197
00198 #define VXGE_HW_RING_RXD_1_BUFFER0_SIZE_GET(ctrl1) vxge_bVALn(ctrl1, 2, 14)
00199 #define VXGE_HW_RING_RXD_1_BUFFER0_SIZE(val) vxge_vBIT(val, 2, 14)
00200 #define VXGE_HW_RING_RXD_1_BUFFER0_SIZE_MASK vxge_vBIT(0x3FFF, 2, 14)
00201
00202 #define VXGE_HW_RING_RXD_1_RTH_HASH_VAL_GET(ctrl1) vxge_bVALn(ctrl1, 16, 32)
00203
00204 #define VXGE_HW_RING_RXD_VLAN_TAG_GET(ctrl1) vxge_bVALn(ctrl1, 48, 16)
00205
00206 u64 buffer0_ptr;
00207 };
00208
00209
00210
00211
00212
00213
00214
00215
00216 struct vxge_hw_fifo_txd {
00217 u64 control_0;
00218 #define VXGE_HW_FIFO_TXD_LIST_OWN_ADAPTER vxge_mBIT(7)
00219
00220 #define VXGE_HW_FIFO_TXD_T_CODE_GET(ctrl0) vxge_bVALn(ctrl0, 12, 4)
00221 #define VXGE_HW_FIFO_TXD_T_CODE(val) vxge_vBIT(val, 12, 4)
00222 #define VXGE_HW_FIFO_TXD_T_CODE_UNUSED VXGE_HW_FIFO_T_CODE_UNUSED
00223
00224 #define VXGE_HW_FIFO_TXD_GATHER_CODE(val) vxge_vBIT(val, 22, 2)
00225 #define VXGE_HW_FIFO_TXD_GATHER_CODE_FIRST VXGE_HW_FIFO_GATHER_CODE_FIRST
00226 #define VXGE_HW_FIFO_TXD_GATHER_CODE_LAST VXGE_HW_FIFO_GATHER_CODE_LAST
00227
00228 #define VXGE_HW_FIFO_TXD_LSO_EN vxge_mBIT(30)
00229 #define VXGE_HW_FIFO_TXD_LSO_MSS(val) vxge_vBIT(val, 34, 14)
00230 #define VXGE_HW_FIFO_TXD_BUFFER_SIZE(val) vxge_vBIT(val, 48, 16)
00231
00232 u64 control_1;
00233 #define VXGE_HW_FIFO_TXD_TX_CKO_IPV4_EN vxge_mBIT(5)
00234 #define VXGE_HW_FIFO_TXD_TX_CKO_TCP_EN vxge_mBIT(6)
00235 #define VXGE_HW_FIFO_TXD_TX_CKO_UDP_EN vxge_mBIT(7)
00236 #define VXGE_HW_FIFO_TXD_VLAN_ENABLE vxge_mBIT(15)
00237
00238 #define VXGE_HW_FIFO_TXD_VLAN_TAG(val) vxge_vBIT(val, 16, 16)
00239 #define VXGE_HW_FIFO_TXD_NO_BW_LIMIT vxge_mBIT(43)
00240
00241 #define VXGE_HW_FIFO_TXD_INT_NUMBER(val) vxge_vBIT(val, 34, 6)
00242
00243 #define VXGE_HW_FIFO_TXD_INT_TYPE_PER_LIST vxge_mBIT(46)
00244 #define VXGE_HW_FIFO_TXD_INT_TYPE_UTILZ vxge_mBIT(47)
00245
00246 u64 buffer_pointer;
00247
00248 u64 host_control;
00249 };
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261 #define VXGE_HW_FW_STRLEN 32
00262 struct vxge_hw_device_date {
00263 u32 day;
00264 u32 month;
00265 u32 year;
00266 char date[VXGE_HW_FW_STRLEN];
00267 };
00268
00269 struct vxge_hw_device_version {
00270 u32 major;
00271 u32 minor;
00272 u32 build;
00273 char version[VXGE_HW_FW_STRLEN];
00274 };
00275
00276 u64 __vxge_hw_vpath_pci_func_mode_get(
00277 u32 vp_id,
00278 struct vxge_hw_vpath_reg __iomem *vpath_reg);
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295 struct __vxge_hw_non_offload_db_wrapper {
00296 u64 control_0;
00297 #define VXGE_HW_NODBW_GET_TYPE(ctrl0) vxge_bVALn(ctrl0, 0, 8)
00298 #define VXGE_HW_NODBW_TYPE(val) vxge_vBIT(val, 0, 8)
00299 #define VXGE_HW_NODBW_TYPE_NODBW 0
00300
00301 #define VXGE_HW_NODBW_GET_LAST_TXD_NUMBER(ctrl0) vxge_bVALn(ctrl0, 32, 8)
00302 #define VXGE_HW_NODBW_LAST_TXD_NUMBER(val) vxge_vBIT(val, 32, 8)
00303
00304 #define VXGE_HW_NODBW_GET_NO_SNOOP(ctrl0) vxge_bVALn(ctrl0, 56, 8)
00305 #define VXGE_HW_NODBW_LIST_NO_SNOOP(val) vxge_vBIT(val, 56, 8)
00306 #define VXGE_HW_NODBW_LIST_NO_SNOOP_TXD_READ_TXD0_WRITE 0x2
00307 #define VXGE_HW_NODBW_LIST_NO_SNOOP_TX_FRAME_DATA_READ 0x1
00308
00309 u64 txdl_ptr;
00310 };
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326 struct __vxge_hw_fifo {
00327 struct vxge_hw_vpath_reg *vp_reg;
00328 struct __vxge_hw_non_offload_db_wrapper *nofl_db;
00329 u32 vp_id;
00330 u32 tx_intr_num;
00331
00332 struct vxge_hw_fifo_txd *txdl;
00333 #define VXGE_HW_FIFO_TXD_DEPTH 128
00334 u16 depth;
00335 u16 hw_offset;
00336 u16 sw_offset;
00337
00338 struct __vxge_hw_virtualpath *vpathh;
00339 };
00340
00341
00342
00343
00344 struct __vxge_hw_ring_block {
00345 #define VXGE_HW_MAX_RXDS_PER_BLOCK_1 127
00346 struct vxge_hw_ring_rxd_1 rxd[VXGE_HW_MAX_RXDS_PER_BLOCK_1];
00347
00348 u64 reserved_0;
00349 #define END_OF_BLOCK 0xFEFFFFFFFFFFFFFFULL
00350
00351 u64 reserved_1;
00352
00353 u64 reserved_2_pNext_RxD_block;
00354
00355 u64 pNext_RxD_Blk_physical;
00356 };
00357
00358
00359
00360
00361
00362
00363
00364 struct __vxge_hw_ring {
00365 struct vxge_hw_vpath_reg *vp_reg;
00366 struct vxge_hw_common_reg *common_reg;
00367 u32 vp_id;
00368 #define VXGE_HW_RING_RXD_QWORDS_MODE_1 4
00369 u32 doorbell_cnt;
00370 u32 total_db_cnt;
00371 #define VXGE_HW_RING_RXD_QWORD_LIMIT 16
00372 u64 rxd_qword_limit;
00373
00374 struct __vxge_hw_ring_block *rxdl;
00375 #define VXGE_HW_RING_BUF_PER_BLOCK 9
00376 u16 buf_per_block;
00377 u16 rxd_offset;
00378
00379 #define VXGE_HW_RING_RX_POLL_WEIGHT 8
00380 u16 rx_poll_weight;
00381
00382 struct io_buffer *iobuf[VXGE_HW_RING_BUF_PER_BLOCK + 1];
00383 struct __vxge_hw_virtualpath *vpathh;
00384 };
00385
00386
00387
00388
00389
00390
00391
00392
00393 struct __vxge_hw_virtualpath {
00394 u32 vp_id;
00395
00396 u32 vp_open;
00397 #define VXGE_HW_VP_NOT_OPEN 0
00398 #define VXGE_HW_VP_OPEN 1
00399
00400 struct __vxge_hw_device *hldev;
00401 struct vxge_hw_vpath_reg *vp_reg;
00402 struct vxge_hw_vpmgmt_reg *vpmgmt_reg;
00403 struct __vxge_hw_non_offload_db_wrapper *nofl_db;
00404
00405 u32 max_mtu;
00406 u32 vsport_number;
00407 u32 max_kdfc_db;
00408 u32 max_nofl_db;
00409
00410 struct __vxge_hw_ring ringh;
00411 struct __vxge_hw_fifo fifoh;
00412 };
00413 #define VXGE_HW_INFO_LEN 64
00414 #define VXGE_HW_PMD_INFO_LEN 16
00415 #define VXGE_MAX_PRINT_BUF_SIZE 128
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431 struct vxge_hw_device_hw_info {
00432 u32 host_type;
00433 #define VXGE_HW_NO_MR_NO_SR_NORMAL_FUNCTION 0
00434 #define VXGE_HW_MR_NO_SR_VH0_BASE_FUNCTION 1
00435 #define VXGE_HW_NO_MR_SR_VH0_FUNCTION0 2
00436 #define VXGE_HW_NO_MR_SR_VH0_VIRTUAL_FUNCTION 3
00437 #define VXGE_HW_MR_SR_VH0_INVALID_CONFIG 4
00438 #define VXGE_HW_SR_VH_FUNCTION0 5
00439 #define VXGE_HW_SR_VH_VIRTUAL_FUNCTION 6
00440 #define VXGE_HW_VH_NORMAL_FUNCTION 7
00441 u64 function_mode;
00442 #define VXGE_HW_FUNCTION_MODE_MIN 0
00443 #define VXGE_HW_FUNCTION_MODE_MAX 10
00444
00445 #define VXGE_HW_FUNCTION_MODE_SINGLE_FUNCTION 0
00446 #define VXGE_HW_FUNCTION_MODE_MULTI_FUNCTION 1
00447 #define VXGE_HW_FUNCTION_MODE_SRIOV 2
00448 #define VXGE_HW_FUNCTION_MODE_MRIOV 3
00449 #define VXGE_HW_FUNCTION_MODE_MRIOV_8 4
00450 #define VXGE_HW_FUNCTION_MODE_MULTI_FUNCTION_17 5
00451 #define VXGE_HW_FUNCTION_MODE_SRIOV_8 6
00452 #define VXGE_HW_FUNCTION_MODE_SRIOV_4 7
00453 #define VXGE_HW_FUNCTION_MODE_MULTI_FUNCTION_2 8
00454 #define VXGE_HW_FUNCTION_MODE_MULTI_FUNCTION_4 9
00455 #define VXGE_HW_FUNCTION_MODE_MRIOV_4 10
00456
00457 u32 func_id;
00458 u64 vpath_mask;
00459 struct vxge_hw_device_version fw_version;
00460 struct vxge_hw_device_date fw_date;
00461 struct vxge_hw_device_version flash_version;
00462 struct vxge_hw_device_date flash_date;
00463 u8 serial_number[VXGE_HW_INFO_LEN];
00464 u8 part_number[VXGE_HW_INFO_LEN];
00465 u8 product_desc[VXGE_HW_INFO_LEN];
00466 u8 (mac_addrs)[VXGE_HW_MAX_VIRTUAL_PATHS][ETH_ALEN];
00467 u8 (mac_addr_masks)[VXGE_HW_MAX_VIRTUAL_PATHS][ETH_ALEN];
00468 };
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480 struct __vxge_hw_device {
00481 u32 magic;
00482 #define VXGE_HW_DEVICE_MAGIC 0x12345678
00483 #define VXGE_HW_DEVICE_DEAD 0xDEADDEAD
00484 void __iomem *bar0;
00485 struct pci_device *pdev;
00486 struct net_device *ndev;
00487 struct vxgedev *vdev;
00488
00489 enum vxge_hw_device_link_state link_state;
00490
00491 u32 host_type;
00492 u32 func_id;
00493 u8 titan1;
00494 u32 access_rights;
00495 #define VXGE_HW_DEVICE_ACCESS_RIGHT_VPATH 0x1
00496 #define VXGE_HW_DEVICE_ACCESS_RIGHT_SRPCIM 0x2
00497 #define VXGE_HW_DEVICE_ACCESS_RIGHT_MRPCIM 0x4
00498 struct vxge_hw_legacy_reg *legacy_reg;
00499 struct vxge_hw_toc_reg *toc_reg;
00500 struct vxge_hw_common_reg *common_reg;
00501 struct vxge_hw_mrpcim_reg *mrpcim_reg;
00502 struct vxge_hw_srpcim_reg *srpcim_reg \
00503 [VXGE_HW_TITAN_SRPCIM_REG_SPACES];
00504 struct vxge_hw_vpmgmt_reg *vpmgmt_reg \
00505 [VXGE_HW_TITAN_VPMGMT_REG_SPACES];
00506 struct vxge_hw_vpath_reg *vpath_reg \
00507 [VXGE_HW_TITAN_VPATH_REG_SPACES];
00508 u8 *kdfc;
00509 u8 *usdc;
00510 struct __vxge_hw_virtualpath virtual_path;
00511 u64 vpath_assignments;
00512 u64 vpaths_deployed;
00513 u32 first_vp_id;
00514 u64 tim_int_mask0[4];
00515 u32 tim_int_mask1[4];
00516
00517 struct vxge_hw_device_hw_info hw_info;
00518 };
00519
00520 #define VXGE_HW_DEVICE_LINK_STATE_SET(hldev, ls) (hldev->link_state = ls)
00521
00522 #define VXGE_HW_DEVICE_TIM_INT_MASK_SET(m0, m1, i) { \
00523 if (i < 16) { \
00524 m0[0] |= vxge_vBIT(0x8, (i*4), 4); \
00525 m0[1] |= vxge_vBIT(0x4, (i*4), 4); \
00526 } \
00527 else { \
00528 m1[0] = 0x80000000; \
00529 m1[1] = 0x40000000; \
00530 } \
00531 }
00532
00533 #define VXGE_HW_DEVICE_TIM_INT_MASK_RESET(m0, m1, i) { \
00534 if (i < 16) { \
00535 m0[0] &= ~vxge_vBIT(0x8, (i*4), 4); \
00536 m0[1] &= ~vxge_vBIT(0x4, (i*4), 4); \
00537 } \
00538 else { \
00539 m1[0] = 0; \
00540 m1[1] = 0; \
00541 } \
00542 }
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556 enum vxge_hw_txdl_state {
00557 VXGE_HW_TXDL_STATE_NONE = 0,
00558 VXGE_HW_TXDL_STATE_AVAIL = 1,
00559 VXGE_HW_TXDL_STATE_POSTED = 2,
00560 VXGE_HW_TXDL_STATE_FREED = 3
00561 };
00562
00563
00564
00565 static inline void __vxge_hw_desc_offset_up(u16 upper_limit,
00566 u16 *offset)
00567 {
00568 if (++(*offset) >= upper_limit)
00569 *offset = 0;
00570 }
00571
00572
00573 static inline void vxge_hw_ring_rxd_offset_up(u16 *offset)
00574 {
00575 __vxge_hw_desc_offset_up(VXGE_HW_MAX_RXDS_PER_BLOCK_1,
00576 offset);
00577 }
00578
00579 static inline void vxge_hw_fifo_txd_offset_up(u16 *offset)
00580 {
00581 __vxge_hw_desc_offset_up(VXGE_HW_FIFO_TXD_DEPTH, offset);
00582 }
00583
00584
00585
00586
00587
00588
00589
00590
00591
00592
00593
00594
00595
00596
00597
00598
00599 static inline
00600 void vxge_hw_ring_rxd_1b_set(struct vxge_hw_ring_rxd_1 *rxdp,
00601 struct io_buffer *iob, u32 size)
00602 {
00603 rxdp->host_control = (intptr_t)(iob);
00604 rxdp->buffer0_ptr = virt_to_bus(iob->data);
00605 rxdp->control_1 &= ~VXGE_HW_RING_RXD_1_BUFFER0_SIZE_MASK;
00606 rxdp->control_1 |= VXGE_HW_RING_RXD_1_BUFFER0_SIZE(size);
00607 }
00608
00609 enum vxge_hw_status vxge_hw_device_hw_info_get(
00610 void __iomem *bar0,
00611 struct vxge_hw_device_hw_info *hw_info);
00612
00613 enum vxge_hw_status
00614 __vxge_hw_vpath_fw_ver_get(
00615 struct vxge_hw_vpath_reg __iomem *vpath_reg,
00616 struct vxge_hw_device_hw_info *hw_info);
00617
00618 enum vxge_hw_status
00619 __vxge_hw_vpath_card_info_get(
00620 struct vxge_hw_vpath_reg __iomem *vpath_reg,
00621 struct vxge_hw_device_hw_info *hw_info);
00622
00623
00624
00625
00626
00627
00628
00629
00630 static inline
00631 enum vxge_hw_device_link_state vxge_hw_device_link_state_get(
00632 struct __vxge_hw_device *devh)
00633 {
00634 return devh->link_state;
00635 }
00636
00637 void vxge_hw_device_terminate(struct __vxge_hw_device *devh);
00638
00639 enum vxge_hw_status vxge_hw_device_initialize(
00640 struct __vxge_hw_device **devh,
00641 void *bar0,
00642 struct pci_device *pdev,
00643 u8 titan1);
00644
00645 enum vxge_hw_status
00646 vxge_hw_vpath_open(struct __vxge_hw_device *hldev, struct vxge_vpath *vpath);
00647
00648 enum vxge_hw_status
00649 __vxge_hw_device_vpath_reset_in_prog_check(u64 __iomem *vpath_rst_in_prog);
00650
00651 enum vxge_hw_status vxge_hw_vpath_close(struct __vxge_hw_virtualpath *vpath);
00652
00653 enum vxge_hw_status vxge_hw_vpath_reset(struct __vxge_hw_virtualpath *vpath);
00654
00655 enum vxge_hw_status
00656 vxge_hw_vpath_recover_from_reset(struct __vxge_hw_virtualpath *vpath);
00657
00658 void
00659 vxge_hw_vpath_enable(struct __vxge_hw_virtualpath *vpath);
00660
00661 enum vxge_hw_status
00662 vxge_hw_vpath_mtu_set(struct __vxge_hw_virtualpath *vpath, u32 new_mtu);
00663
00664 void
00665 vxge_hw_vpath_rx_doorbell_init(struct __vxge_hw_virtualpath *vpath);
00666
00667 void
00668 __vxge_hw_device_pci_e_init(struct __vxge_hw_device *hldev);
00669
00670 enum vxge_hw_status
00671 __vxge_hw_legacy_swapper_set(struct vxge_hw_legacy_reg __iomem *legacy_reg);
00672
00673 enum vxge_hw_status
00674 __vxge_hw_vpath_swapper_set(struct vxge_hw_vpath_reg __iomem *vpath_reg);
00675
00676 enum vxge_hw_status
00677 __vxge_hw_kdfc_swapper_set(struct vxge_hw_legacy_reg __iomem *legacy_reg,
00678 struct vxge_hw_vpath_reg __iomem *vpath_reg);
00679
00680 enum vxge_hw_status
00681 __vxge_hw_device_register_poll(
00682 void __iomem *reg,
00683 u64 mask, u32 max_millis);
00684
00685 #ifndef readq
00686 static inline u64 readq(void __iomem *addr)
00687 {
00688 u64 ret = 0;
00689 ret = readl(addr + 4);
00690 ret <<= 32;
00691 ret |= readl(addr);
00692
00693 return ret;
00694 }
00695 #endif
00696
00697 #ifndef writeq
00698 static inline void writeq(u64 val, void __iomem *addr)
00699 {
00700 writel((u32) (val), addr);
00701 writel((u32) (val >> 32), (addr + 4));
00702 }
00703 #endif
00704
00705 static inline void __vxge_hw_pio_mem_write32_upper(u32 val, void __iomem *addr)
00706 {
00707 writel(val, addr + 4);
00708 }
00709
00710 static inline void __vxge_hw_pio_mem_write32_lower(u32 val, void __iomem *addr)
00711 {
00712 writel(val, addr);
00713 }
00714
00715 static inline enum vxge_hw_status
00716 __vxge_hw_pio_mem_write64(u64 val64, void __iomem *addr,
00717 u64 mask, u32 max_millis)
00718 {
00719 enum vxge_hw_status status = VXGE_HW_OK;
00720
00721 __vxge_hw_pio_mem_write32_lower((u32)vxge_bVALn(val64, 32, 32), addr);
00722 wmb();
00723 __vxge_hw_pio_mem_write32_upper((u32)vxge_bVALn(val64, 0, 32), addr);
00724 wmb();
00725
00726 status = __vxge_hw_device_register_poll(addr, mask, max_millis);
00727 return status;
00728 }
00729
00730 struct vxge_hw_toc_reg __iomem *
00731 __vxge_hw_device_toc_get(void __iomem *bar0);
00732
00733 enum vxge_hw_status
00734 __vxge_hw_device_reg_addr_get(struct __vxge_hw_device *hldev);
00735
00736 void
00737 __vxge_hw_device_host_info_get(struct __vxge_hw_device *hldev);
00738
00739 enum vxge_hw_status
00740 __vxge_hw_device_initialize(struct __vxge_hw_device *hldev);
00741
00742 enum vxge_hw_status
00743 __vxge_hw_vpath_pci_read(
00744 struct __vxge_hw_virtualpath *vpath,
00745 u32 phy_func_0,
00746 u32 offset,
00747 u32 *val);
00748
00749 enum vxge_hw_status
00750 __vxge_hw_vpath_addr_get(
00751 struct vxge_hw_vpath_reg __iomem *vpath_reg,
00752 u8 (macaddr)[ETH_ALEN],
00753 u8 (macaddr_mask)[ETH_ALEN]);
00754
00755 u32
00756 __vxge_hw_vpath_func_id_get(struct vxge_hw_vpmgmt_reg __iomem *vpmgmt_reg);
00757
00758 enum vxge_hw_status
00759 __vxge_hw_vpath_reset_check(struct __vxge_hw_virtualpath *vpath);
00760
00761 enum vxge_hw_status
00762 vxge_hw_vpath_strip_fcs_check(struct __vxge_hw_device *hldev, u64 vpath_mask);
00763
00764
00765
00766
00767
00768
00769 static const u16 debug_filter = VXGE_ERR;
00770 #define vxge_debug(mask, fmt...) do { \
00771 if (debug_filter & mask) \
00772 DBG(fmt); \
00773 } while (0);
00774
00775 #define vxge_trace() vxge_debug(VXGE_TRACE, "%s:%d\n", __func__, __LINE__);
00776
00777 enum vxge_hw_status
00778 vxge_hw_get_func_mode(struct __vxge_hw_device *hldev, u32 *func_mode);
00779
00780 enum vxge_hw_status
00781 vxge_hw_set_fw_api(struct __vxge_hw_device *hldev,
00782 u64 vp_id, u32 action,
00783 u32 offset, u64 data0, u64 data1);
00784 void
00785 vxge_hw_vpath_set_zero_rx_frm_len(struct __vxge_hw_device *hldev);
00786
00787 #endif