net: thunderx: Support for upto 96 queues for a VF
[deliverable/linux.git] / drivers / net / ethernet / cavium / thunder / nic.h
index dda8a02b7322d63197d583ab1c107226ea913051..35b2ee1bc07edf645fb1952c8441a7c0080e856d 100644 (file)
  */
 #define NICPF_CLK_PER_INT_TICK         2
 
+/* Time to wait before we decide that a SQ is stuck.
+ *
+ * Since both pkt rx and tx notifications are done with same CQ,
+ * when packets are being received at very high rate (eg: L2 forwarding)
+ * then freeing transmitted skbs will be delayed and watchdog
+ * will kick in, resetting interface. Hence keeping this value high.
+ */
+#define        NICVF_TX_TIMEOUT                (50 * HZ)
+
 struct nicvf_cq_poll {
+       struct  nicvf *nicvf;
        u8      cq_idx;         /* Completion queue index */
        struct  napi_struct napi;
 };
@@ -181,10 +191,10 @@ enum tx_stats_reg_offset {
 };
 
 struct nicvf_hw_stats {
-       u64 rx_bytes_ok;
-       u64 rx_ucast_frames_ok;
-       u64 rx_bcast_frames_ok;
-       u64 rx_mcast_frames_ok;
+       u64 rx_bytes;
+       u64 rx_ucast_frames;
+       u64 rx_bcast_frames;
+       u64 rx_mcast_frames;
        u64 rx_fcs_errors;
        u64 rx_l2_errors;
        u64 rx_drop_red;
@@ -195,6 +205,31 @@ struct nicvf_hw_stats {
        u64 rx_drop_mcast;
        u64 rx_drop_l3_bcast;
        u64 rx_drop_l3_mcast;
+       u64 rx_bgx_truncated_pkts;
+       u64 rx_jabber_errs;
+       u64 rx_fcs_errs;
+       u64 rx_bgx_errs;
+       u64 rx_prel2_errs;
+       u64 rx_l2_hdr_malformed;
+       u64 rx_oversize;
+       u64 rx_undersize;
+       u64 rx_l2_len_mismatch;
+       u64 rx_l2_pclp;
+       u64 rx_ip_ver_errs;
+       u64 rx_ip_csum_errs;
+       u64 rx_ip_hdr_malformed;
+       u64 rx_ip_payload_malformed;
+       u64 rx_ip_ttl_errs;
+       u64 rx_l3_pclp;
+       u64 rx_l4_malformed;
+       u64 rx_l4_csum_errs;
+       u64 rx_udp_len_errs;
+       u64 rx_l4_port_errs;
+       u64 rx_tcp_flag_errs;
+       u64 rx_tcp_offset_errs;
+       u64 rx_l4_pclp;
+       u64 rx_truncated_pkts;
+
        u64 tx_bytes_ok;
        u64 tx_ucast_frames_ok;
        u64 tx_bcast_frames_ok;
@@ -213,21 +248,33 @@ struct nicvf_drv_stats {
        u64 rx_frames_1518;
        u64 rx_frames_jumbo;
        u64 rx_drops;
+
        /* Tx */
        u64 tx_frames_ok;
        u64 tx_drops;
-       u64 tx_busy;
        u64 tx_tso;
+       u64 txq_stop;
+       u64 txq_wake;
 };
 
 struct nicvf {
+       struct nicvf            *pnicvf;
        struct net_device       *netdev;
        struct pci_dev          *pdev;
        u8                      vf_id;
        u8                      node;
-       u8                      tns_mode;
+       u8                      tns_mode:1;
+       u8                      sqs_mode:1;
        u16                     mtu;
        struct queue_set        *qs;
+#define        MAX_SQS_PER_VF_SINGLE_NODE              5
+#define        MAX_SQS_PER_VF                          11
+       u8                      sqs_id;
+       u8                      sqs_count; /* Secondary Qset count */
+       struct nicvf            *snicvf[MAX_SQS_PER_VF];
+       u8                      rx_queues;
+       u8                      tx_queues;
+       u8                      max_queues;
        void __iomem            *reg_base;
        bool                    link_up;
        u8                      duplex;
@@ -247,7 +294,7 @@ struct nicvf {
        u32                     cq_coalesce_usecs;
 
        u32                     msg_enable;
-       struct nicvf_hw_stats   stats;
+       struct nicvf_hw_stats   hw_stats;
        struct nicvf_drv_stats  drv_stats;
        struct bgx_stats        bgx_stats;
        struct work_struct      reset_task;
@@ -259,10 +306,9 @@ struct nicvf {
        char                    irq_name[NIC_VF_MSIX_VECTORS][20];
        bool                    irq_allocated[NIC_VF_MSIX_VECTORS];
 
-       bool                    pf_ready_to_rcv_msg;
+       /* VF <-> PF mailbox communication */
        bool                    pf_acked;
        bool                    pf_nacked;
-       bool                    bgx_stats_acked;
        bool                    set_mac_pending;
 } ____cacheline_aligned_in_smp;
 
@@ -294,14 +340,19 @@ struct nicvf {
 #define        NIC_MBOX_MSG_RQ_SW_SYNC         0x0F    /* Flush inflight pkts to RQ */
 #define        NIC_MBOX_MSG_BGX_STATS          0x10    /* Get stats from BGX */
 #define        NIC_MBOX_MSG_BGX_LINK_CHANGE    0x11    /* BGX:LMAC link status */
-#define NIC_MBOX_MSG_CFG_DONE          0x12    /* VF configuration done */
-#define NIC_MBOX_MSG_SHUTDOWN          0x13    /* VF is being shutdown */
+#define        NIC_MBOX_MSG_ALLOC_SQS          0x12    /* Allocate secondary Qset */
+#define        NIC_MBOX_MSG_NICVF_PTR          0x13    /* Send nicvf ptr to PF */
+#define        NIC_MBOX_MSG_PNICVF_PTR         0x14    /* Get primary qset nicvf ptr */
+#define        NIC_MBOX_MSG_SNICVF_PTR         0x15    /* Send sqet nicvf ptr to PVF */
+#define        NIC_MBOX_MSG_CFG_DONE           0xF0    /* VF configuration done */
+#define        NIC_MBOX_MSG_SHUTDOWN           0xF1    /* VF is being shutdown */
 
 struct nic_cfg_msg {
        u8    msg;
        u8    vf_id;
-       u8    tns_mode;
        u8    node_id;
+       u8    tns_mode:1;
+       u8    sqs_mode:1;
        u8    mac_addr[ETH_ALEN];
 };
 
@@ -309,6 +360,7 @@ struct nic_cfg_msg {
 struct qs_cfg_msg {
        u8    msg;
        u8    num;
+       u8    sqs_count;
        u64   cfg;
 };
 
@@ -325,6 +377,7 @@ struct sq_cfg_msg {
        u8    msg;
        u8    qs_num;
        u8    sq_num;
+       bool  sqs_mode;
        u64   cfg;
 };
 
@@ -384,6 +437,21 @@ struct bgx_link_status {
        u32   speed;
 };
 
+/* Get Extra Qset IDs */
+struct sqs_alloc {
+       u8    msg;
+       u8    vf_id;
+       u8    qs_count;
+};
+
+struct nicvf_ptr {
+       u8    msg;
+       u8    vf_id;
+       bool  sqs_mode;
+       u8    sqs_id;
+       u64   nicvf;
+};
+
 /* 128 bit shared memory between PF and each VF */
 union nic_mbx {
        struct { u8 msg; }      msg;
@@ -398,6 +466,8 @@ union nic_mbx {
        struct rss_cfg_msg      rss_cfg;
        struct bgx_stats_msg    bgx_stats;
        struct bgx_link_status  link_status;
+       struct sqs_alloc        sqs_alloc;
+       struct nicvf_ptr        nicvf;
 };
 
 #define NIC_NODE_ID_MASK       0x03
This page took 0.029311 seconds and 5 git commands to generate.