1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2018-2021 Beijing WangXun Technology Co., Ltd. 3 * Copyright(c) 2010-2017 Intel Corporation 4 */ 5 6 #ifndef _NGBE_TYPE_H_ 7 #define _NGBE_TYPE_H_ 8 9 #define NGBE_LINK_UP_TIME 90 /* 9.0 Seconds */ 10 11 #define NGBE_RX_HDR_SIZE 256 12 #define NGBE_RX_BUF_SIZE 2048 13 14 #define NGBE_FRAME_SIZE_MAX (9728) /* Maximum frame size, +FCS */ 15 #define NGBE_FRAME_SIZE_DFT (1518) /* Default frame size, +FCS */ 16 #define NGBE_NUM_POOL (32) 17 #define NGBE_PBRXSIZE_MAX 0x00080000 /* 512KB Packet Buffer */ 18 #define NGBE_PBTXSIZE_MAX 0x00005000 /* 20KB Packet Buffer */ 19 #define NGBE_TXPKT_SIZE_MAX 0xA /* Max Tx Packet size */ 20 #define NGBE_MAX_QP (8) 21 #define NGBE_MAX_UTA 128 22 23 #define NGBE_VF_INIT_TIMEOUT 200 /* Number of retries to clear RSTI */ 24 #define NGBE_PCI_MASTER_DISABLE_TIMEOUT 800 25 #define NGBE_SPI_TIMEOUT 10000 26 27 #define NGBE_ALIGN 128 /* as intel did */ 28 #define NGBE_ISB_SIZE 16 29 30 #include "ngbe_status.h" 31 #include "ngbe_osdep.h" 32 #include "ngbe_devids.h" 33 34 struct ngbe_thermal_diode_data { 35 s16 temp; 36 s16 alarm_thresh; 37 s16 dalarm_thresh; 38 }; 39 40 struct ngbe_thermal_sensor_data { 41 struct ngbe_thermal_diode_data sensor[1]; 42 }; 43 44 enum ngbe_eeprom_type { 45 ngbe_eeprom_unknown = 0, 46 ngbe_eeprom_spi, 47 ngbe_eeprom_flash, 48 ngbe_eeprom_none /* No NVM support */ 49 }; 50 51 enum ngbe_link_type { 52 ngbe_link_type_unknown = 0, 53 ngbe_link_fiber, 54 ngbe_link_copper 55 }; 56 57 enum ngbe_mac_type { 58 ngbe_mac_unknown = 0, 59 ngbe_mac_em, 60 ngbe_mac_em_vf, 61 ngbe_num_macs 62 }; 63 64 enum ngbe_phy_type { 65 ngbe_phy_unknown = 0, 66 ngbe_phy_none, 67 ngbe_phy_rtl, 68 ngbe_phy_mvl, 69 ngbe_phy_mvl_sfi, 70 ngbe_phy_yt8521s, 71 ngbe_phy_yt8521s_sfi, 72 ngbe_phy_zte, 73 ngbe_phy_cu_mtd, 74 }; 75 76 enum ngbe_media_type { 77 ngbe_media_type_unknown = 0, 78 ngbe_media_type_fiber, 79 ngbe_media_type_fiber_qsfp, 80 ngbe_media_type_copper, 81 ngbe_media_type_backplane, 82 ngbe_media_type_cx4, 83 ngbe_media_type_virtual 84 }; 85 86 /* Flow Control Settings */ 87 enum ngbe_fc_mode { 88 ngbe_fc_none = 0, 89 ngbe_fc_rx_pause, 90 ngbe_fc_tx_pause, 91 ngbe_fc_full, 92 ngbe_fc_default 93 }; 94 95 struct ngbe_hw; 96 97 struct ngbe_addr_filter_info { 98 u32 num_mc_addrs; 99 u32 mta_in_use; 100 }; 101 102 /* Bus parameters */ 103 struct ngbe_bus_info { 104 void (*set_lan_id)(struct ngbe_hw *hw); 105 106 u16 func; 107 u8 lan_id; 108 }; 109 110 /* Flow control parameters */ 111 struct ngbe_fc_info { 112 u32 high_water; /* Flow Ctrl High-water */ 113 u32 low_water; /* Flow Ctrl Low-water */ 114 u16 pause_time; /* Flow Control Pause timer */ 115 bool send_xon; /* Flow control send XON */ 116 bool strict_ieee; /* Strict IEEE mode */ 117 bool disable_fc_autoneg; /* Do not autonegotiate FC */ 118 bool fc_was_autonegged; /* Is current_mode the result of autonegging? */ 119 enum ngbe_fc_mode current_mode; /* FC mode in effect */ 120 enum ngbe_fc_mode requested_mode; /* FC mode requested by caller */ 121 }; 122 123 /* Flow Control Data Sheet defined values 124 * Calculation and defines taken from 802.1bb Annex O 125 */ 126 /* BitTimes (BT) conversion */ 127 #define NGBE_BT2KB(BT) (((BT) + (8 * 1024 - 1)) / (8 * 1024)) 128 #define NGBE_B2BT(BT) ((BT) * 8) 129 130 /* Calculate Delay to respond to PFC */ 131 #define NGBE_PFC_D 672 132 133 /* Calculate Cable Delay */ 134 #define NGBE_CABLE_DC 5556 /* Delay Copper */ 135 136 /* Calculate Interface Delay */ 137 #define NGBE_PHY_D 12800 138 #define NGBE_MAC_D 4096 139 #define NGBE_XAUI_D (2 * 1024) 140 141 #define NGBE_ID (NGBE_MAC_D + NGBE_XAUI_D + NGBE_PHY_D) 142 143 /* Calculate Delay incurred from higher layer */ 144 #define NGBE_HD 6144 145 146 /* Calculate PCI Bus delay for low thresholds */ 147 #define NGBE_PCI_DELAY 10000 148 149 /* Calculate delay value in bit times */ 150 #define NGBE_DV(_max_frame_link, _max_frame_tc) \ 151 ((36 * \ 152 (NGBE_B2BT(_max_frame_link) + \ 153 NGBE_PFC_D + \ 154 (2 * NGBE_CABLE_DC) + \ 155 (2 * NGBE_ID) + \ 156 NGBE_HD) / 25 + 1) + \ 157 2 * NGBE_B2BT(_max_frame_tc)) 158 159 #define NGBE_LOW_DV(_max_frame_tc) \ 160 (2 * ((2 * NGBE_B2BT(_max_frame_tc) + \ 161 (36 * NGBE_PCI_DELAY / 25) + 1))) 162 163 /* Statistics counters collected by the MAC */ 164 /* PB[] RxTx */ 165 struct ngbe_pb_stats { 166 u64 tx_pb_xon_packets; 167 u64 rx_pb_xon_packets; 168 u64 tx_pb_xoff_packets; 169 u64 rx_pb_xoff_packets; 170 u64 rx_pb_dropped; 171 u64 rx_pb_mbuf_alloc_errors; 172 u64 tx_pb_xon2off_packets; 173 }; 174 175 /* QP[] RxTx */ 176 struct ngbe_qp_stats { 177 u64 rx_qp_packets; 178 u64 tx_qp_packets; 179 u64 rx_qp_bytes; 180 u64 tx_qp_bytes; 181 u64 rx_qp_mc_packets; 182 }; 183 184 struct ngbe_hw_stats { 185 /* MNG RxTx */ 186 u64 mng_bmc2host_packets; 187 u64 mng_host2bmc_packets; 188 /* Basix RxTx */ 189 u64 rx_dma_drop; 190 u64 tx_dma_drop; 191 u64 tx_secdrp_packets; 192 u64 rx_packets; 193 u64 tx_packets; 194 u64 rx_bytes; 195 u64 tx_bytes; 196 u64 rx_total_bytes; 197 u64 rx_total_packets; 198 u64 tx_total_packets; 199 u64 rx_total_missed_packets; 200 u64 rx_broadcast_packets; 201 u64 tx_broadcast_packets; 202 u64 rx_multicast_packets; 203 u64 tx_multicast_packets; 204 u64 rx_management_packets; 205 u64 tx_management_packets; 206 u64 rx_management_dropped; 207 208 /* Basic Error */ 209 u64 rx_crc_errors; 210 u64 rx_illegal_byte_errors; 211 u64 rx_error_bytes; 212 u64 rx_mac_short_packet_dropped; 213 u64 rx_length_errors; 214 u64 rx_undersize_errors; 215 u64 rx_fragment_errors; 216 u64 rx_oversize_cnt; 217 u64 rx_jabber_errors; 218 u64 rx_l3_l4_xsum_error; 219 u64 mac_local_errors; 220 u64 mac_remote_errors; 221 222 /* MACSEC */ 223 u64 tx_macsec_pkts_untagged; 224 u64 tx_macsec_pkts_encrypted; 225 u64 tx_macsec_pkts_protected; 226 u64 tx_macsec_octets_encrypted; 227 u64 tx_macsec_octets_protected; 228 u64 rx_macsec_pkts_untagged; 229 u64 rx_macsec_pkts_badtag; 230 u64 rx_macsec_pkts_nosci; 231 u64 rx_macsec_pkts_unknownsci; 232 u64 rx_macsec_octets_decrypted; 233 u64 rx_macsec_octets_validated; 234 u64 rx_macsec_sc_pkts_unchecked; 235 u64 rx_macsec_sc_pkts_delayed; 236 u64 rx_macsec_sc_pkts_late; 237 u64 rx_macsec_sa_pkts_ok; 238 u64 rx_macsec_sa_pkts_invalid; 239 u64 rx_macsec_sa_pkts_notvalid; 240 u64 rx_macsec_sa_pkts_unusedsa; 241 u64 rx_macsec_sa_pkts_notusingsa; 242 243 /* MAC RxTx */ 244 u64 rx_size_64_packets; 245 u64 rx_size_65_to_127_packets; 246 u64 rx_size_128_to_255_packets; 247 u64 rx_size_256_to_511_packets; 248 u64 rx_size_512_to_1023_packets; 249 u64 rx_size_1024_to_max_packets; 250 u64 tx_size_64_packets; 251 u64 tx_size_65_to_127_packets; 252 u64 tx_size_128_to_255_packets; 253 u64 tx_size_256_to_511_packets; 254 u64 tx_size_512_to_1023_packets; 255 u64 tx_size_1024_to_max_packets; 256 257 /* Flow Control */ 258 u64 tx_xon_packets; 259 u64 rx_xon_packets; 260 u64 tx_xoff_packets; 261 u64 rx_xoff_packets; 262 263 u64 rx_up_dropped; 264 265 u64 rdb_pkt_cnt; 266 u64 rdb_repli_cnt; 267 u64 rdb_drp_cnt; 268 269 /* QP[] RxTx */ 270 struct { 271 u64 rx_qp_packets; 272 u64 tx_qp_packets; 273 u64 rx_qp_bytes; 274 u64 tx_qp_bytes; 275 u64 rx_qp_mc_packets; 276 u64 tx_qp_mc_packets; 277 u64 rx_qp_bc_packets; 278 u64 tx_qp_bc_packets; 279 } qp[NGBE_MAX_QP]; 280 281 }; 282 283 /* iterator type for walking multicast address lists */ 284 typedef u8* (*ngbe_mc_addr_itr) (struct ngbe_hw *hw, u8 **mc_addr_ptr, 285 u32 *vmdq); 286 287 struct ngbe_rom_info { 288 s32 (*init_params)(struct ngbe_hw *hw); 289 s32 (*readw_buffer)(struct ngbe_hw *hw, u32 offset, u32 words, 290 void *data); 291 s32 (*read32)(struct ngbe_hw *hw, u32 addr, u32 *data); 292 s32 (*writew_buffer)(struct ngbe_hw *hw, u32 offset, u32 words, 293 void *data); 294 s32 (*validate_checksum)(struct ngbe_hw *hw, u16 *checksum_val); 295 296 enum ngbe_eeprom_type type; 297 u32 semaphore_delay; 298 u16 word_size; 299 u16 address_bits; 300 u16 word_page_size; 301 u32 sw_addr; 302 u32 saved_version; 303 u16 cksum_devcap; 304 }; 305 306 struct ngbe_mac_info { 307 s32 (*init_hw)(struct ngbe_hw *hw); 308 s32 (*reset_hw)(struct ngbe_hw *hw); 309 s32 (*start_hw)(struct ngbe_hw *hw); 310 s32 (*stop_hw)(struct ngbe_hw *hw); 311 s32 (*clear_hw_cntrs)(struct ngbe_hw *hw); 312 s32 (*get_mac_addr)(struct ngbe_hw *hw, u8 *mac_addr); 313 s32 (*enable_rx_dma)(struct ngbe_hw *hw, u32 regval); 314 s32 (*disable_sec_rx_path)(struct ngbe_hw *hw); 315 s32 (*enable_sec_rx_path)(struct ngbe_hw *hw); 316 s32 (*acquire_swfw_sync)(struct ngbe_hw *hw, u32 mask); 317 void (*release_swfw_sync)(struct ngbe_hw *hw, u32 mask); 318 s32 (*negotiate_api_version)(struct ngbe_hw *hw, int api); 319 320 /* Link */ 321 s32 (*setup_link)(struct ngbe_hw *hw, u32 speed, 322 bool autoneg_wait_to_complete); 323 s32 (*check_link)(struct ngbe_hw *hw, u32 *speed, 324 bool *link_up, bool link_up_wait_to_complete); 325 s32 (*get_link_capabilities)(struct ngbe_hw *hw, 326 u32 *speed, bool *autoneg); 327 328 /* Packet Buffer manipulation */ 329 void (*setup_pba)(struct ngbe_hw *hw); 330 331 /* LED */ 332 s32 (*led_on)(struct ngbe_hw *hw, u32 index); 333 s32 (*led_off)(struct ngbe_hw *hw, u32 index); 334 335 /* RAR */ 336 s32 (*set_rar)(struct ngbe_hw *hw, u32 index, u8 *addr, u32 vmdq, 337 u32 enable_addr); 338 s32 (*set_uc_addr)(struct ngbe_hw *hw, u32 index, u8 *addr); 339 s32 (*clear_rar)(struct ngbe_hw *hw, u32 index); 340 s32 (*set_vmdq)(struct ngbe_hw *hw, u32 rar, u32 vmdq); 341 s32 (*clear_vmdq)(struct ngbe_hw *hw, u32 rar, u32 vmdq); 342 s32 (*init_rx_addrs)(struct ngbe_hw *hw); 343 s32 (*update_mc_addr_list)(struct ngbe_hw *hw, u8 *mc_addr_list, 344 u32 mc_addr_count, 345 ngbe_mc_addr_itr func, bool clear); 346 s32 (*clear_vfta)(struct ngbe_hw *hw); 347 s32 (*set_vfta)(struct ngbe_hw *hw, u32 vlan, 348 u32 vind, bool vlan_on, bool vlvf_bypass); 349 s32 (*set_vlvf)(struct ngbe_hw *hw, u32 vlan, u32 vind, 350 bool vlan_on, u32 *vfta_delta, u32 vfta, 351 bool vlvf_bypass); 352 void (*set_mac_anti_spoofing)(struct ngbe_hw *hw, bool enable, int vf); 353 void (*set_vlan_anti_spoofing)(struct ngbe_hw *hw, 354 bool enable, int vf); 355 s32 (*update_xcast_mode)(struct ngbe_hw *hw, int xcast_mode); 356 s32 (*set_rlpml)(struct ngbe_hw *hw, u16 max_size); 357 358 /* Flow Control */ 359 s32 (*fc_enable)(struct ngbe_hw *hw); 360 s32 (*setup_fc)(struct ngbe_hw *hw); 361 void (*fc_autoneg)(struct ngbe_hw *hw); 362 363 /* Manageability interface */ 364 s32 (*init_thermal_sensor_thresh)(struct ngbe_hw *hw); 365 s32 (*check_overtemp)(struct ngbe_hw *hw); 366 367 enum ngbe_mac_type type; 368 enum ngbe_link_type link_type; 369 u8 addr[ETH_ADDR_LEN]; 370 u8 perm_addr[ETH_ADDR_LEN]; 371 #define NGBE_MAX_MTA 128 372 u32 mta_shadow[NGBE_MAX_MTA]; 373 s32 mc_filter_type; 374 u32 mcft_size; 375 u32 vft_size; 376 u32 num_rar_entries; 377 u32 rx_pb_size; 378 u32 max_tx_queues; 379 u32 max_rx_queues; 380 bool get_link_status; 381 struct ngbe_thermal_sensor_data thermal_sensor_data; 382 bool set_lben; 383 u32 max_link_up_time; 384 385 u32 default_speeds; 386 bool autoneg; 387 }; 388 389 struct ngbe_phy_info { 390 s32 (*identify)(struct ngbe_hw *hw); 391 s32 (*init_hw)(struct ngbe_hw *hw); 392 s32 (*reset_hw)(struct ngbe_hw *hw); 393 s32 (*read_reg)(struct ngbe_hw *hw, u32 reg_addr, 394 u32 device_type, u16 *phy_data); 395 s32 (*write_reg)(struct ngbe_hw *hw, u32 reg_addr, 396 u32 device_type, u16 phy_data); 397 s32 (*read_reg_unlocked)(struct ngbe_hw *hw, u32 reg_addr, 398 u32 device_type, u16 *phy_data); 399 s32 (*write_reg_unlocked)(struct ngbe_hw *hw, u32 reg_addr, 400 u32 device_type, u16 phy_data); 401 s32 (*setup_link)(struct ngbe_hw *hw, u32 speed, 402 bool autoneg_wait_to_complete); 403 s32 (*check_link)(struct ngbe_hw *hw, u32 *speed, bool *link_up); 404 s32 (*set_phy_power)(struct ngbe_hw *hw, bool on); 405 s32 (*led_oem_chk)(struct ngbe_hw *hw, u32 *data); 406 s32 (*get_adv_pause)(struct ngbe_hw *hw, u8 *pause_bit); 407 s32 (*get_lp_adv_pause)(struct ngbe_hw *hw, u8 *pause_bit); 408 s32 (*set_pause_adv)(struct ngbe_hw *hw, u16 pause_bit); 409 410 enum ngbe_media_type media_type; 411 enum ngbe_phy_type type; 412 u32 addr; 413 u32 id; 414 u32 revision; 415 u32 phy_semaphore_mask; 416 bool reset_disable; 417 u32 autoneg_advertised; 418 }; 419 420 struct ngbe_mbx_stats { 421 u32 msgs_tx; 422 u32 msgs_rx; 423 424 u32 acks; 425 u32 reqs; 426 u32 rsts; 427 }; 428 429 struct ngbe_mbx_info { 430 void (*init_params)(struct ngbe_hw *hw); 431 s32 (*read)(struct ngbe_hw *hw, u32 *msg, u16 size, u16 vf_number); 432 s32 (*write)(struct ngbe_hw *hw, u32 *msg, u16 size, u16 vf_number); 433 s32 (*read_posted)(struct ngbe_hw *hw, u32 *msg, u16 size, 434 u16 mbx_id); 435 s32 (*write_posted)(struct ngbe_hw *hw, u32 *msg, u16 size, 436 u16 mbx_id); 437 s32 (*check_for_msg)(struct ngbe_hw *hw, u16 mbx_id); 438 s32 (*check_for_ack)(struct ngbe_hw *hw, u16 mbx_id); 439 s32 (*check_for_rst)(struct ngbe_hw *hw, u16 mbx_id); 440 441 struct ngbe_mbx_stats stats; 442 u32 timeout; 443 u32 usec_delay; 444 u32 v2p_mailbox; 445 u16 size; 446 }; 447 448 enum ngbe_isb_idx { 449 NGBE_ISB_HEADER, 450 NGBE_ISB_MISC, 451 NGBE_ISB_VEC0, 452 NGBE_ISB_VEC1, 453 NGBE_ISB_MAX 454 }; 455 456 struct ngbe_hw { 457 void IOMEM *hw_addr; 458 void *back; 459 struct ngbe_mac_info mac; 460 struct ngbe_addr_filter_info addr_ctrl; 461 struct ngbe_fc_info fc; 462 struct ngbe_phy_info phy; 463 struct ngbe_rom_info rom; 464 struct ngbe_bus_info bus; 465 struct ngbe_mbx_info mbx; 466 u16 device_id; 467 u16 vendor_id; 468 u16 sub_device_id; 469 u16 sub_system_id; 470 u32 eeprom_id; 471 u8 port_id; 472 u8 revision_id; 473 bool adapter_stopped; 474 int api_version; 475 bool wol_enabled; 476 bool ncsi_enabled; 477 bool lldp_enabled; 478 479 uint64_t isb_dma; 480 void IOMEM *isb_mem; 481 u16 nb_rx_queues; 482 u16 nb_tx_queues; 483 484 u32 mode; 485 486 u32 q_rx_regs[8 * 4]; 487 u32 q_tx_regs[8 * 4]; 488 u32 gphy_efuse[2]; 489 bool offset_loaded; 490 bool rx_loaded; 491 bool is_pf; 492 bool gpio_ctl; 493 bool lsc; 494 u32 led_conf; 495 bool init_phy; 496 rte_spinlock_t phy_lock; 497 struct { 498 u64 rx_qp_packets; 499 u64 tx_qp_packets; 500 u64 rx_qp_bytes; 501 u64 tx_qp_bytes; 502 u64 rx_qp_mc_packets; 503 u64 tx_qp_mc_packets; 504 u64 rx_qp_bc_packets; 505 u64 tx_qp_bc_packets; 506 } qp_last[NGBE_MAX_QP]; 507 }; 508 509 #include "ngbe_regs.h" 510 #include "ngbe_dummy.h" 511 512 #endif /* _NGBE_TYPE_H_ */ 513