Merge branch 'for-2.6.26' of git://neil.brown.name/md
[pandora-kernel.git] / drivers / net / ibmveth.h
index 72cc15a..41f61cd 100644 (file)
@@ -25,8 +25,6 @@
 #ifndef _IBMVETH_H
 #define _IBMVETH_H
 
-#define IbmVethMaxSendFrags 6
-
 /* constants for H_MULTICAST_CTRL */
 #define IbmVethMcastReceptionModifyBit     0x80000UL
 #define IbmVethMcastReceptionEnableBit     0x20000UL
 #define IbmVethMcastRemoveFilter     0x2UL
 #define IbmVethMcastClearFilterTable 0x3UL
 
+#define IBMVETH_ILLAN_PADDED_PKT_CSUM  0x0000000000002000ULL
+#define IBMVETH_ILLAN_TRUNK_PRI_MASK   0x0000000000000F00ULL
+#define IBMVETH_ILLAN_IPV6_TCP_CSUM            0x0000000000000004ULL
+#define IBMVETH_ILLAN_IPV4_TCP_CSUM            0x0000000000000002ULL
+#define IBMVETH_ILLAN_ACTIVE_TRUNK             0x0000000000000001ULL
+
 /* hcall macros */
 #define h_register_logical_lan(ua, buflst, rxq, fltlst, mac) \
   plpar_hcall_norets(H_REGISTER_LOGICAL_LAN, ua, buflst, rxq, fltlst, mac)
@@ -67,6 +71,21 @@ static inline long h_send_logical_lan(unsigned long unit_address,
        return rc;
 }
 
+static inline long h_illan_attributes(unsigned long unit_address,
+                                     unsigned long reset_mask, unsigned long set_mask,
+                                     unsigned long *ret_attributes)
+{
+       long rc;
+       unsigned long retbuf[PLPAR_HCALL_BUFSIZE];
+
+       rc = plpar_hcall(H_ILLAN_ATTRIBUTES, retbuf, unit_address,
+                        reset_mask, set_mask);
+
+       *ret_attributes = retbuf[0];
+
+       return rc;
+}
+
 #define h_multicast_ctrl(ua, cmd, mac) \
   plpar_hcall_norets(H_MULTICAST_CTRL, ua, cmd, mac)
 
@@ -112,6 +131,7 @@ struct ibmveth_rx_q {
 struct ibmveth_adapter {
     struct vio_dev *vdev;
     struct net_device *netdev;
+    struct napi_struct napi;
     struct net_device_stats stats;
     unsigned int mcastFilterSize;
     unsigned long mac_addr;
@@ -122,6 +142,7 @@ struct ibmveth_adapter {
     struct ibmveth_buff_pool rx_buff_pool[IbmVethNumBufferPools];
     struct ibmveth_rx_q rx_queue;
     int pool_config;
+    int rx_csum;
 
     /* adapter specific stats */
     u64 replenish_task_cycles;
@@ -130,20 +151,19 @@ struct ibmveth_adapter {
     u64 replenish_add_buff_success;
     u64 rx_invalid_buffer;
     u64 rx_no_buffer;
-    u64 tx_multidesc_send;
-    u64 tx_linearized;
-    u64 tx_linearize_failed;
     u64 tx_map_failed;
     u64 tx_send_failed;
     spinlock_t stats_lock;
 };
 
 struct ibmveth_buf_desc_fields {
-    u32 valid : 1;
-    u32 toggle : 1;
-    u32 reserved : 6;
-    u32 length : 24;
-    u32 address;
+       u32 flags_len;
+#define IBMVETH_BUF_VALID      0x80000000
+#define IBMVETH_BUF_TOGGLE     0x40000000
+#define IBMVETH_BUF_NO_CSUM    0x02000000
+#define IBMVETH_BUF_CSUM_GOOD  0x01000000
+#define IBMVETH_BUF_LEN_MASK   0x00FFFFFF
+       u32 address;
 };
 
 union ibmveth_buf_desc {
@@ -152,12 +172,16 @@ union ibmveth_buf_desc {
 };
 
 struct ibmveth_rx_q_entry {
-    u16 toggle : 1;
-    u16 valid : 1;
-    u16 reserved : 14;
-    u16 offset;
-    u32 length;
-    u64 correlator;
+       u32 flags_off;
+#define IBMVETH_RXQ_TOGGLE             0x80000000
+#define IBMVETH_RXQ_TOGGLE_SHIFT       31
+#define IBMVETH_RXQ_VALID              0x40000000
+#define IBMVETH_RXQ_NO_CSUM            0x02000000
+#define IBMVETH_RXQ_CSUM_GOOD          0x01000000
+#define IBMVETH_RXQ_OFF_MASK           0x0000FFFF
+
+       u32 length;
+       u64 correlator;
 };
 
 #endif /* _IBMVETH_H */