2  * $Id: ctcmain.h,v 1.4 2005/03/24 09:04:17 mschwide Exp $
 
   4  * CTC / ESCON network driver
 
   6  * Copyright (C) 2001 IBM Deutschland Entwicklung GmbH, IBM Corporation
 
   7  * Author(s): Fritz Elfert (elfert@de.ibm.com, felfert@millenux.com)
 
   8               Peter Tiedemann (ptiedem@de.ibm.com)
 
  12  *  - Principles of Operation (IBM doc#: SA22-7201-06)
 
  13  *  - Common IO/-Device Commands and Self Description (IBM doc#: SA22-7204-02)
 
  14  *  - Common IO/-Device Commands and Self Description (IBM doc#: SN22-5535)
 
  15  *  - ESCON Channel-to-Channel Adapter (IBM doc#: SA22-7203-00)
 
  16  *  - ESCON I/O Interface (IBM doc#: SA22-7202-029
 
  18  * This program is free software; you can redistribute it and/or modify
 
  19  * it under the terms of the GNU General Public License as published by
 
  20  * the Free Software Foundation; either version 2, or (at your option)
 
  23  * This program is distributed in the hope that it will be useful,
 
  24  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
  25  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
  26  * GNU General Public License for more details.
 
  28  * You should have received a copy of the GNU General Public License
 
  29  * along with this program; if not, write to the Free Software
 
  30  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
  32  * RELEASE-TAG: CTC/ESCON network driver $Revision: 1.4 $
 
  39 #include <asm/ccwdev.h>
 
  40 #include <asm/ccwgroup.h>
 
  48  * CCW commands, used in this driver.
 
  50 #define CCW_CMD_WRITE           0x01
 
  51 #define CCW_CMD_READ            0x02
 
  52 #define CCW_CMD_SET_EXTENDED    0xc3
 
  53 #define CCW_CMD_PREPARE         0xe3
 
  55 #define CTC_PROTO_S390          0
 
  56 #define CTC_PROTO_LINUX         1
 
  57 #define CTC_PROTO_LINUX_TTY     2
 
  58 #define CTC_PROTO_OS390         3
 
  59 #define CTC_PROTO_MAX           3
 
  61 #define CTC_BUFSIZE_LIMIT       65535
 
  62 #define CTC_BUFSIZE_DEFAULT     32768
 
  64 #define CTC_TIMEOUT_5SEC        5000
 
  66 #define CTC_INITIAL_BLOCKLEN    2
 
  71 #define CTC_ID_SIZE             BUS_ID_SIZE+3
 
  75         unsigned long maxmulti;
 
  76         unsigned long maxcqueue;
 
  77         unsigned long doios_single;
 
  78         unsigned long doios_multi;
 
  80         unsigned long tx_time;
 
  81         struct timespec send_stamp;
 
  85  * Definition of one channel
 
  90          * Pointer to next channel in list.
 
  94         struct ccw_device *cdev;
 
  97          * Type of this channel.
 
  98          * CTC/A or Escon for valid channels.
 
 100         enum channel_types type;
 
 103          * Misc. flags. See CHANNEL_FLAGS_... below
 
 108          * The protocol of this channel
 
 113          * I/O and irq related stuff
 
 124          * Transmit/Receive buffer.
 
 126         struct sk_buff *trans_skb;
 
 129          * Universal I/O queue.
 
 131         struct sk_buff_head io_queue;
 
 134          * TX queue for collecting skb's during busy.
 
 136         struct sk_buff_head collect_queue;
 
 139          * Amount of data in collect_queue.
 
 144          * spinlock for collect_queue and collect_len
 
 146         spinlock_t collect_lock;
 
 149          * Timer for detecting unresposive
 
 155          * Retry counter for misc. operations.
 
 160          * The finite state machine of this channel
 
 165          * The corresponding net_device this channel
 
 168         struct net_device *netdev;
 
 170         struct ctc_profile prof;
 
 172         unsigned char *trans_skb_data;
 
 177 #define CHANNEL_FLAGS_READ            0
 
 178 #define CHANNEL_FLAGS_WRITE           1
 
 179 #define CHANNEL_FLAGS_INUSE           2
 
 180 #define CHANNEL_FLAGS_BUFSIZE_CHANGED 4
 
 181 #define CHANNEL_FLAGS_FAILED          8
 
 182 #define CHANNEL_FLAGS_WAITIRQ        16
 
 183 #define CHANNEL_FLAGS_RWMASK 1
 
 184 #define CHANNEL_DIRECTION(f) (f & CHANNEL_FLAGS_RWMASK)
 
 186 #define LOG_FLAG_ILLEGALPKT  1
 
 187 #define LOG_FLAG_ILLEGALSIZE 2
 
 188 #define LOG_FLAG_OVERRUN     4
 
 189 #define LOG_FLAG_NOMEM       8
 
 191 #define CTC_LOGLEVEL_INFO     1
 
 192 #define CTC_LOGLEVEL_NOTICE   2
 
 193 #define CTC_LOGLEVEL_WARN     4
 
 194 #define CTC_LOGLEVEL_EMERG    8
 
 195 #define CTC_LOGLEVEL_ERR     16
 
 196 #define CTC_LOGLEVEL_DEBUG   32
 
 197 #define CTC_LOGLEVEL_CRIT    64
 
 199 #define CTC_LOGLEVEL_DEFAULT \
 
 200 (CTC_LOGLEVEL_INFO | CTC_LOGLEVEL_NOTICE | CTC_LOGLEVEL_WARN | CTC_LOGLEVEL_CRIT)
 
 202 #define CTC_LOGLEVEL_MAX     ((CTC_LOGLEVEL_CRIT<<1)-1)
 
 204 #define ctc_pr_debug(fmt, arg...) \
 
 205 do { if (loglevel & CTC_LOGLEVEL_DEBUG) printk(KERN_DEBUG fmt,##arg); } while (0)
 
 207 #define ctc_pr_info(fmt, arg...) \
 
 208 do { if (loglevel & CTC_LOGLEVEL_INFO) printk(KERN_INFO fmt,##arg); } while (0)
 
 210 #define ctc_pr_notice(fmt, arg...) \
 
 211 do { if (loglevel & CTC_LOGLEVEL_NOTICE) printk(KERN_NOTICE fmt,##arg); } while (0)
 
 213 #define ctc_pr_warn(fmt, arg...) \
 
 214 do { if (loglevel & CTC_LOGLEVEL_WARN) printk(KERN_WARNING fmt,##arg); } while (0)
 
 216 #define ctc_pr_emerg(fmt, arg...) \
 
 217 do { if (loglevel & CTC_LOGLEVEL_EMERG) printk(KERN_EMERG fmt,##arg); } while (0)
 
 219 #define ctc_pr_err(fmt, arg...) \
 
 220 do { if (loglevel & CTC_LOGLEVEL_ERR) printk(KERN_ERR fmt,##arg); } while (0)
 
 222 #define ctc_pr_crit(fmt, arg...) \
 
 223 do { if (loglevel & CTC_LOGLEVEL_CRIT) printk(KERN_CRIT fmt,##arg); } while (0)
 
 226         struct net_device_stats stats;
 
 229          * The finite state machine of this interface.
 
 233          * The protocol of this device
 
 237          * Timer for restarting after I/O Errors
 
 239         fsm_timer               restart_timer;
 
 243         struct channel *channel[2];
 
 247  * Definition of our link level header.
 
 254 #define LL_HEADER_LENGTH (sizeof(struct ll_header))
 
 257  * Compatibility macros for busy handling
 
 258  * of network devices.
 
 260 static __inline__ void
 
 261 ctc_clear_busy(struct net_device * dev)
 
 263         clear_bit(0, &(((struct ctc_priv *) dev->priv)->tbusy));
 
 264         if (((struct ctc_priv *)dev->priv)->protocol != CTC_PROTO_LINUX_TTY)
 
 265                 netif_wake_queue(dev);
 
 268 static __inline__ int
 
 269 ctc_test_and_set_busy(struct net_device * dev)
 
 271         if (((struct ctc_priv *)dev->priv)->protocol != CTC_PROTO_LINUX_TTY)
 
 272                 netif_stop_queue(dev);
 
 273         return test_and_set_bit(0, &((struct ctc_priv *) dev->priv)->tbusy);