ixgbe: prefix global function
[dpdk.git] / lib / librte_pmd_e1000 / e1000 / e1000_hw.h
index 64e7dc2..4dd92a3 100644 (file)
@@ -1,6 +1,6 @@
 /*******************************************************************************
 
-Copyright (c) 2001-2012, Intel Corporation
+Copyright (c) 2001-2014, Intel Corporation
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
@@ -122,65 +122,74 @@ struct e1000_hw;
 #define E1000_DEV_ID_ICH10_D_BM_LM             0x10DE
 #define E1000_DEV_ID_ICH10_D_BM_LF             0x10DF
 #define E1000_DEV_ID_ICH10_D_BM_V              0x1525
-
 #define E1000_DEV_ID_PCH_M_HV_LM               0x10EA
 #define E1000_DEV_ID_PCH_M_HV_LC               0x10EB
 #define E1000_DEV_ID_PCH_D_HV_DM               0x10EF
 #define E1000_DEV_ID_PCH_D_HV_DC               0x10F0
 #define E1000_DEV_ID_PCH2_LV_LM                        0x1502
 #define E1000_DEV_ID_PCH2_LV_V                 0x1503
-#define E1000_DEV_ID_82576                    0x10C9
-#define E1000_DEV_ID_82576_FIBER              0x10E6
-#define E1000_DEV_ID_82576_SERDES             0x10E7
-#define E1000_DEV_ID_82576_QUAD_COPPER        0x10E8
-#define E1000_DEV_ID_82576_QUAD_COPPER_ET2    0x1526
-#define E1000_DEV_ID_82576_NS                 0x150A
-#define E1000_DEV_ID_82576_NS_SERDES          0x1518
-#define E1000_DEV_ID_82576_SERDES_QUAD        0x150D
-#define E1000_DEV_ID_82576_VF                 0x10CA
+#define E1000_DEV_ID_PCH_LPT_I217_LM           0x153A
+#define E1000_DEV_ID_PCH_LPT_I217_V            0x153B
+#define E1000_DEV_ID_PCH_LPTLP_I218_LM         0x155A
+#define E1000_DEV_ID_PCH_LPTLP_I218_V          0x1559
+#define E1000_DEV_ID_82576                     0x10C9
+#define E1000_DEV_ID_82576_FIBER               0x10E6
+#define E1000_DEV_ID_82576_SERDES              0x10E7
+#define E1000_DEV_ID_82576_QUAD_COPPER         0x10E8
+#define E1000_DEV_ID_82576_QUAD_COPPER_ET2     0x1526
+#define E1000_DEV_ID_82576_NS                  0x150A
+#define E1000_DEV_ID_82576_NS_SERDES           0x1518
+#define E1000_DEV_ID_82576_SERDES_QUAD         0x150D
+#define E1000_DEV_ID_82576_VF                  0x10CA
 #define E1000_DEV_ID_82576_VF_HV               0x152D
-#define E1000_DEV_ID_I350_VF                  0x1520
+#define E1000_DEV_ID_I350_VF                   0x1520
 #define E1000_DEV_ID_I350_VF_HV                        0x152F
-#define E1000_DEV_ID_82575EB_COPPER           0x10A7
-#define E1000_DEV_ID_82575EB_FIBER_SERDES     0x10A9
-#define E1000_DEV_ID_82575GB_QUAD_COPPER      0x10D6
-#define E1000_DEV_ID_82580_COPPER             0x150E
-#define E1000_DEV_ID_82580_FIBER              0x150F
-#define E1000_DEV_ID_82580_SERDES             0x1510
-#define E1000_DEV_ID_82580_SGMII              0x1511
-#define E1000_DEV_ID_82580_COPPER_DUAL        0x1516
-#define E1000_DEV_ID_82580_QUAD_FIBER         0x1527
-#define E1000_DEV_ID_I350_COPPER              0x1521
-#define E1000_DEV_ID_I350_FIBER               0x1522
-#define E1000_DEV_ID_I350_SERDES              0x1523
-#define E1000_DEV_ID_I350_SGMII               0x1524
-#define E1000_DEV_ID_I350_DA4                 0x1546
+#define E1000_DEV_ID_82575EB_COPPER            0x10A7
+#define E1000_DEV_ID_82575EB_FIBER_SERDES      0x10A9
+#define E1000_DEV_ID_82575GB_QUAD_COPPER       0x10D6
+#define E1000_DEV_ID_82580_COPPER              0x150E
+#define E1000_DEV_ID_82580_FIBER               0x150F
+#define E1000_DEV_ID_82580_SERDES              0x1510
+#define E1000_DEV_ID_82580_SGMII               0x1511
+#define E1000_DEV_ID_82580_COPPER_DUAL         0x1516
+#define E1000_DEV_ID_82580_QUAD_FIBER          0x1527
+#define E1000_DEV_ID_I350_COPPER               0x1521
+#define E1000_DEV_ID_I350_FIBER                        0x1522
+#define E1000_DEV_ID_I350_SERDES               0x1523
+#define E1000_DEV_ID_I350_SGMII                        0x1524
+#define E1000_DEV_ID_I350_DA4                  0x1546
 #define E1000_DEV_ID_I210_COPPER               0x1533
 #define E1000_DEV_ID_I210_COPPER_OEM1          0x1534
 #define E1000_DEV_ID_I210_COPPER_IT            0x1535
 #define E1000_DEV_ID_I210_FIBER                        0x1536
 #define E1000_DEV_ID_I210_SERDES               0x1537
 #define E1000_DEV_ID_I210_SGMII                        0x1538
+#define E1000_DEV_ID_I210_COPPER_FLASHLESS     0x157B
+#define E1000_DEV_ID_I210_SERDES_FLASHLESS     0x157C
 #define E1000_DEV_ID_I211_COPPER               0x1539
-#define E1000_DEV_ID_DH89XXCC_SGMII           0x0438
-#define E1000_DEV_ID_DH89XXCC_SERDES          0x043A
-#define E1000_DEV_ID_DH89XXCC_BACKPLANE       0x043C
-#define E1000_DEV_ID_DH89XXCC_SFP             0x0440
-#define E1000_REVISION_0 0
-#define E1000_REVISION_1 1
-#define E1000_REVISION_2 2
-#define E1000_REVISION_3 3
-#define E1000_REVISION_4 4
-
-#define E1000_FUNC_0     0
-#define E1000_FUNC_1     1
-#define E1000_FUNC_2     2
-#define E1000_FUNC_3     3
-
-#define E1000_ALT_MAC_ADDRESS_OFFSET_LAN0   0
-#define E1000_ALT_MAC_ADDRESS_OFFSET_LAN1   3
-#define E1000_ALT_MAC_ADDRESS_OFFSET_LAN2   6
-#define E1000_ALT_MAC_ADDRESS_OFFSET_LAN3   9
+#define E1000_DEV_ID_I354_BACKPLANE_1GBPS      0x1F40
+#define E1000_DEV_ID_I354_SGMII                        0x1F41
+#define E1000_DEV_ID_I354_BACKPLANE_2_5GBPS    0x1F45
+#define E1000_DEV_ID_DH89XXCC_SGMII            0x0438
+#define E1000_DEV_ID_DH89XXCC_SERDES           0x043A
+#define E1000_DEV_ID_DH89XXCC_BACKPLANE                0x043C
+#define E1000_DEV_ID_DH89XXCC_SFP              0x0440
+
+#define E1000_REVISION_0       0
+#define E1000_REVISION_1       1
+#define E1000_REVISION_2       2
+#define E1000_REVISION_3       3
+#define E1000_REVISION_4       4
+
+#define E1000_FUNC_0           0
+#define E1000_FUNC_1           1
+#define E1000_FUNC_2           2
+#define E1000_FUNC_3           3
+
+#define E1000_ALT_MAC_ADDRESS_OFFSET_LAN0      0
+#define E1000_ALT_MAC_ADDRESS_OFFSET_LAN1      3
+#define E1000_ALT_MAC_ADDRESS_OFFSET_LAN2      6
+#define E1000_ALT_MAC_ADDRESS_OFFSET_LAN3      9
 
 enum e1000_mac_type {
        e1000_undefined = 0,
@@ -207,10 +216,12 @@ enum e1000_mac_type {
        e1000_ich10lan,
        e1000_pchlan,
        e1000_pch2lan,
+       e1000_pch_lpt,
        e1000_82575,
        e1000_82576,
        e1000_82580,
        e1000_i350,
+       e1000_i354,
        e1000_i210,
        e1000_i211,
        e1000_vfadapt,
@@ -232,6 +243,7 @@ enum e1000_nvm_type {
        e1000_nvm_eeprom_spi,
        e1000_nvm_eeprom_microwire,
        e1000_nvm_flash_hw,
+       e1000_nvm_invm,
        e1000_nvm_flash_sw
 };
 
@@ -353,9 +365,9 @@ enum e1000_serdes_link_state {
 struct e1000_rx_desc {
        __le64 buffer_addr; /* Address of the descriptor's data buffer */
        __le16 length;      /* Length of data DMAed into data buffer */
