1 /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB OR BSD-2-Clause */ 2 /* Copyright (c) 2017-2019 Pensando Systems, Inc. All rights reserved. */ 3 4 #ifndef _IONIC_IF_H_ 5 #define _IONIC_IF_H_ 6 7 #pragma pack(push, 1) 8 9 #define IONIC_DEV_INFO_SIGNATURE 0x44455649 /* 'DEVI' */ 10 #define IONIC_DEV_INFO_VERSION 1 11 #define IONIC_IFNAMSIZ 16 12 13 /** 14 * Commands 15 */ 16 enum ionic_cmd_opcode { 17 IONIC_CMD_NOP = 0, 18 19 /* Device commands */ 20 IONIC_CMD_IDENTIFY = 1, 21 IONIC_CMD_INIT = 2, 22 IONIC_CMD_RESET = 3, 23 IONIC_CMD_GETATTR = 4, 24 IONIC_CMD_SETATTR = 5, 25 26 /* Port commands */ 27 IONIC_CMD_PORT_IDENTIFY = 10, 28 IONIC_CMD_PORT_INIT = 11, 29 IONIC_CMD_PORT_RESET = 12, 30 IONIC_CMD_PORT_GETATTR = 13, 31 IONIC_CMD_PORT_SETATTR = 14, 32 33 /* LIF commands */ 34 IONIC_CMD_LIF_IDENTIFY = 20, 35 IONIC_CMD_LIF_INIT = 21, 36 IONIC_CMD_LIF_RESET = 22, 37 IONIC_CMD_LIF_GETATTR = 23, 38 IONIC_CMD_LIF_SETATTR = 24, 39 40 IONIC_CMD_RX_MODE_SET = 30, 41 IONIC_CMD_RX_FILTER_ADD = 31, 42 IONIC_CMD_RX_FILTER_DEL = 32, 43 44 /* Queue commands */ 45 IONIC_CMD_Q_INIT = 40, 46 IONIC_CMD_Q_CONTROL = 41, 47 48 /* RDMA commands */ 49 IONIC_CMD_RDMA_RESET_LIF = 50, 50 IONIC_CMD_RDMA_CREATE_EQ = 51, 51 IONIC_CMD_RDMA_CREATE_CQ = 52, 52 IONIC_CMD_RDMA_CREATE_ADMINQ = 53, 53 54 /* QoS commands */ 55 IONIC_CMD_QOS_CLASS_IDENTIFY = 240, 56 IONIC_CMD_QOS_CLASS_INIT = 241, 57 IONIC_CMD_QOS_CLASS_RESET = 242, 58 59 /* Firmware commands */ 60 IONIC_CMD_FW_DOWNLOAD = 254, 61 IONIC_CMD_FW_CONTROL = 255, 62 }; 63 64 /** 65 * Command Return codes 66 */ 67 enum ionic_status_code { 68 IONIC_RC_SUCCESS = 0, /* Success */ 69 IONIC_RC_EVERSION = 1, /* Incorrect version for request */ 70 IONIC_RC_EOPCODE = 2, /* Invalid cmd opcode */ 71 IONIC_RC_EIO = 3, /* I/O error */ 72 IONIC_RC_EPERM = 4, /* Permission denied */ 73 IONIC_RC_EQID = 5, /* Bad qid */ 74 IONIC_RC_EQTYPE = 6, /* Bad qtype */ 75 IONIC_RC_ENOENT = 7, /* No such element */ 76 IONIC_RC_EINTR = 8, /* operation interrupted */ 77 IONIC_RC_EAGAIN = 9, /* Try again */ 78 IONIC_RC_ENOMEM = 10, /* Out of memory */ 79 IONIC_RC_EFAULT = 11, /* Bad address */ 80 IONIC_RC_EBUSY = 12, /* Device or resource busy */ 81 IONIC_RC_EEXIST = 13, /* object already exists */ 82 IONIC_RC_EINVAL = 14, /* Invalid argument */ 83 IONIC_RC_ENOSPC = 15, /* No space left or alloc failure */ 84 IONIC_RC_ERANGE = 16, /* Parameter out of range */ 85 IONIC_RC_BAD_ADDR = 17, /* Descriptor contains a bad ptr */ 86 IONIC_RC_DEV_CMD = 18, /* Device cmd attempted on AdminQ */ 87 IONIC_RC_ENOSUPP = 19, /* Operation not supported */ 88 IONIC_RC_ERROR = 29, /* Generic error */ 89 90 IONIC_RC_ERDMA = 30, /* Generic RDMA error */ 91 }; 92 93 enum ionic_notifyq_opcode { 94 IONIC_EVENT_LINK_CHANGE = 1, 95 IONIC_EVENT_RESET = 2, 96 IONIC_EVENT_HEARTBEAT = 3, 97 IONIC_EVENT_LOG = 4, 98 }; 99 100 /** 101 * struct cmd - General admin command format 102 * @opcode: Opcode for the command 103 * @lif_index: LIF index 104 * @cmd_data: Opcode-specific command bytes 105 */ 106 struct ionic_admin_cmd { 107 u8 opcode; 108 u8 rsvd; 109 __le16 lif_index; 110 u8 cmd_data[60]; 111 }; 112 113 /** 114 * struct admin_comp - General admin command completion format 115 * @status: The status of the command (enum status_code) 116 * @comp_index: The index in the descriptor ring for which this 117 * is the completion. 118 * @cmd_data: Command-specific bytes. 119 * @color: Color bit. (Always 0 for commands issued to the 120 * Device Cmd Registers.) 121 */ 122 struct ionic_admin_comp { 123 u8 status; 124 u8 rsvd; 125 __le16 comp_index; 126 u8 cmd_data[11]; 127 u8 color; 128 #define IONIC_COMP_COLOR_MASK 0x80 129 }; 130 131 static inline u8 color_match(u8 color, u8 done_color) 132 { 133 return (!!(color & IONIC_COMP_COLOR_MASK)) == done_color; 134 } 135 136 /** 137 * struct nop_cmd - NOP command 138 * @opcode: opcode 139 */ 140 struct ionic_nop_cmd { 141 u8 opcode; 142 u8 rsvd[63]; 143 }; 144 145 /** 146 * struct nop_comp - NOP command completion 147 * @status: The status of the command (enum status_code) 148 */ 149 struct ionic_nop_comp { 150 u8 status; 151 u8 rsvd[15]; 152 }; 153 154 /** 155 * struct dev_init_cmd - Device init command 156 * @opcode: opcode 157 * @type: device type 158 */ 159 struct ionic_dev_init_cmd { 160 u8 opcode; 161 u8 type; 162 u8 rsvd[62]; 163 }; 164 165 /** 166 * struct init_comp - Device init command completion 167 * @status: The status of the command (enum status_code) 168 */ 169 struct ionic_dev_init_comp { 170 u8 status; 171 u8 rsvd[15]; 172 }; 173 174 /** 175 * struct dev_reset_cmd - Device reset command 176 * @opcode: opcode 177 */ 178 struct ionic_dev_reset_cmd { 179 u8 opcode; 180 u8 rsvd[63]; 181 }; 182 183 /** 184 * struct reset_comp - Reset command completion 185 * @status: The status of the command (enum status_code) 186 */ 187 struct ionic_dev_reset_comp { 188 u8 status; 189 u8 rsvd[15]; 190 }; 191 192 #define IONIC_IDENTITY_VERSION_1 1 193 194 /** 195 * struct dev_identify_cmd - Driver/device identify command 196 * @opcode: opcode 197 * @ver: Highest version of identify supported by driver 198 */ 199 struct ionic_dev_identify_cmd { 200 u8 opcode; 201 u8 ver; 202 u8 rsvd[62]; 203 }; 204 205 /** 206 * struct dev_identify_comp - Driver/device identify command completion 207 * @status: The status of the command (enum status_code) 208 * @ver: Version of identify returned by device 209 */ 210 struct ionic_dev_identify_comp { 211 u8 status; 212 u8 ver; 213 u8 rsvd[14]; 214 }; 215 216 enum ionic_os_type { 217 IONIC_OS_TYPE_LINUX = 1, 218 IONIC_OS_TYPE_WIN = 2, 219 IONIC_OS_TYPE_DPDK = 3, 220 IONIC_OS_TYPE_FREEBSD = 4, 221 IONIC_OS_TYPE_IPXE = 5, 222 IONIC_OS_TYPE_ESXI = 6, 223 }; 224 225 /** 226 * union drv_identity - driver identity information 227 * @os_type: OS type (see enum os_type) 228 * @os_dist: OS distribution, numeric format 229 * @os_dist_str: OS distribution, string format 230 * @kernel_ver: Kernel version, numeric format 231 * @kernel_ver_str: Kernel version, string format 232 * @driver_ver_str: Driver version, string format 233 */ 234 union ionic_drv_identity { 235 struct { 236 __le32 os_type; 237 __le32 os_dist; 238 char os_dist_str[128]; 239 __le32 kernel_ver; 240 char kernel_ver_str[32]; 241 char driver_ver_str[32]; 242 }; 243 __le32 words[512]; 244 }; 245 246 /** 247 * union dev_identity - device identity information 248 * @version: Version of device identify 249 * @type: Identify type (0 for now) 250 * @nports: Number of ports provisioned 251 * @nlifs: Number of LIFs provisioned 252 * @nintrs: Number of interrupts provisioned 253 * @ndbpgs_per_lif: Number of doorbell pages per LIF 254 * @intr_coal_mult: Interrupt coalescing multiplication factor. 255 * Scale user-supplied interrupt coalescing 256 * value in usecs to device units using: 257 * device units = usecs * mult / div 258 * @intr_coal_div: Interrupt coalescing division factor. 259 * Scale user-supplied interrupt coalescing 260 * value in usecs to device units using: 261 * device units = usecs * mult / div 262 * 263 */ 264 union ionic_dev_identity { 265 struct { 266 u8 version; 267 u8 type; 268 u8 rsvd[2]; 269 u8 nports; 270 u8 rsvd2[3]; 271 __le32 nlifs; 272 __le32 nintrs; 273 __le32 ndbpgs_per_lif; 274 __le32 intr_coal_mult; 275 __le32 intr_coal_div; 276 }; 277 __le32 words[512]; 278 }; 279 280 enum ionic_lif_type { 281 IONIC_LIF_TYPE_CLASSIC = 0, 282 IONIC_LIF_TYPE_MACVLAN = 1, 283 IONIC_LIF_TYPE_NETQUEUE = 2, 284 }; 285 286 /** 287 * struct lif_identify_cmd - lif identify command 288 * @opcode: opcode 289 * @type: lif type (enum lif_type) 290 * @ver: version of identify returned by device 291 */ 292 struct ionic_lif_identify_cmd { 293 u8 opcode; 294 u8 type; 295 u8 ver; 296 u8 rsvd[61]; 297 }; 298 299 /** 300 * struct lif_identify_comp - lif identify command completion 301 * @status: status of the command (enum status_code) 302 * @ver: version of identify returned by device 303 */ 304 struct ionic_lif_identify_comp { 305 u8 status; 306 u8 ver; 307 u8 rsvd2[14]; 308 }; 309 310 enum ionic_lif_capability { 311 IONIC_LIF_CAP_ETH = BIT(0), 312 IONIC_LIF_CAP_RDMA = BIT(1), 313 }; 314 315 /** 316 * Logical Queue Types 317 */ 318 enum ionic_logical_qtype { 319 IONIC_QTYPE_ADMINQ = 0, 320 IONIC_QTYPE_NOTIFYQ = 1, 321 IONIC_QTYPE_RXQ = 2, 322 IONIC_QTYPE_TXQ = 3, 323 IONIC_QTYPE_EQ = 4, 324 IONIC_QTYPE_MAX = 16, 325 }; 326 327 /** 328 * struct lif_logical_qtype - Descriptor of logical to hardware queue type. 329 * @qtype: Hardware Queue Type. 330 * @qid_count: Number of Queue IDs of the logical type. 331 * @qid_base: Minimum Queue ID of the logical type. 332 */ 333 struct ionic_lif_logical_qtype { 334 u8 qtype; 335 u8 rsvd[3]; 336 __le32 qid_count; 337 __le32 qid_base; 338 }; 339 340 enum ionic_lif_state { 341 IONIC_LIF_DISABLE = 0, 342 IONIC_LIF_ENABLE = 1, 343 IONIC_LIF_HANG_RESET = 2, 344 }; 345 346 /** 347 * LIF configuration 348 * @state: lif state (enum lif_state) 349 * @name: lif name 350 * @mtu: mtu 351 * @mac: station mac address 352 * @features: features (enum eth_hw_features) 353 * @queue_count: queue counts per queue-type 354 */ 355 union ionic_lif_config { 356 struct { 357 u8 state; 358 u8 rsvd[3]; 359 char name[IONIC_IFNAMSIZ]; 360 __le32 mtu; 361 u8 mac[6]; 362 u8 rsvd2[2]; 363 __le64 features; 364 __le32 queue_count[IONIC_QTYPE_MAX]; 365 }; 366 __le32 words[64]; 367 }; 368 369 /** 370 * struct lif_identity - lif identity information (type-specific) 371 * 372 * @capabilities LIF capabilities 373 * 374 * Ethernet: 375 * @version: Ethernet identify structure version. 376 * @features: Ethernet features supported on this lif type. 377 * @max_ucast_filters: Number of perfect unicast addresses supported. 378 * @max_mcast_filters: Number of perfect multicast addresses supported. 379 * @min_frame_size: Minimum size of frames to be sent 380 * @max_frame_size: Maximim size of frames to be sent 381 * @config: LIF config struct with features, mtu, mac, q counts 382 * 383 * RDMA: 384 * @version: RDMA version of opcodes and queue descriptors. 385 * @qp_opcodes: Number of rdma queue pair opcodes supported. 386 * @admin_opcodes: Number of rdma admin opcodes supported. 387 * @npts_per_lif: Page table size per lif 388 * @nmrs_per_lif: Number of memory regions per lif 389 * @nahs_per_lif: Number of address handles per lif 390 * @max_stride: Max work request stride. 391 * @cl_stride: Cache line stride. 392 * @pte_stride: Page table entry stride. 393 * @rrq_stride: Remote RQ work request stride. 394 * @rsq_stride: Remote SQ work request stride. 395 * @dcqcn_profiles: Number of DCQCN profiles 396 * @aq_qtype: RDMA Admin Qtype. 397 * @sq_qtype: RDMA Send Qtype. 398 * @rq_qtype: RDMA Receive Qtype. 399 * @cq_qtype: RDMA Completion Qtype. 400 * @eq_qtype: RDMA Event Qtype. 401 */ 402 union ionic_lif_identity { 403 struct { 404 __le64 capabilities; 405 406 struct { 407 u8 version; 408 u8 rsvd[3]; 409 __le32 max_ucast_filters; 410 __le32 max_mcast_filters; 411 __le16 rss_ind_tbl_sz; 412 __le32 min_frame_size; 413 __le32 max_frame_size; 414 u8 rsvd2[106]; 415 union ionic_lif_config config; 416 } eth; 417 418 struct { 419 u8 version; 420 u8 qp_opcodes; 421 u8 admin_opcodes; 422 u8 rsvd; 423 __le32 npts_per_lif; 424 __le32 nmrs_per_lif; 425 __le32 nahs_per_lif; 426 u8 max_stride; 427 u8 cl_stride; 428 u8 pte_stride; 429 u8 rrq_stride; 430 u8 rsq_stride; 431 u8 dcqcn_profiles; 432 u8 rsvd_dimensions[10]; 433 struct ionic_lif_logical_qtype aq_qtype; 434 struct ionic_lif_logical_qtype sq_qtype; 435 struct ionic_lif_logical_qtype rq_qtype; 436 struct ionic_lif_logical_qtype cq_qtype; 437 struct ionic_lif_logical_qtype eq_qtype; 438 } rdma; 439 }; 440 __le32 words[512]; 441 }; 442 443 /** 444 * struct lif_init_cmd - LIF init command 445 * @opcode: opcode 446 * @type: LIF type (enum lif_type) 447 * @index: LIF index 448 * @info_pa: destination address for lif info (struct lif_info) 449 */ 450 struct ionic_lif_init_cmd { 451 u8 opcode; 452 u8 type; 453 __le16 index; 454 __le32 rsvd; 455 __le64 info_pa; 456 u8 rsvd2[48]; 457 }; 458 459 /** 460 * struct lif_init_comp - LIF init command completion 461 * @status: The status of the command (enum status_code) 462 */ 463 struct ionic_lif_init_comp { 464 u8 status; 465 u8 rsvd; 466 __le16 hw_index; 467 u8 rsvd2[12]; 468 }; 469 470 /** 471 * struct q_init_cmd - Queue init command 472 * @opcode: opcode 473 * @type: Logical queue type 474 * @ver: Queue version (defines opcode/descriptor scope) 475 * @lif_index: LIF index 476 * @index: (lif, qtype) relative admin queue index 477 * @intr_index: Interrupt control register index 478 * @pid: Process ID 479 * @flags: 480 * IRQ: Interrupt requested on completion 481 * ENA: Enable the queue. If ENA=0 the queue is initialized 482 * but remains disabled, to be later enabled with the 483 * Queue Enable command. If ENA=1, then queue is 484 * initialized and then enabled. 485 * SG: Enable Scatter-Gather on the queue. 486 * in number of descs. The actual ring size is 487 * (1 << ring_size). For example, to 488 * select a ring size of 64 descriptors write 489 * ring_size = 6. The minimum ring_size value is 2 490 * for a ring size of 4 descriptors. The maximum 491 * ring_size value is 16 for a ring size of 64k 492 * descriptors. Values of ring_size <2 and >16 are 493 * reserved. 494 * EQ: Enable the Event Queue 495 * @cos: Class of service for this queue. 496 * @ring_size: Queue ring size, encoded as a log2(size) 497 * @ring_base: Queue ring base address 498 * @cq_ring_base: Completion queue ring base address 499 * @sg_ring_base: Scatter/Gather ring base address 500 * @eq_index: Event queue index 501 */ 502 struct ionic_q_init_cmd { 503 u8 opcode; 504 u8 rsvd; 505 __le16 lif_index; 506 u8 type; 507 u8 ver; 508 u8 rsvd1[2]; 509 __le32 index; 510 __le16 pid; 511 __le16 intr_index; 512 __le16 flags; 513 #define IONIC_QINIT_F_IRQ 0x01 /* Request interrupt on completion */ 514 #define IONIC_QINIT_F_ENA 0x02 /* Enable the queue */ 515 #define IONIC_QINIT_F_SG 0x04 /* Enable scatter/gather on the queue */ 516 #define IONIC_QINIT_F_EQ 0x08 /* Enable event queue */ 517 #define IONIC_QINIT_F_DEBUG 0x80 /* Enable queue debugging */ 518 u8 cos; 519 u8 ring_size; 520 __le64 ring_base; 521 __le64 cq_ring_base; 522 __le64 sg_ring_base; 523 __le32 eq_index; 524 u8 rsvd2[16]; 525 }; 526 527 /** 528 * struct q_init_comp - Queue init command completion 529 * @status: The status of the command (enum status_code) 530 * @ver: Queue version (defines opcode/descriptor scope) 531 * @comp_index: The index in the descriptor ring for which this 532 * is the completion. 533 * @hw_index: Hardware Queue ID 534 * @hw_type: Hardware Queue type 535 * @color: Color 536 */ 537 struct ionic_q_init_comp { 538 u8 status; 539 u8 ver; 540 __le16 comp_index; 541 __le32 hw_index; 542 u8 hw_type; 543 u8 rsvd2[6]; 544 u8 color; 545 }; 546 547 /* the device's internal addressing uses up to 52 bits */ 548 #define IONIC_ADDR_LEN 52 549 #define IONIC_ADDR_MASK (BIT_ULL(IONIC_ADDR_LEN) - 1) 550 551 enum ionic_txq_desc_opcode { 552 IONIC_TXQ_DESC_OPCODE_CSUM_NONE = 0, 553 IONIC_TXQ_DESC_OPCODE_CSUM_PARTIAL = 1, 554 IONIC_TXQ_DESC_OPCODE_CSUM_HW = 2, 555 IONIC_TXQ_DESC_OPCODE_TSO = 3, 556 }; 557 558 /** 559 * struct txq_desc - Ethernet Tx queue descriptor format 560 * @opcode: Tx operation, see TXQ_DESC_OPCODE_*: 561 * 562 * IONIC_TXQ_DESC_OPCODE_CSUM_NONE: 563 * 564 * Non-offload send. No segmentation, 565 * fragmentation or checksum calc/insertion is 566 * performed by device; packet is prepared 567 * to send by software stack and requires 568 * no further manipulation from device. 569 * 570 * IONIC_TXQ_DESC_OPCODE_CSUM_PARTIAL: 571 * 572 * Offload 16-bit L4 checksum 573 * calculation/insertion. The device will 574 * calculate the L4 checksum value and 575 * insert the result in the packet's L4 576 * header checksum field. The L4 checksum 577 * is calculated starting at @csum_start bytes 578 * into the packet to the end of the packet. 579 * The checksum insertion position is given 580 * in @csum_offset. This feature is only 581 * applicable to protocols such as TCP, UDP 582 * and ICMP where a standard (i.e. the 583 * 'IP-style' checksum) one's complement 584 * 16-bit checksum is used, using an IP 585 * pseudo-header to seed the calculation. 586 * Software will preload the L4 checksum 587 * field with the IP pseudo-header checksum. 588 * 589 * For tunnel encapsulation, @csum_start and 590 * @csum_offset refer to the inner L4 591 * header. Supported tunnels encapsulations 592 * are: IPIP, GRE, and UDP. If the @encap 593 * is clear, no further processing by the 594 * device is required; software will 595 * calculate the outer header checksums. If 596 * the @encap is set, the device will 597 * offload the outer header checksums using 598 * LCO (local checksum offload) (see 599 * Documentation/networking/checksum- 600 * offloads.txt for more info). 601 * 602 * IONIC_TXQ_DESC_OPCODE_CSUM_HW: 603 * 604 * Offload 16-bit checksum computation to hardware. 605 * If @csum_l3 is set then the packet's L3 checksum is 606 * updated. Similarly, if @csum_l4 is set the the L4 607 * checksum is updated. If @encap is set then encap header 608 * checksums are also updated. 609 * 610 * IONIC_TXQ_DESC_OPCODE_TSO: 611 * 612 * Device preforms TCP segmentation offload 613 * (TSO). @hdr_len is the number of bytes 614 * to the end of TCP header (the offset to 615 * the TCP payload). @mss is the desired 616 * MSS, the TCP payload length for each 617 * segment. The device will calculate/ 618 * insert IP (IPv4 only) and TCP checksums 619 * for each segment. In the first data 620 * buffer containing the header template, 621 * the driver will set IPv4 checksum to 0 622 * and preload TCP checksum with the IP 623 * pseudo header calculated with IP length = 0. 624 * 625 * Supported tunnel encapsulations are IPIP, 626 * layer-3 GRE, and UDP. @hdr_len includes 627 * both outer and inner headers. The driver 628 * will set IPv4 checksum to zero and 629 * preload TCP checksum with IP pseudo 630 * header on the inner header. 631 * 632 * TCP ECN offload is supported. The device 633 * will set CWR flag in the first segment if 634 * CWR is set in the template header, and 635 * clear CWR in remaining segments. 636 * @flags: 637 * vlan: 638 * Insert an L2 VLAN header using @vlan_tci. 639 * encap: 640 * Calculate encap header checksum. 641 * csum_l3: 642 * Compute L3 header checksum. 643 * csum_l4: 644 * Compute L4 header checksum. 645 * tso_sot: 646 * TSO start 647 * tso_eot: 648 * TSO end 649 * @num_sg_elems: Number of scatter-gather elements in SG 650 * descriptor 651 * @addr: First data buffer's DMA address. 652 * (Subsequent data buffers are on txq_sg_desc). 653 * @len: First data buffer's length, in bytes 654 * @vlan_tci: VLAN tag to insert in the packet (if requested 655 * by @V-bit). Includes .1p and .1q tags 656 * @hdr_len: Length of packet headers, including 657 * encapsulating outer header, if applicable. 658 * Valid for opcodes TXQ_DESC_OPCODE_CALC_CSUM and 659 * TXQ_DESC_OPCODE_TSO. Should be set to zero for 660 * all other modes. For 661 * TXQ_DESC_OPCODE_CALC_CSUM, @hdr_len is length 662 * of headers up to inner-most L4 header. For 663 * TXQ_DESC_OPCODE_TSO, @hdr_len is up to 664 * inner-most L4 payload, so inclusive of 665 * inner-most L4 header. 666 * @mss: Desired MSS value for TSO. Only applicable for 667 * TXQ_DESC_OPCODE_TSO. 668 * @csum_start: Offset into inner-most L3 header of checksum 669 * @csum_offset: Offset into inner-most L4 header of checksum 670 */ 671 672 #define IONIC_TXQ_DESC_OPCODE_MASK 0xf 673 #define IONIC_TXQ_DESC_OPCODE_SHIFT 4 674 #define IONIC_TXQ_DESC_FLAGS_MASK 0xf 675 #define IONIC_TXQ_DESC_FLAGS_SHIFT 0 676 #define IONIC_TXQ_DESC_NSGE_MASK 0xf 677 #define IONIC_TXQ_DESC_NSGE_SHIFT 8 678 #define IONIC_TXQ_DESC_ADDR_MASK (BIT_ULL(IONIC_ADDR_LEN) - 1) 679 #define IONIC_TXQ_DESC_ADDR_SHIFT 12 680 681 /* common flags */ 682 #define IONIC_TXQ_DESC_FLAG_VLAN 0x1 683 #define IONIC_TXQ_DESC_FLAG_ENCAP 0x2 684 685 /* flags for csum_hw opcode */ 686 #define IONIC_TXQ_DESC_FLAG_CSUM_L3 0x4 687 #define IONIC_TXQ_DESC_FLAG_CSUM_L4 0x8 688 689 /* flags for tso opcode */ 690 #define IONIC_TXQ_DESC_FLAG_TSO_SOT 0x4 691 #define IONIC_TXQ_DESC_FLAG_TSO_EOT 0x8 692 693 struct ionic_txq_desc { 694 __le64 cmd; 695 __le16 len; 696 union { 697 __le16 vlan_tci; 698 __le16 hword0; 699 }; 700 union { 701 __le16 csum_start; 702 __le16 hdr_len; 703 __le16 hword1; 704 }; 705 union { 706 __le16 csum_offset; 707 __le16 mss; 708 __le16 hword2; 709 }; 710 }; 711 712 static inline u64 encode_txq_desc_cmd(u8 opcode, u8 flags, 713 u8 nsge, u64 addr) 714 { 715 u64 cmd; 716 717 cmd = (opcode & IONIC_TXQ_DESC_OPCODE_MASK) << IONIC_TXQ_DESC_OPCODE_SHIFT; 718 cmd |= (flags & IONIC_TXQ_DESC_FLAGS_MASK) << IONIC_TXQ_DESC_FLAGS_SHIFT; 719 cmd |= (nsge & IONIC_TXQ_DESC_NSGE_MASK) << IONIC_TXQ_DESC_NSGE_SHIFT; 720 cmd |= (addr & IONIC_TXQ_DESC_ADDR_MASK) << IONIC_TXQ_DESC_ADDR_SHIFT; 721 722 return cmd; 723 }; 724 725 static inline void decode_txq_desc_cmd(u64 cmd, u8 *opcode, u8 *flags, 726 u8 *nsge, u64 *addr) 727 { 728 *opcode = (cmd >> IONIC_TXQ_DESC_OPCODE_SHIFT) & IONIC_TXQ_DESC_OPCODE_MASK; 729 *flags = (cmd >> IONIC_TXQ_DESC_FLAGS_SHIFT) & IONIC_TXQ_DESC_FLAGS_MASK; 730 *nsge = (cmd >> IONIC_TXQ_DESC_NSGE_SHIFT) & IONIC_TXQ_DESC_NSGE_MASK; 731 *addr = (cmd >> IONIC_TXQ_DESC_ADDR_SHIFT) & IONIC_TXQ_DESC_ADDR_MASK; 732 }; 733 734 #define IONIC_TX_MAX_SG_ELEMS 8 735 #define IONIC_RX_MAX_SG_ELEMS 8 736 737 /** 738 * struct txq_sg_desc - Transmit scatter-gather (SG) list 739 * @addr: DMA address of SG element data buffer 740 * @len: Length of SG element data buffer, in bytes 741 */ 742 struct ionic_txq_sg_desc { 743 struct ionic_txq_sg_elem { 744 __le64 addr; 745 __le16 len; 746 __le16 rsvd[3]; 747 } elems[IONIC_TX_MAX_SG_ELEMS]; 748 }; 749 750 /** 751 * struct txq_comp - Ethernet transmit queue completion descriptor 752 * @status: The status of the command (enum status_code) 753 * @comp_index: The index in the descriptor ring for which this 754 * is the completion. 755 * @color: Color bit. 756 */ 757 struct ionic_txq_comp { 758 u8 status; 759 u8 rsvd; 760 __le16 comp_index; 761 u8 rsvd2[11]; 762 u8 color; 763 }; 764 765 enum ionic_rxq_desc_opcode { 766 IONIC_RXQ_DESC_OPCODE_SIMPLE = 0, 767 IONIC_RXQ_DESC_OPCODE_SG = 1, 768 }; 769 770 /** 771 * struct rxq_desc - Ethernet Rx queue descriptor format 772 * @opcode: Rx operation, see RXQ_DESC_OPCODE_*: 773 * 774 * RXQ_DESC_OPCODE_SIMPLE: 775 * 776 * Receive full packet into data buffer 777 * starting at @addr. Results of 778 * receive, including actual bytes received, 779 * are recorded in Rx completion descriptor. 780 * 781 * @len: Data buffer's length, in bytes. 782 * @addr: Data buffer's DMA address 783 */ 784 struct ionic_rxq_desc { 785 u8 opcode; 786 u8 rsvd[5]; 787 __le16 len; 788 __le64 addr; 789 }; 790 791 /** 792 * struct rxq_sg_desc - Receive scatter-gather (SG) list 793 * @addr: DMA address of SG element data buffer 794 * @len: Length of SG element data buffer, in bytes 795 */ 796 struct ionic_rxq_sg_desc { 797 struct ionic_rxq_sg_elem { 798 __le64 addr; 799 __le16 len; 800 __le16 rsvd[3]; 801 } elems[IONIC_RX_MAX_SG_ELEMS]; 802 }; 803 804 /** 805 * struct rxq_comp - Ethernet receive queue completion descriptor 806 * @status: The status of the command (enum status_code) 807 * @num_sg_elems: Number of SG elements used by this descriptor 808 * @comp_index: The index in the descriptor ring for which this 809 * is the completion. 810 * @rss_hash: 32-bit RSS hash 811 * @csum: 16-bit sum of the packet's L2 payload. 812 * If the packet's L2 payload is odd length, an extra 813 * zero-value byte is included in the @csum calculation but 814 * not included in @len. 815 * @vlan_tci: VLAN tag stripped from the packet. Valid if @VLAN is 816 * set. Includes .1p and .1q tags. 817 * @len: Received packet length, in bytes. Excludes FCS. 818 * @csum_calc L2 payload checksum is computed or not 819 * @csum_tcp_ok: The TCP checksum calculated by the device 820 * matched the checksum in the receive packet's 821 * TCP header 822 * @csum_tcp_bad: The TCP checksum calculated by the device did 823 * not match the checksum in the receive packet's 824 * TCP header. 825 * @csum_udp_ok: The UDP checksum calculated by the device 826 * matched the checksum in the receive packet's 827 * UDP header 828 * @csum_udp_bad: The UDP checksum calculated by the device did 829 * not match the checksum in the receive packet's 830 * UDP header. 831 * @csum_ip_ok: The IPv4 checksum calculated by the device 832 * matched the checksum in the receive packet's 833 * first IPv4 header. If the receive packet 834 * contains both a tunnel IPv4 header and a 835 * transport IPv4 header, the device validates the 836 * checksum for the both IPv4 headers. 837 * @csum_ip_bad: The IPv4 checksum calculated by the device did 838 * not match the checksum in the receive packet's 839 * first IPv4 header. If the receive packet 840 * contains both a tunnel IPv4 header and a 841 * transport IPv4 header, the device validates the 842 * checksum for both IP headers. 843 * @VLAN: VLAN header was stripped and placed in @vlan_tci. 844 * @pkt_type: Packet type 845 * @color: Color bit. 846 */ 847 struct ionic_rxq_comp { 848 u8 status; 849 u8 num_sg_elems; 850 __le16 comp_index; 851 __le32 rss_hash; 852 __le16 csum; 853 __le16 vlan_tci; 854 __le16 len; 855 u8 csum_flags; 856 #define IONIC_RXQ_COMP_CSUM_F_TCP_OK 0x01 857 #define IONIC_RXQ_COMP_CSUM_F_TCP_BAD 0x02 858 #define IONIC_RXQ_COMP_CSUM_F_UDP_OK 0x04 859 #define IONIC_RXQ_COMP_CSUM_F_UDP_BAD 0x08 860 #define IONIC_RXQ_COMP_CSUM_F_IP_OK 0x10 861 #define IONIC_RXQ_COMP_CSUM_F_IP_BAD 0x20 862 #define IONIC_RXQ_COMP_CSUM_F_VLAN 0x40 863 #define IONIC_RXQ_COMP_CSUM_F_CALC 0x80 864 u8 pkt_type_color; 865 #define IONIC_RXQ_COMP_PKT_TYPE_MASK 0x0f 866 }; 867 868 enum ionic_pkt_type { 869 IONIC_PKT_TYPE_NON_IP = 0x000, 870 IONIC_PKT_TYPE_IPV4 = 0x001, 871 IONIC_PKT_TYPE_IPV4_TCP = 0x003, 872 IONIC_PKT_TYPE_IPV4_UDP = 0x005, 873 IONIC_PKT_TYPE_IPV6 = 0x008, 874 IONIC_PKT_TYPE_IPV6_TCP = 0x018, 875 IONIC_PKT_TYPE_IPV6_UDP = 0x028, 876 }; 877 878 enum ionic_eth_hw_features { 879 IONIC_ETH_HW_VLAN_TX_TAG = BIT(0), 880 IONIC_ETH_HW_VLAN_RX_STRIP = BIT(1), 881 IONIC_ETH_HW_VLAN_RX_FILTER = BIT(2), 882 IONIC_ETH_HW_RX_HASH = BIT(3), 883 IONIC_ETH_HW_RX_CSUM = BIT(4), 884 IONIC_ETH_HW_TX_SG = BIT(5), 885 IONIC_ETH_HW_RX_SG = BIT(6), 886 IONIC_ETH_HW_TX_CSUM = BIT(7), 887 IONIC_ETH_HW_TSO = BIT(8), 888 IONIC_ETH_HW_TSO_IPV6 = BIT(9), 889 IONIC_ETH_HW_TSO_ECN = BIT(10), 890 IONIC_ETH_HW_TSO_GRE = BIT(11), 891 IONIC_ETH_HW_TSO_GRE_CSUM = BIT(12), 892 IONIC_ETH_HW_TSO_IPXIP4 = BIT(13), 893 IONIC_ETH_HW_TSO_IPXIP6 = BIT(14), 894 IONIC_ETH_HW_TSO_UDP = BIT(15), 895 IONIC_ETH_HW_TSO_UDP_CSUM = BIT(16), 896 }; 897 898 /** 899 * struct q_control_cmd - Queue control command 900 * @opcode: opcode 901 * @type: Queue type 902 * @lif_index: LIF index 903 * @index: Queue index 904 * @oper: Operation (enum q_control_oper) 905 */ 906 struct ionic_q_control_cmd { 907 u8 opcode; 908 u8 type; 909 __le16 lif_index; 910 __le32 index; 911 u8 oper; 912 u8 rsvd[55]; 913 }; 914 915 typedef struct ionic_admin_comp ionic_q_control_comp; 916 917 enum q_control_oper { 918 IONIC_Q_DISABLE = 0, 919 IONIC_Q_ENABLE = 1, 920 IONIC_Q_HANG_RESET = 2, 921 }; 922 923 /** 924 * Physical connection type 925 */ 926 enum ionic_phy_type { 927 IONIC_PHY_TYPE_NONE = 0, 928 IONIC_PHY_TYPE_COPPER = 1, 929 IONIC_PHY_TYPE_FIBER = 2, 930 }; 931 932 /** 933 * Transceiver status 934 */ 935 enum ionic_xcvr_state { 936 IONIC_XCVR_STATE_REMOVED = 0, 937 IONIC_XCVR_STATE_INSERTED = 1, 938 IONIC_XCVR_STATE_PENDING = 2, 939 IONIC_XCVR_STATE_SPROM_READ = 3, 940 IONIC_XCVR_STATE_SPROM_READ_ERR = 4, 941 }; 942 943 /** 944 * Supported link modes 945 */ 946 enum ionic_xcvr_pid { 947 IONIC_XCVR_PID_UNKNOWN = 0, 948 949 /* CU */ 950 IONIC_XCVR_PID_QSFP_100G_CR4 = 1, 951 IONIC_XCVR_PID_QSFP_40GBASE_CR4 = 2, 952 IONIC_XCVR_PID_SFP_25GBASE_CR_S = 3, 953 IONIC_XCVR_PID_SFP_25GBASE_CR_L = 4, 954 IONIC_XCVR_PID_SFP_25GBASE_CR_N = 5, 955 956 /* Fiber */ 957 IONIC_XCVR_PID_QSFP_100G_AOC = 50, 958 IONIC_XCVR_PID_QSFP_100G_ACC = 51, 959 IONIC_XCVR_PID_QSFP_100G_SR4 = 52, 960 IONIC_XCVR_PID_QSFP_100G_LR4 = 53, 961 IONIC_XCVR_PID_QSFP_100G_ER4 = 54, 962 IONIC_XCVR_PID_QSFP_40GBASE_ER4 = 55, 963 IONIC_XCVR_PID_QSFP_40GBASE_SR4 = 56, 964 IONIC_XCVR_PID_QSFP_40GBASE_LR4 = 57, 965 IONIC_XCVR_PID_QSFP_40GBASE_AOC = 58, 966 IONIC_XCVR_PID_SFP_25GBASE_SR = 59, 967 IONIC_XCVR_PID_SFP_25GBASE_LR = 60, 968 IONIC_XCVR_PID_SFP_25GBASE_ER = 61, 969 IONIC_XCVR_PID_SFP_25GBASE_AOC = 62, 970 IONIC_XCVR_PID_SFP_10GBASE_SR = 63, 971 IONIC_XCVR_PID_SFP_10GBASE_LR = 64, 972 IONIC_XCVR_PID_SFP_10GBASE_LRM = 65, 973 IONIC_XCVR_PID_SFP_10GBASE_ER = 66, 974 IONIC_XCVR_PID_SFP_10GBASE_AOC = 67, 975 IONIC_XCVR_PID_SFP_10GBASE_CU = 68, 976 IONIC_XCVR_PID_QSFP_100G_CWDM4 = 69, 977 IONIC_XCVR_PID_QSFP_100G_PSM4 = 70, 978 }; 979 980 /** 981 * Port types 982 */ 983 enum ionic_port_type { 984 IONIC_PORT_TYPE_NONE = 0, /* port type not configured */ 985 IONIC_PORT_TYPE_ETH = 1, /* port carries ethernet traffic (inband) */ 986 IONIC_PORT_TYPE_MGMT = 2, /* port carries mgmt traffic (out-of-band) */ 987 }; 988 989 /** 990 * Port config state 991 */ 992 enum ionic_port_admin_state { 993 IONIC_PORT_ADMIN_STATE_NONE = 0, /* port admin state not configured */ 994 IONIC_PORT_ADMIN_STATE_DOWN = 1, /* port is admin disabled */ 995 IONIC_PORT_ADMIN_STATE_UP = 2, /* port is admin enabled */ 996 }; 997 998 /** 999 * Port operational status 1000 */ 1001 enum ionic_port_oper_status { 1002 IONIC_PORT_OPER_STATUS_NONE = 0, /* port is disabled */ 1003 IONIC_PORT_OPER_STATUS_UP = 1, /* port is linked up */ 1004 IONIC_PORT_OPER_STATUS_DOWN = 2, /* port link status is down */ 1005 }; 1006 1007 /** 1008 * Ethernet Forward error correction (fec) modes 1009 */ 1010 enum ionic_port_fec_type { 1011 IONIC_PORT_FEC_TYPE_NONE = 0, /* Disabled */ 1012 IONIC_PORT_FEC_TYPE_FC = 1, /* FireCode */ 1013 IONIC_PORT_FEC_TYPE_RS = 2, /* ReedSolomon */ 1014 }; 1015 1016 /** 1017 * Ethernet pause (flow control) modes 1018 */ 1019 enum ionic_port_pause_type { 1020 IONIC_PORT_PAUSE_TYPE_NONE = 0, /* Disable Pause */ 1021 IONIC_PORT_PAUSE_TYPE_LINK = 1, /* Link level pause */ 1022 IONIC_PORT_PAUSE_TYPE_PFC = 2, /* Priority-Flow control */ 1023 }; 1024 1025 /** 1026 * Loopback modes 1027 */ 1028 enum ionic_port_loopback_mode { 1029 IONIC_PORT_LOOPBACK_MODE_NONE = 0, /* Disable loopback */ 1030 IONIC_PORT_LOOPBACK_MODE_MAC = 1, /* MAC loopback */ 1031 IONIC_PORT_LOOPBACK_MODE_PHY = 2, /* PHY/Serdes loopback */ 1032 }; 1033 1034 /** 1035 * Transceiver Status information 1036 * @state: Transceiver status (enum xcvr_state) 1037 * @phy: Physical connection type (enum phy_type) 1038 * @pid: Transceiver link mode (enum pid) 1039 * @sprom: Transceiver sprom contents 1040 */ 1041 struct ionic_xcvr_status { 1042 u8 state; 1043 u8 phy; 1044 __le16 pid; 1045 u8 sprom[256]; 1046 }; 1047 1048 /** 1049 * Port configuration 1050 * @speed: port speed (in Mbps) 1051 * @mtu: mtu 1052 * @state: port admin state (enum port_admin_state) 1053 * @an_enable: autoneg enable 1054 * @fec_type: fec type (enum port_fec_type) 1055 * @pause_type: pause type (enum port_pause_type) 1056 * @loopback_mode: loopback mode (enum port_loopback_mode) 1057 */ 1058 union ionic_port_config { 1059 struct { 1060 #define IONIC_SPEED_100G 100000 /* 100G in Mbps */ 1061 #define IONIC_SPEED_50G 50000 /* 50G in Mbps */ 1062 #define IONIC_SPEED_40G 40000 /* 40G in Mbps */ 1063 #define IONIC_SPEED_25G 25000 /* 25G in Mbps */ 1064 #define IONIC_SPEED_10G 10000 /* 10G in Mbps */ 1065 #define IONIC_SPEED_1G 1000 /* 1G in Mbps */ 1066 __le32 speed; 1067 __le32 mtu; 1068 u8 state; 1069 u8 an_enable; 1070 u8 fec_type; 1071 #define IONIC_PAUSE_TYPE_MASK 0x0f 1072 #define IONIC_PAUSE_FLAGS_MASK 0xf0 1073 #define IONIC_PAUSE_F_TX 0x10 1074 #define IONIC_PAUSE_F_RX 0x20 1075 u8 pause_type; 1076 u8 loopback_mode; 1077 }; 1078 __le32 words[64]; 1079 }; 1080 1081 /** 1082 * Port Status information 1083 * @status: link status (enum port_oper_status) 1084 * @id: port id 1085 * @speed: link speed (in Mbps) 1086 * @xcvr: tranceiver status 1087 */ 1088 struct ionic_port_status { 1089 __le32 id; 1090 __le32 speed; 1091 u8 status; 1092 u8 rsvd[51]; 1093 struct ionic_xcvr_status xcvr; 1094 }; 1095 1096 /** 1097 * struct port_identify_cmd - Port identify command 1098 * @opcode: opcode 1099 * @index: port index 1100 * @ver: Highest version of identify supported by driver 1101 */ 1102 struct ionic_port_identify_cmd { 1103 u8 opcode; 1104 u8 index; 1105 u8 ver; 1106 u8 rsvd[61]; 1107 }; 1108 1109 /** 1110 * struct port_identify_comp - Port identify command completion 1111 * @status: The status of the command (enum status_code) 1112 * @ver: Version of identify returned by device 1113 */ 1114 struct ionic_port_identify_comp { 1115 u8 status; 1116 u8 ver; 1117 u8 rsvd[14]; 1118 }; 1119 1120 /** 1121 * struct port_init_cmd - Port initialization command 1122 * @opcode: opcode 1123 * @index: port index 1124 * @info_pa: destination address for port info (struct port_info) 1125 */ 1126 struct ionic_port_init_cmd { 1127 u8 opcode; 1128 u8 index; 1129 u8 rsvd[6]; 1130 __le64 info_pa; 1131 u8 rsvd2[48]; 1132 }; 1133 1134 /** 1135 * struct port_init_comp - Port initialization command completion 1136 * @status: The status of the command (enum status_code) 1137 */ 1138 struct ionic_port_init_comp { 1139 u8 status; 1140 u8 rsvd[15]; 1141 }; 1142 1143 /** 1144 * struct port_reset_cmd - Port reset command 1145 * @opcode: opcode 1146 * @index: port index 1147 */ 1148 struct ionic_port_reset_cmd { 1149 u8 opcode; 1150 u8 index; 1151 u8 rsvd[62]; 1152 }; 1153 1154 /** 1155 * struct port_reset_comp - Port reset command completion 1156 * @status: The status of the command (enum status_code) 1157 */ 1158 struct ionic_port_reset_comp { 1159 u8 status; 1160 u8 rsvd[15]; 1161 }; 1162 1163 /** 1164 * enum stats_ctl_cmd - List of commands for stats control 1165 */ 1166 enum ionic_stats_ctl_cmd { 1167 IONIC_STATS_CTL_RESET = 0, 1168 }; 1169 1170 1171 /** 1172 * enum ionic_port_attr - List of device attributes 1173 */ 1174 enum ionic_port_attr { 1175 IONIC_PORT_ATTR_STATE = 0, 1176 IONIC_PORT_ATTR_SPEED = 1, 1177 IONIC_PORT_ATTR_MTU = 2, 1178 IONIC_PORT_ATTR_AUTONEG = 3, 1179 IONIC_PORT_ATTR_FEC = 4, 1180 IONIC_PORT_ATTR_PAUSE = 5, 1181 IONIC_PORT_ATTR_LOOPBACK = 6, 1182 IONIC_PORT_ATTR_STATS_CTRL = 7, 1183 }; 1184 1185 /** 1186 * struct port_setattr_cmd - Set port attributes on the NIC 1187 * @opcode: Opcode 1188 * @index: port index 1189 * @attr: Attribute type (enum ionic_port_attr) 1190 */ 1191 struct ionic_port_setattr_cmd { 1192 u8 opcode; 1193 u8 index; 1194 u8 attr; 1195 u8 rsvd; 1196 union { 1197 u8 state; 1198 __le32 speed; 1199 __le32 mtu; 1200 u8 an_enable; 1201 u8 fec_type; 1202 u8 pause_type; 1203 u8 loopback_mode; 1204 u8 stats_ctl; 1205 u8 rsvd2[60]; 1206 }; 1207 }; 1208 1209 /** 1210 * struct port_setattr_comp - Port set attr command completion 1211 * @status: The status of the command (enum status_code) 1212 * @color: Color bit 1213 */ 1214 struct ionic_port_setattr_comp { 1215 u8 status; 1216 u8 rsvd[14]; 1217 u8 color; 1218 }; 1219 1220 /** 1221 * struct port_getattr_cmd - Get port attributes from the NIC 1222 * @opcode: Opcode 1223 * @index: port index 1224 * @attr: Attribute type (enum ionic_port_attr) 1225 */ 1226 struct ionic_port_getattr_cmd { 1227 u8 opcode; 1228 u8 index; 1229 u8 attr; 1230 u8 rsvd[61]; 1231 }; 1232 1233 /** 1234 * struct port_getattr_comp - Port get attr command completion 1235 * @status: The status of the command (enum status_code) 1236 * @color: Color bit 1237 */ 1238 struct ionic_port_getattr_comp { 1239 u8 status; 1240 u8 rsvd[3]; 1241 union { 1242 u8 state; 1243 __le32 speed; 1244 __le32 mtu; 1245 u8 an_enable; 1246 u8 fec_type; 1247 u8 pause_type; 1248 u8 loopback_mode; 1249 u8 rsvd2[11]; 1250 }; 1251 u8 color; 1252 }; 1253 1254 /** 1255 * struct lif_status - Lif status register 1256 * @eid: most recent NotifyQ event id 1257 * @port_num: port the lif is connected to 1258 * @link_status: port status (enum port_oper_status) 1259 * @link_speed: speed of link in Mbps 1260 * @link_down_count: number of times link status changes 1261 */ 1262 struct ionic_lif_status { 1263 __le64 eid; 1264 u8 port_num; 1265 u8 rsvd; 1266 __le16 link_status; 1267 __le32 link_speed; /* units of 1Mbps: eg 10000 = 10Gbps */ 1268 __le16 link_down_count; 1269 u8 rsvd2[46]; 1270 }; 1271 1272 /** 1273 * struct lif_reset_cmd - LIF reset command 1274 * @opcode: opcode 1275 * @index: LIF index 1276 */ 1277 struct ionic_lif_reset_cmd { 1278 u8 opcode; 1279 u8 rsvd; 1280 __le16 index; 1281 __le32 rsvd2[15]; 1282 }; 1283 1284 typedef struct ionic_admin_comp ionic_lif_reset_comp; 1285 1286 enum ionic_dev_state { 1287 IONIC_DEV_DISABLE = 0, 1288 IONIC_DEV_ENABLE = 1, 1289 IONIC_DEV_HANG_RESET = 2, 1290 }; 1291 1292 /** 1293 * enum dev_attr - List of device attributes 1294 */ 1295 enum ionic_dev_attr { 1296 IONIC_DEV_ATTR_STATE = 0, 1297 IONIC_DEV_ATTR_NAME = 1, 1298 IONIC_DEV_ATTR_FEATURES = 2, 1299 }; 1300 1301 /** 1302 * struct dev_setattr_cmd - Set Device attributes on the NIC 1303 * @opcode: Opcode 1304 * @attr: Attribute type (enum dev_attr) 1305 * @state: Device state (enum dev_state) 1306 * @name: The bus info, e.g. PCI slot-device-function, 0 terminated 1307 * @features: Device features 1308 */ 1309 struct ionic_dev_setattr_cmd { 1310 u8 opcode; 1311 u8 attr; 1312 __le16 rsvd; 1313 union { 1314 u8 state; 1315 char name[IONIC_IFNAMSIZ]; 1316 __le64 features; 1317 u8 rsvd2[60]; 1318 }; 1319 }; 1320 1321 /** 1322 * struct dev_setattr_comp - Device set attr command completion 1323 * @status: The status of the command (enum status_code) 1324 * @features: Device features 1325 * @color: Color bit 1326 */ 1327 struct ionic_dev_setattr_comp { 1328 u8 status; 1329 u8 rsvd[3]; 1330 union { 1331 __le64 features; 1332 u8 rsvd2[11]; 1333 }; 1334 u8 color; 1335 }; 1336 1337 /** 1338 * struct dev_getattr_cmd - Get Device attributes from the NIC 1339 * @opcode: opcode 1340 * @attr: Attribute type (enum dev_attr) 1341 */ 1342 struct ionic_dev_getattr_cmd { 1343 u8 opcode; 1344 u8 attr; 1345 u8 rsvd[62]; 1346 }; 1347 1348 /** 1349 * struct dev_setattr_comp - Device set attr command completion 1350 * @status: The status of the command (enum status_code) 1351 * @features: Device features 1352 * @color: Color bit 1353 */ 1354 struct ionic_dev_getattr_comp { 1355 u8 status; 1356 u8 rsvd[3]; 1357 union { 1358 __le64 features; 1359 u8 rsvd2[11]; 1360 }; 1361 u8 color; 1362 }; 1363 1364 /** 1365 * RSS parameters 1366 */ 1367 #define IONIC_RSS_HASH_KEY_SIZE 40 1368 1369 enum ionic_rss_hash_types { 1370 IONIC_RSS_TYPE_IPV4 = BIT(0), 1371 IONIC_RSS_TYPE_IPV4_TCP = BIT(1), 1372 IONIC_RSS_TYPE_IPV4_UDP = BIT(2), 1373 IONIC_RSS_TYPE_IPV6 = BIT(3), 1374 IONIC_RSS_TYPE_IPV6_TCP = BIT(4), 1375 IONIC_RSS_TYPE_IPV6_UDP = BIT(5), 1376 }; 1377 1378 /** 1379 * enum lif_attr - List of LIF attributes 1380 */ 1381 enum ionic_lif_attr { 1382 IONIC_LIF_ATTR_STATE = 0, 1383 IONIC_LIF_ATTR_NAME = 1, 1384 IONIC_LIF_ATTR_MTU = 2, 1385 IONIC_LIF_ATTR_MAC = 3, 1386 IONIC_LIF_ATTR_FEATURES = 4, 1387 IONIC_LIF_ATTR_RSS = 5, 1388 IONIC_LIF_ATTR_STATS_CTRL = 6, 1389 }; 1390 1391 /** 1392 * struct lif_setattr_cmd - Set LIF attributes on the NIC 1393 * @opcode: Opcode 1394 * @type: Attribute type (enum lif_attr) 1395 * @index: LIF index 1396 * @state: lif state (enum lif_state) 1397 * @name: The netdev name string, 0 terminated 1398 * @mtu: Mtu 1399 * @mac: Station mac 1400 * @features: Features (enum eth_hw_features) 1401 * @rss: RSS properties 1402 * @types: The hash types to enable (see rss_hash_types). 1403 * @key: The hash secret key. 1404 * @addr: Address for the indirection table shared memory. 1405 * @stats_ctl: stats control commands (enum stats_ctl_cmd) 1406 */ 1407 struct ionic_lif_setattr_cmd { 1408 u8 opcode; 1409 u8 attr; 1410 __le16 index; 1411 union { 1412 u8 state; 1413 char name[IONIC_IFNAMSIZ]; 1414 __le32 mtu; 1415 u8 mac[6]; 1416 __le64 features; 1417 struct { 1418 __le16 types; 1419 u8 key[IONIC_RSS_HASH_KEY_SIZE]; 1420 u8 rsvd[6]; 1421 __le64 addr; 1422 } rss; 1423 u8 stats_ctl; 1424 u8 rsvd[60]; 1425 }; 1426 }; 1427 1428 /** 1429 * struct lif_setattr_comp - LIF set attr command completion 1430 * @status: The status of the command (enum status_code) 1431 * @comp_index: The index in the descriptor ring for which this 1432 * is the completion. 1433 * @features: features (enum eth_hw_features) 1434 * @color: Color bit 1435 */ 1436 struct ionic_lif_setattr_comp { 1437 u8 status; 1438 u8 rsvd; 1439 __le16 comp_index; 1440 union { 1441 __le64 features; 1442 u8 rsvd2[11]; 1443 }; 1444 u8 color; 1445 }; 1446 1447 /** 1448 * struct lif_getattr_cmd - Get LIF attributes from the NIC 1449 * @opcode: Opcode 1450 * @attr: Attribute type (enum lif_attr) 1451 * @index: LIF index 1452 */ 1453 struct ionic_lif_getattr_cmd { 1454 u8 opcode; 1455 u8 attr; 1456 __le16 index; 1457 u8 rsvd[60]; 1458 }; 1459 1460 /** 1461 * struct lif_getattr_comp - LIF get attr command completion 1462 * @status: The status of the command (enum status_code) 1463 * @comp_index: The index in the descriptor ring for which this 1464 * is the completion. 1465 * @state: lif state (enum lif_state) 1466 * @name: The netdev name string, 0 terminated 1467 * @mtu: Mtu 1468 * @mac: Station mac 1469 * @features: Features (enum eth_hw_features) 1470 * @color: Color bit 1471 */ 1472 struct ionic_lif_getattr_comp { 1473 u8 status; 1474 u8 rsvd; 1475 __le16 comp_index; 1476 union { 1477 u8 state; 1478 __le32 mtu; 1479 u8 mac[6]; 1480 __le64 features; 1481 u8 rsvd2[11]; 1482 }; 1483 u8 color; 1484 }; 1485 1486 enum ionic_rx_mode { 1487 IONIC_RX_MODE_F_UNICAST = BIT(0), 1488 IONIC_RX_MODE_F_MULTICAST = BIT(1), 1489 IONIC_RX_MODE_F_BROADCAST = BIT(2), 1490 IONIC_RX_MODE_F_PROMISC = BIT(3), 1491 IONIC_RX_MODE_F_ALLMULTI = BIT(4), 1492 }; 1493 1494 /** 1495 * struct rx_mode_set_cmd - Set LIF's Rx mode command 1496 * @opcode: opcode 1497 * @lif_index: LIF index 1498 * @rx_mode: Rx mode flags: 1499 * IONIC_RX_MODE_F_UNICAST: Accept known unicast packets. 1500 * IONIC_RX_MODE_F_MULTICAST: Accept known multicast packets. 1501 * IONIC_RX_MODE_F_BROADCAST: Accept broadcast packets. 1502 * IONIC_RX_MODE_F_PROMISC: Accept any packets. 1503 * IONIC_RX_MODE_F_ALLMULTI: Accept any multicast packets. 1504 */ 1505 struct ionic_rx_mode_set_cmd { 1506 u8 opcode; 1507 u8 rsvd; 1508 __le16 lif_index; 1509 __le16 rx_mode; 1510 __le16 rsvd2[29]; 1511 }; 1512 1513 typedef struct ionic_admin_comp ionic_rx_mode_set_comp; 1514 1515 enum ionic_rx_filter_match_type { 1516 IONIC_RX_FILTER_MATCH_VLAN = 0, 1517 IONIC_RX_FILTER_MATCH_MAC, 1518 IONIC_RX_FILTER_MATCH_MAC_VLAN, 1519 }; 1520 1521 /** 1522 * struct rx_filter_add_cmd - Add LIF Rx filter command 1523 * @opcode: opcode 1524 * @qtype: Queue type 1525 * @lif_index: LIF index 1526 * @qid: Queue ID 1527 * @match: Rx filter match type. (See IONIC_RX_FILTER_MATCH_xxx) 1528 * @vlan: VLAN ID 1529 * @addr: MAC address (network-byte order) 1530 */ 1531 struct ionic_rx_filter_add_cmd { 1532 u8 opcode; 1533 u8 qtype; 1534 __le16 lif_index; 1535 __le32 qid; 1536 __le16 match; 1537 union { 1538 struct { 1539 __le16 vlan; 1540 } vlan; 1541 struct { 1542 u8 addr[6]; 1543 } mac; 1544 struct { 1545 __le16 vlan; 1546 u8 addr[6]; 1547 } mac_vlan; 1548 u8 rsvd[54]; 1549 }; 1550 }; 1551 1552 /** 1553 * struct rx_filter_add_comp - Add LIF Rx filter command completion 1554 * @status: The status of the command (enum status_code) 1555 * @comp_index: The index in the descriptor ring for which this 1556 * is the completion. 1557 * @filter_id: Filter ID 1558 * @color: Color bit. 1559 */ 1560 struct ionic_rx_filter_add_comp { 1561 u8 status; 1562 u8 rsvd; 1563 __le16 comp_index; 1564 __le32 filter_id; 1565 u8 rsvd2[7]; 1566 u8 color; 1567 }; 1568 1569 /** 1570 * struct rx_filter_del_cmd - Delete LIF Rx filter command 1571 * @opcode: opcode 1572 * @lif_index: LIF index 1573 * @filter_id: Filter ID 1574 */ 1575 struct ionic_rx_filter_del_cmd { 1576 u8 opcode; 1577 u8 rsvd; 1578 __le16 lif_index; 1579 __le32 filter_id; 1580 u8 rsvd2[56]; 1581 }; 1582 1583 typedef struct ionic_admin_comp ionic_rx_filter_del_comp; 1584 1585 /** 1586 * struct qos_identify_cmd - QoS identify command 1587 * @opcode: opcode 1588 * @ver: Highest version of identify supported by driver 1589 * 1590 */ 1591 struct ionic_qos_identify_cmd { 1592 u8 opcode; 1593 u8 ver; 1594 u8 rsvd[62]; 1595 }; 1596 1597 /** 1598 * struct qos_identify_comp - QoS identify command completion 1599 * @status: The status of the command (enum status_code) 1600 * @ver: Version of identify returned by device 1601 */ 1602 struct ionic_qos_identify_comp { 1603 u8 status; 1604 u8 ver; 1605 u8 rsvd[14]; 1606 }; 1607 1608 #define IONIC_QOS_CLASS_MAX 7 1609 #define IONIC_QOS_CLASS_NAME_SZ 32 1610 #define IONIC_QOS_DSCP_MAX_VALUES 64 1611 1612 /** 1613 * enum qos_class 1614 */ 1615 enum ionic_qos_class { 1616 IONIC_QOS_CLASS_DEFAULT = 0, 1617 IONIC_QOS_CLASS_USER_DEFINED_1 = 1, 1618 IONIC_QOS_CLASS_USER_DEFINED_2 = 2, 1619 IONIC_QOS_CLASS_USER_DEFINED_3 = 3, 1620 IONIC_QOS_CLASS_USER_DEFINED_4 = 4, 1621 IONIC_QOS_CLASS_USER_DEFINED_5 = 5, 1622 IONIC_QOS_CLASS_USER_DEFINED_6 = 6, 1623 }; 1624 1625 /** 1626 * enum qos_class_type - Traffic classification criteria 1627 */ 1628 enum ionic_qos_class_type { 1629 IONIC_QOS_CLASS_TYPE_NONE = 0, 1630 IONIC_QOS_CLASS_TYPE_PCP = 1, /* Dot1Q pcp */ 1631 IONIC_QOS_CLASS_TYPE_DSCP = 2, /* IP dscp */ 1632 }; 1633 1634 /** 1635 * enum qos_sched_type - Qos class scheduling type 1636 */ 1637 enum ionic_qos_sched_type { 1638 IONIC_QOS_SCHED_TYPE_STRICT = 0, /* Strict priority */ 1639 IONIC_QOS_SCHED_TYPE_DWRR = 1, /* Deficit weighted round-robin */ 1640 }; 1641 1642 /** 1643 * union qos_config - Qos configuration structure 1644 * @flags: Configuration flags 1645 * IONIC_QOS_CONFIG_F_ENABLE enable 1646 * IONIC_QOS_CONFIG_F_DROP drop/nodrop 1647 * IONIC_QOS_CONFIG_F_RW_DOT1Q_PCP enable dot1q pcp rewrite 1648 * IONIC_QOS_CONFIG_F_RW_IP_DSCP enable ip dscp rewrite 1649 * @sched_type: Qos class scheduling type (enum qos_sched_type) 1650 * @class_type: Qos class type (enum qos_class_type) 1651 * @pause_type: Qos pause type (enum qos_pause_type) 1652 * @name: Qos class name 1653 * @mtu: MTU of the class 1654 * @pfc_dot1q_pcp: Pcp value for pause frames (valid iff F_NODROP) 1655 * @dwrr_weight: Qos class scheduling weight 1656 * @strict_rlmt: Rate limit for strict priority scheduling 1657 * @rw_dot1q_pcp: Rewrite dot1q pcp to this value (valid iff F_RW_DOT1Q_PCP) 1658 * @rw_ip_dscp: Rewrite ip dscp to this value (valid iff F_RW_IP_DSCP) 1659 * @dot1q_pcp: Dot1q pcp value 1660 * @ndscp: Number of valid dscp values in the ip_dscp field 1661 * @ip_dscp: IP dscp values 1662 */ 1663 union ionic_qos_config { 1664 struct { 1665 #define IONIC_QOS_CONFIG_F_ENABLE BIT(0) 1666 #define IONIC_QOS_CONFIG_F_DROP BIT(1) 1667 #define IONIC_QOS_CONFIG_F_RW_DOT1Q_PCP BIT(2) 1668 #define IONIC_QOS_CONFIG_F_RW_IP_DSCP BIT(3) 1669 u8 flags; 1670 u8 sched_type; 1671 u8 class_type; 1672 u8 pause_type; 1673 char name[IONIC_QOS_CLASS_NAME_SZ]; 1674 __le32 mtu; 1675 /* flow control */ 1676 u8 pfc_cos; 1677 /* scheduler */ 1678 union { 1679 u8 dwrr_weight; 1680 __le64 strict_rlmt; 1681 }; 1682 /* marking */ 1683 union { 1684 u8 rw_dot1q_pcp; 1685 u8 rw_ip_dscp; 1686 }; 1687 /* classification */ 1688 union { 1689 u8 dot1q_pcp; 1690 struct { 1691 u8 ndscp; 1692 u8 ip_dscp[IONIC_QOS_DSCP_MAX_VALUES]; 1693 }; 1694 }; 1695 }; 1696 __le32 words[64]; 1697 }; 1698 1699 /** 1700 * union qos_identity - QoS identity structure 1701 * @version: Version of the identify structure 1702 * @type: QoS system type 1703 * @nclasses: Number of usable QoS classes 1704 * @config: Current configuration of classes 1705 */ 1706 union ionic_qos_identity { 1707 struct { 1708 u8 version; 1709 u8 type; 1710 u8 rsvd[62]; 1711 union ionic_qos_config config[IONIC_QOS_CLASS_MAX]; 1712 }; 1713 __le32 words[512]; 1714 }; 1715 1716 /** 1717 * struct qos_init_cmd - QoS config init command 1718 * @opcode: Opcode 1719 * @group: Qos class id 1720 * @info_pa: destination address for qos info 1721 */ 1722 struct ionic_qos_init_cmd { 1723 u8 opcode; 1724 u8 group; 1725 u8 rsvd[6]; 1726 __le64 info_pa; 1727 u8 rsvd1[48]; 1728 }; 1729 1730 typedef struct ionic_admin_comp ionic_qos_init_comp; 1731 1732 /** 1733 * struct qos_reset_cmd - Qos config reset command 1734 * @opcode: Opcode 1735 */ 1736 struct ionic_qos_reset_cmd { 1737 u8 opcode; 1738 u8 group; 1739 u8 rsvd[62]; 1740 }; 1741 1742 typedef struct ionic_admin_comp ionic_qos_reset_comp; 1743 1744 /** 1745 * struct fw_download_cmd - Firmware download command 1746 * @opcode: opcode 1747 * @addr: dma address of the firmware buffer 1748 * @offset: offset of the firmware buffer within the full image 1749 * @length: number of valid bytes in the firmware buffer 1750 */ 1751 struct ionic_fw_download_cmd { 1752 u8 opcode; 1753 u8 rsvd[3]; 1754 __le32 offset; 1755 __le64 addr; 1756 __le32 length; 1757 }; 1758 1759 typedef struct ionic_admin_comp ionic_fw_download_comp; 1760 1761 enum ionic_fw_control_oper { 1762 IONIC_FW_RESET = 0, /* Reset firmware */ 1763 IONIC_FW_INSTALL = 1, /* Install firmware */ 1764 IONIC_FW_ACTIVATE = 2, /* Activate firmware */ 1765 }; 1766 1767 /** 1768 * struct fw_control_cmd - Firmware control command 1769 * @opcode: opcode 1770 * @oper: firmware control operation (enum fw_control_oper) 1771 * @slot: slot to activate 1772 */ 1773 struct ionic_fw_control_cmd { 1774 u8 opcode; 1775 u8 rsvd[3]; 1776 u8 oper; 1777 u8 slot; 1778 u8 rsvd1[58]; 1779 }; 1780 1781 /** 1782 * struct fw_control_comp - Firmware control copletion 1783 * @opcode: opcode 1784 * @slot: slot where the firmware was installed 1785 */ 1786 struct ionic_fw_control_comp { 1787 u8 status; 1788 u8 rsvd; 1789 __le16 comp_index; 1790 u8 slot; 1791 u8 rsvd1[10]; 1792 u8 color; 1793 }; 1794 1795 /****************************************************************** 1796 ******************* RDMA Commands ******************************** 1797 ******************************************************************/ 1798 1799 /** 1800 * struct rdma_reset_cmd - Reset RDMA LIF cmd 1801 * @opcode: opcode 1802 * @lif_index: lif index 1803 * 1804 * There is no rdma specific dev command completion struct. Completion uses 1805 * the common struct admin_comp. Only the status is indicated. Nonzero status 1806 * means the LIF does not support rdma. 1807 **/ 1808 struct ionic_rdma_reset_cmd { 1809 u8 opcode; 1810 u8 rsvd; 1811 __le16 lif_index; 1812 u8 rsvd2[60]; 1813 }; 1814 1815 /** 1816 * struct rdma_queue_cmd - Create RDMA Queue command 1817 * @opcode: opcode, 52, 53 1818 * @lif_index lif index 1819 * @qid_ver: (qid | (rdma version << 24)) 1820 * @cid: intr, eq_id, or cq_id 1821 * @dbid: doorbell page id 1822 * @depth_log2: log base two of queue depth 1823 * @stride_log2: log base two of queue stride 1824 * @dma_addr: address of the queue memory 1825 * @xxx_table_index: temporary, but should not need pgtbl for contig. queues. 1826 * 1827 * The same command struct is used to create an rdma event queue, completion 1828 * queue, or rdma admin queue. The cid is an interrupt number for an event 1829 * queue, an event queue id for a completion queue, or a completion queue id 1830 * for an rdma admin queue. 1831 * 1832 * The queue created via a dev command must be contiguous in dma space. 1833 * 1834 * The dev commands are intended only to be used during driver initialization, 1835 * to create queues supporting the rdma admin queue. Other queues, and other 1836 * types of rdma resources like memory regions, will be created and registered 1837 * via the rdma admin queue, and will support a more complete interface 1838 * providing scatter gather lists for larger, scattered queue buffers and 1839 * memory registration. 1840 * 1841 * There is no rdma specific dev command completion struct. Completion uses 1842 * the common struct admin_comp. Only the status is indicated. 1843 **/ 1844 struct ionic_rdma_queue_cmd { 1845 u8 opcode; 1846 u8 rsvd; 1847 __le16 lif_index; 1848 __le32 qid_ver; 1849 __le32 cid; 1850 __le16 dbid; 1851 u8 depth_log2; 1852 u8 stride_log2; 1853 __le64 dma_addr; 1854 u8 rsvd2[36]; 1855 __le32 xxx_table_index; 1856 }; 1857 1858 /****************************************************************** 1859 ******************* Notify Events ******************************** 1860 ******************************************************************/ 1861 1862 /** 1863 * struct notifyq_event 1864 * @eid: event number 1865 * @ecode: event code 1866 * @data: unspecified data about the event 1867 * 1868 * This is the generic event report struct from which the other 1869 * actual events will be formed. 1870 */ 1871 struct ionic_notifyq_event { 1872 __le64 eid; 1873 __le16 ecode; 1874 u8 data[54]; 1875 }; 1876 1877 /** 1878 * struct link_change_event 1879 * @eid: event number 1880 * @ecode: event code = EVENT_OPCODE_LINK_CHANGE 1881 * @link_status: link up or down, with error bits (enum port_status) 1882 * @link_speed: speed of the network link 1883 * 1884 * Sent when the network link state changes between UP and DOWN 1885 */ 1886 struct ionic_link_change_event { 1887 __le64 eid; 1888 __le16 ecode; 1889 __le16 link_status; 1890 __le32 link_speed; /* units of 1Mbps: e.g. 10000 = 10Gbps */ 1891 u8 rsvd[48]; 1892 }; 1893 1894 /** 1895 * struct reset_event 1896 * @eid: event number 1897 * @ecode: event code = EVENT_OPCODE_RESET 1898 * @reset_code: reset type 1899 * @state: 0=pending, 1=complete, 2=error 1900 * 1901 * Sent when the NIC or some subsystem is going to be or 1902 * has been reset. 1903 */ 1904 struct ionic_reset_event { 1905 __le64 eid; 1906 __le16 ecode; 1907 u8 reset_code; 1908 u8 state; 1909 u8 rsvd[52]; 1910 }; 1911 1912 /** 1913 * struct heartbeat_event 1914 * @eid: event number 1915 * @ecode: event code = EVENT_OPCODE_HEARTBEAT 1916 * 1917 * Sent periodically by the NIC to indicate continued health 1918 */ 1919 struct ionic_heartbeat_event { 1920 __le64 eid; 1921 __le16 ecode; 1922 u8 rsvd[54]; 1923 }; 1924 1925 /** 1926 * struct log_event 1927 * @eid: event number 1928 * @ecode: event code = EVENT_OPCODE_LOG 1929 * @data: log data 1930 * 1931 * Sent to notify the driver of an internal error. 1932 */ 1933 struct ionic_log_event { 1934 __le64 eid; 1935 __le16 ecode; 1936 u8 data[54]; 1937 }; 1938 1939 /** 1940 * struct port_stats 1941 */ 1942 struct ionic_port_stats { 1943 __le64 frames_rx_ok; 1944 __le64 frames_rx_all; 1945 __le64 frames_rx_bad_fcs; 1946 __le64 frames_rx_bad_all; 1947 __le64 octets_rx_ok; 1948 __le64 octets_rx_all; 1949 __le64 frames_rx_unicast; 1950 __le64 frames_rx_multicast; 1951 __le64 frames_rx_broadcast; 1952 __le64 frames_rx_pause; 1953 __le64 frames_rx_bad_length; 1954 __le64 frames_rx_undersized; 1955 __le64 frames_rx_oversized; 1956 __le64 frames_rx_fragments; 1957 __le64 frames_rx_jabber; 1958 __le64 frames_rx_pripause; 1959 __le64 frames_rx_stomped_crc; 1960 __le64 frames_rx_too_long; 1961 __le64 frames_rx_vlan_good; 1962 __le64 frames_rx_dropped; 1963 __le64 frames_rx_less_than_64b; 1964 __le64 frames_rx_64b; 1965 __le64 frames_rx_65b_127b; 1966 __le64 frames_rx_128b_255b; 1967 __le64 frames_rx_256b_511b; 1968 __le64 frames_rx_512b_1023b; 1969 __le64 frames_rx_1024b_1518b; 1970 __le64 frames_rx_1519b_2047b; 1971 __le64 frames_rx_2048b_4095b; 1972 __le64 frames_rx_4096b_8191b; 1973 __le64 frames_rx_8192b_9215b; 1974 __le64 frames_rx_other; 1975 __le64 frames_tx_ok; 1976 __le64 frames_tx_all; 1977 __le64 frames_tx_bad; 1978 __le64 octets_tx_ok; 1979 __le64 octets_tx_total; 1980 __le64 frames_tx_unicast; 1981 __le64 frames_tx_multicast; 1982 __le64 frames_tx_broadcast; 1983 __le64 frames_tx_pause; 1984 __le64 frames_tx_pripause; 1985 __le64 frames_tx_vlan; 1986 __le64 frames_tx_less_than_64b; 1987 __le64 frames_tx_64b; 1988 __le64 frames_tx_65b_127b; 1989 __le64 frames_tx_128b_255b; 1990 __le64 frames_tx_256b_511b; 1991 __le64 frames_tx_512b_1023b; 1992 __le64 frames_tx_1024b_1518b; 1993 __le64 frames_tx_1519b_2047b; 1994 __le64 frames_tx_2048b_4095b; 1995 __le64 frames_tx_4096b_8191b; 1996 __le64 frames_tx_8192b_9215b; 1997 __le64 frames_tx_other; 1998 __le64 frames_tx_pri_0; 1999 __le64 frames_tx_pri_1; 2000 __le64 frames_tx_pri_2; 2001 __le64 frames_tx_pri_3; 2002 __le64 frames_tx_pri_4; 2003 __le64 frames_tx_pri_5; 2004 __le64 frames_tx_pri_6; 2005 __le64 frames_tx_pri_7; 2006 __le64 frames_rx_pri_0; 2007 __le64 frames_rx_pri_1; 2008 __le64 frames_rx_pri_2; 2009 __le64 frames_rx_pri_3; 2010 __le64 frames_rx_pri_4; 2011 __le64 frames_rx_pri_5; 2012 __le64 frames_rx_pri_6; 2013 __le64 frames_rx_pri_7; 2014 __le64 tx_pripause_0_1us_count; 2015 __le64 tx_pripause_1_1us_count; 2016 __le64 tx_pripause_2_1us_count; 2017 __le64 tx_pripause_3_1us_count; 2018 __le64 tx_pripause_4_1us_count; 2019 __le64 tx_pripause_5_1us_count; 2020 __le64 tx_pripause_6_1us_count; 2021 __le64 tx_pripause_7_1us_count; 2022 __le64 rx_pripause_0_1us_count; 2023 __le64 rx_pripause_1_1us_count; 2024 __le64 rx_pripause_2_1us_count; 2025 __le64 rx_pripause_3_1us_count; 2026 __le64 rx_pripause_4_1us_count; 2027 __le64 rx_pripause_5_1us_count; 2028 __le64 rx_pripause_6_1us_count; 2029 __le64 rx_pripause_7_1us_count; 2030 __le64 rx_pause_1us_count; 2031 __le64 frames_tx_truncated; 2032 }; 2033 2034 struct ionic_mgmt_port_stats { 2035 __le64 frames_rx_ok; 2036 __le64 frames_rx_all; 2037 __le64 frames_rx_bad_fcs; 2038 __le64 frames_rx_bad_all; 2039 __le64 octets_rx_ok; 2040 __le64 octets_rx_all; 2041 __le64 frames_rx_unicast; 2042 __le64 frames_rx_multicast; 2043 __le64 frames_rx_broadcast; 2044 __le64 frames_rx_pause; 2045 __le64 frames_rx_bad_length0; 2046 __le64 frames_rx_undersized1; 2047 __le64 frames_rx_oversized2; 2048 __le64 frames_rx_fragments3; 2049 __le64 frames_rx_jabber4; 2050 __le64 frames_rx_64b5; 2051 __le64 frames_rx_65b_127b6; 2052 __le64 frames_rx_128b_255b7; 2053 __le64 frames_rx_256b_511b8; 2054 __le64 frames_rx_512b_1023b9; 2055 __le64 frames_rx_1024b_1518b0; 2056 __le64 frames_rx_gt_1518b1; 2057 __le64 frames_rx_fifo_full2; 2058 __le64 frames_tx_ok3; 2059 __le64 frames_tx_all4; 2060 __le64 frames_tx_bad5; 2061 __le64 octets_tx_ok6; 2062 __le64 octets_tx_total7; 2063 __le64 frames_tx_unicast8; 2064 __le64 frames_tx_multicast9; 2065 __le64 frames_tx_broadcast0; 2066 __le64 frames_tx_pause1; 2067 }; 2068 2069 /** 2070 * struct port_identity - port identity structure 2071 * @version: identity structure version 2072 * @type: type of port (enum port_type) 2073 * @num_lanes: number of lanes for the port 2074 * @autoneg: autoneg supported 2075 * @min_frame_size: minimum frame size supported 2076 * @max_frame_size: maximum frame size supported 2077 * @fec_type: supported fec types 2078 * @pause_type: supported pause types 2079 * @loopback_mode: supported loopback mode 2080 * @speeds: supported speeds 2081 * @config: current port configuration 2082 */ 2083 union ionic_port_identity { 2084 struct { 2085 u8 version; 2086 u8 type; 2087 u8 num_lanes; 2088 u8 autoneg; 2089 __le32 min_frame_size; 2090 __le32 max_frame_size; 2091 u8 fec_type[4]; 2092 u8 pause_type[2]; 2093 u8 loopback_mode[2]; 2094 __le32 speeds[16]; 2095 u8 rsvd2[44]; 2096 union ionic_port_config config; 2097 }; 2098 __le32 words[512]; 2099 }; 2100 2101 /** 2102 * struct port_info - port info structure 2103 * @port_status: port status 2104 * @port_stats: port stats 2105 */ 2106 struct ionic_port_info { 2107 union ionic_port_config config; 2108 struct ionic_port_status status; 2109 struct ionic_port_stats stats; 2110 }; 2111 2112 /** 2113 * struct lif_stats 2114 */ 2115 struct ionic_lif_stats { 2116 /* RX */ 2117 __le64 rx_ucast_bytes; 2118 __le64 rx_ucast_packets; 2119 __le64 rx_mcast_bytes; 2120 __le64 rx_mcast_packets; 2121 __le64 rx_bcast_bytes; 2122 __le64 rx_bcast_packets; 2123 __le64 rsvd0; 2124 __le64 rsvd1; 2125 /* RX drops */ 2126 __le64 rx_ucast_drop_bytes; 2127 __le64 rx_ucast_drop_packets; 2128 __le64 rx_mcast_drop_bytes; 2129 __le64 rx_mcast_drop_packets; 2130 __le64 rx_bcast_drop_bytes; 2131 __le64 rx_bcast_drop_packets; 2132 __le64 rx_dma_error; 2133 __le64 rsvd2; 2134 /* TX */ 2135 __le64 tx_ucast_bytes; 2136 __le64 tx_ucast_packets; 2137 __le64 tx_mcast_bytes; 2138 __le64 tx_mcast_packets; 2139 __le64 tx_bcast_bytes; 2140 __le64 tx_bcast_packets; 2141 __le64 rsvd3; 2142 __le64 rsvd4; 2143 /* TX drops */ 2144 __le64 tx_ucast_drop_bytes; 2145 __le64 tx_ucast_drop_packets; 2146 __le64 tx_mcast_drop_bytes; 2147 __le64 tx_mcast_drop_packets; 2148 __le64 tx_bcast_drop_bytes; 2149 __le64 tx_bcast_drop_packets; 2150 __le64 tx_dma_error; 2151 __le64 rsvd5; 2152 /* Rx Queue/Ring drops */ 2153 __le64 rx_queue_disabled; 2154 __le64 rx_queue_empty; 2155 __le64 rx_queue_error; 2156 __le64 rx_desc_fetch_error; 2157 __le64 rx_desc_data_error; 2158 __le64 rsvd6; 2159 __le64 rsvd7; 2160 __le64 rsvd8; 2161 /* Tx Queue/Ring drops */ 2162 __le64 tx_queue_disabled; 2163 __le64 tx_queue_error; 2164 __le64 tx_desc_fetch_error; 2165 __le64 tx_desc_data_error; 2166 __le64 rsvd9; 2167 __le64 rsvd10; 2168 __le64 rsvd11; 2169 __le64 rsvd12; 2170 2171 /* RDMA/ROCE TX */ 2172 __le64 tx_rdma_ucast_bytes; 2173 __le64 tx_rdma_ucast_packets; 2174 __le64 tx_rdma_mcast_bytes; 2175 __le64 tx_rdma_mcast_packets; 2176 __le64 tx_rdma_cnp_packets; 2177 __le64 rsvd13; 2178 __le64 rsvd14; 2179 __le64 rsvd15; 2180 2181 /* RDMA/ROCE RX */ 2182 __le64 rx_rdma_ucast_bytes; 2183 __le64 rx_rdma_ucast_packets; 2184 __le64 rx_rdma_mcast_bytes; 2185 __le64 rx_rdma_mcast_packets; 2186 __le64 rx_rdma_cnp_packets; 2187 __le64 rx_rdma_ecn_packets; 2188 __le64 rsvd16; 2189 __le64 rsvd17; 2190 2191 __le64 rsvd18; 2192 __le64 rsvd19; 2193 __le64 rsvd20; 2194 __le64 rsvd21; 2195 __le64 rsvd22; 2196 __le64 rsvd23; 2197 __le64 rsvd24; 2198 __le64 rsvd25; 2199 2200 __le64 rsvd26; 2201 __le64 rsvd27; 2202 __le64 rsvd28; 2203 __le64 rsvd29; 2204 __le64 rsvd30; 2205 __le64 rsvd31; 2206 __le64 rsvd32; 2207 __le64 rsvd33; 2208 2209 __le64 rsvd34; 2210 __le64 rsvd35; 2211 __le64 rsvd36; 2212 __le64 rsvd37; 2213 __le64 rsvd38; 2214 __le64 rsvd39; 2215 __le64 rsvd40; 2216 __le64 rsvd41; 2217 2218 __le64 rsvd42; 2219 __le64 rsvd43; 2220 __le64 rsvd44; 2221 __le64 rsvd45; 2222 __le64 rsvd46; 2223 __le64 rsvd47; 2224 __le64 rsvd48; 2225 __le64 rsvd49; 2226 2227 /* RDMA/ROCE REQ Error/Debugs (768 - 895) */ 2228 __le64 rdma_req_rx_pkt_seq_err; 2229 __le64 rdma_req_rx_rnr_retry_err; 2230 __le64 rdma_req_rx_remote_access_err; 2231 __le64 rdma_req_rx_remote_inv_req_err; 2232 __le64 rdma_req_rx_remote_oper_err; 2233 __le64 rdma_req_rx_implied_nak_seq_err; 2234 __le64 rdma_req_rx_cqe_err; 2235 __le64 rdma_req_rx_cqe_flush_err; 2236 2237 __le64 rdma_req_rx_dup_responses; 2238 __le64 rdma_req_rx_invalid_packets; 2239 __le64 rdma_req_tx_local_access_err; 2240 __le64 rdma_req_tx_local_oper_err; 2241 __le64 rdma_req_tx_memory_mgmt_err; 2242 __le64 rsvd52; 2243 __le64 rsvd53; 2244 __le64 rsvd54; 2245 2246 /* RDMA/ROCE RESP Error/Debugs (896 - 1023) */ 2247 __le64 rdma_resp_rx_dup_requests; 2248 __le64 rdma_resp_rx_out_of_buffer; 2249 __le64 rdma_resp_rx_out_of_seq_pkts; 2250 __le64 rdma_resp_rx_cqe_err; 2251 __le64 rdma_resp_rx_cqe_flush_err; 2252 __le64 rdma_resp_rx_local_len_err; 2253 __le64 rdma_resp_rx_inv_request_err; 2254 __le64 rdma_resp_rx_local_qp_oper_err; 2255 2256 __le64 rdma_resp_rx_out_of_atomic_resource; 2257 __le64 rdma_resp_tx_pkt_seq_err; 2258 __le64 rdma_resp_tx_remote_inv_req_err; 2259 __le64 rdma_resp_tx_remote_access_err; 2260 __le64 rdma_resp_tx_remote_oper_err; 2261 __le64 rdma_resp_tx_rnr_retry_err; 2262 __le64 rsvd57; 2263 __le64 rsvd58; 2264 }; 2265 2266 /** 2267 * struct lif_info - lif info structure 2268 */ 2269 struct ionic_lif_info { 2270 union ionic_lif_config config; 2271 struct ionic_lif_status status; 2272 struct ionic_lif_stats stats; 2273 }; 2274 2275 union ionic_dev_cmd { 2276 u32 words[16]; 2277 struct ionic_admin_cmd cmd; 2278 struct ionic_nop_cmd nop; 2279 2280 struct ionic_dev_identify_cmd identify; 2281 struct ionic_dev_init_cmd init; 2282 struct ionic_dev_reset_cmd reset; 2283 struct ionic_dev_getattr_cmd getattr; 2284 struct ionic_dev_setattr_cmd setattr; 2285 2286 struct ionic_port_identify_cmd port_identify; 2287 struct ionic_port_init_cmd port_init; 2288 struct ionic_port_reset_cmd port_reset; 2289 struct ionic_port_getattr_cmd port_getattr; 2290 struct ionic_port_setattr_cmd port_setattr; 2291 2292 struct ionic_lif_identify_cmd lif_identify; 2293 struct ionic_lif_init_cmd lif_init; 2294 struct ionic_lif_reset_cmd lif_reset; 2295 2296 struct ionic_qos_identify_cmd qos_identify; 2297 struct ionic_qos_init_cmd qos_init; 2298 struct ionic_qos_reset_cmd qos_reset; 2299 2300 struct ionic_q_init_cmd q_init; 2301 }; 2302 2303 union ionic_dev_cmd_comp { 2304 u32 words[4]; 2305 u8 status; 2306 struct ionic_admin_comp comp; 2307 struct ionic_nop_comp nop; 2308 2309 struct ionic_dev_identify_comp identify; 2310 struct ionic_dev_init_comp init; 2311 struct ionic_dev_reset_comp reset; 2312 struct ionic_dev_getattr_comp getattr; 2313 struct ionic_dev_setattr_comp setattr; 2314 2315 struct ionic_port_identify_comp port_identify; 2316 struct ionic_port_init_comp port_init; 2317 struct ionic_port_reset_comp port_reset; 2318 struct ionic_port_getattr_comp port_getattr; 2319 struct ionic_port_setattr_comp port_setattr; 2320 2321 struct ionic_lif_identify_comp lif_identify; 2322 struct ionic_lif_init_comp lif_init; 2323 ionic_lif_reset_comp lif_reset; 2324 2325 struct ionic_qos_identify_comp qos_identify; 2326 ionic_qos_init_comp qos_init; 2327 ionic_qos_reset_comp qos_reset; 2328 2329 struct ionic_q_init_comp q_init; 2330 }; 2331 2332 /** 2333 * union dev_info - Device info register format (read-only) 2334 * @signature: Signature value of 0x44455649 ('DEVI'). 2335 * @version: Current version of info. 2336 * @asic_type: Asic type. 2337 * @asic_rev: Asic revision. 2338 * @fw_status: Firmware status. 2339 * @fw_heartbeat: Firmware heartbeat counter. 2340 * @serial_num: Serial number. 2341 * @fw_version: Firmware version. 2342 */ 2343 union ionic_dev_info_regs { 2344 #define IONIC_DEVINFO_FWVERS_BUFLEN 32 2345 #define IONIC_DEVINFO_SERIAL_BUFLEN 32 2346 struct { 2347 u32 signature; 2348 u8 version; 2349 u8 asic_type; 2350 u8 asic_rev; 2351 u8 fw_status; 2352 u32 fw_heartbeat; 2353 char fw_version[IONIC_DEVINFO_FWVERS_BUFLEN]; 2354 char serial_num[IONIC_DEVINFO_SERIAL_BUFLEN]; 2355 }; 2356 u32 words[512]; 2357 }; 2358 2359 /** 2360 * union dev_cmd_regs - Device command register format (read-write) 2361 * @doorbell: Device Cmd Doorbell, write-only. 2362 * Write a 1 to signal device to process cmd, 2363 * poll done for completion. 2364 * @done: Done indicator, bit 0 == 1 when command is complete. 2365 * @cmd: Opcode-specific command bytes 2366 * @comp: Opcode-specific response bytes 2367 * @data: Opcode-specific side-data 2368 */ 2369 union ionic_dev_cmd_regs { 2370 struct { 2371 u32 doorbell; 2372 u32 done; 2373 union ionic_dev_cmd cmd; 2374 union ionic_dev_cmd_comp comp; 2375 u8 rsvd[48]; 2376 u32 data[478]; 2377 }; 2378 u32 words[512]; 2379 }; 2380 2381 /** 2382 * union dev_regs - Device register format in for bar 0 page 0 2383 * @info: Device info registers 2384 * @devcmd: Device command registers 2385 */ 2386 union ionic_dev_regs { 2387 struct { 2388 union ionic_dev_info_regs info; 2389 union ionic_dev_cmd_regs devcmd; 2390 }; 2391 __le32 words[1024]; 2392 }; 2393 2394 union ionic_adminq_cmd { 2395 struct ionic_admin_cmd cmd; 2396 struct ionic_nop_cmd nop; 2397 struct ionic_q_init_cmd q_init; 2398 struct ionic_q_control_cmd q_control; 2399 struct ionic_lif_setattr_cmd lif_setattr; 2400 struct ionic_lif_getattr_cmd lif_getattr; 2401 struct ionic_rx_mode_set_cmd rx_mode_set; 2402 struct ionic_rx_filter_add_cmd rx_filter_add; 2403 struct ionic_rx_filter_del_cmd rx_filter_del; 2404 struct ionic_rdma_reset_cmd rdma_reset; 2405 struct ionic_rdma_queue_cmd rdma_queue; 2406 struct ionic_fw_download_cmd fw_download; 2407 struct ionic_fw_control_cmd fw_control; 2408 }; 2409 2410 union ionic_adminq_comp { 2411 struct ionic_admin_comp comp; 2412 struct ionic_nop_comp nop; 2413 struct ionic_q_init_comp q_init; 2414 struct ionic_lif_setattr_comp lif_setattr; 2415 struct ionic_lif_getattr_comp lif_getattr; 2416 struct ionic_rx_filter_add_comp rx_filter_add; 2417 struct ionic_fw_control_comp fw_control; 2418 }; 2419 2420 #define IONIC_BARS_MAX 6 2421 #define IONIC_PCI_BAR_DBELL 1 2422 2423 /* BAR0 */ 2424 #define IONIC_BAR0_SIZE 0x8000 2425 2426 #define IONIC_BAR0_DEV_INFO_REGS_OFFSET 0x0000 2427 #define IONIC_BAR0_DEV_CMD_REGS_OFFSET 0x0800 2428 #define IONIC_BAR0_DEV_CMD_DATA_REGS_OFFSET 0x0c00 2429 #define IONIC_BAR0_INTR_STATUS_OFFSET 0x1000 2430 #define IONIC_BAR0_INTR_CTRL_OFFSET 0x2000 2431 #define IONIC_DEV_CMD_DONE 0x00000001 2432 2433 #define IONIC_ASIC_TYPE_CAPRI 0 2434 2435 /** 2436 * struct doorbell - Doorbell register layout 2437 * @p_index: Producer index 2438 * @ring: Selects the specific ring of the queue to update. 2439 * Type-specific meaning: 2440 * ring=0: Default producer/consumer queue. 2441 * ring=1: (CQ, EQ) Re-Arm queue. RDMA CQs 2442 * send events to EQs when armed. EQs send 2443 * interrupts when armed. 2444 * @qid: The queue id selects the queue destination for the 2445 * producer index and flags. 2446 */ 2447 struct ionic_doorbell { 2448 __le16 p_index; 2449 u8 ring; 2450 u8 qid_lo; 2451 __le16 qid_hi; 2452 u16 rsvd2; 2453 }; 2454 2455 struct ionic_intr_status { 2456 u32 status[2]; 2457 }; 2458 2459 struct ionic_notifyq_cmd { 2460 __le32 data; /* Not used but needed for qcq structure */ 2461 }; 2462 2463 union ionic_notifyq_comp { 2464 struct ionic_notifyq_event event; 2465 struct ionic_link_change_event link_change; 2466 struct ionic_reset_event reset; 2467 struct ionic_heartbeat_event heartbeat; 2468 struct ionic_log_event log; 2469 }; 2470 2471 /* Deprecate */ 2472 struct ionic_identity { 2473 union ionic_drv_identity drv; 2474 union ionic_dev_identity dev; 2475 union ionic_lif_identity lif; 2476 union ionic_port_identity port; 2477 union ionic_qos_identity qos; 2478 }; 2479 2480 #pragma pack(pop) 2481 2482 #endif /* _IONIC_IF_H_ */ 2483