Print this page
NEX-1890 update oce from source provided by Emulex

@@ -17,12 +17,17 @@
  * information: Portions Copyright [yyyy] [name of copyright owner]
  *
  * CDDL HEADER END
  */
 
-/* Copyright © 2003-2011 Emulex. All rights reserved.  */
+/*
+ * Copyright (c) 2009-2012 Emulex. All rights reserved.
+ * Use is subject to license terms.
+ */
 
+
+
 /*
  * header file containing the data structure definitions for the NIC
  * subsystetm
  */
 

@@ -49,10 +54,12 @@
 /* NIC WQ types */
 #define NIC_WQ_TYPE_FORWARDING          0x01
 #define NIC_WQ_TYPE_STANDARD            0x02
 #define NIC_WQ_TYPE_LOW_LATENCY         0x04
 
+#define INVALID_PMAC_ID         0xffffffff
+
 #pragma pack(1)
 enum {
         OPCODE_CONFIG_NIC_RSS = 1,
         OPCODE_CONFIG_NIC_ACPI = 2,
         OPCODE_CONFIG_NIC_PROMISCUOUS = 3,

@@ -64,11 +71,12 @@
         OPCODE_CREATE_NIC_RSS_CQ = 11,
         OPCODE_DELETE_NIC_RSS_CQ = 12,
         OPCODE_SET_RSS_EQ_MSI = 13,
         OPCODE_CREATE_NIC_HDS_RQ = 14,
         OPCODE_DELETE_NIC_HDS_RQ = 15,
-        OPCODE_CONFIG_NIC_RSS_ADVANCED = 16
+        OPCODE_CONFIG_NIC_RSS_ADVANCED = 16,
+        OPCODE_NIC_GET_PPORT_STATS = 18
 };
 
 enum {
         RSS_ENABLE_NONE         = 0x0, /* (No RSS) */
         RSS_ENABLE_IPV4         = 0x1, /* (IPV4 HASH enabled ) */

@@ -231,10 +239,86 @@
         union {
                 struct {
 #ifdef _BIG_ENDIAN
                         /* dw 0 */
                         uint32_t ip_options:1;
+                        uint32_t vlan_tag_present:1;
+                        uint32_t pkt_size:14;
+                        uint32_t vlan_tag:16;
+
+                        /* dw 1 */
+                        uint32_t num_fragments:3;
+                        uint32_t switched:1;
+                        uint32_t ct:2;
+                        uint32_t frag_index:10;
+                        uint32_t rsvd0:1;
+                        uint32_t mac_dst:7;
+                        uint32_t ip_ver:1;
+                        uint32_t l4_cksum_pass:1;
+                        uint32_t ip_cksum_pass:1;
+                        uint32_t udpframe:1;
+                        uint32_t tcpframe:1;
+                        uint32_t ipframe:1;
+                        uint32_t rss_hp:1;
+                        uint32_t error:1;
+
+                        /* dw 2 */
+                        uint32_t valid:1;
+                        uint32_t rsvd2:13;
+                        uint32_t hds_type:2;
+                        uint32_t hds_hdr_size:8;
+                        uint32_t vntagp:1;
+                        uint32_t port:2;
+                        uint32_t rss_bank:1;
+                        uint32_t qnq:1;
+                        uint32_t pkt_type:2;
+                        uint32_t rss_flush:1;
+
+                        /* dw 3 */
+                        uint32_t rss_hash_value;
+#else
+                        /* dw 0 */
+                        uint32_t vlan_tag:16;
+                        uint32_t pkt_size:14;
+                        uint32_t vlan_tag_present:1;
+                        uint32_t ip_options:1;
+                        /* dw 1 */
+                        uint32_t error:1;
+                        uint32_t rss_hp:1;
+                        uint32_t ipframe:1;
+                        uint32_t tcpframe:1;
+                        uint32_t udpframe:1;
+                        uint32_t ip_cksum_pass:1;
+                        uint32_t l4_cksum_pass:1;
+                        uint32_t ip_ver:1;
+                        uint32_t mac_dst:7;
+                        uint32_t rsvd0:1;
+                        uint32_t frag_index:10;
+                        uint32_t ct:2;
+                        uint32_t switched:1;
+                        uint32_t num_fragments:3;
+
+                        /* dw 2 */
+                        uint32_t rss_flush:1;
+                        uint32_t pkt_type:2;
+                        uint32_t qnq:1;
+                        uint32_t rss_bank:1;
+                        uint32_t port:2;
+                        uint32_t vntagp:1;
+                        uint32_t hds_hdr_size:8;
+                        uint32_t hds_type:2;
+                        uint32_t rsvd2:13;
+                        uint32_t valid:1;
+
+                        /* dw 3 */
+                        uint32_t rss_hash_value;
+#endif
+                }s;     /* native mode(BE3) */
+                struct {
+#ifdef _BIG_ENDIAN
+                        /* dw 0 */
+                        uint32_t ip_options:1;
                         uint32_t port:1;
                         uint32_t pkt_size:14;
                         uint32_t vlan_tag:16;
 
                         /* dw 1 */

@@ -254,15 +338,13 @@
                         uint32_t rss_hp:1;
                         uint32_t error:1;
 
                         /* dw 2 */
                         uint32_t valid:1;
-                        uint32_t hds_type:2;
+                        uint32_t rsvd2:2;
                         uint32_t lro_pkt:1;
-                        uint32_t rsvd4:1;
-                        uint32_t hds_hdr_size:12;
-                        uint32_t hds_hdr_frag_index:10;
+                        uint32_t rsvd1:23;
                         uint32_t rss_bank:1;
                         uint32_t qnq:1;
                         uint32_t pkt_type:2;
                         uint32_t rss_flush:1;
 

@@ -294,20 +376,18 @@
                         /* dw 2 */
                         uint32_t rss_flush:1;
                         uint32_t pkt_type:2;
                         uint32_t qnq:1;
                         uint32_t rss_bank:1;
-                        uint32_t hds_hdr_frag_index:10;
-                        uint32_t hds_hdr_size:12;
-                        uint32_t rsvd4:1;
+                        uint32_t rsvd1:23;
                         uint32_t lro_pkt:1;
-                        uint32_t hds_type:2;
+                        uint32_t rsvd2:2;
                         uint32_t valid:1;
                         /* dw 3 */
                         uint32_t rss_hash_value;
 #endif
-                }s;
+                }v0;    /* Legacy(BE2) */
                 uint32_t dw[4];
         }u0;
 };
 #define RQ_CQE_VALID_MASK  0x80
 #define RQ_CQE_VALID(_cqe) (_cqe->u0.dw[2])

