00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 FILE_LICENCE(GPL2_ONLY);
00016
00017 #ifndef VXGE_TRAFFIC_H
00018 #define VXGE_TRAFFIC_H
00019
00020 #include <stdint.h>
00021 #include <gpxe/if_ether.h>
00022 #include <gpxe/iobuf.h>
00023
00024 #include "vxge_reg.h"
00025 #include "vxge_version.h"
00026
00027 #define VXGE_HW_DTR_MAX_T_CODE 16
00028 #define VXGE_HW_ALL_FOXES 0xFFFFFFFFFFFFFFFFULL
00029 #define VXGE_HW_INTR_MASK_ALL 0xFFFFFFFFFFFFFFFFULL
00030 #define VXGE_HW_MAX_VIRTUAL_PATHS 17
00031
00032 #define VXGE_HW_MAX_VIRTUAL_FUNCTIONS 8
00033
00034 #define VXGE_HW_MAC_MAX_MAC_PORT_ID 3
00035
00036 #define VXGE_HW_DEFAULT_32 0xffffffff
00037
00038 #define VXGE_HW_HEADER_802_2_SIZE 3
00039 #define VXGE_HW_HEADER_SNAP_SIZE 5
00040 #define VXGE_HW_HEADER_VLAN_SIZE 4
00041 #define VXGE_HW_MAC_HEADER_MAX_SIZE \
00042 (ETH_HLEN + \
00043 VXGE_HW_HEADER_802_2_SIZE + \
00044 VXGE_HW_HEADER_VLAN_SIZE + \
00045 VXGE_HW_HEADER_SNAP_SIZE)
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061 #define VXGE_HW_HEADER_ETHERNET_II_802_3_ALIGN 0x12
00062 #define VXGE_HW_HEADER_802_2_SNAP_ALIGN 2
00063 #define VXGE_HW_HEADER_802_2_ALIGN 3
00064 #define VXGE_HW_HEADER_SNAP_ALIGN 1
00065
00066 #define VXGE_HW_L3_CKSUM_OK 0xFFFF
00067 #define VXGE_HW_L4_CKSUM_OK 0xFFFF
00068
00069
00070 struct __vxge_hw_device;
00071 struct __vxge_hw_virtualpath;
00072 struct __vxge_hw_fifo;
00073 struct __vxge_hw_ring;
00074 struct vxge_hw_ring_rxd_1;
00075 struct vxge_hw_fifo_txd;
00076
00077 #ifndef TRUE
00078 #define TRUE 1
00079 #endif
00080
00081 #ifndef FALSE
00082 #define FALSE 0
00083 #endif
00084
00085
00086 #define VXGE_HW_EVENT_BASE 0
00087 #define VXGE_LL_EVENT_BASE 100
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110 enum vxge_hw_event {
00111 VXGE_HW_EVENT_UNKNOWN = 0,
00112
00113 VXGE_HW_EVENT_RESET_START = VXGE_HW_EVENT_BASE + 1,
00114 VXGE_HW_EVENT_RESET_COMPLETE = VXGE_HW_EVENT_BASE + 2,
00115 VXGE_HW_EVENT_LINK_DOWN = VXGE_HW_EVENT_BASE + 3,
00116 VXGE_HW_EVENT_LINK_UP = VXGE_HW_EVENT_BASE + 4,
00117 VXGE_HW_EVENT_ALARM_CLEARED = VXGE_HW_EVENT_BASE + 5,
00118 VXGE_HW_EVENT_ECCERR = VXGE_HW_EVENT_BASE + 6,
00119 VXGE_HW_EVENT_MRPCIM_ECCERR = VXGE_HW_EVENT_BASE + 7,
00120 VXGE_HW_EVENT_FIFO_ERR = VXGE_HW_EVENT_BASE + 8,
00121 VXGE_HW_EVENT_VPATH_ERR = VXGE_HW_EVENT_BASE + 9,
00122 VXGE_HW_EVENT_CRITICAL_ERR = VXGE_HW_EVENT_BASE + 10,
00123 VXGE_HW_EVENT_SERR = VXGE_HW_EVENT_BASE + 11,
00124 VXGE_HW_EVENT_SRPCIM_SERR = VXGE_HW_EVENT_BASE + 12,
00125 VXGE_HW_EVENT_MRPCIM_SERR = VXGE_HW_EVENT_BASE + 13,
00126 VXGE_HW_EVENT_SLOT_FREEZE = VXGE_HW_EVENT_BASE + 14,
00127 };
00128
00129 #define VXGE_HW_MAX_INTR_PER_VP 4
00130 #define VXGE_HW_VPATH_INTR_TX 0
00131 #define VXGE_HW_VPATH_INTR_RX 1
00132 #define VXGE_HW_VPATH_INTR_EINTA 2
00133 #define VXGE_HW_VPATH_INTR_BMAP 3
00134
00135 #define VXGE_HW_BLOCK_SIZE 4096
00136
00137 #define VXGE_HW_TIM_UTIL_SEL_LEGACY_TX_NET_UTIL 17
00138 #define VXGE_HW_TIM_UTIL_SEL_LEGACY_RX_NET_UTIL 18
00139 #define VXGE_HW_TIM_UTIL_SEL_LEGACY_TX_RX_AVE_NET_UTIL 19
00140 #define VXGE_HW_TIM_UTIL_SEL_PER_VPATH 63
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172 enum vxge_hw_ring_tcode {
00173 VXGE_HW_RING_T_CODE_OK = 0x0,
00174 VXGE_HW_RING_T_CODE_L3_CKSUM_MISMATCH = 0x1,
00175 VXGE_HW_RING_T_CODE_L4_CKSUM_MISMATCH = 0x2,
00176 VXGE_HW_RING_T_CODE_L3_L4_CKSUM_MISMATCH = 0x3,
00177 VXGE_HW_RING_T_CODE_L3_PKT_ERR = 0x5,
00178 VXGE_HW_RING_T_CODE_L2_FRM_ERR = 0x6,
00179 VXGE_HW_RING_T_CODE_BUF_SIZE_ERR = 0x7,
00180 VXGE_HW_RING_T_CODE_INT_ECC_ERR = 0x8,
00181 VXGE_HW_RING_T_CODE_BENIGN_OVFLOW = 0x9,
00182 VXGE_HW_RING_T_CODE_ZERO_LEN_BUFF = 0xA,
00183 VXGE_HW_RING_T_CODE_FRM_DROP = 0xC,
00184 VXGE_HW_RING_T_CODE_UNUSED = 0xE,
00185 VXGE_HW_RING_T_CODE_MULTI_ERR = 0xF
00186 };
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198 enum vxge_hw_fifo_gather_code {
00199 VXGE_HW_FIFO_GATHER_CODE_FIRST = 0x2,
00200 VXGE_HW_FIFO_GATHER_CODE_MIDDLE = 0x0,
00201 VXGE_HW_FIFO_GATHER_CODE_LAST = 0x1,
00202 VXGE_HW_FIFO_GATHER_CODE_FIRST_LAST = 0x3
00203 };
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224 enum vxge_hw_fifo_tcode {
00225 VXGE_HW_FIFO_T_CODE_OK = 0x0,
00226 VXGE_HW_FIFO_T_CODE_PCI_READ_CORRUPT = 0x1,
00227 VXGE_HW_FIFO_T_CODE_PCI_READ_FAIL = 0x2,
00228 VXGE_HW_FIFO_T_CODE_INVALID_MSS = 0x3,
00229 VXGE_HW_FIFO_T_CODE_LSO_ERROR = 0x4,
00230 VXGE_HW_FIFO_T_CODE_UNUSED = 0x7,
00231 VXGE_HW_FIFO_T_CODE_MULTI_ERROR = 0x8
00232 };
00233
00234 enum vxge_hw_status
00235 vxge_hw_ring_replenish(struct __vxge_hw_ring *ring);
00236
00237 void vxge_hw_ring_rxd_post(struct __vxge_hw_ring *ring_handle,
00238 struct vxge_hw_ring_rxd_1 *rxdp);
00239
00240 void vxge_hw_fifo_txdl_buffer_set(struct __vxge_hw_fifo *fifo,
00241 struct vxge_hw_fifo_txd *txdp,
00242 struct io_buffer *iob);
00243
00244 void vxge_hw_fifo_txdl_post(struct __vxge_hw_fifo *fifo,
00245 struct vxge_hw_fifo_txd *txdp);
00246
00247 enum vxge_hw_status __vxge_hw_ring_create(
00248 struct __vxge_hw_virtualpath *vpath,
00249 struct __vxge_hw_ring *ring);
00250
00251 enum vxge_hw_status __vxge_hw_ring_delete(
00252 struct __vxge_hw_ring *ringh);
00253
00254 enum vxge_hw_status __vxge_hw_fifo_create(
00255 struct __vxge_hw_virtualpath *vpath,
00256 struct __vxge_hw_fifo *fifo);
00257
00258 enum vxge_hw_status
00259 __vxge_hw_fifo_delete(struct __vxge_hw_fifo *fifo);
00260
00261 enum vxge_hw_status __vxge_hw_vpath_reset(
00262 struct __vxge_hw_device *devh, u32 vp_id);
00263
00264 enum vxge_hw_status
00265 __vxge_hw_vpath_enable(struct __vxge_hw_device *devh, u32 vp_id);
00266
00267 void
00268 __vxge_hw_vpath_prc_configure(struct __vxge_hw_device *hldev);
00269
00270 enum vxge_hw_status
00271 __vxge_hw_vpath_kdfc_configure(struct __vxge_hw_device *devh, u32 vp_id);
00272
00273 enum vxge_hw_status
00274 __vxge_hw_vpath_mac_configure(struct __vxge_hw_device *devh);
00275
00276 enum vxge_hw_status
00277 __vxge_hw_vpath_tim_configure(struct __vxge_hw_device *devh, u32 vp_id);
00278
00279 enum vxge_hw_status
00280 __vxge_hw_vpath_initialize(struct __vxge_hw_device *devh, u32 vp_id);
00281
00282 enum vxge_hw_status __vxge_hw_vp_initialize(
00283 struct __vxge_hw_device *hldev, u32 vp_id,
00284 struct __vxge_hw_virtualpath *vpath);
00285
00286 void __vxge_hw_vp_terminate(struct __vxge_hw_device *hldev,
00287 struct __vxge_hw_virtualpath *vpath);
00288
00289 enum vxge_hw_status
00290 vxge_hw_device_begin_irq(struct __vxge_hw_device *hldev);
00291
00292 void vxge_hw_device_intr_enable(struct __vxge_hw_device *hldev);
00293
00294 void vxge_hw_device_intr_disable(struct __vxge_hw_device *hldev);
00295
00296 void vxge_hw_device_mask_all(struct __vxge_hw_device *hldev);
00297
00298 void vxge_hw_device_unmask_all(struct __vxge_hw_device *hldev);
00299
00300 void vxge_hw_vpath_doorbell_rx(struct __vxge_hw_ring *ringh);
00301
00302 enum vxge_hw_status vxge_hw_vpath_poll_rx(struct __vxge_hw_ring *ringh);
00303
00304 enum vxge_hw_status vxge_hw_vpath_poll_tx(struct __vxge_hw_fifo *fifo);
00305
00306 struct vxge_hw_fifo_txd *
00307 vxge_hw_fifo_free_txdl_get(struct __vxge_hw_fifo *fifo);
00308
00309 #endif