cnic: Convert cnic_local_flags to atomic ops.
[safe/jmp/linux-2.6] / drivers / net / ucc_geth.h
index d74d2f7..ef1fbeb 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) Freescale Semicondutor, Inc. 2006. All rights reserved.
+ * Copyright (C) Freescale Semicondutor, Inc. 2006-2009. All rights reserved.
  *
  * Author: Shlomi Gridish <gridish@freescale.com>
  *
@@ -20,7 +20,6 @@
 
 #include <linux/kernel.h>
 #include <linux/list.h>
-#include <linux/fsl_devices.h>
 
 #include <asm/immap_qe.h>
 #include <asm/qe.h>
@@ -28,8 +27,6 @@
 #include <asm/ucc.h>
 #include <asm/ucc_fast.h>
 
-#include "ucc_geth_mii.h"
-
 #define DRV_DESC "QE UCC Gigabit Ethernet Controller"
 #define DRV_NAME "ucc_geth"
 #define DRV_VERSION "1.1"
@@ -83,16 +80,16 @@ struct ucc_geth {
                                   frames) received that were between 128
                                   (Including FCS length==4) and 255 octets */
        u32 txok;               /* Total number of octets residing in frames
-                                  that where involved in succesfull
+                                  that where involved in successfull
                                   transmission */
        u16 txcf;               /* Total number of PAUSE control frames
                                   transmitted by this MAC */
        u8 res4[0x2];
        u32 tmca;               /* Total number of frames that were transmitted
-                                  succesfully with the group address bit set
+                                  successfully with the group address bit set
                                   that are not broadcast frames */
        u32 tbca;               /* Total number of frames transmitted
-                                  succesfully that had destination address
+                                  successfully that had destination address
                                   field equal to the broadcast address */
        u32 rxfok;              /* Total number of frames received OK */
        u32 rxbok;              /* Total number of octets received OK */
