ethdev: reset all when releasing a port
[dpdk.git] / drivers / net / axgbe / axgbe_ethdev.h
index a1083b1..35a8476 100644 (file)
@@ -9,6 +9,7 @@
 #include <rte_mempool.h>
 #include <rte_lcore.h>
 #include "axgbe_common.h"
+#include "rte_time.h"
 
 #define IRQ                            0xff
 #define VLAN_HLEN                      4
@@ -16,7 +17,8 @@
 #define AXGBE_TX_MAX_BUF_SIZE          (0x3fff & ~(64 - 1))
 #define AXGBE_RX_MAX_BUF_SIZE          (0x3fff & ~(64 - 1))
 #define AXGBE_RX_MIN_BUF_SIZE          (RTE_ETHER_MAX_LEN + VLAN_HLEN)
-#define AXGBE_MAX_MAC_ADDRS            1
+#define AXGBE_MAX_MAC_ADDRS            32
+#define AXGBE_MAX_HASH_MAC_ADDRS       256
 
 #define AXGBE_RX_BUF_ALIGN             64
 
 #define AXGBE_V2_DMA_CLOCK_FREQ                500000000
 #define AXGBE_V2_PTP_CLOCK_FREQ                125000000
 
+/* Timestamp support - values based on 50MHz PTP clock
+ *   50MHz => 20 nsec
+ */
+#define AXGBE_TSTAMP_SSINC       20
+#define AXGBE_TSTAMP_SNSINC      0
+#define AXGBE_CYCLECOUNTER_MASK 0xffffffffffffffffULL
+
 #define AXGMAC_FIFO_MIN_ALLOC          2048
 #define AXGMAC_FIFO_UNIT               256
 #define AXGMAC_FIFO_ALIGN(_x)                            \
@@ -83,7 +92,7 @@
        (((_x) < 1024) ? 0 : ((_x) / AXGMAC_FLOW_CONTROL_UNIT) - 2)
 #define AXGMAC_FLOW_CONTROL_MAX                33280
 
-/* Maximum MAC address hash table size (256 bits = 8 bytes) */
+/* Maximum MAC address hash table size (256 bits = 8 dword) */
 #define AXGBE_MAC_HASH_TABLE_SIZE      8
 
 /* Receive Side Scaling */
@@ -485,6 +494,16 @@ struct axgbe_mmc_stats {
        uint64_t rxwatchdogerror;
 };
 
+/* Flow control parameters */
+struct xgbe_fc_info {
+       uint32_t high_water[AXGBE_PRIORITY_QUEUES];
+       uint32_t low_water[AXGBE_PRIORITY_QUEUES];
+       uint16_t pause_time[AXGBE_PRIORITY_QUEUES];
+       uint16_t send_xon;
+       enum rte_eth_fc_mode mode;
+       uint8_t autoneg;
+};
+
 /*
  * Structure to store private data for each port.
  */
@@ -511,7 +530,7 @@ struct axgbe_port {
        unsigned int xpcs_window_mask;
 
        /* Flags representing axgbe_state */
-       unsigned long dev_state;
+       uint32_t dev_state;
 
        struct axgbe_hw_if hw_if;
        struct axgbe_phy_if phy_if;
@@ -576,12 +595,14 @@ struct axgbe_port {
        unsigned int rx_rfa[AXGBE_MAX_QUEUES];
        unsigned int rx_rfd[AXGBE_MAX_QUEUES];
        unsigned int fifo;
+       unsigned int pfc_map[AXGBE_MAX_QUEUES];
 
        /* Receive Side Scaling settings */
        u8 rss_key[AXGBE_RSS_HASH_KEY_SIZE];
        uint32_t rss_table[AXGBE_RSS_MAX_TABLE_SIZE];
        uint32_t rss_options;
        int rss_enable;
+       uint64_t rss_hf;
 
        /* Hardware features of the device */
        struct axgbe_hw_features hw_feat;
@@ -625,11 +646,29 @@ struct axgbe_port {
        uint32_t rx_csum_enable;
 
        struct axgbe_mmc_stats mmc_stats;
+       struct xgbe_fc_info fc;
+
+       /* Hash filtering */
+       unsigned int hash_table_shift;
+       unsigned int hash_table_count;
+       unsigned int uc_hash_mac_addr;
+       unsigned int uc_hash_table[AXGBE_MAC_HASH_TABLE_SIZE];
+
+       /* For IEEE1588 PTP */
+       struct rte_timecounter systime_tc;
+       struct rte_timecounter tx_tstamp;
+       unsigned int tstamp_addend;
+
 };
 
 void axgbe_init_function_ptrs_dev(struct axgbe_hw_if *hw_if);
 void axgbe_init_function_ptrs_phy(struct axgbe_phy_if *phy_if);
 void axgbe_init_function_ptrs_phy_v2(struct axgbe_phy_if *phy_if);
 void axgbe_init_function_ptrs_i2c(struct axgbe_i2c_if *i2c_if);
+void axgbe_set_mac_addn_addr(struct axgbe_port *pdata, u8 *addr,
+                            uint32_t index);
+void axgbe_set_mac_hash_table(struct axgbe_port *pdata, u8 *addr, bool add);
+int axgbe_write_rss_lookup_table(struct axgbe_port *pdata);
+int axgbe_write_rss_hash_key(struct axgbe_port *pdata);
 
 #endif /* RTE_ETH_AXGBE_H_ */