@@ -332,62 +412,80 @@
                         uint32_t rsvd0;
                 }rsp;
         }params;
 };
 
+struct oce_tx_ctx {
+#ifdef _BIG_ENDIAN
+        /* dw0 */
+        uint32_t rsvd0:12;
+        uint32_t wq_size:4;
+        uint32_t if_id:16;
+        /* dw1 */
+        uint32_t valid:1;
+        uint32_t pd_id:9;
+        uint32_t pci_function_id:8;
+        uint32_t rsvd1:14;
+        /* dw2 */
+        uint32_t rsvd2_1:1;
+        uint32_t no_rem_allowed:1;
+        uint32_t rsvd2:14;
+        uint32_t cq_id:16;
+        /* dw3 */
+        uint32_t rsvd3;
+        /* dw4 */
+        uint32_t rsvd4_1:10;
+        uint32_t cofe:1;
+        uint32_t rsvd4:21;
+#else
+        /* dw0 */
+        uint32_t if_id:16;
+        uint32_t wq_size:4;
+        uint32_t rsvd0:12;
+        /* dw1 */
+        uint32_t rsvd1:14;
+        uint32_t pci_function_id:8;
+        uint32_t pd_id:9;
+        uint32_t valid:1;
+        /* dw2 */
+        uint32_t cq_id:16;
+        uint32_t rsvd2:14;
+        uint32_t no_rem_allowed:1;
+        uint32_t rsvd2_1:1;
+        /*  dw3 */
+        uint32_t rsvd3;
+        /* dw4 */
+        uint32_t rsvd4:21;
+        uint32_t cofe:1;
+        uint32_t rsvd4_1:10;
+#endif
+        /* dw5 - dw15 */
+        uint32_t rsvd5[11];
+};
+
 /* [07] OPCODE_CREATE_NIC_WQ */
 struct mbx_create_nic_wq {
 
         /* dw0 - dw3 */
         struct mbx_hdr hdr;
         union {
                 struct {
 #ifdef _BIG_ENDIAN
                         /* dw4 */
-                        uint8_t rsvd1;
-                        uint8_t nic_wq_type;
-                        uint8_t rsvd0;
+                        uint8_t port;
+                        uint8_t type;
+                        uint8_t ulp_num;
                         uint8_t num_pages;
-
-                        /* dw5 */
-                        uint32_t rsvd3:12;
-                        uint32_t wq_size:4;
-                        uint32_t rsvd2:16;
-
-                        /* dw6 */
-                        uint32_t valid:1;
-                        uint32_t pd_id:9;
-                        uint32_t pci_function_id:8;
-                        uint32_t rsvd4:14;
-
-                        /* dw7 */
-                        uint32_t rsvd5:16;
-                        uint32_t cq_id:16;
 #else
                         /* dw4 */
                         uint8_t num_pages;
-                        uint8_t rsvd0;
-                        uint8_t nic_wq_type;
-                        uint8_t rsvd1;
-
-                        /* dw5 */
-                        uint32_t rsvd2:16;
-                        uint32_t wq_size:4;
-                        uint32_t rsvd3:12;
-
-                        /* dw6 */
-                        uint32_t rsvd4:14;
-                        uint32_t pci_function_id:8;
-                        uint32_t pd_id:9;
-                        uint32_t valid:1;
-
-                        /* dw7 */
-                        uint32_t cq_id:16;
-                        uint32_t rsvd5:16;
+                        uint8_t ulp_num;
+                        uint8_t type;
+                        uint8_t port;
 #endif
-                        /* dw8 - dw20 */
-                        uint32_t rsvd6[13];
+                        /* dw5 - dw20 */
+                        struct oce_tx_ctx ctx;
                         /* dw21 - dw36 */
                         struct phys_addr        pages[8];
                 }req;
 
                 struct {

@@ -489,11 +587,11 @@
                         uint32_t        rsvd0;
                 }rsp;
         }params;
 };
 