@@ -101,9 +98,9 @@ struct ucc_geth {
                                   HW because it includes octets in frames that
                                   never even reach the UCC */
        u32 rmca;               /* Total number of frames that were received
-                                  succesfully with the group address bit set
+                                  successfully with the group address bit set
                                   that are not broadcast frames */
-       u32 rbca;               /* Total number of frames received succesfully
+       u32 rbca;               /* Total number of frames received successfully
                                   that had destination address equal to the
                                   broadcast address */
        u32 scar;               /* Statistics carry register */
@@ -162,92 +159,64 @@ struct ucc_geth {
                                                                   boundary */
 
 /* UCC GETH Event Register */
-#define UCCE_MPD                                0x80000000     /* Magic packet
-                                                                  detection */
-#define UCCE_SCAR                               0x40000000
-#define UCCE_GRA                                0x20000000     /* Tx graceful
-                                                                  stop
-                                                                  complete */
-#define UCCE_CBPR                               0x10000000
-#define UCCE_BSY                                0x08000000
-#define UCCE_RXC                                0x04000000
-#define UCCE_TXC                                0x02000000
-#define UCCE_TXE                                0x01000000
-#define UCCE_TXB7                               0x00800000
-#define UCCE_TXB6                               0x00400000
-#define UCCE_TXB5                               0x00200000
-#define UCCE_TXB4                               0x00100000
-#define UCCE_TXB3                               0x00080000
-#define UCCE_TXB2                               0x00040000
-#define UCCE_TXB1                               0x00020000
-#define UCCE_TXB0                               0x00010000
-#define UCCE_RXB7                               0x00008000
-#define UCCE_RXB6                               0x00004000
-#define UCCE_RXB5                               0x00002000
-#define UCCE_RXB4                               0x00001000
-#define UCCE_RXB3                               0x00000800
-#define UCCE_RXB2                               0x00000400
-#define UCCE_RXB1                               0x00000200
-#define UCCE_RXB0                               0x00000100
-#define UCCE_RXF7                               0x00000080
-#define UCCE_RXF6                               0x00000040
-#define UCCE_RXF5                               0x00000020
-#define UCCE_RXF4                               0x00000010
-#define UCCE_RXF3                               0x00000008
-#define UCCE_RXF2                               0x00000004
-#define UCCE_RXF1                               0x00000002
-#define UCCE_RXF0                               0x00000001
-
-#define UCCE_RXBF_SINGLE_MASK                   (UCCE_RXF0)
-#define UCCE_TXBF_SINGLE_MASK                   (UCCE_TXB0)
-
-#define UCCE_TXB         (UCCE_TXB7 | UCCE_TXB6 | UCCE_TXB5 | UCCE_TXB4 |\
-                       UCCE_TXB3 | UCCE_TXB2 | UCCE_TXB1 | UCCE_TXB0)
-#define UCCE_RXB         (UCCE_RXB7 | UCCE_RXB6 | UCCE_RXB5 | UCCE_RXB4 |\
-                       UCCE_RXB3 | UCCE_RXB2 | UCCE_RXB1 | UCCE_RXB0)
-#define UCCE_RXF         (UCCE_RXF7 | UCCE_RXF6 | UCCE_RXF5 | UCCE_RXF4 |\
-                       UCCE_RXF3 | UCCE_RXF2 | UCCE_RXF1 | UCCE_RXF0)
-#define UCCE_OTHER       (UCCE_SCAR | UCCE_GRA  | UCCE_CBPR | UCCE_BSY  |\
-                       UCCE_RXC  | UCCE_TXC  | UCCE_TXE)
-
-#define UCCE_RX_EVENTS                                                 (UCCE_RXF | UCCE_BSY)
-#define UCCE_TX_EVENTS                                                 (UCCE_TXB | UCCE_TXE)
-
-/* UCC GETH UPSMR (Protocol Specific Mode Register) */
-#define UPSMR_ECM                               0x04000000     /* Enable CAM
-                                                                  Miss or
-                                                                  Enable
-                                                                  Filtering
-                                                                  Miss */
-#define UPSMR_HSE                               0x02000000     /* Hardware
-                                                                  Statistics
-                                                                  Enable */
-#define UPSMR_PRO                               0x00400000     /* Promiscuous*/
-#define UPSMR_CAP                               0x00200000     /* CAM polarity
-                                                                */
-#define UPSMR_RSH                               0x00100000     /* Receive
-                                                                  Short Frames
-                                                                */
-#define UPSMR_RPM                               0x00080000     /* Reduced Pin
-                                                                  Mode
-                                                                  interfaces */
-#define UPSMR_R10M                              0x00040000     /* RGMII/RMII
-                                                                  10 Mode */
-#define UPSMR_RLPB                              0x00020000     /* RMII
-                                                                  Loopback
-                                                                  Mode */
-#define UPSMR_TBIM                              0x00010000     /* Ten-bit
-                                                                  Interface
-                                                                  Mode */
-#define UPSMR_RMM                               0x00001000     /* RMII/RGMII
-                                                                  Mode */
-#define UPSMR_CAM                               0x00000400     /* CAM Address
-                                                                  Matching */
-#define UPSMR_BRO                               0x00000200     /* Broadcast
-                                                                  Address */
-#define UPSMR_RES1                              0x00002000     /* Reserved
-                                                                  feild - must
-                                                                  be 1 */
+#define UCCE_TXB   (UCC_GETH_UCCE_TXB7 | UCC_GETH_UCCE_TXB6 | \
+                   UCC_GETH_UCCE_TXB5 | UCC_GETH_UCCE_TXB4 | \
+                   UCC_GETH_UCCE_TXB3 | UCC_GETH_UCCE_TXB2 | \
+                   UCC_GETH_UCCE_TXB1 | UCC_GETH_UCCE_TXB0)
+
+#define UCCE_RXB   (UCC_GETH_UCCE_RXB7 | UCC_GETH_UCCE_RXB6 | \
+                   UCC_GETH_UCCE_RXB5 | UCC_GETH_UCCE_RXB4 | \
+                   UCC_GETH_UCCE_RXB3 | UCC_GETH_UCCE_RXB2 | \
+                   UCC_GETH_UCCE_RXB1 | UCC_GETH_UCCE_RXB0)
+
+#define UCCE_RXF   (UCC_GETH_UCCE_RXF7 | UCC_GETH_UCCE_RXF6 | \
+                   UCC_GETH_UCCE_RXF5 | UCC_GETH_UCCE_RXF4 | \
+                   UCC_GETH_UCCE_RXF3 | UCC_GETH_UCCE_RXF2 | \
+                   UCC_GETH_UCCE_RXF1 | UCC_GETH_UCCE_RXF0)
+
+#define UCCE_OTHER (UCC_GETH_UCCE_SCAR | UCC_GETH_UCCE_GRA | \
+                   UCC_GETH_UCCE_CBPR | UCC_GETH_UCCE_BSY | \
+                   UCC_GETH_UCCE_RXC  | UCC_GETH_UCCE_TXC | UCC_GETH_UCCE_TXE)
+
+#define UCCE_RX_EVENTS  (UCCE_RXF | UCC_GETH_UCCE_BSY)
+#define UCCE_TX_EVENTS (UCCE_TXB | UCC_GETH_UCCE_TXE)
+
+/* TBI defines */
+#define        ENET_TBI_MII_CR         0x00    /* Control */
+#define        ENET_TBI_MII_SR         0x01    /* Status */
+#define        ENET_TBI_MII_ANA        0x04    /* AN advertisement */
+#define        ENET_TBI_MII_ANLPBPA    0x05    /* AN link partner base page ability */
+#define        ENET_TBI_MII_ANEX       0x06    /* AN expansion */
+#define        ENET_TBI_MII_ANNPT      0x07    /* AN next page transmit */
+#define        ENET_TBI_MII_ANLPANP    0x08    /* AN link partner ability next page */
+#define        ENET_TBI_MII_EXST       0x0F    /* Extended status */
+#define        ENET_TBI_MII_JD         0x10    /* Jitter diagnostics */
+#define        ENET_TBI_MII_TBICON     0x11    /* TBI control */
+
+/* TBI MDIO register bit fields*/
+#define TBISR_LSTATUS          0x0004
+#define TBICON_CLK_SELECT       0x0020
+#define TBIANA_ASYMMETRIC_PAUSE 0x0100
+#define TBIANA_SYMMETRIC_PAUSE  0x0080
+#define TBIANA_HALF_DUPLEX      0x0040
+#define TBIANA_FULL_DUPLEX      0x0020
+#define TBICR_PHY_RESET         0x8000
+#define TBICR_ANEG_ENABLE       0x1000
+#define TBICR_RESTART_ANEG      0x0200
+#define TBICR_FULL_DUPLEX       0x0100
+#define TBICR_SPEED1_SET        0x0040
+
+#define TBIANA_SETTINGS ( \
+               TBIANA_ASYMMETRIC_PAUSE \
+               | TBIANA_SYMMETRIC_PAUSE \
+               | TBIANA_FULL_DUPLEX \
+               )
+#define TBICR_SETTINGS ( \
+               TBICR_PHY_RESET \
+               | TBICR_ANEG_ENABLE \
+               | TBICR_FULL_DUPLEX \
+               | TBICR_SPEED1_SET \
+               )
 
 /* UCC GETH MACCFG1 (MAC Configuration 1 Register) */
 #define MACCFG1_FLOW_RX                         0x00000020     /* Flow Control
