Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / drivers / s390 / net / lcs.h
index 67c76db..9314393 100644 (file)
@@ -6,8 +6,6 @@
 #include <linux/workqueue.h>
 #include <asm/ccwdev.h>
 
-#define VERSION_LCS_H "$Revision: 1.15 $"
-
 #define LCS_DBF_TEXT(level, name, text) \
        do { \
                debug_text_event(lcs_dbf_##name, level, text); \
@@ -75,13 +73,17 @@ do {                                       \
 /**
  * LCS sense byte definitions
  */
+#define LCS_SENSE_BYTE_0               0
+#define LCS_SENSE_BYTE_1               1
+#define LCS_SENSE_BYTE_2               2
+#define LCS_SENSE_BYTE_3               3
 #define LCS_SENSE_INTERFACE_DISCONNECT 0x01
 #define LCS_SENSE_EQUIPMENT_CHECK      0x10
 #define LCS_SENSE_BUS_OUT_CHECK                0x20
 #define LCS_SENSE_INTERVENTION_REQUIRED 0x40
 #define LCS_SENSE_CMD_REJECT           0x80
-#define LCS_SENSE_RESETTING_EVENT      0x0080
-#define LCS_SENSE_DEVICE_ONLINE                0x0020
+#define LCS_SENSE_RESETTING_EVENT      0x80
+#define LCS_SENSE_DEVICE_ONLINE                0x20
 
 /**
  * LCS packet type definitions
@@ -97,7 +99,7 @@ do {                                       \
  */
 #define LCS_ILLEGAL_OFFSET             0xffff
 #define LCS_IOBUFFERSIZE               0x5000
-#define LCS_NUM_BUFFS                        /* needs to be power of 2 */
+#define LCS_NUM_BUFFS                  32      /* needs to be power of 2 */
 #define LCS_MAC_LENGTH                 6
 #define LCS_INVALID_PORT_NO            -1
 #define LCS_LANCMD_TIMEOUT_DEFAULT      5
@@ -152,6 +154,11 @@ enum lcs_dev_states {
        DEV_STATE_RECOVER,
 };
 
+enum lcs_threads {
+       LCS_SET_MC_THREAD       = 1,
+       LCS_RECOVERY_THREAD     = 2,
+};
+
 /**
  * LCS struct declarations
  */
@@ -221,8 +228,8 @@ struct lcs_cmd {
                                struct lcs_ip_mac_pair
                                ip_mac_pair[32];
                                __u32     response_data;
-                       } lcs_ipass_ctlmsg;
-               } lcs_qipassist;
+                       } lcs_ipass_ctlmsg __attribute ((packed));
+               } lcs_qipassist __attribute__ ((packed));
 #endif /*CONFIG_IP_MULTICAST */
        } cmd __attribute__ ((packed));
 }  __attribute__ ((packed));
@@ -247,9 +254,11 @@ struct lcs_buffer {
 struct lcs_reply {
        struct list_head list;
        __u16 sequence_no;
+       atomic_t refcnt;
        /* Callback for completion notification. */
        void (*callback)(struct lcs_card *, struct lcs_cmd *);
        wait_queue_head_t wait_q;
+       struct lcs_card *card;
        int received;
        int rc;
 };
@@ -268,16 +277,19 @@ struct lcs_channel {
        int buf_idx;
 };
 
+
 /**
  * definition of the lcs card
  */
 struct lcs_card {
        spinlock_t lock;
+       spinlock_t ipm_lock;
        enum lcs_dev_states state;
        struct net_device *dev;
        struct net_device_stats stats;
        unsigned short (*lan_type_trans)(struct sk_buff *skb,
                                         struct net_device *dev);
+       struct ccwgroup_device *gdev;
        struct lcs_channel read;
        struct lcs_channel write;
        struct lcs_buffer *tx_buffer;
@@ -286,7 +298,11 @@ struct lcs_card {
        int lancmd_timeout;
 
        struct work_struct kernel_thread_starter;
-       unsigned long thread_mask;
+       spinlock_t mask_lock;
+       unsigned long thread_start_mask;
+       unsigned long thread_running_mask;
+       unsigned long thread_allowed_mask;
+       wait_queue_head_t wait_q;
 
 #ifdef CONFIG_IP_MULTICAST
        struct list_head ipm_list;
@@ -295,6 +311,7 @@ struct lcs_card {
        __u16 ip_assists_supported;
        __u16 ip_assists_enabled;
        __s8 lan_type;
+       __u32 pkt_seq;
        __u16 sequence_no;
        __s16 portno;
        /* Some info copied from probeinfo */