-       __le16 csum;        /* Packet checksum */
-       u8  status;         /* Descriptor status */
-       u8  errors;         /* Descriptor Errors */
+       __le16 csum; /* Packet checksum */
+       u8  status;  /* Descriptor status */
+       u8  errors;  /* Descriptor Errors */
        __le16 special;
 };
 
@@ -367,9 +379,9 @@ union e1000_rx_desc_extended {
        } read;
        struct {
                struct {
-                       __le32 mrq;           /* Multiple Rx Queues */
+                       __le32 mrq; /* Multiple Rx Queues */
                        union {
-                               __le32 rss;         /* RSS Hash */
+                               __le32 rss; /* RSS Hash */
                                struct {
                                        __le16 ip_id;  /* IP id */
                                        __le16 csum;   /* Packet Checksum */
@@ -379,12 +391,16 @@ union e1000_rx_desc_extended {
                struct {
                        __le32 status_error;  /* ext status/error */
                        __le16 length;
-                       __le16 vlan;          /* VLAN tag */
+                       __le16 vlan; /* VLAN tag */
                } upper;
        } wb;  /* writeback */
 };
 
 #define MAX_PS_BUFFERS 4
+
+/* Number of packet split data buffers (not including the header buffer) */
+#define PS_PAGE_BUFFERS        (MAX_PS_BUFFERS - 1)
+
 /* Receive Descriptor - Packet Split */
 union e1000_rx_desc_packet_split {
        struct {
@@ -393,9 +409,9 @@ union e1000_rx_desc_packet_split {
        } read;
        struct {
                struct {
-                       __le32 mrq;           /* Multiple Rx Queues */
+                       __le32 mrq;  /* Multiple Rx Queues */
                        union {
-                               __le32 rss;           /* RSS Hash */
+                               __le32 rss; /* RSS Hash */
                                struct {
                                        __le16 ip_id;    /* IP id */
                                        __le16 csum;     /* Packet Checksum */
@@ -404,12 +420,13 @@ union e1000_rx_desc_packet_split {
                } lower;
                struct {
                        __le32 status_error;  /* ext status/error */
-                       __le16 length0;       /* length of buffer 0 */
-                       __le16 vlan;          /* VLAN tag */
+                       __le16 length0;  /* length of buffer 0 */
+                       __le16 vlan;  /* VLAN tag */
                } middle;
                struct {
                        __le16 header_status;
-                       __le16 length[3];     /* length of buffers 1-3 */
+                       /* length of buffers 1-3 */
+                       __le16 length[PS_PAGE_BUFFERS];
                } upper;
                __le64 reserved;
        } wb; /* writeback */
@@ -421,16 +438,16 @@ struct e1000_tx_desc {
        union {
                __le32 data;
                struct {
-                       __le16 length;    /* Data buffer length */
-                       u8 cso;           /* Checksum offset */
-                       u8 cmd;           /* Descriptor control */
+                       __le16 length;  /* Data buffer length */
+                       u8 cso;  /* Checksum offset */
+                       u8 cmd;  /* Descriptor control */
                } flags;
        } lower;
        union {
                __le32 data;
                struct {
-                       u8 status;        /* Descriptor status */
-                       u8 css;           /* Checksum start */
+                       u8 status; /* Descriptor status */
+                       u8 css;  /* Checksum start */
                        __le16 special;
                } fields;
        } upper;
@@ -441,37 +458,37 @@ struct e1000_context_desc {
        union {
                __le32 ip_config;
                struct {
-                       u8 ipcss;         /* IP checksum start */
-                       u8 ipcso;         /* IP checksum offset */
-                       __le16 ipcse;     /* IP checksum end */
+                       u8 ipcss;  /* IP checksum start */
+                       u8 ipcso;  /* IP checksum offset */
+                       __le16 ipcse;  /* IP checksum end */
                } ip_fields;
        } lower_setup;
        union {
                __le32 tcp_config;
                struct {
-                       u8 tucss;         /* TCP checksum start */
-                       u8 tucso;         /* TCP checksum offset */
-                       __le16 tucse;     /* TCP checksum end */
+                       u8 tucss;  /* TCP checksum start */
+                       u8 tucso;  /* TCP checksum offset */
+                       __le16 tucse;  /* TCP checksum end */
                } tcp_fields;
        } upper_setup;
        __le32 cmd_and_length;
        union {
                __le32 data;
                struct {
-                       u8 status;        /* Descriptor status */
-                       u8 hdr_len;       /* Header length */
-                       __le16 mss;       /* Maximum segment size */
+                       u8 status;  /* Descriptor status */
+                       u8 hdr_len;  /* Header length */
+                       __le16 mss;  /* Maximum segment size */
                } fields;
        } tcp_seg_setup;
 };
 
 /* Offload data descriptor */
 struct e1000_data_desc {
-       __le64 buffer_addr;   /* Address of the descriptor's buffer address */
+       __le64 buffer_addr;  /* Address of the descriptor's buffer address */
        union {
                __le32 data;
                struct {
-                       __le16 length;    /* Data buffer length */
+                       __le16 length;  /* Data buffer length */
                        u8 typ_len_ext;
                        u8 cmd;
                } flags;
@@ -479,8 +496,8 @@ struct e1000_data_desc {
        union {
                __le32 data;
                struct {
-                       u8 status;        /* Descriptor status */
-                       u8 popts;         /* Packet Options */
+                       u8 status;  /* Descriptor status */
+                       u8 popts;  /* Packet Options */
                        __le16 special;
                } fields;
        } upper;
@@ -626,7 +643,7 @@ struct e1000_host_command_header {
        u8 checksum;
 };
 
-#define E1000_HI_MAX_DATA_LENGTH     252
+#define E1000_HI_MAX_DATA_LENGTH       252
 struct e1000_host_command_info {
        struct e1000_host_command_header command_header;
        u8 command_data[E1000_HI_MAX_DATA_LENGTH];
@@ -641,7 +658,7 @@ struct e1000_host_mng_command_header {
        u16 command_length;
 };
 
-#define E1000_HI_MAX_MNG_DATA_LENGTH 0x6F8
+#define E1000_HI_MAX_MNG_DATA_LENGTH   0x6F8
 struct e1000_host_mng_command_info {
        struct e1000_host_mng_command_header command_header;
        u8 command_data[E1000_HI_MAX_MNG_DATA_LENGTH];
@@ -653,13 +670,13 @@ struct e1000_host_mng_command_info {
 #include "e1000_manage.h"
 #include "e1000_mbx.h"
 
+/* Function pointers for the MAC. */
 struct e1000_mac_operations {
-       /* Function pointers for the MAC. */
        s32  (*init_params)(struct e1000_hw *);
        s32  (*id_led_init)(struct e1000_hw *);
        s32  (*blink_led)(struct e1000_hw *);
+       bool (*check_mng_mode)(struct e1000_hw *);
        s32  (*check_for_link)(struct e1000_hw *);
-       bool (*check_mng_mode)(struct e1000_hw *hw);
        s32  (*cleanup_led)(struct e1000_hw *);
        void (*clear_hw_cntrs)(struct e1000_hw *);
        void (*clear_vfta)(struct e1000_hw *);
@@ -681,17 +698,11 @@ struct e1000_mac_operations {
        void (*rar_set)(struct e1000_hw *, u8*, u32);
        s32  (*read_mac_addr)(struct e1000_hw *);
        s32  (*validate_mdi_setting)(struct e1000_hw *);
-       s32  (*mng_host_if_write)(struct e1000_hw *, u8*, u16, u16, u8*);
-       s32  (*mng_write_cmd_header)(struct e1000_hw *hw,
-                      struct e1000_host_mng_command_header*);
-       s32  (*mng_enable_host_if)(struct e1000_hw *);
-       s32  (*wait_autoneg)(struct e1000_hw *);
        s32  (*acquire_swfw_sync)(struct e1000_hw *, u16);
        void (*release_swfw_sync)(struct e1000_hw *, u16);
 };
 
-/*
- * When to use various PHY register access functions:
+/* When to use various PHY register access functions:
  *
  *                 Func   Caller
  *   Function      Does   Does    When to use
@@ -733,6 +744,7 @@ struct e1000_phy_operations {
        s32 (*write_i2c_byte)(struct e1000_hw *, u8, u8, u8);
 };
 
+/* Function pointers for the NVM. */
 struct e1000_nvm_operations {
        s32  (*init_params)(struct e1000_hw *);
        s32  (*acquire)(struct e1000_hw *);
@@ -847,14 +859,14 @@ struct e1000_bus_info {
 };
 
 struct e1000_fc_info {
-       u32 high_water;          /* Flow control high-water mark */
-       u32 low_water;           /* Flow control low-water mark */
-       u16 pause_time;          /* Flow control pause timer */
-       u16 refresh_time;        /* Flow control refresh timer */
-       bool send_xon;           /* Flow control send XON */
-       bool strict_ieee;        /* Strict IEEE mode */
-       enum e1000_fc_mode current_mode; /* FC mode in effect */
-       enum e1000_fc_mode requested_mode; /* FC mode requested by caller */
+       u32 high_water;  /* Flow control high-water mark */
+       u32 low_water;  /* Flow control low-water mark */
+       u16 pause_time;  /* Flow control pause timer */
+       u16 refresh_time;  /* Flow control refresh timer */
+       bool send_xon;  /* Flow control send XON */
+       bool strict_ieee;  /* Strict IEEE mode */
+       enum e1000_fc_mode current_mode;  /* FC mode in effect */
+       enum e1000_fc_mode requested_mode;  /* FC mode requested by caller */
 };
 
 struct e1000_mbx_operations {
@@ -917,8 +929,17 @@ struct e1000_shadow_ram {
        bool modified;
 };
 
-#define E1000_SHADOW_RAM_WORDS  2048
+#define E1000_SHADOW_RAM_WORDS         2048
+
+#if defined(NAHUM6LP_HW) && defined(ULP_SUPPORT)
+/* I218 PHY Ultra Low Power (ULP) states */
+enum e1000_ulp_state {
+       e1000_ulp_state_unknown,
+       e1000_ulp_state_off,
+       e1000_ulp_state_on,
+};
 
+#endif /* NAHUM6LP_HW && ULP_SUPPORT */
 struct e1000_dev_spec_ich8lan {
        bool kmrn_lock_loss_workaround_enabled;
        struct e1000_shadow_ram shadow_ram[E1000_SHADOW_RAM_WORDS];
@@ -927,6 +948,12 @@ struct e1000_dev_spec_ich8lan {
        bool nvm_k1_enabled;
        bool eee_disable;
        u16 eee_lp_ability;
+#if defined(NAHUM6LP_HW) && defined(ULP_SUPPORT)
+       enum e1000_ulp_state ulp_state;
+#endif /* NAHUM6LP_HW && ULP_SUPPORT */
+       u16 lat_enc;
+       u16 max_ltr_enc;
+       bool smbus_disable;
 };
 
 struct e1000_dev_spec_82575 {
@@ -934,8 +961,11 @@ struct e1000_dev_spec_82575 {
        bool global_device_reset;
        bool eee_disable;
        bool module_plugged;
+       bool clear_semaphore_once;
        u32 mtu;
        struct sfp_e1000_flags eth_flags;
+       u8 media_port;
+       bool media_changed;
 };
 
 struct e1000_dev_spec_vf {