@@ -790,15 +759,15 @@ struct ucc_geth_hardware_statistics {
                                   frames) received that were between 128
                                   (Including FCS length==4) and 255 octets */
        u32 txok;               /* Total number of octets residing in frames
-                                  that where involved in succesfull
+                                  that where involved in successfull
                                   transmission */
        u16 txcf;               /* Total number of PAUSE control frames
                                   transmitted by this MAC */
        u32 tmca;               /* Total number of frames that were transmitted
-                                  succesfully with the group address bit set
+                                  successfully with the group address bit set
                                   that are not broadcast frames */
        u32 tbca;               /* Total number of frames transmitted
-                                  succesfully that had destination address
+                                  successfully that had destination address
                                   field equal to the broadcast address */
        u32 rxfok;              /* Total number of frames received OK */
        u32 rxbok;              /* Total number of octets received OK */
@@ -807,9 +776,9 @@ struct ucc_geth_hardware_statistics {
                                   HW because it includes octets in frames that
                                   never even reach the UCC */
        u32 rmca;               /* Total number of frames that were received
-                                  succesfully with the group address bit set
+                                  successfully with the group address bit set
                                   that are not broadcast frames */
-       u32 rbca;               /* Total number of frames received succesfully
+       u32 rbca;               /* Total number of frames received successfully
                                   that had destination address equal to the
                                   broadcast address */
 } __attribute__ ((packed));