-struct rx_port_stats {
+struct rx_port_stats_v0 {
         uint32_t rx_bytes_lsd;
         uint32_t rx_bytes_msd;
         uint32_t rx_total_frames;
         uint32_t rx_unicast_frames;
         uint32_t rx_multicast_frames;

@@ -558,14 +656,87 @@
         uint32_t tx_8192_9216_byte_packets;
         uint32_t rx_fifo_overflow;
         uint32_t rx_input_fifo_overflow;
 };
 
-struct rx_stats {
-        /* dw 0-131 --2 X 66 */
-        struct rx_port_stats port[2];
-        /* dw 132-147 --16 */
+
+struct rx_port_stats_v1 {
+        uint32_t rx_bytes_lsd;
+        uint32_t rx_bytes_msd;
+        uint32_t rx_ipv4_bytes_lsd;
+        uint32_t rx_ipv4_bytes_msd;
+        uint32_t rx_ipv6_bytes_lsd;
+        uint32_t rx_ipv6_bytes_msd;
+        uint32_t tx_bytes_lsd;
+        uint32_t tx_bytes_msd;
+        uint32_t rx_total_frames;
+        uint32_t rx_non_switched_unicast_frames;
+        uint32_t rx_non_switched_multicast_frames;
+        uint32_t rx_non_switched_broadcast_frames;
+        uint32_t rx_crc_errors;
+        uint32_t rx_alignment_symbol_errors;
+        uint32_t rx_pause_frames;
+        uint32_t rx_priority_pause_frames;
+        uint32_t rx_control_frames;
+        uint32_t rx_in_range_errors;
+        uint32_t rx_out_range_errors;
+        uint32_t rx_frame_too_long;
+        uint32_t rx_address_match_errors;
+        uint32_t rx_dropped_too_small;
+        uint32_t rx_dropped_too_short;
+        uint32_t rx_dropped_header_too_small;
+        uint32_t rx_dropped_tcp_length;
+        uint32_t rx_dropped_runt;
+        uint32_t rx_64_byte_packets;
+        uint32_t rx_65_127_byte_packets;
+        uint32_t rx_128_256_byte_packets;
+        uint32_t rx_256_511_byte_packets;
+        uint32_t rx_512_1023_byte_packets;
+        uint32_t rx_1024_1518_byte_packets;
+        uint32_t rx_1519_2047_byte_packets;
+        uint32_t rx_2048_4095_byte_packets;
+        uint32_t rx_4096_8191_byte_packets;
+        uint32_t rx_8192_9216_byte_packets;
+        uint32_t rx_ip_checksum_errs;
+        uint32_t rx_tcp_checksum_errs;
+        uint32_t rx_udp_checksum_errs;
+        uint32_t rx_non_rss_packets;
+        uint32_t rx_ipv4_packets;
+        uint32_t rx_ipv6_packets;
+        uint32_t rx_chute1_packets;
+        uint32_t rx_chute2_packets;
+        uint32_t rx_chute3_packets;
+        uint32_t rx_management_packets;
+        uint32_t rx_switched_unicast_packets;
+        uint32_t rx_switched_multicast_packets;
+        uint32_t rx_switched_broadcast_packets;
+        uint32_t tx_unicast_frames;
+        uint32_t tx_multicast_frames;
+        uint32_t tx_broadcast_frames;
+        uint32_t tx_pause_frames;
+        uint32_t tx_priority_pause_frames;
+        uint32_t tx_control_frames;
+        uint32_t tx_64_byte_packets;
+        uint32_t tx_65_127_byte_packets;
+        uint32_t tx_128_256_byte_packets;
+        uint32_t tx_256_511_byte_packets;
+        uint32_t tx_512_1023_byte_packets;
+        uint32_t tx_1024_1518_byte_packets;
+        uint32_t tx_1519_2047_byte_packets;
+        uint32_t tx_2048_4095_byte_packets;
+        uint32_t tx_4096_8191_byte_packets;
+        uint32_t tx_8192_9216_byte_packets;
+        uint32_t rxpp_fifo_overflow_drop;
+        uint32_t rx_input_fifo_overflow_drop;
+        uint32_t pmem_fifo_overflow_drop;
+        uint32_t jabber_events;
+        uint32_t rsvd2[3];
+};
+
+
+struct rx_stats_v0 {
+        struct rx_port_stats_v0 port[2];
         uint32_t rx_drops_no_pbuf;
         uint32_t rx_drops_no_txpb;
         uint32_t rx_drops_no_erx_descr;
         uint32_t rx_drops_no_tpre_descr;
         uint32_t management_rx_port_packets;

@@ -578,14 +749,36 @@
         uint32_t management_rx_port_rxfifo_overflow;
         uint32_t rx_drops_too_many_frags;
         uint32_t rx_drops_invalid_ring;
         uint32_t forwarded_packets;
         uint32_t rx_drops_mtu;
-        /* fcoe is not relevent */
-        uint32_t rsvd[15];
+        uint32_t rsvd0[7];              /* fcoe is not relevent */
+        uint32_t port0_jabber_events;
+        uint32_t port1_jabber_events;
+        uint32_t rsvd1[6];
 };
 
+struct rx_stats_v1 {
+        struct rx_port_stats_v1 port[4];
+        uint32_t rsvd0[2];
+        uint32_t rx_drops_no_pbuf;
+        uint32_t rx_drops_no_txpb;
+        uint32_t rx_drops_no_erx_descr;
+        uint32_t rx_drops_no_tpre_descr;
+        uint32_t management_rx_port_packets;
+        uint32_t management_rx_port_pause_frames;
+        uint32_t management_rx_port_errors;
+        uint32_t management_tx_port_packets;
+        uint32_t management_tx_port_pause;
+        uint32_t management_rx_port_rxfifo_overflow;
+        uint32_t rx_drops_too_many_frags;
+        uint32_t rx_drops_invalid_ring;
+        uint32_t forwarded_packets;
+        uint32_t rx_drops_mtu;
+        uint32_t rsvd1[14];     /* fcoe is not relevent */
+};
+
 struct tx_counter {
         uint32_t pkts;
         uint32_t lsd;
         uint32_t msd;
 };

@@ -607,39 +800,253 @@
         struct tx_counter ct2pt1_xmt_ipv6_ctrs;
         struct tx_counter ct2pt1_rexmt_ipv4_ctrs;
         struct tx_counter ct2pt1_rexmt_ipv6_ctrs;
 };
 
-struct rx_err_stats {
+struct rx_err_stats_v0 {
         uint32_t rx_drops_no_fragments[44];
         uint32_t debug_wdma_sent_hold;
         uint32_t debug_wdma_pbfree_sent_hold;
         uint32_t debug_wdma_zerobyte_pbfree_sent_hold;
         uint32_t debug_pmem_pbuf_dealloc;
 };
 
+struct rx_err_stats_v1 {
+        uint32_t rx_drops_no_fragments[68];
+        uint32_t debug_wdma_sent_hold;
+        uint32_t debug_wdma_pbfree_sent_hold;
+        uint32_t debug_wdma_zerobyte_pbfree_sent_hold;
+        uint32_t debug_pmem_pbuf_dealloc;
+};
+
 struct mem_stats {
         uint32_t eth_red_drops;
         uint32_t lro_red_drops;
         uint32_t ulp0_red_drops;
         uint32_t ulp1_red_drops;
+        uint32_t rsvd;
+        uint32_t global_red_drops;
 };
 
+
+struct be_hw_stats_v0 {
+        struct rx_stats_v0 rx;
+        struct tx_stats tx;
+        struct rx_err_stats_v0 err_rx;
+        struct mem_stats mem;
+};
+
+struct be_hw_stats_v1 {
+        struct rx_stats_v1 rx;
+        struct tx_stats tx;
+        struct rx_err_stats_v1 err_rx;
+        struct mem_stats mem;
+        uint32_t rsvd1[18];
+};
+
+
 /* [04] OPCODE_GET_NIC_STATS */
 struct mbx_get_nic_stats {
         /* dw0 - dw3 */
         struct mbx_hdr hdr;
         union {
                 struct {
                         uint32_t rsvd0;
                 }req;
 
+                union {
+                        struct be_hw_stats_v0 v0;
+                        struct be_hw_stats_v1 v1;
+                }rsp;
+        }params;
+};
+
+/* Lancer Stats */
+struct lancer_cmd_pport_stats {
+        uint32_t tx_packets_lo;
+        uint32_t tx_packets_hi;
+        uint32_t tx_unicast_packets_lo;
+        uint32_t tx_unicast_packets_hi;
+        uint32_t tx_multicast_packets_lo;
+        uint32_t tx_multicast_packets_hi;
+        uint32_t tx_broadcast_packets_lo;
+        uint32_t tx_broadcast_packets_hi;
+        uint32_t tx_bytes_lo;
+        uint32_t tx_bytes_hi;
+        uint32_t tx_unicast_bytes_lo;
+        uint32_t tx_unicast_bytes_hi;
+        uint32_t tx_multicast_bytes_lo;
+        uint32_t tx_multicast_bytes_hi;
+        uint32_t tx_broadcast_bytes_lo;
+        uint32_t tx_broadcast_bytes_hi;
+        uint32_t tx_discards_lo;
+        uint32_t tx_discards_hi;
+        uint32_t tx_errors_lo;
+        uint32_t tx_errors_hi;
+        uint32_t tx_pause_frames_lo;
+        uint32_t tx_pause_frames_hi;
+        uint32_t tx_pause_on_frames_lo;
+        uint32_t tx_pause_on_frames_hi;
+        uint32_t tx_pause_off_frames_lo;
+        uint32_t tx_pause_off_frames_hi;
+        uint32_t tx_internal_mac_errors_lo;
+        uint32_t tx_internal_mac_errors_hi;
+        uint32_t tx_control_frames_lo;
+        uint32_t tx_control_frames_hi;
+        uint32_t tx_packets_64_bytes_lo;
+        uint32_t tx_packets_64_bytes_hi;
+        uint32_t tx_packets_65_to_127_bytes_lo;
+        uint32_t tx_packets_65_to_127_bytes_hi;
+        uint32_t tx_packets_128_to_255_bytes_lo;
+        uint32_t tx_packets_128_to_255_bytes_hi;
+        uint32_t tx_packets_256_to_511_bytes_lo;
+        uint32_t tx_packets_256_to_511_bytes_hi;
+        uint32_t tx_packets_512_to_1023_bytes_lo;
+        uint32_t tx_packets_512_to_1023_bytes_hi;
+        uint32_t tx_packets_1024_to_1518_bytes_lo;
+        uint32_t tx_packets_1024_to_1518_bytes_hi;
+        uint32_t tx_packets_1519_to_2047_bytes_lo;
+        uint32_t tx_packets_1519_to_2047_bytes_hi;
+        uint32_t tx_packets_2048_to_4095_bytes_lo;
+        uint32_t tx_packets_2048_to_4095_bytes_hi;
+        uint32_t tx_packets_4096_to_8191_bytes_lo;
+        uint32_t tx_packets_4096_to_8191_bytes_hi;
+        uint32_t tx_packets_8192_to_9216_bytes_lo;
+        uint32_t tx_packets_8192_to_9216_bytes_hi;
+        uint32_t tx_lso_packets_lo;
+        uint32_t tx_lso_packets_hi;
+        uint32_t rx_packets_lo;
+        uint32_t rx_packets_hi;
+        uint32_t rx_unicast_packets_lo;
+        uint32_t rx_unicast_packets_hi;
+        uint32_t rx_multicast_packets_lo;
+        uint32_t rx_multicast_packets_hi;
+        uint32_t rx_broadcast_packets_lo;
+        uint32_t rx_broadcast_packets_hi;
+        uint32_t rx_bytes_lo;
+        uint32_t rx_bytes_hi;
+        uint32_t rx_unicast_bytes_lo;
+        uint32_t rx_unicast_bytes_hi;
+        uint32_t rx_multicast_bytes_lo;
+        uint32_t rx_multicast_bytes_hi;
+        uint32_t rx_broadcast_bytes_lo;
+        uint32_t rx_broadcast_bytes_hi;
+        uint32_t rx_unknown_protos;
+        uint32_t rsvd_69;
+        uint32_t rx_discards_lo;
+        uint32_t rx_discards_hi;
+        uint32_t rx_errors_lo;
+        uint32_t rx_errors_hi;
+        uint32_t rx_crc_errors_lo;
+        uint32_t rx_crc_errors_hi;
+        uint32_t rx_alignment_errors_lo;
+        uint32_t rx_alignment_errors_hi;
+        uint32_t rx_symbol_errors_lo;
+        uint32_t rx_symbol_errors_hi;
+        uint32_t rx_pause_frames_lo;
+        uint32_t rx_pause_frames_hi;
+        uint32_t rx_pause_on_frames_lo;
+        uint32_t rx_pause_on_frames_hi;
+        uint32_t rx_pause_off_frames_lo;
+        uint32_t rx_pause_off_frames_hi;
+        uint32_t rx_frames_too_long_lo;
+        uint32_t rx_frames_too_long_hi;
+        uint32_t rx_internal_mac_errors_lo;
+        uint32_t rx_internal_mac_errors_hi;
+        uint32_t rx_undersize_packets;
+        uint32_t rx_oversize_packets;
+        uint32_t rx_fragment_packets;
+        uint32_t rx_jabbers;
+        uint32_t rx_control_frames_lo;
+        uint32_t rx_control_frames_hi;
+        uint32_t rx_control_frames_unknown_opcode_lo;
+        uint32_t rx_control_frames_unknown_opcode_hi;
+        uint32_t rx_in_range_errors;
+        uint32_t rx_out_of_range_errors;
+        uint32_t rx_address_match_errors;
+        uint32_t rx_vlan_mismatch_errors;
+        uint32_t rx_dropped_too_small;
+        uint32_t rx_dropped_too_short;
+        uint32_t rx_dropped_header_too_small;
+        uint32_t rx_dropped_invalid_tcp_length;
+        uint32_t rx_dropped_runt;
+        uint32_t rx_ip_checksum_errors;
+        uint32_t rx_tcp_checksum_errors;
+        uint32_t rx_udp_checksum_errors;
+        uint32_t rx_non_rss_packets;
+        uint32_t rsvd_111;
+        uint32_t rx_ipv4_packets_lo;
+        uint32_t rx_ipv4_packets_hi;
+        uint32_t rx_ipv6_packets_lo;
+        uint32_t rx_ipv6_packets_hi;
+        uint32_t rx_ipv4_bytes_lo;
+        uint32_t rx_ipv4_bytes_hi;
+        uint32_t rx_ipv6_bytes_lo;
+        uint32_t rx_ipv6_bytes_hi;
+        uint32_t rx_nic_packets_lo;
+        uint32_t rx_nic_packets_hi;
+        uint32_t rx_tcp_packets_lo;
+        uint32_t rx_tcp_packets_hi;
+        uint32_t rx_iscsi_packets_lo;
+        uint32_t rx_iscsi_packets_hi;
+        uint32_t rx_management_packets_lo;
+        uint32_t rx_management_packets_hi;
+        uint32_t rx_switched_unicast_packets_lo;
+        uint32_t rx_switched_unicast_packets_hi;
+        uint32_t rx_switched_multicast_packets_lo;
+        uint32_t rx_switched_multicast_packets_hi;
+        uint32_t rx_switched_broadcast_packets_lo;
+        uint32_t rx_switched_broadcast_packets_hi;
+        uint32_t num_forwards_lo;
+        uint32_t num_forwards_hi;
+        uint32_t rx_fifo_overflow;
+        uint32_t rx_input_fifo_overflow;
+        uint32_t rx_drops_too_many_frags_lo;
+        uint32_t rx_drops_too_many_frags_hi;
+        uint32_t rx_drops_invalid_queue;
+        uint32_t rsvd_141;
+        uint32_t rx_drops_mtu_lo;
+        uint32_t rx_drops_mtu_hi;
+        uint32_t rx_packets_64_bytes_lo;
+        uint32_t rx_packets_64_bytes_hi;
+        uint32_t rx_packets_65_to_127_bytes_lo;
+        uint32_t rx_packets_65_to_127_bytes_hi;
+        uint32_t rx_packets_128_to_255_bytes_lo;
+        uint32_t rx_packets_128_to_255_bytes_hi;
+        uint32_t rx_packets_256_to_511_bytes_lo;
+        uint32_t rx_packets_256_to_511_bytes_hi;
+        uint32_t rx_packets_512_to_1023_bytes_lo;
+        uint32_t rx_packets_512_to_1023_bytes_hi;
+        uint32_t rx_packets_1024_to_1518_bytes_lo;
+        uint32_t rx_packets_1024_to_1518_bytes_hi;
+        uint32_t rx_packets_1519_to_2047_bytes_lo;
+        uint32_t rx_packets_1519_to_2047_bytes_hi;
+        uint32_t rx_packets_2048_to_4095_bytes_lo;
+        uint32_t rx_packets_2048_to_4095_bytes_hi;
+        uint32_t rx_packets_4096_to_8191_bytes_lo;
+        uint32_t rx_packets_4096_to_8191_bytes_hi;
+        uint32_t rx_packets_8192_to_9216_bytes_lo;
+        uint32_t rx_packets_8192_to_9216_bytes_hi;
+};
+
+struct pport_stats_params {
+        uint16_t pport_num;
+        uint8_t rsvd;
+        uint8_t reset_stats;
+};
+
+/* [18] OPCODE_NIC_GET_PPORT_STATS */
+struct mbx_get_pport_stats {
+        /* dw0 - dw3 */
+        struct mbx_hdr hdr;
+        union {
                 struct {
-                        struct rx_stats rx;
-                        struct tx_stats tx;
-                        struct rx_err_stats err_rx;
-                        struct mem_stats mem;
+                        struct pport_stats_params arg;
+                }req;
+
+                struct {
+                        struct lancer_cmd_pport_stats pport_stats;
                 }rsp;
         }params;
 };
 
 /* [01] OPCODE_CONFIG_NIC_RSS */