@@ -869,13 +838,13 @@ struct ucc_geth_hardware_statistics {
                                                           using the maximum is
                                                           easier */
 #define UCC_GETH_SEND_QUEUE_QUEUE_DESCRIPTOR_ALIGNMENT 32
-#define UCC_GETH_SCHEDULER_ALIGNMENT           4       /* This is a guess */
+#define UCC_GETH_SCHEDULER_ALIGNMENT           8       /* This is a guess */
 #define UCC_GETH_TX_STATISTICS_ALIGNMENT       4       /* This is a guess */
 #define UCC_GETH_RX_STATISTICS_ALIGNMENT       4       /* This is a guess */
 #define UCC_GETH_RX_INTERRUPT_COALESCING_ALIGNMENT     64
 #define UCC_GETH_RX_BD_QUEUES_ALIGNMENT                8       /* This is a guess */
 #define UCC_GETH_RX_PREFETCHED_BDS_ALIGNMENT   128     /* This is a guess */
-#define UCC_GETH_RX_EXTENDED_FILTERING_GLOBAL_PARAMETERS_ALIGNMENT 4   /* This
+#define UCC_GETH_RX_EXTENDED_FILTERING_GLOBAL_PARAMETERS_ALIGNMENT 8   /* This
                                                                           is a
                                                                           guess
                                                                         */
@@ -908,7 +877,6 @@ struct ucc_geth_hardware_statistics {
 /* Driver definitions */
 #define TX_BD_RING_LEN                          0x10
 #define RX_BD_RING_LEN                          0x10
-#define UCC_GETH_DEV_WEIGHT                     TX_BD_RING_LEN
 
 #define TX_RING_MOD_MASK(size)                  (size-1)
 #define RX_RING_MOD_MASK(size)                  (size-1)
@@ -931,23 +899,25 @@ struct ucc_geth_hardware_statistics {
 #define UCC_GETH_UTFS_INIT                      512    /* Tx virtual FIFO size
                                                         */
 #define UCC_GETH_UTFET_INIT                     256    /* 1/2 utfs */
-#define UCC_GETH_UTFTT_INIT                     128
+#define UCC_GETH_UTFTT_INIT                     512
 /* Gigabit Ethernet (1000 Mbps) */
 #define UCC_GETH_URFS_GIGA_INIT                 4096/*2048*/   /* Rx virtual
                                                                   FIFO size */
 #define UCC_GETH_URFET_GIGA_INIT                2048/*1024*/   /* 1/2 urfs */
 #define UCC_GETH_URFSET_GIGA_INIT               3072/*1536*/   /* 3/4 urfs */
-#define UCC_GETH_UTFS_GIGA_INIT                 8192/*2048*/   /* Tx virtual
+#define UCC_GETH_UTFS_GIGA_INIT                 4096/*2048*/   /* Tx virtual
+                                                                  FIFO size */
+#define UCC_GETH_UTFET_GIGA_INIT                2048/*1024*/   /* 1/2 utfs */
+#define UCC_GETH_UTFTT_GIGA_INIT                4096/*0x40*/   /* Tx virtual
                                                                   FIFO size */
-#define UCC_GETH_UTFET_GIGA_INIT                4096/*1024*/   /* 1/2 utfs */
-#define UCC_GETH_UTFTT_GIGA_INIT                0x400/*0x40*/  /* */
 
 #define UCC_GETH_REMODER_INIT                   0      /* bits that must be
                                                           set */
 #define UCC_GETH_TEMODER_INIT                   0xC000 /* bits that must */
-#define UCC_GETH_UPSMR_INIT                     (UPSMR_RES1)   /* Start value
-                                                                  for this
-                                                                  register */
+
+/* Initial value for UPSMR */
+#define UCC_GETH_UPSMR_INIT                     UCC_GETH_UPSMR_RES1
+
 #define UCC_GETH_MACCFG1_INIT                   0
 #define UCC_GETH_MACCFG2_INIT                   (MACCFG2_RESERVED_1)
 
@@ -1155,8 +1125,8 @@ struct ucc_geth_info {
        u32 eventRegMask;
        u16 pausePeriod;
        u16 extensionField;
-       u8 phy_address;
-       char mdio_bus[MII_BUS_ID_SIZE];
+       struct device_node *phy_node;
+       struct device_node *tbi_node;
        u8 weightfactor[NUM_TX_QUEUES];
        u8 interruptcoalescingmaxvalue[NUM_RX_QUEUES];
        u8 l2qt[UCC_GETH_VLAN_PRIORITY_MAX];
@@ -1176,15 +1146,16 @@ struct ucc_geth_info {
        enum ucc_geth_maccfg2_pad_and_crc_mode padAndCrc;
        enum ucc_geth_num_of_threads numThreadsTx;
        enum ucc_geth_num_of_threads numThreadsRx;
-       enum qe_risc_allocation riscTx;
-       enum qe_risc_allocation riscRx;
+       unsigned int riscTx;
+       unsigned int riscRx;
 };
 
 /* structure representing UCC GETH */
 struct ucc_geth_private {
        struct ucc_geth_info *ug_info;
        struct ucc_fast_private *uccf;
-       struct net_device *dev;
+       struct device *dev;
+       struct net_device *ndev;
        struct napi_struct napi;
        struct work_struct timeout_work;
        struct ucc_geth __iomem *ug_regs;
@@ -1242,6 +1213,8 @@ struct ucc_geth_private {
        /* index of the first skb which hasn't been transmitted yet. */
        u16 skb_dirtytx[NUM_TX_QUEUES];
 
+       struct sk_buff_head rx_recycle;
+
        struct ugeth_mii_info *mii_info;
        struct phy_device *phydev;
        phy_interface_t phy_interface;
@@ -1250,6 +1223,9 @@ struct ucc_geth_private {
        int oldspeed;
        int oldduplex;
        int oldlink;
+       int wol_en;
+
+       struct device_node *node;
 };
 
 void uec_set_ethtool_ops(struct net_device *netdev);