ctcmain.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:106k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * $Id: ctcmain.c,v 1.55 2001/12/03 14:28:45 felfert Exp $
  3.  *
  4.  * CTC / ESCON network driver
  5.  *
  6.  * Copyright (C) 2001 IBM Deutschland Entwicklung GmbH, IBM Corporation
  7.  * Author(s): Fritz Elfert (elfert@de.ibm.com, felfert@millenux.com)
  8.  * Fixes by : Jochen R鰄rig (roehrig@de.ibm.com)
  9.  *            Arnaldo Carvalho de Melo <acme@conectiva.com.br>
  10.  *
  11.  * Documentation used:
  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
  17.  *
  18.  * and the source of the original CTC driver by:
  19.  *  Dieter Wellerdiek (wel@de.ibm.com)
  20.  *  Martin Schwidefsky (schwidefsky@de.ibm.com)
  21.  *  Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
  22.  *  Jochen R鰄rig (roehrig@de.ibm.com)
  23.  *
  24.  * This program is free software; you can redistribute it and/or modify
  25.  * it under the terms of the GNU General Public License as published by
  26.  * the Free Software Foundation; either version 2, or (at your option)
  27.  * any later version.
  28.  *
  29.  * This program is distributed in the hope that it will be useful,
  30.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  31.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  32.  * GNU General Public License for more details.
  33.  *
  34.  * You should have received a copy of the GNU General Public License
  35.  * along with this program; if not, write to the Free Software
  36.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  37.  *
  38.  * RELEASE-TAG: CTC/ESCON network driver $Revision: 1.55 $
  39.  *
  40.  */
  41. #include <linux/version.h>
  42. #include <linux/module.h>
  43. #include <linux/init.h>
  44. #include <linux/kernel.h>
  45. #include <linux/slab.h>
  46. #include <linux/errno.h>
  47. #include <linux/types.h>
  48. #include <linux/interrupt.h>
  49. #include <linux/timer.h>
  50. #include <linux/sched.h>
  51. #include <linux/signal.h>
  52. #include <linux/string.h>
  53. #include <linux/proc_fs.h>
  54. #include <linux/ip.h>
  55. #include <linux/if_arp.h>
  56. #include <linux/tcp.h>
  57. #include <linux/skbuff.h>
  58. #include <linux/ctype.h>
  59. #include <net/dst.h>
  60. #include <asm/io.h>
  61. #include <asm/bitops.h>
  62. #include <asm/uaccess.h>
  63. #ifdef CONFIG_CHANDEV
  64. #define CTC_CHANDEV
  65. #endif
  66. #ifdef CTC_CHANDEV
  67. #include <asm/chandev.h>
  68. #define REQUEST_IRQ chandev_request_irq
  69. #define FREE_IRQ chandev_free_irq
  70. #else
  71. #define REQUEST_IRQ request_irq
  72. #define FREE_IRQ free_irq
  73. #endif
  74. #if LINUX_VERSION_CODE >= 0x020213
  75. #  include <asm/idals.h>
  76. #else
  77. #  define set_normalized_cda(ccw, addr) ((ccw)->cda = (addr),0)
  78. #  define clear_normalized_cda(ccw)
  79. #endif
  80. #if LINUX_VERSION_CODE < 0x020400
  81. #  define s390_dev_info_t dev_info_t
  82. #  define dev_kfree_skb_irq(a) dev_kfree_skb(a)
  83. #endif
  84. #include <asm/irq.h>
  85. #include "ctctty.h"
  86. #include "fsm.h"
  87. #ifdef MODULE
  88. MODULE_AUTHOR("(C) 2000 IBM Corp. by Fritz Elfert (felfert@millenux.com)");
  89. MODULE_DESCRIPTION("Linux for S/390 CTC/Escon Driver");
  90. #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,12))
  91. MODULE_LICENSE("GPL");
  92. #endif
  93. #ifndef CTC_CHANDEV
  94. MODULE_PARM(ctc, "s");
  95. MODULE_PARM_DESC(ctc,
  96. "One or more definitions in the same format like the kernel param for ctc.n"
  97. "E.g.: ctc0:0x700:0x701:0:ctc1:0x702:0x703:0n");
  98. char *ctc = NULL;
  99. #endif
  100. #else
  101. /**
  102.  * Number of devices in monolithic (not module) driver version.
  103.  */
  104. #define MAX_STATIC_DEVICES 16
  105. #endif /* MODULE */
  106. #undef DEBUG
  107. /**
  108.  * CCW commands, used in this driver.
  109.  */
  110. #define CCW_CMD_WRITE 0x01
  111. #define CCW_CMD_READ 0x02
  112. #define CCW_CMD_SET_EXTENDED 0xc3
  113. #define CCW_CMD_PREPARE 0xe3
  114. #define CTC_PROTO_S390          0
  115. #define CTC_PROTO_LINUX         1
  116. #define CTC_PROTO_LINUX_TTY     2
  117. #define CTC_PROTO_OS390         3
  118. #define CTC_PROTO_MAX           3
  119. #define CTC_BUFSIZE_LIMIT       65535
  120. #define CTC_BUFSIZE_DEFAULT     32768
  121. #define CTC_TIMEOUT_5SEC        5000
  122. #define CTC_INITIAL_BLOCKLEN    2
  123. #define READ 0
  124. #define WRITE 1
  125. /**
  126.  * Enum for classifying detected devices.
  127.  */
  128. enum channel_types {
  129.         /**
  130.  * Device is not a channel.
  131.  */
  132. channel_type_none,
  133. /**
  134.  * Device is a channel, but we don't know
  135.  * anything about it.
  136.  */
  137. channel_type_unknown,
  138.         /**
  139.  * Device is a CTC/A.
  140.  */
  141. channel_type_ctca,
  142. /**
  143.  * Device is a ESCON channel.
  144.  */
  145. channel_type_escon,
  146. /**
  147.  * Device is an unsupported model.
  148.  */
  149. channel_type_unsupported
  150. };
  151. typedef enum channel_types channel_type_t;
  152. #ifndef CTC_CHANDEV
  153. static int ctc_no_auto = 0;
  154. #endif
  155. /**
  156.  * If running on 64 bit, this must be changed. XXX Why? (bird)
  157.  */
  158. typedef unsigned long intparm_t;
  159. #ifndef CTC_CHANDEV
  160. /**
  161.  * Definition of a per device parameter block
  162.  */
  163. #define MAX_PARAM_NAME_LEN 11
  164. typedef struct param_t {
  165. struct param_t *next;
  166. int            read_dev;
  167. int            write_dev;
  168. __u16          proto;
  169. char           name[MAX_PARAM_NAME_LEN];
  170. } param;
  171. static param *params = NULL;
  172. #endif
  173. typedef struct {
  174. unsigned long maxmulti;
  175. unsigned long maxcqueue;
  176. unsigned long doios_single;
  177. unsigned long doios_multi;
  178. unsigned long txlen;
  179. unsigned long tx_time;
  180. struct timeval send_stamp;
  181. } ctc_profile;
  182. /**
  183.  * Definition of one channel
  184.  */
  185. typedef struct channel_t {
  186.         /**
  187.  * Pointer to next channel in list.
  188.  */
  189. struct channel_t    *next;
  190. __u16               devno;
  191. int                 irq;
  192. /**
  193.  * Type of this channel.
  194.  * CTC/A or Escon for valid channels.
  195.  */
  196. channel_type_t      type;
  197.         /**
  198.  * Misc. flags. See CHANNEL_FLAGS_... below
  199.  */
  200. __u32               flags;
  201. /**
  202.  * The protocol of this channel
  203.  */
  204. __u16               protocol;
  205. /**
  206.  * I/O and irq related stuff
  207.  */
  208. ccw1_t              *ccw;
  209. devstat_t           *devstat;
  210. /**
  211.  * Bottom half task queue.
  212.  */
  213. struct tq_struct    tq;
  214. /**
  215.  * RX/TX buffer size
  216.  */
  217. int                 max_bufsize;
  218. /**
  219.  * Transmit/Receive buffer.
  220.  */
  221. struct sk_buff      *trans_skb;
  222. /**
  223.  * Universal I/O queue.
  224.  */
  225. struct sk_buff_head io_queue;
  226. /**
  227.  * TX queue for collecting skb's during busy.
  228.  */
  229. struct sk_buff_head collect_queue;
  230. /**
  231.  * Amount of data in collect_queue.
  232.  */
  233. int                 collect_len;
  234. /**
  235.  * spinlock for collect_queue and collect_len
  236.  */
  237. spinlock_t          collect_lock;
  238. /**
  239.  * Timer for detecting unresposive
  240.  * I/O operations.
  241.  */
  242. fsm_timer           timer;
  243. /**
  244.  * Retry counter for misc. operations.
  245.  */
  246. int                 retry;
  247. /**
  248.  * The finite state machine of this channel
  249.  */
  250. fsm_instance        *fsm;
  251. /**
  252.  * The corresponding net_device this channel
  253.  * belongs to.
  254.  */
  255. net_device          *netdev;
  256. ctc_profile         prof;
  257. unsigned char       *trans_skb_data;
  258. } channel;
  259. #define CHANNEL_FLAGS_READ            0
  260. #define CHANNEL_FLAGS_WRITE           1
  261. #define CHANNEL_FLAGS_INUSE           2
  262. #define CHANNEL_FLAGS_BUFSIZE_CHANGED 4
  263. #define CHANNEL_FLAGS_RWMASK 1
  264. #define CHANNEL_DIRECTION(f) (f & CHANNEL_FLAGS_RWMASK)
  265. /**
  266.  * Linked list of all detected channels.
  267.  */
  268. static channel *channels = NULL;
  269. #ifdef CTC_CHANDEV
  270. static int activated;
  271. #endif
  272. typedef struct ctc_priv_t {
  273. struct net_device_stats stats;
  274. #if LINUX_VERSION_CODE >= 0x02032D
  275. unsigned long           tbusy;
  276. #endif
  277. /**
  278.  * The finite state machine of this interface.
  279.  */
  280. fsm_instance            *fsm;
  281. /**
  282.  * The protocol of this device
  283.  */
  284. __u16                   protocol;
  285. channel                 *channel[2];
  286. struct proc_dir_entry   *proc_dentry;
  287. struct proc_dir_entry   *proc_stat_entry;
  288. struct proc_dir_entry   *proc_ctrl_entry;
  289. int                     proc_registered;
  290. } ctc_priv;
  291. /**
  292.  * Definition of our link level header.
  293.  */
  294. typedef struct ll_header_t {
  295. __u16       length;
  296. __u16       type;
  297. __u16       unused;
  298. } ll_header;
  299. #define LL_HEADER_LENGTH (sizeof(ll_header))
  300. /**
  301.  * Compatibility macros for busy handling
  302.  * of network devices.
  303.  */
  304. #if LINUX_VERSION_CODE < 0x02032D
  305. static __inline__ void ctc_clear_busy(net_device *dev)
  306. {
  307. clear_bit(0 ,(void *)&dev->tbusy);
  308. mark_bh(NET_BH);
  309. }
  310. static __inline__ int ctc_test_and_set_busy(net_device *dev)
  311. {
  312. return(test_and_set_bit(0, (void *)&dev->tbusy));
  313. }
  314. #define SET_DEVICE_START(device, value) dev->start = value
  315. #else
  316. static __inline__ void ctc_clear_busy(net_device *dev)
  317. {
  318. clear_bit(0, &(((ctc_priv *)dev->priv)->tbusy));
  319. netif_wake_queue(dev);
  320. }
  321. static __inline__ int ctc_test_and_set_busy(net_device *dev)
  322. {
  323. netif_stop_queue(dev);
  324. return test_and_set_bit(0, &((ctc_priv *)dev->priv)->tbusy);
  325. }
  326. #define SET_DEVICE_START(device, value)
  327. #endif
  328. /**
  329.  * Print Banner.
  330.  */
  331. static void print_banner(void) {
  332. static int printed = 0;
  333. char vbuf[] = "$Revision: 1.55 $";
  334. char *version = vbuf;
  335. if (printed)
  336. return;
  337. if ((version = strchr(version, ':'))) {
  338. char *p = strchr(version + 1, '$');
  339. if (p)
  340. *p = '';
  341. } else
  342. version = " ??? ";
  343. printk(KERN_INFO
  344.        "CTC driver Version%swith"
  345. #ifndef CTC_CHANDEV
  346.        "out"
  347. #endif
  348.        " CHANDEV support"
  349. #ifdef DEBUG
  350.        " (DEBUG-VERSION, " __DATE__ __TIME__ ")"
  351. #endif
  352.        " initializedn", version);
  353. printed = 1;
  354. }
  355. #ifndef CTC_CHANDEV
  356. /**
  357.  * Return type of a detected device.
  358.  */
  359. static channel_type_t channel_type (senseid_t *id) {
  360. channel_type_t type = channel_type_none;
  361. switch (id->cu_type) {
  362. case 0x3088:
  363. switch (id->cu_model) {
  364. case 0x08:
  365. /**
  366.  * 3088-08 = CTCA
  367.  */
  368. type = channel_type_ctca;
  369. break;
  370. case 0x1F:
  371. /**
  372.  * 3088-1F = ESCON channel
  373.  */
  374. type = channel_type_escon;
  375. break;
  376. /**
  377.  * 3088-01 = P390 OSA emulation
  378.  */
  379. case 0x01:
  380. /* fall thru */
  381. /**
  382.  * 3088-60 = OSA/2 adapter
  383.  */
  384. case 0x60:
  385. /* fall thru */
  386. /**
  387.  * 3088-61 = CISCO 7206 CLAW proto
  388.  * on ESCON
  389.  */
  390. case 0x61:
  391. /* fall thru */
  392. /**
  393.  * 3088-62 = OSA/D device
  394.  */
  395. case 0x62:
  396. type = channel_type_unsupported;
  397. break;
  398. default:
  399. type = channel_type_unknown;
  400. printk(KERN_INFO
  401.        "channel: Unknown model found "
  402.        "3088-%02xn", id->cu_model);
  403. }
  404. break;
  405. default:
  406. type = channel_type_none;
  407. }
  408. return type;
  409. }
  410. #endif
  411. /**
  412.  * States of the interface statemachine.
  413.  */
  414. enum dev_states {
  415. DEV_STATE_STOPPED,
  416. DEV_STATE_STARTWAIT_RXTX,
  417. DEV_STATE_STARTWAIT_RX,
  418. DEV_STATE_STARTWAIT_TX,
  419. DEV_STATE_STOPWAIT_RXTX,
  420. DEV_STATE_STOPWAIT_RX,
  421. DEV_STATE_STOPWAIT_TX,
  422. DEV_STATE_RUNNING,
  423. /**
  424.  * MUST be always the last element!!
  425.  */
  426. NR_DEV_STATES
  427. };
  428. static const char *dev_state_names[] = {
  429. "Stopped",
  430. "StartWait RXTX",
  431. "StartWait RX",
  432. "StartWait TX",
  433. "StopWait RXTX",
  434. "StopWait RX",
  435. "StopWait TX",
  436. "Running",
  437. };
  438. /**
  439.  * Events of the interface statemachine.
  440.  */
  441. enum dev_events {
  442. DEV_EVENT_START,
  443. DEV_EVENT_STOP,
  444. DEV_EVENT_RXUP,
  445. DEV_EVENT_TXUP,
  446. DEV_EVENT_RXDOWN,
  447. DEV_EVENT_TXDOWN,
  448. /**
  449.  * MUST be always the last element!!
  450.  */
  451. NR_DEV_EVENTS
  452. };
  453. static const char *dev_event_names[] = {
  454. "Start",
  455. "Stop",
  456. "RX up",
  457. "TX up",
  458. "RX down",
  459. "TX down",
  460. };
  461. /**
  462.  * Events of the channel statemachine
  463.  */
  464. enum ch_events {
  465. /**
  466.  * Events, representing return code of
  467.  * I/O operations (do_IO, halt_IO et al.)
  468.  */
  469. CH_EVENT_IO_SUCCESS,
  470. CH_EVENT_IO_EBUSY,
  471. CH_EVENT_IO_ENODEV,
  472. CH_EVENT_IO_EIO,
  473. CH_EVENT_IO_UNKNOWN,
  474. CH_EVENT_ATTNBUSY,
  475. CH_EVENT_ATTN,
  476. CH_EVENT_BUSY,
  477. /**
  478.  * Events, representing unit-check
  479.  */
  480. CH_EVENT_UC_RCRESET,
  481. CH_EVENT_UC_RSRESET,
  482. CH_EVENT_UC_TXTIMEOUT,
  483. CH_EVENT_UC_TXPARITY,
  484. CH_EVENT_UC_HWFAIL,
  485. CH_EVENT_UC_RXPARITY,
  486. CH_EVENT_UC_ZERO,
  487. CH_EVENT_UC_UNKNOWN,
  488. /**
  489.  * Events, representing subchannel-check
  490.  */
  491. CH_EVENT_SC_UNKNOWN,
  492. /**
  493.  * Events, representing machine checks
  494.  */
  495. CH_EVENT_MC_FAIL,
  496. CH_EVENT_MC_GOOD,
  497. /**
  498.  * Event, representing normal IRQ
  499.  */
  500. CH_EVENT_IRQ,
  501. CH_EVENT_FINSTAT,
  502. /**
  503.  * Event, representing timer expiry.
  504.  */
  505. CH_EVENT_TIMER,
  506. /**
  507.  * Events, representing commands from upper levels.
  508.  */
  509. CH_EVENT_START,
  510. CH_EVENT_STOP,
  511. /**
  512.  * MUST be always the last element!!
  513.  */
  514. NR_CH_EVENTS,
  515. };
  516. static const char *ch_event_names[] = {
  517. "do_IO success",
  518. "do_IO busy",
  519. "do_IO enodev",
  520. "do_IO ioerr",
  521. "do_IO unknown",
  522. "Status ATTN & BUSY",
  523. "Status ATTN",
  524. "Status BUSY",
  525. "Unit check remote reset",
  526. "Unit check remote system reset",
  527. "Unit check TX timeout",
  528. "Unit check TX parity",
  529. "Unit check Hardware failure",
  530. "Unit check RX parity",
  531. "Unit check ZERO",
  532. "Unit check Unknown",
  533. "SubChannel check Unknown",
  534. "Machine check failure",
  535. "Machine check operational",
  536. "IRQ normal",
  537. "IRQ final",
  538. "Timer",
  539. "Start",
  540. "Stop",
  541. };
  542. /**
  543.  * States of the channel statemachine.
  544.  */
  545. enum ch_states {
  546. /**
  547.  * Channel not assigned to any device,
  548.  * initial state, direction invalid
  549.  */
  550. CH_STATE_IDLE,
  551. /**
  552.  * Channel assigned but not operating
  553.  */
  554. CH_STATE_STOPPED,
  555. CH_STATE_STARTWAIT,
  556. CH_STATE_STARTRETRY,
  557. CH_STATE_SETUPWAIT,
  558. CH_STATE_RXINIT,
  559. CH_STATE_TXINIT,
  560. CH_STATE_RX,
  561. CH_STATE_TX,
  562. CH_STATE_RXIDLE,
  563. CH_STATE_TXIDLE,
  564. CH_STATE_RXERR,
  565. CH_STATE_TXERR,
  566. CH_STATE_TERM,
  567. CH_STATE_DTERM,
  568. CH_STATE_NOTOP,
  569. /**
  570.  * MUST be always the last element!!
  571.  */
  572. NR_CH_STATES,
  573. };
  574. static const char *ch_state_names[] = {
  575. "Idle",
  576. "Stopped",
  577. "StartWait",
  578. "StartRetry",
  579. "SetupWait",
  580. "RX init",
  581. "TX init",
  582. "RX",
  583. "TX",
  584. "RX idle",
  585. "TX idle",
  586. "RX error",
  587. "TX error",
  588. "Terminating",
  589. "Restarting",
  590. "Not operational",
  591. };
  592. #ifdef DEBUG
  593. /**
  594.  * Dump header and first 16 bytes of an sk_buff for debugging purposes.
  595.  *
  596.  * @param skb    The sk_buff to dump.
  597.  * @param offset Offset relative to skb-data, where to start the dump.
  598.  */
  599. static void ctc_dump_skb(struct sk_buff *skb, int offset)
  600. {
  601. unsigned char *p = skb->data;
  602. __u16 bl;
  603. ll_header *header;
  604. int i;
  605. p += offset;
  606. bl = *((__u16*)p);
  607. p += 2;
  608. header = (ll_header *)p;
  609. p -= 2;
  610. printk(KERN_DEBUG "dump:n");
  611. printk(KERN_DEBUG "blocklen=%d %04xn", bl, bl);
  612. printk(KERN_DEBUG "h->length=%d %04xn", header->length,
  613.        header->length); 
  614. printk(KERN_DEBUG "h->type=%04xn", header->type); 
  615. printk(KERN_DEBUG "h->unused=%04xn", header->unused);
  616. if (bl > 16)
  617. bl = 16;
  618. printk(KERN_DEBUG "data: ");
  619. for (i = 0; i < bl; i++)
  620. printk("%02x%s", *p++, (i % 16) ? " " : "n<7>");
  621. printk("n");
  622. }
  623. #endif
  624. /**
  625.  * Unpack a just received skb and hand it over to
  626.  * upper layers.
  627.  *
  628.  * @param ch The channel where this skb has been received.
  629.  * @param pskb The received skb.
  630.  */
  631. static __inline__ void ctc_unpack_skb(channel *ch, struct sk_buff *pskb)
  632. {
  633. net_device     *dev = ch->netdev;
  634. ctc_priv       *privptr = (ctc_priv *)dev->priv;
  635. __u16 len = *((__u16*)pskb->data);
  636. skb_put(pskb, 2 + LL_HEADER_LENGTH);
  637. skb_pull(pskb, 2);
  638. pskb->dev = dev;
  639. pskb->ip_summed = CHECKSUM_UNNECESSARY;
  640. while (len > 0) {
  641. struct sk_buff *skb;
  642. ll_header *header = (ll_header *)pskb->data;
  643. skb_pull(pskb, LL_HEADER_LENGTH);
  644. if ((ch->protocol == CTC_PROTO_S390) &&
  645.     (header->type != ETH_P_IP)) {
  646. /**
  647.  * Check packet type only if we stick strictly
  648.  * to S/390's protocol of OS390. This only
  649.  * supports IP. Otherwise allow any packet
  650.  * type.
  651.  */
  652. printk(KERN_WARNING
  653.        "%s Illegal packet type 0x%04x "
  654.        "received, droppingn",
  655.        dev->name, header->type);
  656. #ifdef DEBUG
  657. ctc_dump_skb(pskb, -6);
  658. #endif
  659. privptr->stats.rx_dropped++;
  660. privptr->stats.rx_frame_errors++;
  661. return;
  662. }
  663. pskb->protocol = ntohs(header->type);
  664. header->length -= LL_HEADER_LENGTH;
  665. if ((header->length == 0) ||
  666.     (header->length > skb_tailroom(pskb)) ||
  667.     (header->length > len)) {
  668. printk(KERN_WARNING
  669.        "%s Illegal packet size %d "
  670.        "received (MTU=%d blocklen=%d), "
  671.        "droppingn", dev->name, header->length,
  672.        dev->mtu, len);
  673. #ifdef DEBUG
  674. ctc_dump_skb(pskb, -6);
  675. #endif
  676. privptr->stats.rx_dropped++;
  677. privptr->stats.rx_length_errors++;
  678. return;
  679. }
  680. if (header->length > skb_tailroom(pskb)) {
  681. printk(KERN_WARNING
  682.        "%s Illegal packet size %d "
  683.        "(beyond the end of received data), "
  684.        "droppingn", dev->name, header->length);
  685. #ifdef DEBUG
  686. ctc_dump_skb(pskb, -6);
  687. #endif
  688. privptr->stats.rx_dropped++;
  689. privptr->stats.rx_length_errors++;
  690. return;
  691. }
  692. skb_put(pskb, header->length);
  693. pskb->mac.raw = pskb->data;
  694. len -= (LL_HEADER_LENGTH + header->length);
  695. skb = dev_alloc_skb(pskb->len);
  696. if (!skb) {
  697. printk(KERN_WARNING
  698.        "%s Out of memory in ctc_unpack_skbn",
  699.        dev->name);
  700. privptr->stats.rx_dropped++;
  701. return;
  702. }
  703. memcpy(skb_put(skb, pskb->len), pskb->data, pskb->len);
  704. skb->mac.raw = skb->data;
  705. skb->dev = pskb->dev;
  706. skb->protocol = pskb->protocol;
  707. pskb->ip_summed = CHECKSUM_UNNECESSARY;
  708. if (ch->protocol == CTC_PROTO_LINUX_TTY)
  709. ctc_tty_netif_rx(skb);
  710. else
  711. netif_rx(skb);
  712. privptr->stats.rx_packets++;
  713. privptr->stats.rx_bytes += skb->len;
  714. if (len > 0) {
  715. skb_pull(pskb, header->length);
  716. skb_put(pskb, LL_HEADER_LENGTH);
  717. }
  718. }
  719. }
  720. /**
  721.  * Bottom half routine.
  722.  *
  723.  * @param ch The channel to work on.
  724.  */
  725. static void ctc_bh(channel *ch)
  726. {
  727. struct sk_buff *skb;
  728. while ((skb = skb_dequeue(&ch->io_queue)))
  729. ctc_unpack_skb(ch, skb);
  730. }
  731. /**
  732.  * Check return code of a preceeding do_IO, halt_IO etc...
  733.  *
  734.  * @param ch          The channel, the error belongs to.
  735.  * @param return_code The error code to inspect.
  736.  */
  737. static void inline ccw_check_return_code (channel *ch, int return_code)
  738. {
  739. switch (return_code) {
  740. case 0:
  741. fsm_event(ch->fsm, CH_EVENT_IO_SUCCESS, ch);
  742. break;
  743. case -EBUSY:
  744. printk(KERN_INFO "ch-%04x: Busy !n", ch->devno);
  745. fsm_event(ch->fsm, CH_EVENT_IO_EBUSY, ch);
  746. break;
  747. case -ENODEV:
  748. printk(KERN_EMERG
  749.        "ch-%04x: Invalid device called for IOn",
  750.        ch->devno);
  751. fsm_event(ch->fsm, CH_EVENT_IO_ENODEV, ch);
  752. break;
  753. case -EIO:
  754. printk(KERN_EMERG
  755.        "ch-%04x: Status pending... n", ch->devno);
  756. fsm_event(ch->fsm, CH_EVENT_IO_EIO, ch);
  757. break;
  758. default:
  759. printk(KERN_EMERG
  760.        "ch-%04x: Unknown error in do_IO %04xn",
  761.        ch->devno, return_code);
  762. fsm_event(ch->fsm, CH_EVENT_IO_UNKNOWN, ch);
  763. }
  764. }
  765. /**
  766.  * Check sense of a unit check.
  767.  *
  768.  * @param ch    The channel, the sense code belongs to.
  769.  * @param sense The sense code to inspect.
  770.  */
  771. static void inline ccw_unit_check (channel *ch, unsigned char sense) {
  772. if (sense & SNS0_INTERVENTION_REQ) {
  773. if (sense & 0x01)  {
  774. if (ch->protocol != CTC_PROTO_LINUX_TTY)
  775. printk(KERN_DEBUG
  776.        "ch-%04x: Interface disc. or Sel. reset "
  777.        "(remote)n", ch->devno);
  778. fsm_event(ch->fsm, CH_EVENT_UC_RCRESET, ch);
  779. } else {
  780. printk(KERN_DEBUG "ch-%04x: System reset (remote)n",
  781.        ch->devno);
  782. fsm_event(ch->fsm, CH_EVENT_UC_RSRESET, ch);
  783. }
  784. } else if (sense & SNS0_EQUIPMENT_CHECK) {
  785. if (sense & SNS0_BUS_OUT_CHECK) {
  786. printk(KERN_WARNING
  787.        "ch-%04x: Hardware malfunction (remote)n",
  788.        ch->devno);
  789. fsm_event(ch->fsm, CH_EVENT_UC_HWFAIL, ch);
  790. } else {
  791. printk(KERN_WARNING
  792.        "ch-%04x: Read-data parity error (remote)n",
  793.        ch->devno);
  794. fsm_event(ch->fsm, CH_EVENT_UC_RXPARITY, ch);
  795. }
  796. } else if (sense & SNS0_BUS_OUT_CHECK) {
  797. if (sense & 0x04) {
  798. printk(KERN_WARNING
  799.        "ch-%04x: Data-streaming timeout)n",
  800.        ch->devno);
  801. fsm_event(ch->fsm, CH_EVENT_UC_TXTIMEOUT, ch);
  802. } else {
  803. printk(KERN_WARNING
  804.        "ch-%04x: Data-transfer parity errorn",
  805.        ch->devno);
  806. fsm_event(ch->fsm, CH_EVENT_UC_TXPARITY, ch);
  807. }
  808. } else if (sense & SNS0_CMD_REJECT) {
  809. printk(KERN_WARNING "ch-%04x: Command rejectn",
  810.        ch->devno);
  811. } else if (sense == 0) {
  812. printk(KERN_DEBUG "ch-%04x: Unit check ZEROn", ch->devno);
  813. fsm_event(ch->fsm, CH_EVENT_UC_ZERO, ch);
  814. } else {
  815. printk(KERN_WARNING
  816.        "ch-%04x: Unit Check with sense code: %02xn",
  817.        ch->devno, sense);
  818. fsm_event(ch->fsm, CH_EVENT_UC_UNKNOWN, ch);
  819. }
  820. }
  821. static void ctc_purge_skb_queue(struct sk_buff_head *q)
  822. {
  823. struct sk_buff *skb;
  824. while ((skb = skb_dequeue(q))) {
  825. atomic_dec(&skb->users);
  826. dev_kfree_skb_irq(skb);
  827. }
  828. }
  829. static __inline__ int ctc_checkalloc_buffer(channel *ch, int warn) {
  830. if ((ch->trans_skb == NULL) ||
  831.     (ch->flags & CHANNEL_FLAGS_BUFSIZE_CHANGED)) {
  832. if (ch->trans_skb != NULL)
  833. dev_kfree_skb(ch->trans_skb);
  834. clear_normalized_cda(&ch->ccw[1]);
  835. ch->trans_skb = __dev_alloc_skb(ch->max_bufsize,
  836. GFP_ATOMIC|GFP_DMA);
  837. if (ch->trans_skb == NULL) {
  838. if (warn)
  839. printk(KERN_WARNING
  840.        "ch-%04x: Couldn't alloc %s trans_skbn",
  841.        ch->devno,
  842.        (CHANNEL_DIRECTION(ch->flags) == READ) ?
  843.        "RX" : "TX");
  844. return -ENOMEM;
  845. }
  846. ch->ccw[1].count = ch->max_bufsize;
  847. if (set_normalized_cda(&ch->ccw[1],
  848.        virt_to_phys(ch->trans_skb->data))) {
  849. dev_kfree_skb(ch->trans_skb);
  850. ch->trans_skb = NULL;
  851. if (warn)
  852. printk(KERN_WARNING
  853.        "ch-%04x: set_normalized_cda for %s "
  854.        "trans_skb failed, dropping packetsn",
  855.        ch->devno,
  856.        (CHANNEL_DIRECTION(ch->flags) == READ) ?
  857.        "RX" : "TX");
  858. return -ENOMEM;
  859. }
  860. ch->ccw[1].count = 0;
  861. ch->trans_skb_data = ch->trans_skb->data;
  862. ch->flags &= ~CHANNEL_FLAGS_BUFSIZE_CHANGED;
  863. }
  864. return 0;
  865. }
  866. /**
  867.  * Dummy NOP action for statemachines
  868.  */
  869. static void fsm_action_nop(fsm_instance *fi, int event, void *arg)
  870. {
  871. }
  872. /**
  873.  * Actions for channel - statemachines.
  874.  *****************************************************************************/
  875. /**
  876.  * Normal data has been send. Free the corresponding
  877.  * skb (it's in io_queue), reset dev->tbusy and
  878.  * revert to idle state.
  879.  *
  880.  * @param fi    An instance of a channel statemachine.
  881.  * @param event The event, just happened.
  882.  * @param arg   Generic pointer, casted from channel * upon call.
  883.  */
  884. static void ch_action_txdone(fsm_instance *fi, int event, void *arg)
  885. {
  886. channel        *ch = (channel *)arg;
  887. net_device     *dev = ch->netdev;
  888. ctc_priv       *privptr = dev->priv;
  889. struct sk_buff *skb;
  890. int            first = 1;
  891. int            i;
  892. struct timeval done_stamp = xtime;
  893. unsigned long duration = 
  894. (done_stamp.tv_sec - ch->prof.send_stamp.tv_sec) * 1000000 +
  895. done_stamp.tv_usec - ch->prof.send_stamp.tv_usec;
  896. if (duration > ch->prof.tx_time)
  897. ch->prof.tx_time = duration;
  898. if (ch->devstat->rescnt != 0)
  899. printk(KERN_DEBUG "%s: TX not complete, remaining %d bytesn",
  900.        dev->name, ch->devstat->rescnt);
  901. fsm_deltimer(&ch->timer);
  902. while ((skb = skb_dequeue(&ch->io_queue))) {
  903. privptr->stats.tx_packets++;
  904. privptr->stats.tx_bytes += skb->len - LL_HEADER_LENGTH;
  905. if (first) {
  906. privptr->stats.tx_bytes += 2;
  907. first = 0;
  908. }
  909. atomic_dec(&skb->users);
  910. dev_kfree_skb_irq(skb);
  911. }
  912. spin_lock(&ch->collect_lock);
  913. clear_normalized_cda(&ch->ccw[4]);
  914. if (ch->collect_len > 0) {
  915. int rc;
  916. if (ctc_checkalloc_buffer(ch, 1)) {
  917. spin_unlock(&ch->collect_lock);
  918. return;
  919. }
  920. ch->trans_skb->tail = ch->trans_skb->data = ch->trans_skb_data;
  921. ch->trans_skb->len = 0;
  922. if (ch->prof.maxmulti < (ch->collect_len + 2))
  923. ch->prof.maxmulti = ch->collect_len + 2;
  924. if (ch->prof.maxcqueue < skb_queue_len(&ch->collect_queue))
  925. ch->prof.maxcqueue = skb_queue_len(&ch->collect_queue);
  926. *((__u16 *)skb_put(ch->trans_skb, 2)) = ch->collect_len + 2;
  927. i = 0;
  928. while ((skb = skb_dequeue(&ch->collect_queue))) {
  929. memcpy(skb_put(ch->trans_skb, skb->len), skb->data,
  930.        skb->len);
  931. privptr->stats.tx_packets++;
  932. privptr->stats.tx_bytes += skb->len - LL_HEADER_LENGTH;
  933. atomic_dec(&skb->users);
  934. dev_kfree_skb_irq(skb);
  935. i++;
  936. }
  937. ch->collect_len = 0;
  938. spin_unlock(&ch->collect_lock);
  939. ch->ccw[1].count = ch->trans_skb->len;
  940. fsm_addtimer(&ch->timer, CTC_TIMEOUT_5SEC, CH_EVENT_TIMER, ch);
  941. ch->prof.send_stamp = xtime;
  942. rc = do_IO(ch->irq, &ch->ccw[0], (intparm_t)ch, 0xff, 0);
  943. ch->prof.doios_multi++;
  944. if (rc != 0) {
  945. privptr->stats.tx_dropped += i;
  946. privptr->stats.tx_errors += i;
  947. fsm_deltimer(&ch->timer);
  948. ccw_check_return_code(ch, rc);
  949. }
  950. } else {
  951. spin_unlock(&ch->collect_lock);
  952. fsm_newstate(fi, CH_STATE_TXIDLE);
  953. }
  954. ctc_clear_busy(dev);
  955. }
  956. /**
  957.  * Initial data is sent.
  958.  * Notify device statemachine that we are up and
  959.  * running.
  960.  *
  961.  * @param fi    An instance of a channel statemachine.
  962.  * @param event The event, just happened.
  963.  * @param arg   Generic pointer, casted from channel * upon call.
  964.  */
  965. static void ch_action_txidle(fsm_instance *fi, int event, void *arg)
  966. {
  967. channel *ch = (channel *)arg;
  968. fsm_deltimer(&ch->timer);
  969. fsm_newstate(fi, CH_STATE_TXIDLE);
  970. fsm_event(((ctc_priv *)ch->netdev->priv)->fsm, DEV_EVENT_TXUP,
  971.   ch->netdev);
  972. }
  973. /**
  974.  * Got normal data, check for sanity, queue it up, allocate new buffer
  975.  * trigger bottom half, and initiate next read.
  976.  *
  977.  * @param fi    An instance of a channel statemachine.
  978.  * @param event The event, just happened.
  979.  * @param arg   Generic pointer, casted from channel * upon call.
  980.  */
  981. static void ch_action_rx(fsm_instance *fi, int event, void *arg)
  982. {
  983. channel        *ch = (channel *)arg;
  984. net_device     *dev = ch->netdev;
  985. ctc_priv       *privptr = dev->priv;
  986. int            len = ch->max_bufsize - ch->devstat->rescnt;
  987. struct sk_buff *skb = ch->trans_skb;
  988. __u16          block_len = *((__u16*)skb->data);
  989. int            check_len;
  990. int            rc;
  991. fsm_deltimer(&ch->timer);
  992. if (len < 8) {
  993. printk(KERN_WARNING "%s: got packet with length %d < 8n",
  994.        dev->name, len);
  995. privptr->stats.rx_dropped++;
  996. privptr->stats.rx_length_errors++;
  997. goto again;
  998. }
  999. if (len > ch->max_bufsize) {
  1000. printk(KERN_WARNING "%s: got packet with length %d > %dn",
  1001.        dev->name, len, ch->max_bufsize);
  1002. privptr->stats.rx_dropped++;
  1003. privptr->stats.rx_length_errors++;
  1004. goto again;
  1005. }
  1006. /**
  1007.  * VM TCP seems to have a bug sending 2 trailing bytes of garbage.
  1008.  */
  1009. switch (ch->protocol) {
  1010. case CTC_PROTO_S390:
  1011. case CTC_PROTO_OS390:
  1012. check_len = block_len + 2;
  1013. break;
  1014. default:
  1015. check_len = block_len;
  1016. break;
  1017. }
  1018. if ((len < block_len) || (len > check_len)) {
  1019. printk(KERN_WARNING "%s: got block length %d != rx length %dn",
  1020.        dev->name, block_len, len);
  1021. #ifdef DEBUG
  1022. ctc_dump_skb(skb, 0);
  1023. #endif
  1024. *((__u16*)skb->data) = len;
  1025. privptr->stats.rx_dropped++;
  1026. privptr->stats.rx_length_errors++;
  1027. goto again;
  1028. }
  1029. block_len -= 2;
  1030. if (block_len > 0) {
  1031. *((__u16*)skb->data) = block_len;
  1032. ctc_unpack_skb(ch, skb);
  1033. }
  1034.  again:
  1035. skb->data = skb->tail = ch->trans_skb_data;
  1036. skb->len = 0;
  1037. if (ctc_checkalloc_buffer(ch, 1))
  1038. return;
  1039. ch->ccw[1].count = ch->max_bufsize;
  1040. rc = do_IO(ch->irq, &ch->ccw[0], (intparm_t)ch, 0xff, 0);
  1041. if (rc != 0)
  1042. ccw_check_return_code(ch, rc);
  1043. }
  1044. static void ch_action_rxidle(fsm_instance *fi, int event, void *arg);
  1045. /**
  1046.  * Initialize connection by sending a __u16 of value 0.
  1047.  *
  1048.  * @param fi    An instance of a channel statemachine.
  1049.  * @param event The event, just happened.
  1050.  * @param arg   Generic pointer, casted from channel * upon call.
  1051.  */
  1052. static void ch_action_firstio(fsm_instance *fi, int event, void *arg)
  1053. {
  1054. channel *ch = (channel *)arg;
  1055. int     rc;
  1056. if (fsm_getstate(fi) == CH_STATE_TXIDLE)
  1057. printk(KERN_DEBUG "ch-%04x: remote side issued READ?, "
  1058.        "init ...n", ch->devno);
  1059. fsm_deltimer(&ch->timer);
  1060. if (ctc_checkalloc_buffer(ch, 1))
  1061. return;
  1062. if ((fsm_getstate(fi) == CH_STATE_SETUPWAIT) &&
  1063.     (ch->protocol == CTC_PROTO_OS390)) {
  1064. /* OS/390 resp. z/OS */
  1065. if (CHANNEL_DIRECTION(ch->flags) == READ) {
  1066. *((__u16 *)ch->trans_skb->data) = CTC_INITIAL_BLOCKLEN;
  1067. fsm_addtimer(&ch->timer, CTC_TIMEOUT_5SEC,
  1068.      CH_EVENT_TIMER, ch);
  1069. ch_action_rxidle(fi, event, arg);
  1070. } else {
  1071. net_device *dev = ch->netdev;
  1072. fsm_newstate(fi, CH_STATE_TXIDLE);
  1073. fsm_event(((ctc_priv *)dev->priv)->fsm,
  1074.   DEV_EVENT_TXUP, dev);
  1075. }
  1076. return;
  1077. }
  1078. /**
  1079.  * Don磘 setup a timer for receiving the initial RX frame
  1080.  * if in compatibility mode, since VM TCP delays the initial
  1081.  * frame until it has some data to send.
  1082.  */
  1083. if ((CHANNEL_DIRECTION(ch->flags) == WRITE) ||
  1084.     (ch->protocol != CTC_PROTO_S390))
  1085. fsm_addtimer(&ch->timer, CTC_TIMEOUT_5SEC, CH_EVENT_TIMER, ch);
  1086. *((__u16 *)ch->trans_skb->data) = CTC_INITIAL_BLOCKLEN;
  1087. ch->ccw[1].count = 2; /* Transfer only length */
  1088. fsm_newstate(fi, (CHANNEL_DIRECTION(ch->flags) == READ)
  1089.      ? CH_STATE_RXINIT : CH_STATE_TXINIT);
  1090. rc = do_IO(ch->irq, &ch->ccw[0], (intparm_t)ch, 0xff, 0);
  1091. if (rc != 0) {
  1092. fsm_deltimer(&ch->timer);
  1093. fsm_newstate(fi, CH_STATE_SETUPWAIT);
  1094. ccw_check_return_code(ch, rc);
  1095. }
  1096. /**
  1097.  * If in compatibility mode since we don磘 setup a timer, we
  1098.  * also signal RX channel up immediately. This enables us
  1099.  * to send packets early which in turn usually triggers some
  1100.  * reply from VM TCP which brings up the RX channel to it磗
  1101.  * final state.
  1102.  */
  1103. if ((CHANNEL_DIRECTION(ch->flags) == READ) &&
  1104.     (ch->protocol == CTC_PROTO_S390)) {
  1105. net_device *dev = ch->netdev;
  1106. fsm_event(((ctc_priv *)dev->priv)->fsm, DEV_EVENT_RXUP, dev);
  1107. }
  1108. }
  1109. /**
  1110.  * Got initial data, check it. If OK,
  1111.  * notify device statemachine that we are up and
  1112.  * running.
  1113.  *
  1114.  * @param fi    An instance of a channel statemachine.
  1115.  * @param event The event, just happened.
  1116.  * @param arg   Generic pointer, casted from channel * upon call.
  1117.  */
  1118. static void ch_action_rxidle(fsm_instance *fi, int event, void *arg)
  1119. {
  1120. channel    *ch = (channel *)arg;
  1121. net_device *dev = ch->netdev;
  1122. __u16      buflen;
  1123. int        rc;
  1124. fsm_deltimer(&ch->timer);
  1125. buflen = *((__u16 *)ch->trans_skb->data);
  1126. #ifdef DEBUG
  1127. printk(KERN_DEBUG "%s: Initial RX count %dn", dev->name, buflen);
  1128. #endif
  1129. if (buflen >= CTC_INITIAL_BLOCKLEN) {
  1130. if (ctc_checkalloc_buffer(ch, 1))
  1131. return;
  1132. ch->ccw[1].count = ch->max_bufsize;
  1133. fsm_newstate(fi, CH_STATE_RXIDLE);
  1134. rc = do_IO(ch->irq, &ch->ccw[0], (intparm_t)ch, 0xff, 0);
  1135. if (rc != 0) {
  1136. fsm_newstate(fi, CH_STATE_RXINIT);
  1137. ccw_check_return_code(ch, rc);
  1138. } else
  1139. fsm_event(((ctc_priv *)dev->priv)->fsm,
  1140.   DEV_EVENT_RXUP, dev);
  1141. } else {
  1142. printk(KERN_DEBUG "%s: Initial RX count %d not %dn",
  1143.        dev->name, buflen, CTC_INITIAL_BLOCKLEN);
  1144. ch_action_firstio(fi, event, arg);
  1145. }
  1146. }
  1147. /**
  1148.  * Set channel into extended mode.
  1149.  *
  1150.  * @param fi    An instance of a channel statemachine.
  1151.  * @param event The event, just happened.
  1152.  * @param arg   Generic pointer, casted from channel * upon call.
  1153.  */
  1154. static void ch_action_setmode(fsm_instance *fi, int event, void *arg)
  1155. {
  1156. channel *ch = (channel *)arg;
  1157. int     rc;
  1158. unsigned long saveflags;
  1159. fsm_deltimer(&ch->timer);
  1160. fsm_addtimer(&ch->timer, CTC_TIMEOUT_5SEC, CH_EVENT_TIMER, ch);
  1161. fsm_newstate(fi, CH_STATE_SETUPWAIT);
  1162. if (event == CH_EVENT_TIMER)
  1163. s390irq_spin_lock_irqsave(ch->irq, saveflags);
  1164. rc = do_IO(ch->irq, &ch->ccw[6], (intparm_t)ch, 0xff, 0);
  1165. if (event == CH_EVENT_TIMER)
  1166. s390irq_spin_unlock_irqrestore(ch->irq, saveflags);
  1167. if (rc != 0) {
  1168. fsm_deltimer(&ch->timer);
  1169. fsm_newstate(fi, CH_STATE_STARTWAIT);
  1170. ccw_check_return_code(ch, rc);
  1171. } else
  1172. ch->retry = 0;
  1173. }
  1174. /**
  1175.  * Setup channel.
  1176.  *
  1177.  * @param fi    An instance of a channel statemachine.
  1178.  * @param event The event, just happened.
  1179.  * @param arg   Generic pointer, casted from channel * upon call.
  1180.  */
  1181. static void ch_action_start(fsm_instance *fi, int event, void *arg)
  1182. {
  1183. channel *ch = (channel *)arg;
  1184. unsigned long saveflags;
  1185. int     rc;
  1186. net_device *dev;
  1187. if (ch == NULL) {
  1188. printk(KERN_WARNING "ch_action_start ch=NULLn");
  1189. return;
  1190. }
  1191. if (ch->netdev == NULL) {
  1192. printk(KERN_WARNING "ch_action_start dev=NULL, irq=%dn",
  1193.        ch->irq);
  1194. return;
  1195. }
  1196. dev = ch->netdev;
  1197. #ifdef DEBUG
  1198. printk(KERN_DEBUG "%s: %s channel startn", dev->name,
  1199.        (CHANNEL_DIRECTION(ch->flags) == READ) ? "RX" : "TX");
  1200. #endif
  1201. if (ch->trans_skb != NULL) {
  1202. clear_normalized_cda(&ch->ccw[1]);
  1203. dev_kfree_skb(ch->trans_skb);
  1204. ch->trans_skb = NULL;
  1205. }
  1206. if (CHANNEL_DIRECTION(ch->flags) == READ) {
  1207. ch->ccw[1].cmd_code = CCW_CMD_READ;
  1208. ch->ccw[1].flags    = CCW_FLAG_SLI;
  1209. ch->ccw[1].count    = 0;
  1210. } else {
  1211. ch->ccw[1].cmd_code = CCW_CMD_WRITE;
  1212. ch->ccw[1].flags    = CCW_FLAG_SLI | CCW_FLAG_CC;
  1213. ch->ccw[1].count    = 0;
  1214. }
  1215. if (ctc_checkalloc_buffer(ch, 0))
  1216. printk(KERN_NOTICE
  1217.        "%s: Could not allocate %s trans_skb, delaying "
  1218.        "allocation until first transfern",
  1219.        dev->name, 
  1220.        (CHANNEL_DIRECTION(ch->flags) == READ) ? "RX" : "TX");
  1221. #if LINUX_VERSION_CODE >= 0x020400
  1222. INIT_LIST_HEAD(&ch->tq.list);
  1223. #else
  1224. ch->tq.next = NULL;
  1225. #endif
  1226. ch->tq.sync    = 0;
  1227. ch->tq.routine = (void *)(void *)ctc_bh;
  1228. ch->tq.data    = ch;
  1229. ch->ccw[0].cmd_code = CCW_CMD_PREPARE;
  1230. ch->ccw[0].flags    = CCW_FLAG_SLI | CCW_FLAG_CC;
  1231. ch->ccw[0].count    = 0;
  1232. ch->ccw[0].cda     = 0;
  1233. ch->ccw[2].cmd_code = CCW_CMD_NOOP;  /* jointed CE + DE */
  1234. ch->ccw[2].flags    = CCW_FLAG_SLI;
  1235. ch->ccw[2].count    = 0;
  1236. ch->ccw[2].cda     = 0;
  1237. memcpy(&ch->ccw[3], &ch->ccw[0], sizeof(ccw1_t) * 3);
  1238. ch->ccw[4].cda     = 0;
  1239. ch->ccw[4].flags    &= ~CCW_FLAG_IDA;
  1240. fsm_newstate(fi, CH_STATE_STARTWAIT);
  1241. fsm_addtimer(&ch->timer, 1000, CH_EVENT_TIMER, ch);
  1242. s390irq_spin_lock_irqsave(ch->irq, saveflags);
  1243. rc = halt_IO(ch->irq, (intparm_t)ch, 0);
  1244. s390irq_spin_unlock_irqrestore(ch->irq, saveflags);
  1245. if (rc != 0) {
  1246. fsm_deltimer(&ch->timer);
  1247. ccw_check_return_code(ch, rc);
  1248. }
  1249. #ifdef DEBUG
  1250. printk(KERN_DEBUG "ctc: %s(): leavingn", __FUNCTION__);
  1251. #endif
  1252. }
  1253. /**
  1254.  * Shutdown a channel.
  1255.  *
  1256.  * @param fi    An instance of a channel statemachine.
  1257.  * @param event The event, just happened.
  1258.  * @param arg   Generic pointer, casted from channel * upon call.
  1259.  */
  1260. static void ch_action_haltio(fsm_instance *fi, int event, void *arg)
  1261. {
  1262. channel *ch = (channel *)arg;
  1263. unsigned long saveflags;
  1264. int     rc;
  1265. int     oldstate;
  1266. fsm_deltimer(&ch->timer);
  1267. fsm_addtimer(&ch->timer, CTC_TIMEOUT_5SEC, CH_EVENT_TIMER, ch);
  1268. if (event == CH_EVENT_STOP)
  1269. s390irq_spin_lock_irqsave(ch->irq, saveflags);
  1270. oldstate = fsm_getstate(fi);
  1271. fsm_newstate(fi, CH_STATE_TERM);
  1272. rc = halt_IO (ch->irq, (intparm_t)ch, 0);
  1273. if (event == CH_EVENT_STOP)
  1274. s390irq_spin_unlock_irqrestore(ch->irq, saveflags);
  1275. if (rc != 0) {
  1276. fsm_deltimer(&ch->timer);
  1277. fsm_newstate(fi, oldstate);
  1278. ccw_check_return_code(ch, rc);
  1279. }
  1280. }
  1281. /**
  1282.  * A channel has successfully been halted.
  1283.  * Cleanup it's queue and notify interface statemachine.
  1284.  *
  1285.  * @param fi    An instance of a channel statemachine.
  1286.  * @param event The event, just happened.
  1287.  * @param arg   Generic pointer, casted from channel * upon call.
  1288.  */
  1289. static void ch_action_stopped(fsm_instance *fi, int event, void *arg)
  1290. {
  1291. channel *ch = (channel *)arg;
  1292. net_device *dev = ch->netdev;
  1293. fsm_deltimer(&ch->timer);
  1294. fsm_newstate(fi, CH_STATE_STOPPED);
  1295. if (ch->trans_skb != NULL) {
  1296. clear_normalized_cda(&ch->ccw[1]);
  1297. dev_kfree_skb(ch->trans_skb);
  1298. ch->trans_skb = NULL;
  1299. }
  1300. if (CHANNEL_DIRECTION(ch->flags) == READ) {
  1301. skb_queue_purge(&ch->io_queue);
  1302. fsm_event(((ctc_priv *)dev->priv)->fsm, DEV_EVENT_RXDOWN, dev);
  1303. } else {
  1304. ctc_purge_skb_queue(&ch->io_queue);
  1305. spin_lock(&ch->collect_lock);
  1306. ctc_purge_skb_queue(&ch->collect_queue);
  1307. ch->collect_len = 0;
  1308. spin_unlock(&ch->collect_lock);
  1309. fsm_event(((ctc_priv *)dev->priv)->fsm, DEV_EVENT_TXDOWN, dev);
  1310. }
  1311. }
  1312. /**
  1313.  * A stop command from device statemachine arrived and we are in
  1314.  * not operational mode. Set state to stopped.
  1315.  *
  1316.  * @param fi    An instance of a channel statemachine.
  1317.  * @param event The event, just happened.
  1318.  * @param arg   Generic pointer, casted from channel * upon call.
  1319.  */
  1320. static void ch_action_stop(fsm_instance *fi, int event, void *arg)
  1321. {
  1322. fsm_newstate(fi, CH_STATE_STOPPED);
  1323. }
  1324. /**
  1325.  * A machine check for no path, not operational status or gone device has
  1326.  * happened.
  1327.  * Cleanup queue and notify interface statemachine.
  1328.  *
  1329.  * @param fi    An instance of a channel statemachine.
  1330.  * @param event The event, just happened.
  1331.  * @param arg   Generic pointer, casted from channel * upon call.
  1332.  */
  1333. static void ch_action_fail(fsm_instance *fi, int event, void *arg)
  1334. {
  1335. channel *ch = (channel *)arg;
  1336. net_device *dev = ch->netdev;
  1337. fsm_deltimer(&ch->timer);
  1338. fsm_newstate(fi, CH_STATE_NOTOP);
  1339. if (CHANNEL_DIRECTION(ch->flags) == READ) {
  1340. skb_queue_purge(&ch->io_queue);
  1341. fsm_event(((ctc_priv *)dev->priv)->fsm, DEV_EVENT_RXDOWN, dev);
  1342. } else {
  1343. ctc_purge_skb_queue(&ch->io_queue);
  1344. spin_lock(&ch->collect_lock);
  1345. ctc_purge_skb_queue(&ch->collect_queue);
  1346. ch->collect_len = 0;
  1347. spin_unlock(&ch->collect_lock);
  1348. fsm_event(((ctc_priv *)dev->priv)->fsm, DEV_EVENT_TXDOWN, dev);
  1349. }
  1350. }
  1351. /**
  1352.  * Handle error during setup of channel.
  1353.  *
  1354.  * @param fi    An instance of a channel statemachine.
  1355.  * @param event The event, just happened.
  1356.  * @param arg   Generic pointer, casted from channel * upon call.
  1357.  */
  1358. static void ch_action_setuperr(fsm_instance *fi, int event, void *arg)
  1359. {
  1360. channel *ch = (channel *)arg;
  1361. net_device *dev = ch->netdev;
  1362. /**
  1363.  * Special case: Got UC_RCRESET on setmode.
  1364.  * This means that remote side isn't setup. In this case
  1365.  * simply retry after some 10 secs...
  1366.  */
  1367. if ((fsm_getstate(fi) == CH_STATE_SETUPWAIT) &&
  1368.     ((event == CH_EVENT_UC_RCRESET) ||
  1369.      (event == CH_EVENT_UC_RSRESET)   )         ) {
  1370. fsm_newstate(fi, CH_STATE_STARTRETRY);
  1371. fsm_deltimer(&ch->timer);
  1372. fsm_addtimer(&ch->timer, CTC_TIMEOUT_5SEC, CH_EVENT_TIMER, ch);
  1373. if (CHANNEL_DIRECTION(ch->flags) == READ) {
  1374. int rc = halt_IO (ch->irq, (intparm_t)ch, 0);
  1375. if (rc != 0)
  1376. ccw_check_return_code(ch, rc);
  1377. }
  1378. return;
  1379. }
  1380. printk(KERN_DEBUG "%s: Error %s during %s channel setup state=%sn",
  1381.        dev->name, ch_event_names[event],
  1382.        (CHANNEL_DIRECTION(ch->flags) == READ) ? "RX" : "TX",
  1383.        fsm_getstate_str(fi));
  1384. if (CHANNEL_DIRECTION(ch->flags) == READ) {
  1385. fsm_newstate(fi, CH_STATE_RXERR);
  1386. fsm_event(((ctc_priv *)dev->priv)->fsm, DEV_EVENT_RXDOWN, dev);
  1387. } else {
  1388. fsm_newstate(fi, CH_STATE_TXERR);
  1389. fsm_event(((ctc_priv *)dev->priv)->fsm, DEV_EVENT_TXDOWN, dev);
  1390. }
  1391. }
  1392. /**
  1393.  * Restart a channel after an error.
  1394.  *
  1395.  * @param fi    An instance of a channel statemachine.
  1396.  * @param event The event, just happened.
  1397.  * @param arg   Generic pointer, casted from channel * upon call.
  1398.  */
  1399. static void ch_action_restart(fsm_instance *fi, int event, void *arg)
  1400. {
  1401. unsigned long saveflags;
  1402. int   oldstate;
  1403. int   rc;
  1404. channel *ch = (channel *)arg;
  1405. net_device *dev = ch->netdev;
  1406. fsm_deltimer(&ch->timer);
  1407. printk(KERN_DEBUG "%s: %s channel restartn", dev->name,
  1408.        (CHANNEL_DIRECTION(ch->flags) == READ) ? "RX" : "TX");
  1409. fsm_addtimer(&ch->timer, CTC_TIMEOUT_5SEC, CH_EVENT_TIMER, ch);
  1410. oldstate = fsm_getstate(fi);
  1411. fsm_newstate(fi, CH_STATE_STARTWAIT);
  1412. if (event == CH_EVENT_TIMER)
  1413. s390irq_spin_lock_irqsave(ch->irq, saveflags);
  1414. rc = halt_IO (ch->irq, (intparm_t)ch, 0);
  1415. if (event == CH_EVENT_TIMER)
  1416. s390irq_spin_unlock_irqrestore(ch->irq, saveflags);
  1417. if (rc != 0) {
  1418. fsm_deltimer(&ch->timer);
  1419. fsm_newstate(fi, oldstate);
  1420. ccw_check_return_code(ch, rc);
  1421. }
  1422. }
  1423. /**
  1424.  * Handle error during RX initial handshake (exchange of
  1425.  * 0-length block header)
  1426.  *
  1427.  * @param fi    An instance of a channel statemachine.
  1428.  * @param event The event, just happened.
  1429.  * @param arg   Generic pointer, casted from channel * upon call.
  1430.  */
  1431. static void ch_action_rxiniterr(fsm_instance *fi, int event, void *arg)
  1432. {
  1433. channel *ch = (channel *)arg;
  1434. net_device *dev = ch->netdev;
  1435. if (event == CH_EVENT_TIMER) {
  1436. fsm_deltimer(&ch->timer);
  1437. printk(KERN_DEBUG "%s: Timeout during RX init handshaken",
  1438.        dev->name);
  1439. if (ch->retry++ < 3)
  1440. ch_action_restart(fi, event, arg);
  1441. else {
  1442. fsm_newstate(fi, CH_STATE_RXERR);
  1443. fsm_event(((ctc_priv *)dev->priv)->fsm,
  1444.   DEV_EVENT_RXDOWN, dev);
  1445. }
  1446. } else
  1447. printk(KERN_WARNING "%s: Error during RX init handshaken",
  1448.        dev->name);
  1449. }
  1450. /**
  1451.  * Notify device statemachine if we gave up initialization
  1452.  * of RX channel.
  1453.  *
  1454.  * @param fi    An instance of a channel statemachine.
  1455.  * @param event The event, just happened.
  1456.  * @param arg   Generic pointer, casted from channel * upon call.
  1457.  */
  1458. static void ch_action_rxinitfail(fsm_instance *fi, int event, void *arg)
  1459. {
  1460. channel *ch = (channel *)arg;
  1461. net_device *dev = ch->netdev;
  1462. fsm_newstate(fi, CH_STATE_RXERR);
  1463. printk(KERN_WARNING "%s: RX initialization failedn", dev->name);
  1464. printk(KERN_WARNING "%s: RX <-> RX connection detectedn", dev->name);
  1465. fsm_event(((ctc_priv *)dev->priv)->fsm, DEV_EVENT_RXDOWN, dev);
  1466. }
  1467. /**
  1468.  * Handle RX Unit check remote reset (remote disconnected)
  1469.  *
  1470.  * @param fi    An instance of a channel statemachine.
  1471.  * @param event The event, just happened.
  1472.  * @param arg   Generic pointer, casted from channel * upon call.
  1473.  */
  1474. static void ch_action_rxdisc(fsm_instance *fi, int event, void *arg)
  1475. {
  1476. channel    *ch = (channel *)arg;
  1477. channel    *ch2;
  1478. net_device *dev = ch->netdev;
  1479. fsm_deltimer(&ch->timer);
  1480. printk(KERN_DEBUG "%s: Got remote disconnect, re-initializing ...n",
  1481.        dev->name);
  1482. /**
  1483.  * Notify device statemachine
  1484.  */
  1485. fsm_event(((ctc_priv *)dev->priv)->fsm, DEV_EVENT_RXDOWN, dev);
  1486. fsm_event(((ctc_priv *)dev->priv)->fsm, DEV_EVENT_TXDOWN, dev);
  1487. fsm_newstate(fi, CH_STATE_DTERM);
  1488. ch2 = ((ctc_priv *)dev->priv)->channel[WRITE];
  1489. fsm_newstate(ch2->fsm, CH_STATE_DTERM);
  1490. halt_IO(ch->irq, (intparm_t)ch, 0);
  1491. halt_IO(ch2->irq, (intparm_t)ch2, 0);
  1492. }
  1493. /**
  1494.  * Handle error during TX channel initialization.
  1495.  *
  1496.  * @param fi    An instance of a channel statemachine.
  1497.  * @param event The event, just happened.
  1498.  * @param arg   Generic pointer, casted from channel * upon call.
  1499.  */
  1500. static void ch_action_txiniterr(fsm_instance *fi, int event, void *arg)
  1501. {
  1502. channel *ch = (channel *)arg;
  1503. net_device *dev = ch->netdev;
  1504. if (event == CH_EVENT_TIMER) {
  1505. fsm_deltimer(&ch->timer);
  1506. printk(KERN_DEBUG "%s: Timeout during TX init handshaken",
  1507.        dev->name);
  1508. if (ch->retry++ < 3)
  1509. ch_action_restart(fi, event, arg);
  1510. else {
  1511. fsm_newstate(fi, CH_STATE_TXERR);
  1512. fsm_event(((ctc_priv *)dev->priv)->fsm,
  1513.   DEV_EVENT_TXDOWN, dev);
  1514. }
  1515. } else
  1516. printk(KERN_WARNING "%s: Error during TX init handshaken",
  1517.        dev->name);
  1518. }
  1519. /**
  1520.  * Handle TX timeout by retrying operation.
  1521.  *
  1522.  * @param fi    An instance of a channel statemachine.
  1523.  * @param event The event, just happened.
  1524.  * @param arg   Generic pointer, casted from channel * upon call.
  1525.  */
  1526. static void ch_action_txretry(fsm_instance *fi, int event, void *arg)
  1527. {
  1528. channel    *ch = (channel *)arg;
  1529. net_device *dev = ch->netdev;
  1530. unsigned long saveflags;
  1531. fsm_deltimer(&ch->timer);
  1532. if (ch->retry++ > 3) {
  1533. printk(KERN_DEBUG "%s: TX retry failed, restarting channeln",
  1534.        dev->name);
  1535. fsm_event(((ctc_priv *)dev->priv)->fsm, DEV_EVENT_TXDOWN, dev);
  1536. ch_action_restart(fi, event, arg);
  1537. } else {
  1538. struct sk_buff *skb;
  1539. printk(KERN_DEBUG "%s: TX retry %dn", dev->name, ch->retry);
  1540. if ((skb = skb_peek(&ch->io_queue))) {
  1541. int rc = 0;
  1542. clear_normalized_cda(&ch->ccw[4]);
  1543. ch->ccw[4].count = skb->len;
  1544. if (set_normalized_cda(&ch->ccw[4],
  1545.        virt_to_phys(skb->data))) {
  1546. printk(KERN_DEBUG "%s: IDAL alloc failed, "
  1547.        "restarting channeln", dev->name);
  1548. fsm_event(((ctc_priv *)dev->priv)->fsm,
  1549.   DEV_EVENT_TXDOWN, dev);
  1550. ch_action_restart(fi, event, arg);
  1551. return;
  1552. }
  1553. fsm_addtimer(&ch->timer, 1000, CH_EVENT_TIMER, ch);
  1554. if (event == CH_EVENT_TIMER)
  1555. s390irq_spin_lock_irqsave(ch->irq, saveflags);
  1556. rc = do_IO(ch->irq, &ch->ccw[3], (intparm_t)ch, 0xff, 0);
  1557. if (event == CH_EVENT_TIMER)
  1558. s390irq_spin_unlock_irqrestore(ch->irq,
  1559.        saveflags);
  1560. if (rc != 0) {
  1561. fsm_deltimer(&ch->timer);
  1562. ccw_check_return_code(ch, rc);
  1563. ctc_purge_skb_queue(&ch->io_queue);
  1564. }
  1565. }
  1566. }
  1567. }
  1568. /**
  1569.  * Handle fatal errors during an I/O command.
  1570.  *
  1571.  * @param fi    An instance of a channel statemachine.
  1572.  * @param event The event, just happened.
  1573.  * @param arg   Generic pointer, casted from channel * upon call.
  1574.  */
  1575. static void ch_action_iofatal(fsm_instance *fi, int event, void *arg)
  1576. {
  1577. channel *ch = (channel *)arg;
  1578. net_device *dev = ch->netdev;
  1579. fsm_deltimer(&ch->timer);
  1580. if (CHANNEL_DIRECTION(ch->flags) == READ) {
  1581. printk(KERN_DEBUG "%s: RX I/O errorn", dev->name);
  1582. fsm_newstate(fi, CH_STATE_RXERR);
  1583. fsm_event(((ctc_priv *)dev->priv)->fsm, DEV_EVENT_RXDOWN, dev);
  1584. } else {
  1585. printk(KERN_DEBUG "%s: TX I/O errorn", dev->name);
  1586. fsm_newstate(fi, CH_STATE_TXERR);
  1587. fsm_event(((ctc_priv *)dev->priv)->fsm, DEV_EVENT_TXDOWN, dev);
  1588. }
  1589. }
  1590. /**
  1591.  * The statemachine for a channel.
  1592.  */
  1593. static const fsm_node ch_fsm[] = {
  1594. { CH_STATE_STOPPED,    CH_EVENT_STOP,       fsm_action_nop       },
  1595. { CH_STATE_STOPPED,    CH_EVENT_START,      ch_action_start      },
  1596. { CH_STATE_STOPPED,    CH_EVENT_FINSTAT,    fsm_action_nop       },
  1597. { CH_STATE_STOPPED,    CH_EVENT_MC_FAIL,    fsm_action_nop       },
  1598. { CH_STATE_NOTOP,      CH_EVENT_STOP,       ch_action_stop       },
  1599. { CH_STATE_NOTOP,      CH_EVENT_START,      fsm_action_nop       },
  1600. { CH_STATE_NOTOP,      CH_EVENT_FINSTAT,    fsm_action_nop       },
  1601. { CH_STATE_NOTOP,      CH_EVENT_MC_FAIL,    fsm_action_nop       },
  1602. { CH_STATE_NOTOP,      CH_EVENT_MC_GOOD,    ch_action_start      },
  1603. { CH_STATE_STARTWAIT,  CH_EVENT_STOP,       ch_action_haltio     },
  1604. { CH_STATE_STARTWAIT,  CH_EVENT_START,      fsm_action_nop       },
  1605. { CH_STATE_STARTWAIT,  CH_EVENT_FINSTAT,    ch_action_setmode    },
  1606. { CH_STATE_STARTWAIT,  CH_EVENT_TIMER,      ch_action_setuperr   },
  1607. { CH_STATE_STARTWAIT,  CH_EVENT_IO_ENODEV,  ch_action_iofatal    },
  1608. { CH_STATE_STARTWAIT,  CH_EVENT_IO_EIO,     ch_action_iofatal    },
  1609. { CH_STATE_STARTWAIT,  CH_EVENT_MC_FAIL,    ch_action_fail       },
  1610. { CH_STATE_STARTRETRY, CH_EVENT_STOP,       ch_action_haltio     },
  1611. { CH_STATE_STARTRETRY, CH_EVENT_TIMER,      ch_action_setmode    },
  1612. { CH_STATE_STARTRETRY, CH_EVENT_FINSTAT,    fsm_action_nop       },
  1613. { CH_STATE_STARTRETRY, CH_EVENT_MC_FAIL,    ch_action_fail       },
  1614. { CH_STATE_SETUPWAIT,  CH_EVENT_STOP,       ch_action_haltio     },
  1615. { CH_STATE_SETUPWAIT,  CH_EVENT_START,      fsm_action_nop       },
  1616. { CH_STATE_SETUPWAIT,  CH_EVENT_FINSTAT,    ch_action_firstio    },
  1617. { CH_STATE_SETUPWAIT,  CH_EVENT_UC_RCRESET, ch_action_setuperr   },
  1618. { CH_STATE_SETUPWAIT,  CH_EVENT_UC_RSRESET, ch_action_setuperr   },
  1619. { CH_STATE_SETUPWAIT,  CH_EVENT_TIMER,      ch_action_setmode    },
  1620. { CH_STATE_SETUPWAIT,  CH_EVENT_IO_ENODEV,  ch_action_iofatal    },
  1621. { CH_STATE_SETUPWAIT,  CH_EVENT_IO_EIO,     ch_action_iofatal    },
  1622. { CH_STATE_SETUPWAIT,  CH_EVENT_MC_FAIL,    ch_action_fail       },
  1623. { CH_STATE_RXINIT,     CH_EVENT_STOP,       ch_action_haltio     },
  1624. { CH_STATE_RXINIT,     CH_EVENT_START,      fsm_action_nop       },
  1625. { CH_STATE_RXINIT,     CH_EVENT_FINSTAT,    ch_action_rxidle     },
  1626. { CH_STATE_RXINIT,     CH_EVENT_UC_RCRESET, ch_action_rxiniterr  },
  1627. { CH_STATE_RXINIT,     CH_EVENT_UC_RSRESET, ch_action_rxiniterr  },
  1628. { CH_STATE_RXINIT,     CH_EVENT_TIMER,      ch_action_rxiniterr  },
  1629. { CH_STATE_RXINIT,     CH_EVENT_ATTNBUSY,   ch_action_rxinitfail },
  1630. { CH_STATE_RXINIT,     CH_EVENT_IO_ENODEV,  ch_action_iofatal    },
  1631. { CH_STATE_RXINIT,     CH_EVENT_IO_EIO,     ch_action_iofatal    },
  1632. { CH_STATE_RXINIT,     CH_EVENT_UC_ZERO,    ch_action_firstio    },
  1633. { CH_STATE_RXINIT,     CH_EVENT_MC_FAIL,    ch_action_fail       },
  1634. { CH_STATE_RXIDLE,     CH_EVENT_STOP,       ch_action_haltio     },
  1635. { CH_STATE_RXIDLE,     CH_EVENT_START,      fsm_action_nop       },
  1636. { CH_STATE_RXIDLE,     CH_EVENT_FINSTAT,    ch_action_rx         },
  1637. { CH_STATE_RXIDLE,     CH_EVENT_UC_RCRESET, ch_action_rxdisc     },
  1638. // { CH_STATE_RXIDLE,     CH_EVENT_UC_RSRESET, ch_action_rxretry    },
  1639. { CH_STATE_RXIDLE,     CH_EVENT_IO_ENODEV,  ch_action_iofatal    },
  1640. { CH_STATE_RXIDLE,     CH_EVENT_IO_EIO,     ch_action_iofatal    },
  1641. { CH_STATE_RXIDLE,     CH_EVENT_MC_FAIL,    ch_action_fail       },
  1642. { CH_STATE_RXIDLE,     CH_EVENT_UC_ZERO,    ch_action_rx         },
  1643. { CH_STATE_TXINIT,     CH_EVENT_STOP,       ch_action_haltio     },
  1644. { CH_STATE_TXINIT,     CH_EVENT_START,      fsm_action_nop       },
  1645. { CH_STATE_TXINIT,     CH_EVENT_FINSTAT,    ch_action_txidle     },
  1646. { CH_STATE_TXINIT,     CH_EVENT_UC_RCRESET, ch_action_txiniterr  },
  1647. { CH_STATE_TXINIT,     CH_EVENT_UC_RSRESET, ch_action_txiniterr  },
  1648. { CH_STATE_TXINIT,     CH_EVENT_TIMER,      ch_action_txiniterr  },
  1649. { CH_STATE_TXINIT,     CH_EVENT_IO_ENODEV,  ch_action_iofatal    },
  1650. { CH_STATE_TXINIT,     CH_EVENT_IO_EIO,     ch_action_iofatal    },
  1651. { CH_STATE_TXINIT,     CH_EVENT_MC_FAIL,    ch_action_fail       },
  1652. { CH_STATE_TXIDLE,     CH_EVENT_STOP,       ch_action_haltio     },
  1653. { CH_STATE_TXIDLE,     CH_EVENT_START,      fsm_action_nop       },
  1654. { CH_STATE_TXIDLE,     CH_EVENT_FINSTAT,    ch_action_firstio    },
  1655. { CH_STATE_TXIDLE,     CH_EVENT_UC_RCRESET, fsm_action_nop       },
  1656. { CH_STATE_TXIDLE,     CH_EVENT_UC_RSRESET, fsm_action_nop       },
  1657. { CH_STATE_TXIDLE,     CH_EVENT_IO_ENODEV,  ch_action_iofatal    },
  1658. { CH_STATE_TXIDLE,     CH_EVENT_IO_EIO,     ch_action_iofatal    },
  1659. { CH_STATE_TXIDLE,     CH_EVENT_MC_FAIL,    ch_action_fail       },
  1660. { CH_STATE_TERM,       CH_EVENT_STOP,       fsm_action_nop       },
  1661. { CH_STATE_TERM,       CH_EVENT_START,      ch_action_restart    },
  1662. { CH_STATE_TERM,       CH_EVENT_FINSTAT,    ch_action_stopped    },
  1663. { CH_STATE_TERM,       CH_EVENT_UC_RCRESET, fsm_action_nop       },
  1664. { CH_STATE_TERM,       CH_EVENT_UC_RSRESET, fsm_action_nop       },
  1665. { CH_STATE_TERM,       CH_EVENT_MC_FAIL,    ch_action_fail       },
  1666. { CH_STATE_DTERM,      CH_EVENT_STOP,       ch_action_haltio     },
  1667. { CH_STATE_DTERM,      CH_EVENT_START,      ch_action_restart    },
  1668. { CH_STATE_DTERM,      CH_EVENT_FINSTAT,    ch_action_setmode    },
  1669. { CH_STATE_DTERM,      CH_EVENT_UC_RCRESET, fsm_action_nop       },
  1670. { CH_STATE_DTERM,      CH_EVENT_UC_RSRESET, fsm_action_nop       },
  1671. { CH_STATE_DTERM,      CH_EVENT_MC_FAIL,    ch_action_fail       },
  1672. { CH_STATE_TX,         CH_EVENT_STOP,       ch_action_haltio     },
  1673. { CH_STATE_TX,         CH_EVENT_START,      fsm_action_nop       },
  1674. { CH_STATE_TX,         CH_EVENT_FINSTAT,    ch_action_txdone     },
  1675. { CH_STATE_TX,         CH_EVENT_UC_RCRESET, ch_action_txretry    },
  1676. { CH_STATE_TX,         CH_EVENT_UC_RSRESET, ch_action_txretry    },
  1677. { CH_STATE_TX,         CH_EVENT_TIMER,      ch_action_txretry    },
  1678. { CH_STATE_TX,         CH_EVENT_IO_ENODEV,  ch_action_iofatal    },
  1679. { CH_STATE_TX,         CH_EVENT_IO_EIO,     ch_action_iofatal    },
  1680. { CH_STATE_TX,         CH_EVENT_MC_FAIL,    ch_action_fail       },
  1681. { CH_STATE_RXERR,      CH_EVENT_STOP,       ch_action_haltio     },
  1682. { CH_STATE_TXERR,      CH_EVENT_STOP,       ch_action_haltio     },
  1683. { CH_STATE_TXERR,      CH_EVENT_MC_FAIL,    ch_action_fail       },
  1684. { CH_STATE_RXERR,      CH_EVENT_MC_FAIL,    ch_action_fail       },
  1685. };
  1686. static const int CH_FSM_LEN = sizeof(ch_fsm) / sizeof(fsm_node);
  1687. /**
  1688.  * Functions related to setup and device detection.
  1689.  *****************************************************************************/
  1690. /**
  1691.  * Add a new channel to the list of channels.
  1692.  * Keeps the channel list sorted.
  1693.  *
  1694.  * @param irq   The IRQ to be used by the new channel.
  1695.  * @param devno The device number of the new channel.
  1696.  * @param type  The type class of the new channel.
  1697.  *
  1698.  * @return 0 on success, !0 on error.
  1699.  */
  1700. static int add_channel(int irq, __u16 devno, channel_type_t type)
  1701. {
  1702. channel **c = &channels;
  1703. channel *ch;
  1704. char name[10];
  1705. if ((ch = (channel *)kmalloc(sizeof(channel), GFP_KERNEL)) == NULL) {
  1706. printk(KERN_WARNING "ctc: Out of memory in add_channeln");
  1707. return -1;
  1708. }
  1709. memset(ch, 0, sizeof(channel));
  1710. if ((ch->ccw = (ccw1_t *)kmalloc(sizeof(ccw1_t) * 8,
  1711.  GFP_KERNEL|GFP_DMA)) == NULL) {
  1712. kfree(ch);
  1713. printk(KERN_WARNING "ctc: Out of memory in add_channeln");
  1714. return -1;
  1715. }
  1716. /**
  1717.  * "static" ccws are used in the following way:
  1718.  *
  1719.  * ccw[0..2] (Channel program for generic I/O):
  1720.  *           0: prepare
  1721.  *           1: read or write (depending on direction) with fixed
  1722.  *              buffer (idal allocated once when buffer is allocated)
  1723.  *           2: nop
  1724.  * ccw[3..5] (Channel program for direct write of packets)
  1725.  *           3: prepare
  1726.  *           4: write (idal allocated on every write).
  1727.  *           5: nop
  1728.  * ccw[6..7] (Channel program for initial channel setup):
  1729.  *           3: set extended mode
  1730.  *           4: nop
  1731.  *
  1732.  * ch->ccw[0..5] are initialized in ch_action_start because
  1733.  * the channel's direction is yet unknown here.
  1734.  */
  1735. ch->ccw[6].cmd_code = CCW_CMD_SET_EXTENDED;
  1736. ch->ccw[6].flags    = CCW_FLAG_SLI;
  1737. ch->ccw[6].count    = 0;
  1738. ch->ccw[6].cda      = 0;
  1739. ch->ccw[7].cmd_code = CCW_CMD_NOOP;
  1740. ch->ccw[7].flags    = CCW_FLAG_SLI;
  1741. ch->ccw[7].count    = 0;
  1742. ch->ccw[7].cda      = 0;
  1743. ch->irq = irq;
  1744. ch->devno = devno;
  1745. ch->type = type;
  1746. sprintf(name, "ch-%04x", devno);
  1747. ch->fsm = init_fsm(name, ch_state_names,
  1748. ch_event_names, NR_CH_STATES, NR_CH_EVENTS,
  1749. ch_fsm, CH_FSM_LEN, GFP_KERNEL);
  1750. if (ch->fsm == NULL) {
  1751. printk(KERN_WARNING
  1752.        "ctc: Could not create FSM in add_channeln");
  1753. kfree(ch);
  1754. return -1;
  1755. }
  1756. fsm_newstate(ch->fsm, CH_STATE_IDLE);
  1757. if ((ch->devstat = (devstat_t*)kmalloc(sizeof(devstat_t), GFP_KERNEL))
  1758.     == NULL) {
  1759. printk(KERN_WARNING "ctc: Out of memory in add_channeln");
  1760. kfree_fsm(ch->fsm);
  1761. kfree(ch);
  1762. return -1;
  1763. }
  1764. memset(ch->devstat, 0, sizeof(devstat_t));
  1765. while (*c && ((*c)->devno < devno))
  1766. c = &(*c)->next;
  1767. if ((*c)->devno == devno) {
  1768. printk(KERN_DEBUG
  1769.        "ctc: add_channel: device %04x already in list, "
  1770.        "using old entryn", (*c)->devno);
  1771. kfree(ch->devstat);
  1772. kfree_fsm(ch->fsm);
  1773. kfree(ch);
  1774. return 0;
  1775. }
  1776. fsm_settimer(ch->fsm, &ch->timer);
  1777. skb_queue_head_init(&ch->io_queue);
  1778. skb_queue_head_init(&ch->collect_queue);
  1779. ch->next = *c;
  1780. *c = ch;
  1781. return 0;
  1782. }
  1783. #ifndef CTC_CHANDEV
  1784. /**
  1785.  * scan for all channels and create an entry in the channels list
  1786.  * for every supported channel.
  1787.  */
  1788. static void channel_scan(void)
  1789. {
  1790. static int      print_result = 1;
  1791. int         irq;
  1792. int             nr_escon = 0;
  1793. int             nr_ctca  = 0;
  1794. s390_dev_info_t di;
  1795. for (irq = 0; irq < NR_IRQS; irq++) {
  1796. if (get_dev_info_by_irq(irq, &di) == 0) {
  1797. if ((di.status == DEVSTAT_NOT_OPER) ||
  1798.     (di.status == DEVSTAT_DEVICE_OWNED))
  1799. continue;
  1800. switch (channel_type(&di.sid_data)) {
  1801. case channel_type_ctca:
  1802. /* CTC/A */
  1803. if (!add_channel(irq, di.devno,
  1804.  channel_type_ctca))
  1805. nr_ctca++;
  1806. break;
  1807. case channel_type_escon:
  1808. /* ESCON */
  1809. if (!add_channel(irq, di.devno,
  1810.  channel_type_escon))
  1811. nr_escon++;
  1812. break;
  1813. default:
  1814. }
  1815. }
  1816. }
  1817. if (print_result) {
  1818. if (nr_escon + nr_ctca)
  1819. printk(KERN_INFO
  1820.        "ctc: %d CTC/A channel%s and %d ESCON "
  1821.        "channel%s found.n",
  1822.        nr_ctca, (nr_ctca == 1) ? "s" : "",
  1823.        nr_escon, (nr_escon == 1) ? "s" : "");
  1824. else
  1825. printk(KERN_INFO "ctc: No channel devices found.n");
  1826. }
  1827. print_result = 0;
  1828. }
  1829. #endif
  1830. /**
  1831.  * Release a specific channel in the channel list.
  1832.  *
  1833.  * @param ch Pointer to channel struct to be released.
  1834.  */
  1835. static void channel_free(channel *ch)
  1836. {
  1837. ch->flags &= ~CHANNEL_FLAGS_INUSE;
  1838. fsm_newstate(ch->fsm, CH_STATE_IDLE);
  1839. }
  1840. /**
  1841.  * Remove a specific channel in the channel list.
  1842.  *
  1843.  * @param ch Pointer to channel struct to be released.
  1844.  */
  1845. static void channel_remove(channel *ch)
  1846. {
  1847. channel **c = &channels;
  1848. if (ch == NULL)
  1849. return;
  1850. #ifndef CTC_CHANDEV
  1851. if (ch->flags & CHANNEL_FLAGS_INUSE)
  1852. FREE_IRQ(ch->irq, ch->devstat);
  1853. #endif
  1854. channel_free(ch);
  1855. while (*c) {
  1856. if (*c == ch) {
  1857. *c = ch->next;
  1858. fsm_deltimer(&ch->timer);
  1859. kfree_fsm(ch->fsm);
  1860. clear_normalized_cda(&ch->ccw[4]);
  1861. if (ch->trans_skb != NULL) {
  1862. clear_normalized_cda(&ch->ccw[1]);
  1863. dev_kfree_skb(ch->trans_skb);
  1864. }
  1865. kfree(ch->ccw);
  1866. return;
  1867. }
  1868. c = &((*c)->next);
  1869. }
  1870. }
  1871. /**
  1872.  * Get a specific channel from the channel list.
  1873.  *
  1874.  * @param type Type of channel we are interested in.
  1875.  * @param devno Device number of channel we are interested in.
  1876.  * @param direction Direction we want to use this channel for.
  1877.  *
  1878.  * @return Pointer to a channel or NULL if no matching channel available.
  1879.  */
  1880. static channel *channel_get(channel_type_t type, int devno, int direction)
  1881. {
  1882. channel *ch = channels;
  1883. #ifdef DEBUG
  1884. printk(KERN_DEBUG
  1885.        "ctc: %s(): searching for ch with devno %d and type %dn",
  1886.        __FUNCTION__, devno, type);
  1887. #endif
  1888. while (ch && ((ch->devno != devno) || (ch->type != type))) {
  1889. #ifdef DEBUG
  1890. printk(KERN_DEBUG
  1891.        "ctc: %s(): ch=0x%p (devno=%d, type=%dn",
  1892.        __FUNCTION__, ch, ch->devno, ch->type);
  1893. #endif
  1894. ch = ch->next;
  1895. }
  1896. #ifdef DEBUG
  1897. printk(KERN_DEBUG
  1898.        "ctc: %s(): ch=0x%pq (devno=%d, type=%dn",
  1899.        __FUNCTION__, ch, ch->devno, ch->type);
  1900. #endif
  1901. if (!ch) {
  1902. printk(KERN_WARNING "ctc: %s(): channel with devno %d "
  1903.        "and type %d not found in channel listn",
  1904.        __FUNCTION__, devno, type);
  1905. }
  1906. else {
  1907. if (ch->flags & CHANNEL_FLAGS_INUSE)
  1908. ch = NULL;
  1909. else {
  1910. ch->flags |= CHANNEL_FLAGS_INUSE;
  1911. ch->flags &= ~CHANNEL_FLAGS_RWMASK;
  1912. ch->flags |= (direction == WRITE)
  1913. ? CHANNEL_FLAGS_WRITE:CHANNEL_FLAGS_READ;
  1914. fsm_newstate(ch->fsm, CH_STATE_STOPPED);
  1915. }
  1916. }
  1917. return ch;
  1918. }
  1919. #ifndef CTC_CHANDEV
  1920. /**
  1921.  * Get the next free channel from the channel list
  1922.  *
  1923.  * @param type Type of channel we are interested in.
  1924.  * @param direction Direction we want to use this channel for.
  1925.  *
  1926.  * @return Pointer to a channel or NULL if no matching channel available.
  1927.  */
  1928. static channel *channel_get_next(channel_type_t type, int direction)
  1929. {
  1930. channel *ch = channels;
  1931. while (ch && (ch->type != type || (ch->flags & CHANNEL_FLAGS_INUSE)))
  1932. ch = ch->next;
  1933. if (ch) {
  1934. ch->flags |= CHANNEL_FLAGS_INUSE;
  1935. ch->flags &= ~CHANNEL_FLAGS_RWMASK;
  1936. ch->flags |= (direction == WRITE)
  1937. ? CHANNEL_FLAGS_WRITE:CHANNEL_FLAGS_READ;
  1938. fsm_newstate(ch->fsm, CH_STATE_STOPPED);
  1939. }
  1940. return ch;
  1941. }
  1942. #endif
  1943. /**
  1944.  * Return the channel type by name.
  1945.  *
  1946.  * @param name Name of network interface.
  1947.  *
  1948.  * @return Type class of channel to be used for that interface.
  1949.  */
  1950. static channel_type_t inline extract_channel_media(char *name)
  1951. {
  1952. channel_type_t ret = channel_type_unknown;
  1953. if (name != NULL) {
  1954. if (strncmp(name, "ctc", 3) == 0)
  1955. ret = channel_type_ctca;
  1956. if (strncmp(name, "escon", 5) == 0)
  1957. ret = channel_type_escon;
  1958. }
  1959. return ret;
  1960. }
  1961. /**
  1962.  * Find a channel in the list by its IRQ.
  1963.  *
  1964.  * @param irq IRQ to search for.
  1965.  *
  1966.  * @return Pointer to channel or NULL if no matching channel found.
  1967.  */
  1968. static channel *find_channel_by_irq(int irq)
  1969. {
  1970. channel *ch = channels;
  1971. while (ch && (ch->irq != irq))
  1972. ch = ch->next;
  1973. return ch;
  1974. }
  1975. /**
  1976.  * Main IRQ handler.
  1977.  *
  1978.  * @param irq     The IRQ to handle.
  1979.  * @param intparm IRQ params.
  1980.  * @param regs    CPU registers.
  1981.  */
  1982. static void ctc_irq_handler (int irq, void *intparm, struct pt_regs *regs)
  1983. {
  1984. devstat_t  *devstat = (devstat_t *)intparm;
  1985. channel    *ch = (channel *)devstat->intparm;
  1986. net_device *dev;
  1987. /**
  1988.  * Check for unsolicited interrupts.
  1989.  * If intparm is NULL, then loop over all our known
  1990.  * channels and try matching the irq number.
  1991.  */
  1992. if (ch == NULL) {
  1993. if ((ch = find_channel_by_irq(irq)) == NULL) {
  1994. printk(KERN_WARNING
  1995.        "ctc: Got unsolicited irq: %04x c-%02x d-%02x"
  1996.        "f-%02xn", devstat->devno, devstat->cstat,
  1997.        devstat->dstat, devstat->flag);
  1998. goto done;
  1999. }
  2000. }
  2001. dev = (net_device *)(ch->netdev);
  2002. if (dev == NULL) {
  2003. printk(KERN_CRIT
  2004.        "ctc: ctc_irq_handler dev = NULL irq=%d, ch=0x%pn",
  2005.        irq, ch);
  2006. goto done;
  2007. }
  2008. if (intparm == NULL)
  2009. printk(KERN_DEBUG "%s: Channel %04x found by IRQ %dn",
  2010.        dev->name, ch->devno, irq);
  2011. #ifdef DEBUG
  2012. printk(KERN_DEBUG
  2013.        "%s: interrupt for device: %04x received c-%02x d-%02x "
  2014.        "f-%02xn", dev->name, devstat->devno, devstat->cstat,
  2015.        devstat->dstat, devstat->flag);
  2016. #endif
  2017. /* Check for good subchannel return code, otherwise error message */
  2018. if (devstat->cstat) {
  2019. fsm_event(ch->fsm, CH_EVENT_SC_UNKNOWN, ch);
  2020. printk(KERN_WARNING
  2021.        "%s: subchannel check for device: %04x - %02x %02x "
  2022.        "%02xn", dev->name, ch->devno, devstat->cstat,
  2023.        devstat->dstat, devstat->flag);
  2024. goto done;
  2025. }
  2026. /* Check the reason-code of a unit check */
  2027. if (devstat->dstat & DEV_STAT_UNIT_CHECK) {
  2028. ccw_unit_check(ch, devstat->ii.sense.data[0]);
  2029. goto done;
  2030. }
  2031. if (devstat->dstat & DEV_STAT_BUSY) {
  2032. if (devstat->dstat & DEV_STAT_ATTENTION)
  2033. fsm_event(ch->fsm, CH_EVENT_ATTNBUSY, ch);
  2034. else
  2035. fsm_event(ch->fsm, CH_EVENT_BUSY, ch);
  2036. goto done;
  2037. }
  2038. if (devstat->dstat & DEV_STAT_ATTENTION) {
  2039. fsm_event(ch->fsm, CH_EVENT_ATTN, ch);
  2040. goto done;
  2041. }
  2042. if (devstat->flag & DEVSTAT_FINAL_STATUS)
  2043. fsm_event(ch->fsm, CH_EVENT_FINSTAT, ch);
  2044. else
  2045. fsm_event(ch->fsm, CH_EVENT_IRQ, ch);
  2046.  done:
  2047. }
  2048. /**
  2049.  * Actions for interface - statemachine.
  2050.  *****************************************************************************/
  2051. /**
  2052.  * Startup channels by sending CH_EVENT_START to each channel.
  2053.  *
  2054.  * @param fi    An instance of an interface statemachine.
  2055.  * @param event The event, just happened.
  2056.  * @param arg   Generic pointer, casted from net_device * upon call.
  2057.  */
  2058. static void dev_action_start(fsm_instance *fi, int event, void *arg)
  2059. {
  2060. net_device *dev = (net_device *)arg;
  2061. ctc_priv   *privptr = dev->priv;
  2062. int        direction;
  2063. fsm_newstate(fi, DEV_STATE_STARTWAIT_RXTX);
  2064. for (direction = READ; direction <= WRITE; direction++) {
  2065. channel *ch = privptr->channel[direction];
  2066. fsm_event(ch->fsm, CH_EVENT_START, ch);
  2067. }
  2068. }
  2069. /**
  2070.  * Shutdown channels by sending CH_EVENT_STOP to each channel.
  2071.  *
  2072.  * @param fi    An instance of an interface statemachine.
  2073.  * @param event The event, just happened.
  2074.  * @param arg   Generic pointer, casted from net_device * upon call.
  2075.  */
  2076. static void dev_action_stop(fsm_instance *fi, int event, void *arg)
  2077. {
  2078. net_device *dev = (net_device *)arg;
  2079. ctc_priv   *privptr = dev->priv;
  2080. int        direction;
  2081. fsm_newstate(fi, DEV_STATE_STOPWAIT_RXTX);
  2082. for (direction = READ; direction <= WRITE; direction++) {
  2083. channel *ch = privptr->channel[direction];
  2084. fsm_event(ch->fsm, CH_EVENT_STOP, ch);
  2085. }
  2086. }
  2087. /**
  2088.  * Called from channel statemachine
  2089.  * when a channel is up and running.
  2090.  *
  2091.  * @param fi    An instance of an interface statemachine.
  2092.  * @param event The event, just happened.
  2093.  * @param arg   Generic pointer, casted from net_device * upon call.
  2094.  */
  2095. static void dev_action_chup(fsm_instance *fi, int event, void *arg)
  2096. {
  2097. net_device *dev = (net_device *)arg;
  2098. ctc_priv   *privptr = dev->priv;
  2099. switch (fsm_getstate(fi)) {
  2100. case DEV_STATE_STARTWAIT_RXTX:
  2101. if (event == DEV_EVENT_RXUP)
  2102. fsm_newstate(fi, DEV_STATE_STARTWAIT_TX);
  2103. else
  2104. fsm_newstate(fi, DEV_STATE_STARTWAIT_RX);
  2105. break;
  2106. case DEV_STATE_STARTWAIT_RX:
  2107. if (event == DEV_EVENT_RXUP) {
  2108. fsm_newstate(fi, DEV_STATE_RUNNING);
  2109. printk(KERN_INFO
  2110.        "%s: connected with remote siden",
  2111.        dev->name);
  2112. if (privptr->protocol == CTC_PROTO_LINUX_TTY)
  2113. ctc_tty_setcarrier(dev, 1);
  2114. ctc_clear_busy(dev);
  2115. }
  2116. break;
  2117. case DEV_STATE_STARTWAIT_TX:
  2118. if (event == DEV_EVENT_TXUP) {
  2119. fsm_newstate(fi, DEV_STATE_RUNNING);
  2120. printk(KERN_INFO
  2121.        "%s: connected with remote siden",
  2122.        dev->name);
  2123. if (privptr->protocol == CTC_PROTO_LINUX_TTY)
  2124. ctc_tty_setcarrier(dev, 1);
  2125. ctc_clear_busy(dev);
  2126. }
  2127. break;
  2128. case DEV_STATE_STOPWAIT_TX:
  2129. if (event == DEV_EVENT_RXUP)
  2130. fsm_newstate(fi, DEV_STATE_STOPWAIT_RXTX);
  2131. break;
  2132. case DEV_STATE_STOPWAIT_RX:
  2133. if (event == DEV_EVENT_TXUP)
  2134. fsm_newstate(fi, DEV_STATE_STOPWAIT_RXTX);
  2135. break;
  2136. }
  2137. }
  2138. /**
  2139.  * Called from channel statemachine
  2140.  * when a channel has been shutdown.
  2141.  *
  2142.  * @param fi    An instance of an interface statemachine.
  2143.  * @param event The event, just happened.
  2144.  * @param arg   Generic pointer, casted from net_device * upon call.
  2145.  */
  2146. static void dev_action_chdown(fsm_instance *fi, int event, void *arg)
  2147. {
  2148. net_device *dev = (net_device *)arg;
  2149. ctc_priv   *privptr = dev->priv;
  2150. switch (fsm_getstate(fi)) {
  2151. case DEV_STATE_RUNNING:
  2152. if (privptr->protocol == CTC_PROTO_LINUX_TTY)
  2153. ctc_tty_setcarrier(dev, 0);
  2154. if (event == DEV_EVENT_TXDOWN)
  2155. fsm_newstate(fi, DEV_STATE_STARTWAIT_TX);
  2156. else
  2157. fsm_newstate(fi, DEV_STATE_STARTWAIT_RX);
  2158. break;
  2159. case DEV_STATE_STARTWAIT_RX:
  2160. if (event == DEV_EVENT_TXDOWN)
  2161. fsm_newstate(fi, DEV_STATE_STARTWAIT_RXTX);
  2162. break;
  2163. case DEV_STATE_STARTWAIT_TX:
  2164. if (event == DEV_EVENT_RXDOWN)
  2165. fsm_newstate(fi, DEV_STATE_STARTWAIT_RXTX);
  2166. break;
  2167. case DEV_STATE_STOPWAIT_RXTX:
  2168. if (event == DEV_EVENT_TXDOWN)
  2169. fsm_newstate(fi, DEV_STATE_STOPWAIT_RX);
  2170. else
  2171. fsm_newstate(fi, DEV_STATE_STOPWAIT_TX);
  2172. break;
  2173. case DEV_STATE_STOPWAIT_RX:
  2174. if (event == DEV_EVENT_RXDOWN)
  2175. fsm_newstate(fi, DEV_STATE_STOPPED);
  2176. break;
  2177. case DEV_STATE_STOPWAIT_TX:
  2178. if (event == DEV_EVENT_TXDOWN)
  2179. fsm_newstate(fi, DEV_STATE_STOPPED);
  2180. break;
  2181. }
  2182. }
  2183. static const fsm_node dev_fsm[] = {
  2184. { DEV_STATE_STOPPED,        DEV_EVENT_START,   dev_action_start  },
  2185. { DEV_STATE_STOPWAIT_RXTX,  DEV_EVENT_START,   dev_action_start  },
  2186. { DEV_STATE_STOPWAIT_RXTX,  DEV_EVENT_RXDOWN,  dev_action_chdown },
  2187. { DEV_STATE_STOPWAIT_RXTX,  DEV_EVENT_TXDOWN,  dev_action_chdown },
  2188. { DEV_STATE_STOPWAIT_RX,    DEV_EVENT_START,   dev_action_start  },
  2189. { DEV_STATE_STOPWAIT_RX,    DEV_EVENT_RXUP,    dev_action_chup   },
  2190. { DEV_STATE_STOPWAIT_RX,    DEV_EVENT_TXUP,    dev_action_chup   },
  2191. { DEV_STATE_STOPWAIT_RX,    DEV_EVENT_RXDOWN,  dev_action_chdown },
  2192. { DEV_STATE_STOPWAIT_TX,    DEV_EVENT_START,   dev_action_start  },
  2193. { DEV_STATE_STOPWAIT_TX,    DEV_EVENT_RXUP,    dev_action_chup   },
  2194. { DEV_STATE_STOPWAIT_TX,    DEV_EVENT_TXUP,    dev_action_chup   },
  2195. { DEV_STATE_STOPWAIT_TX,    DEV_EVENT_TXDOWN,  dev_action_chdown },
  2196. { DEV_STATE_STARTWAIT_RXTX, DEV_EVENT_STOP,    dev_action_stop   },
  2197. { DEV_STATE_STARTWAIT_RXTX, DEV_EVENT_RXUP,    dev_action_chup   },
  2198. { DEV_STATE_STARTWAIT_RXTX, DEV_EVENT_TXUP,    dev_action_chup   },
  2199. { DEV_STATE_STARTWAIT_RXTX, DEV_EVENT_RXDOWN,  dev_action_chdown },
  2200. { DEV_STATE_STARTWAIT_RXTX, DEV_EVENT_TXDOWN,  dev_action_chdown },
  2201. { DEV_STATE_STARTWAIT_TX,   DEV_EVENT_STOP,    dev_action_stop   },
  2202. { DEV_STATE_STARTWAIT_TX,   DEV_EVENT_RXUP,    dev_action_chup   },
  2203. { DEV_STATE_STARTWAIT_TX,   DEV_EVENT_TXUP,    dev_action_chup   },
  2204. { DEV_STATE_STARTWAIT_TX,   DEV_EVENT_RXDOWN,  dev_action_chdown },
  2205. { DEV_STATE_STARTWAIT_RX,   DEV_EVENT_STOP,    dev_action_stop   },
  2206. { DEV_STATE_STARTWAIT_RX,   DEV_EVENT_RXUP,    dev_action_chup   },
  2207. { DEV_STATE_STARTWAIT_RX,   DEV_EVENT_TXUP,    dev_action_chup   },
  2208. { DEV_STATE_STARTWAIT_RX,   DEV_EVENT_TXDOWN,  dev_action_chdown },
  2209. { DEV_STATE_RUNNING,        DEV_EVENT_STOP,    dev_action_stop   },
  2210. { DEV_STATE_RUNNING,        DEV_EVENT_RXDOWN,  dev_action_chdown },
  2211. { DEV_STATE_RUNNING,        DEV_EVENT_TXDOWN,  dev_action_chdown },
  2212. { DEV_STATE_RUNNING,        DEV_EVENT_TXUP,    fsm_action_nop    },
  2213. { DEV_STATE_RUNNING,        DEV_EVENT_RXUP,    fsm_action_nop    },
  2214. };
  2215. static const int DEV_FSM_LEN = sizeof(dev_fsm) / sizeof(fsm_node);
  2216. /**
  2217.  * Transmit a packet.
  2218.  * This is a helper function for ctc_tx().
  2219.  *
  2220.  * @param ch Channel to be used for sending.
  2221.  * @param skb Pointer to struct sk_buff of packet to send.
  2222.  *            The linklevel header has already been set up
  2223.  *            by ctc_tx().
  2224.  *
  2225.  * @return 0 on success, -ERRNO on failure. (Never fails.)
  2226.  */
  2227. static int transmit_skb(channel *ch, struct sk_buff *skb) {
  2228. unsigned long saveflags;
  2229. ll_header header;
  2230. int       rc = 0;
  2231. if (fsm_getstate(ch->fsm) != CH_STATE_TXIDLE) {
  2232. int l = skb->len + LL_HEADER_LENGTH;
  2233. spin_lock_irqsave(&ch->collect_lock, saveflags);
  2234. if (ch->collect_len + l > ch->max_bufsize - 2)
  2235. rc = -EBUSY;
  2236. else {
  2237. atomic_inc(&skb->users);
  2238. header.length = l;
  2239. header.type = skb->protocol;
  2240. header.unused = 0;
  2241. memcpy(skb_push(skb, LL_HEADER_LENGTH), &header,
  2242.        LL_HEADER_LENGTH);
  2243. skb_queue_tail(&ch->collect_queue, skb);
  2244. ch->collect_len += l;
  2245. }
  2246. spin_unlock_irqrestore(&ch->collect_lock, saveflags);
  2247. } else {
  2248. __u16 block_len;
  2249. int ccw_idx;
  2250. struct sk_buff *nskb;
  2251. unsigned long hi;
  2252. /**
  2253.  * Protect skb against beeing free'd by upper
  2254.  * layers.
  2255.  */
  2256. atomic_inc(&skb->users);
  2257. ch->prof.txlen += skb->len;
  2258. header.length = skb->len + LL_HEADER_LENGTH;
  2259. header.type = skb->protocol;
  2260. header.unused = 0;
  2261. memcpy(skb_push(skb, LL_HEADER_LENGTH), &header,
  2262.        LL_HEADER_LENGTH);
  2263. block_len = skb->len + 2;
  2264. *((__u16 *)skb_push(skb, 2)) = block_len;
  2265. /**
  2266.  * IDAL support in CTC is broken, so we have to
  2267.  * care about skb's above 2G ourselves.
  2268.  */
  2269. hi = ((unsigned long)skb->tail + LL_HEADER_LENGTH) >> 31;
  2270. if (hi) {
  2271. nskb = alloc_skb(skb->len, GFP_ATOMIC | GFP_DMA);
  2272. if (!nskb) {
  2273. atomic_dec(&skb->users);
  2274. skb_pull(skb, LL_HEADER_LENGTH + 2);
  2275. return -ENOMEM;
  2276. } else {
  2277. memcpy(skb_put(nskb, skb->len),
  2278.        skb->data, skb->len);
  2279. atomic_inc(&nskb->users);
  2280. atomic_dec(&skb->users);
  2281. dev_kfree_skb_irq(skb);
  2282. skb = nskb;
  2283. }
  2284. }
  2285. ch->ccw[4].count = block_len;
  2286. if (set_normalized_cda(&ch->ccw[4], virt_to_phys(skb->data))) {
  2287. /**
  2288.  * idal allocation failed, try via copying to
  2289.  * trans_skb. trans_skb usually has a pre-allocated
  2290.  * idal.
  2291.  */
  2292. if (ctc_checkalloc_buffer(ch, 1)) {
  2293. /**
  2294.  * Remove our header. It gets added
  2295.  * again on retransmit.
  2296.  */
  2297. atomic_dec(&skb->users);
  2298. skb_pull(skb, LL_HEADER_LENGTH + 2);
  2299. return -EBUSY;
  2300. }
  2301. ch->trans_skb->tail = ch->trans_skb->data;
  2302. ch->trans_skb->len = 0;
  2303. ch->ccw[1].count = skb->len;
  2304. memcpy(skb_put(ch->trans_skb, skb->len), skb->data,
  2305.        skb->len);
  2306. atomic_dec(&skb->users);
  2307. dev_kfree_skb_irq(skb);
  2308. ccw_idx = 0;
  2309. } else {
  2310. skb_queue_tail(&ch->io_queue, skb);
  2311. ccw_idx = 3;
  2312. }
  2313. ch->retry = 0;
  2314. fsm_newstate(ch->fsm, CH_STATE_TX);
  2315. fsm_addtimer(&ch->timer, CTC_TIMEOUT_5SEC,
  2316.      CH_EVENT_TIMER, ch);
  2317. s390irq_spin_lock_irqsave(ch->irq, saveflags);
  2318. ch->prof.send_stamp = xtime;
  2319. rc = do_IO(ch->irq, &ch->ccw[ccw_idx], (intparm_t)ch, 0xff, 0);
  2320. s390irq_spin_unlock_irqrestore(ch->irq, saveflags);
  2321. if (ccw_idx == 3)
  2322. ch->prof.doios_single++;
  2323. if (rc != 0) {
  2324. fsm_deltimer(&ch->timer);
  2325. ccw_check_return_code(ch, rc);
  2326. if (ccw_idx == 3)
  2327. skb_dequeue_tail(&ch->io_queue);
  2328. /**
  2329.  * Remove our header. It gets added
  2330.  * again on retransmit.
  2331.  */
  2332. skb_pull(skb, LL_HEADER_LENGTH + 2);
  2333. } else {
  2334. if (ccw_idx == 0) {
  2335. net_device *dev = ch->netdev;
  2336. ctc_priv   *privptr = dev->priv;
  2337. privptr->stats.tx_packets++;
  2338. privptr->stats.tx_bytes +=
  2339. skb->len - LL_HEADER_LENGTH;
  2340. }
  2341. }
  2342. }
  2343. return rc;
  2344. }
  2345. /**
  2346.  * Interface API for upper network layers
  2347.  *****************************************************************************/
  2348. /**
  2349.  * Open an interface.
  2350.  * Called from generic network layer when ifconfig up is run.
  2351.  *
  2352.  * @param dev Pointer to interface struct.
  2353.  *
  2354.  * @return 0 on success, -ERRNO on failure. (Never fails.)
  2355.  */
  2356. static int ctc_open(net_device *dev) {
  2357. MOD_INC_USE_COUNT;
  2358. fsm_event(((ctc_priv *)dev->priv)->fsm, DEV_EVENT_START, dev);
  2359. return 0;
  2360. }
  2361. /**
  2362.  * Close an interface.
  2363.  * Called from generic network layer when ifconfig down is run.
  2364.  *
  2365.  * @param dev Pointer to interface struct.
  2366.  *
  2367.  * @return 0 on success, -ERRNO on failure. (Never fails.)
  2368.  */
  2369. static int ctc_close(net_device *dev) {
  2370. SET_DEVICE_START(dev, 0);
  2371. fsm_event(((ctc_priv *)dev->priv)->fsm, DEV_EVENT_STOP, dev);
  2372. MOD_DEC_USE_COUNT;
  2373. return 0;
  2374. }
  2375. /**
  2376.  * Start transmission of a packet.
  2377.  * Called from generic network device layer.
  2378.  *
  2379.  * @param skb Pointer to buffer containing the packet.
  2380.  * @param dev Pointer to interface struct.
  2381.  *
  2382.  * @return 0 if packet consumed, !0 if packet rejected.
  2383.  *         Note: If we return !0, then the packet is free'd by
  2384.  *               the generic network layer.
  2385.  */
  2386. static int ctc_tx(struct sk_buff *skb, net_device *dev)
  2387. {
  2388. int       rc = 0;
  2389. ctc_priv  *privptr = (ctc_priv *)dev->priv;
  2390. /**
  2391.  * Some sanity checks ...
  2392.  */
  2393. if (skb == NULL) {
  2394. printk(KERN_WARNING "%s: NULL sk_buff passedn", dev->name);
  2395. privptr->stats.tx_dropped++;
  2396. return 0;
  2397. }
  2398. if (skb_headroom(skb) < (LL_HEADER_LENGTH + 2)) {
  2399. printk(KERN_WARNING
  2400.        "%s: Got sk_buff with head room < %ld bytesn",
  2401.        dev->name, LL_HEADER_LENGTH + 2);
  2402. dev_kfree_skb(skb);
  2403. privptr->stats.tx_dropped++;
  2404. return 0;
  2405. }
  2406. /**
  2407.  * If channels are not running, try to restart them
  2408.  * notify anybody about a link failure and throw
  2409.  * away packet. 
  2410.  */
  2411. if (fsm_getstate(privptr->fsm) != DEV_STATE_RUNNING) {
  2412. fsm_event(privptr->fsm, DEV_EVENT_START, dev);
  2413. if (privptr->protocol == CTC_PROTO_LINUX_TTY)
  2414. return -EBUSY;
  2415. dst_link_failure(skb);
  2416. dev_kfree_skb(skb);
  2417. privptr->stats.tx_dropped++;
  2418. privptr->stats.tx_errors++;
  2419. privptr->stats.tx_carrier_errors++;
  2420. return 0;
  2421. }
  2422. if (ctc_test_and_set_busy(dev))
  2423. return -EBUSY;
  2424. dev->trans_start = jiffies;
  2425. if (transmit_skb(privptr->channel[WRITE], skb) != 0)
  2426. rc = 1;
  2427. ctc_clear_busy(dev);
  2428. return rc;
  2429. }
  2430. /**
  2431.  * Sets MTU of an interface.
  2432.  *
  2433.  * @param dev     Pointer to interface struct.
  2434.  * @param new_mtu The new MTU to use for this interface.
  2435.  *
  2436.  * @return 0 on success, -EINVAL if MTU is out of valid range.
  2437.  *         (valid range is 576 .. 65527). If VM is on the
  2438.  *         remote side, maximum MTU is 32760, however this is
  2439.  *         <em>not</em> checked here.
  2440.  */
  2441. static int ctc_change_mtu(net_device *dev, int new_mtu) {
  2442. ctc_priv  *privptr = (ctc_priv *)dev->priv;
  2443. if ((new_mtu < 576) || (new_mtu > 65527) ||
  2444.     (new_mtu > (privptr->channel[READ]->max_bufsize -
  2445. LL_HEADER_LENGTH - 2)))
  2446. return -EINVAL;
  2447. dev->mtu = new_mtu;
  2448. dev->hard_header_len = LL_HEADER_LENGTH + 2;
  2449. return 0;
  2450. }
  2451. /**
  2452.  * Returns interface statistics of a device.
  2453.  *
  2454.  * @param dev Pointer to interface struct.
  2455.  *
  2456.  * @return Pointer to stats struct of this interface.
  2457.  */
  2458. static struct net_device_stats *ctc_stats(net_device *dev) {
  2459. return &((ctc_priv *)dev->priv)->stats;
  2460. }
  2461. /**
  2462.  * procfs related structures and routines
  2463.  *****************************************************************************/
  2464. static net_device *find_netdev_by_ino(unsigned long ino)
  2465. {
  2466. channel *ch = channels;
  2467. net_device *dev = NULL;
  2468. ctc_priv *privptr;
  2469. while (ch) {
  2470. if (ch->netdev != dev) {
  2471. dev = ch->netdev;
  2472. privptr = (ctc_priv *)dev->priv;
  2473. if ((privptr->proc_ctrl_entry->low_ino == ino) ||
  2474.     (privptr->proc_stat_entry->low_ino == ino))
  2475. return dev;
  2476. }
  2477. ch = ch->next;
  2478. }
  2479. return NULL;
  2480. }
  2481. #if LINUX_VERSION_CODE < 0x020363
  2482. /**
  2483.  * Lock the module, if someone changes into
  2484.  * our proc directory.
  2485.  */
  2486. static void ctc_fill_inode(struct inode *inode, int fill)
  2487. {
  2488. if (fill) {
  2489. MOD_INC_USE_COUNT;
  2490. } else
  2491. MOD_DEC_USE_COUNT;
  2492. }
  2493. #endif
  2494. #define CTRL_BUFSIZE 40
  2495. static int ctc_ctrl_open(struct inode *inode, struct file *file)
  2496. {
  2497. file->private_data = kmalloc(CTRL_BUFSIZE, GFP_KERNEL);
  2498. if (file->private_data == NULL)
  2499. return -ENOMEM;
  2500. MOD_INC_USE_COUNT;
  2501. return 0;
  2502. }
  2503. static int ctc_ctrl_close(struct inode *inode, struct file *file)
  2504. {
  2505. kfree(file->private_data);
  2506. MOD_DEC_USE_COUNT;
  2507. return 0;
  2508. }
  2509. static ssize_t ctc_ctrl_write(struct file *file, const char *buf, size_t count,
  2510.    loff_t *off)
  2511. {
  2512. unsigned int ino = ((struct inode *)file->f_dentry->d_inode)->i_ino;
  2513. net_device   *dev;
  2514. ctc_priv     *privptr;
  2515. char         *e;
  2516. int          bs1;
  2517. char         tmp[40];
  2518. if (!(dev = find_netdev_by_ino(ino)))
  2519. return -ENODEV;
  2520. if (off != &file->f_pos)
  2521. return -ESPIPE;
  2522. privptr = (ctc_priv *)dev->priv;
  2523. if (count >= 39)
  2524. return -EINVAL;
  2525. if (copy_from_user(tmp, buf, count))
  2526. return -EFAULT;
  2527. tmp[count+1] = '';
  2528. bs1 = simple_strtoul(tmp, &e, 0);
  2529. if ((bs1 > CTC_BUFSIZE_LIMIT) ||
  2530.     (e && (!isspace(*e))))
  2531. return -EINVAL;
  2532. if ((dev->flags & IFF_RUNNING) &&
  2533.     (bs1 < (dev->mtu + LL_HEADER_LENGTH + 2)))
  2534. return -EINVAL;
  2535. if (bs1 < (576 + LL_HEADER_LENGTH + 2))
  2536. return -EINVAL;
  2537. privptr->channel[READ]->max_bufsize =
  2538. privptr->channel[WRITE]->max_bufsize = bs1;
  2539. if (!(dev->flags & IFF_RUNNING))
  2540. dev->mtu = bs1 - LL_HEADER_LENGTH - 2;
  2541. privptr->channel[READ]->flags |= CHANNEL_FLAGS_BUFSIZE_CHANGED;
  2542. privptr->channel[WRITE]->flags |= CHANNEL_FLAGS_BUFSIZE_CHANGED;
  2543. return count;
  2544. }
  2545. static ssize_t ctc_ctrl_read(struct file *file, char *buf, size_t count,
  2546.   loff_t *off)
  2547. {
  2548. unsigned int ino = ((struct inode *)file->f_dentry->d_inode)->i_ino;
  2549. char *sbuf = (char *)file->private_data;
  2550. net_device *dev;
  2551. ctc_priv *privptr;
  2552. ssize_t ret = 0;
  2553. char *p = sbuf;
  2554. int l;
  2555. if (!(dev = find_netdev_by_ino(ino)))
  2556. return -ENODEV;
  2557. if (off != &file->f_pos)
  2558. return -ESPIPE;
  2559. privptr = (ctc_priv *)dev->priv;
  2560. if (file->f_pos == 0)
  2561. sprintf(sbuf, "%dn", privptr->channel[READ]->max_bufsize);
  2562. l = strlen(sbuf);
  2563. p = sbuf;
  2564. if (file->f_pos < l) {
  2565. p += file->f_pos;
  2566. l = strlen(p);
  2567. ret = (count > l) ? l : count;
  2568. if (copy_to_user(buf, p, ret))
  2569. return -EFAULT;
  2570. }
  2571. file->f_pos += ret;
  2572. return ret;
  2573. }
  2574. #define STATS_BUFSIZE 2048
  2575. static int ctc_stat_open(struct inode *inode, struct file *file)
  2576. {
  2577. file->private_data = kmalloc(STATS_BUFSIZE, GFP_KERNEL);
  2578. if (file->private_data == NULL)
  2579. return -ENOMEM;
  2580. MOD_INC_USE_COUNT;
  2581. return 0;
  2582. }
  2583. static int ctc_stat_close(struct inode *inode, struct file *file)
  2584. {
  2585. kfree(file->private_data);
  2586. MOD_DEC_USE_COUNT;
  2587. return 0;
  2588. }
  2589. static ssize_t ctc_stat_write(struct file *file, const char *buf, size_t count,
  2590.       loff_t *off)
  2591. {
  2592. unsigned int ino = ((struct inode *)file->f_dentry->d_inode)->i_ino;
  2593. net_device *dev;
  2594. ctc_priv *privptr;
  2595. if (!(dev = find_netdev_by_ino(ino)))
  2596. return -ENODEV;
  2597. privptr = (ctc_priv *)dev->priv;
  2598. privptr->channel[WRITE]->prof.maxmulti = 0;
  2599. privptr->channel[WRITE]->prof.maxcqueue = 0;
  2600. privptr->channel[WRITE]->prof.doios_single = 0;
  2601. privptr->channel[WRITE]->prof.doios_multi = 0;
  2602. privptr->channel[WRITE]->prof.txlen = 0;
  2603. privptr->channel[WRITE]->prof.tx_time = 0;
  2604. return count;
  2605. }
  2606. static ssize_t ctc_stat_read(struct file *file, char *buf, size_t count,
  2607.       loff_t *off)
  2608. {
  2609. unsigned int ino = ((struct inode *)file->f_dentry->d_inode)->i_ino;
  2610. char *sbuf = (char *)file->private_data;
  2611. net_device *dev;
  2612. ctc_priv *privptr;
  2613. ssize_t ret = 0;
  2614. char *p = sbuf;
  2615. int l;
  2616. if (!(dev = find_netdev_by_ino(ino)))
  2617. return -ENODEV;
  2618. if (off != &file->f_pos)
  2619. return -ESPIPE;
  2620. privptr = (ctc_priv *)dev->priv;
  2621. if (file->f_pos == 0) {
  2622. p += sprintf(p, "Device FSM state: %sn",
  2623.      fsm_getstate_str(privptr->fsm));
  2624. p += sprintf(p, "RX channel FSM state: %sn",
  2625.      fsm_getstate_str(privptr->channel[READ]->fsm));
  2626. p += sprintf(p, "TX channel FSM state: %sn",
  2627.      fsm_getstate_str(privptr->channel[WRITE]->fsm));
  2628. p += sprintf(p, "Max. TX buffer used: %ldn",
  2629.      privptr->channel[WRITE]->prof.maxmulti);
  2630. p += sprintf(p, "Max. chained SKBs: %ldn",
  2631.      privptr->channel[WRITE]->prof.maxcqueue);
  2632. p += sprintf(p, "TX single write ops: %ldn",
  2633.      privptr->channel[WRITE]->prof.doios_single);
  2634. p += sprintf(p, "TX multi write ops: %ldn",
  2635.      privptr->channel[WRITE]->prof.doios_multi);
  2636. p += sprintf(p, "Netto bytes written: %ldn",
  2637.      privptr->channel[WRITE]->prof.txlen);
  2638. p += sprintf(p, "Max. TX IO-time: %ldn",
  2639.      privptr->channel[WRITE]->prof.tx_time);
  2640. }
  2641. l = strlen(sbuf);
  2642. p = sbuf;
  2643. if (file->f_pos < l) {
  2644. p += file->f_pos;
  2645. l = strlen(p);
  2646. ret = (count > l) ? l : count;
  2647. if (copy_to_user(buf, p, ret))
  2648. return -EFAULT;
  2649. }
  2650. file->f_pos += ret;
  2651. return ret;
  2652. }
  2653. static struct file_operations ctc_stat_fops = {
  2654. read:    ctc_stat_read,
  2655. write:   ctc_stat_write,
  2656. open:    ctc_stat_open,
  2657. release: ctc_stat_close,
  2658. };
  2659. static struct file_operations ctc_ctrl_fops = {
  2660. read:    ctc_ctrl_read,
  2661. write:   ctc_ctrl_write,
  2662. open:    ctc_ctrl_open,
  2663. release: ctc_ctrl_close,
  2664. };
  2665. static struct inode_operations ctc_stat_iops = {
  2666. #if LINUX_VERSION_CODE < 0x020363
  2667. default_file_ops: &ctc_stat_fops
  2668. #endif
  2669. };
  2670. static struct inode_operations ctc_ctrl_iops = {
  2671. #if LINUX_VERSION_CODE < 0x020363
  2672. default_file_ops: &ctc_ctrl_fops
  2673. #endif
  2674. };
  2675. static struct proc_dir_entry stat_entry = {
  2676. 0,                           /* low_ino */
  2677. 10,                          /* namelen */
  2678. "statistics",                /* name    */
  2679. S_IFREG | S_IRUGO | S_IWUSR, /* mode    */
  2680. 1,                           /* nlink   */
  2681. 0,                           /* uid     */
  2682. 0,                           /* gid     */
  2683. 0,                           /* size    */
  2684. &ctc_stat_iops               /* ops     */
  2685. };
  2686. static struct proc_dir_entry ctrl_entry = {
  2687. 0,                           /* low_ino */
  2688. 10,                          /* namelen */
  2689. "buffersize",                /* name    */
  2690. S_IFREG | S_IRUSR | S_IWUSR, /* mode    */
  2691. 1,                           /* nlink   */
  2692. 0,                           /* uid     */
  2693. 0,                           /* gid     */
  2694. 0,                           /* size    */
  2695. &ctc_ctrl_iops               /* ops     */
  2696. };
  2697. #if LINUX_VERSION_CODE < 0x020363
  2698. static struct proc_dir_entry ctc_dir = {
  2699. 0,                           /* low_ino  */
  2700. 3,                           /* namelen  */
  2701. "ctc",                       /* name     */
  2702. S_IFDIR | S_IRUGO | S_IXUGO, /* mode     */
  2703. 2,                           /* nlink    */
  2704. 0,                           /* uid      */
  2705. 0,                           /* gid      */
  2706. 0,                           /* size     */
  2707. 0,                           /* ops      */
  2708. 0,                           /* get_info */
  2709. ctc_fill_inode               /* fill_ino (for locking) */
  2710. };
  2711. static struct proc_dir_entry ctc_template =
  2712. {
  2713. 0,                           /* low_ino  */
  2714. 0,                           /* namelen  */
  2715. "",                          /* name     */
  2716. S_IFDIR | S_IRUGO | S_IXUGO, /* mode     */
  2717. 2,                           /* nlink    */
  2718. 0,                           /* uid      */
  2719. 0,                           /* gid      */
  2720. 0,                           /* size     */
  2721. 0,                           /* ops      */
  2722. 0,                           /* get_info */
  2723. ctc_fill_inode               /* fill_ino (for locking) */
  2724. };
  2725. #else
  2726. static struct proc_dir_entry *ctc_dir = NULL;
  2727. static struct proc_dir_entry *ctc_template = NULL;
  2728. #endif
  2729. /**
  2730.  * Create the driver's main directory /proc/net/ctc
  2731.  */
  2732. static void ctc_proc_create_main(void) {
  2733. /**
  2734.  * If not registered, register main proc dir-entry now
  2735.  */
  2736. #if LINUX_VERSION_CODE > 0x020362
  2737. if (!ctc_dir)
  2738. ctc_dir = proc_mkdir("ctc", proc_net);
  2739. #else
  2740. if (ctc_dir.low_ino == 0)
  2741. proc_net_register(&ctc_dir);
  2742. #endif
  2743. }
  2744. #ifdef MODULE
  2745. /**
  2746.  * Destroy /proc/net/ctc
  2747.  */
  2748. static void ctc_proc_destroy_main(void) {
  2749. #if LINUX_VERSION_CODE > 0x020362
  2750. remove_proc_entry("ctc", proc_net);
  2751. #else
  2752. proc_net_unregister(ctc_dir.low_ino);
  2753. #endif
  2754. }
  2755. #endif MODULE
  2756. /**
  2757.  * Create a device specific subdirectory in /proc/net/ctc/ with the
  2758.  * same name like the device. In that directory, create 2 entries
  2759.  * "statistics" and "buffersize".
  2760.  *
  2761.  * @param dev The device for which the subdirectory should be created.
  2762.  *
  2763.  */
  2764. static void ctc_proc_create_sub(net_device *dev) {
  2765. ctc_priv *privptr = dev->priv;
  2766. #if LINUX_VERSION_CODE > 0x020362
  2767. privptr->proc_dentry = proc_mkdir(dev->name, ctc_dir);
  2768. privptr->proc_stat_entry =
  2769. create_proc_entry("statistics",
  2770.   S_IFREG | S_IRUSR | S_IWUSR,
  2771.   privptr->proc_dentry);
  2772. privptr->proc_stat_entry->proc_fops = &ctc_stat_fops;
  2773. privptr->proc_stat_entry->proc_iops = &ctc_stat_iops;
  2774. privptr->proc_ctrl_entry =
  2775. create_proc_entry("buffersize",
  2776.   S_IFREG | S_IRUSR | S_IWUSR,
  2777.   privptr->proc_dentry);
  2778. privptr->proc_ctrl_entry->proc_fops = &ctc_ctrl_fops;
  2779. privptr->proc_ctrl_entry->proc_iops = &ctc_ctrl_iops;
  2780. #else
  2781. privptr->proc_dentry->name = dev->name;
  2782. privptr->proc_dentry->namelen = strlen(dev->name);
  2783. proc_register(&ctc_dir, privptr->proc_dentry);
  2784. proc_register(privptr->proc_dentry, privptr->proc_stat_entry);
  2785. proc_register(privptr->proc_dentry, privptr->proc_ctrl_entry);
  2786. #endif
  2787. privptr->proc_registered = 1;
  2788. }
  2789. /**
  2790.  * Destroy a device specific subdirectory.
  2791.  *
  2792.  * @param privptr Pointer to device private data.
  2793.  */
  2794. static void ctc_proc_destroy_sub(ctc_priv *privptr) {
  2795. if (!privptr->proc_registered)
  2796. return;
  2797. #if LINUX_VERSION_CODE > 0x020362
  2798. remove_proc_entry("statistics", privptr->proc_dentry);
  2799. remove_proc_entry("buffersize", privptr->proc_dentry);
  2800. remove_proc_entry(privptr->proc_dentry->name, ctc_dir);
  2801. #else
  2802. proc_unregister(privptr->proc_dentry,
  2803. privptr->proc_stat_entry->low_ino);
  2804. proc_unregister(privptr->proc_dentry,
  2805. privptr->proc_ctrl_entry->low_ino);
  2806. proc_unregister(&ctc_dir,
  2807. privptr->proc_dentry->low_ino);
  2808. #endif
  2809. privptr->proc_registered = 0;
  2810. }
  2811. #ifndef CTC_CHANDEV
  2812. /**
  2813.  * Setup related routines
  2814.  *****************************************************************************/
  2815. /**
  2816.  * Parse a portion of the setup string describing a single device or option
  2817.  * providing the following syntax:
  2818.  *
  2819.  * [Device/OptionName[:int1][:int2][:int3]]
  2820.  *
  2821.  *
  2822.  * @param setup    Pointer to a pointer to the remainder of the parameter
  2823.  *                 string to be parsed. On return, the content of this
  2824.  *                 pointer is updated to point to the first character after
  2825.  *                 the parsed portion (e.g. possible start of next portion)
  2826.  *                 NOTE: The string pointed to must be writeable, since a
  2827.  *                  is written for termination of the device/option name.
  2828.  *
  2829.  * @param dev_name Pointer to a pointer to the name of the device whose
  2830.  *                 parameters are parsed. On return, this is set to the
  2831.  *                 name of the device/option.
  2832.  *
  2833.  * @param ints     Pointer to an array of integer parameters. On return,
  2834.  *                 element 0 is set to the number of parameters found.
  2835.  *
  2836.  * @param maxip    Maximum number of ints to parse.
  2837.  *                 (ints[] must have size maxip+1)
  2838.  *
  2839.  * @return     0 if string "setup" was empty, !=0 otherwise
  2840.  */
  2841. static int parse_opts(char **setup, char **dev_name, int *ints, int maxip) {
  2842. char *cur = *setup;
  2843. int i = 1;
  2844. int rc = 0;
  2845. int in_name = 1;
  2846. int noauto = 0;
  2847. #ifdef DEBUG
  2848. printk(KERN_DEBUG
  2849.        "ctc: parse_opts(): *setup='%s', maxip=%dn", *setup, maxip);
  2850. #endif
  2851. if (*setup) {
  2852. *dev_name = *setup;
  2853. if (strncmp(cur, "ctc", 3) && strncmp(cur, "escon", 5) &&
  2854.     strncmp(cur, "noauto", 6)) {
  2855. if ((*setup = strchr(cur, ':')))
  2856. *(*setup)++ = '';
  2857. printk(KERN_WARNING
  2858.        "ctc: Invalid device name or option '%s'n",
  2859.        cur);
  2860. return 1;
  2861. }
  2862. switch (*cur) {
  2863. case 'c':
  2864. cur += 3;
  2865. break;
  2866. case 'e':
  2867. cur += 5;
  2868. break;
  2869. case 'n':
  2870. cur += 6;
  2871. *cur++ = '';
  2872. noauto = 1;
  2873. }
  2874. if (!noauto) {
  2875. while (cur &&
  2876.        (*cur == '-' || isdigit(*cur)) &&
  2877.        i <= maxip) {
  2878. if (in_name) {
  2879. cur++;
  2880. if (*cur == ':') {
  2881. *cur++ = '';
  2882. in_name = 0;
  2883. }
  2884. } else {
  2885. ints[i++] =
  2886. simple_strtoul(cur, NULL, 0);
  2887. #ifdef DEBUG
  2888. printk(KERN_DEBUG
  2889.        "ctc: %s: ints[%d]=%dn",
  2890.        __FUNCTION__,
  2891.        i-1, ints[i-1]);
  2892. #endif
  2893. if ((cur = strchr(cur, ':')) != NULL)
  2894. cur++;
  2895. }
  2896. }
  2897. }
  2898. ints[0] = i - 1;
  2899. *setup = cur;
  2900. if (cur && (*cur == ':'))
  2901. (*setup)++;
  2902. rc = 1;
  2903. }
  2904. return rc;
  2905. }
  2906. /**
  2907.  *
  2908.  * Allocate one param struct
  2909.  *
  2910.  * If the driver is loaded as a module this functions is called during
  2911.  *   module set up and we can allocate the struct by using kmalloc()
  2912.  *
  2913.  * If the driver is statically linked into the kernel this function is called
  2914.  * when kmalloc() is not yet available so we must allocate from a static array
  2915.  *
  2916.  */
  2917. #ifdef MODULE
  2918. #define alloc_param() ((param *)kmalloc(sizeof(param), GFP_KERNEL));
  2919. #else
  2920. static param parms_array[MAX_STATIC_DEVICES];
  2921. static param *next_param = parms_array;
  2922. #define alloc_param() 
  2923.         ((next_param<parms_array+MAX_STATIC_DEVICES)?next_param++:NULL)
  2924. #endif MODULE
  2925. /**
  2926.  * Returns commandline parameter using device name as key.
  2927.  *
  2928.  * @param name Name of interface to get parameters from.
  2929.  *
  2930.  * @return Pointer to corresponting param struct, NULL if not found.
  2931.  */
  2932. static param *find_param(char *name) {
  2933. param *p = params;
  2934. while (p && strcmp(p->name, name))
  2935. p = p->next;
  2936. return p;
  2937. }
  2938. /**
  2939.  * maximum number of integer parametes that may be specified
  2940.  * for one device in the setup string
  2941.  */
  2942. #define CTC_MAX_INTPARMS 3
  2943. /**
  2944.  * Parse configuration options for all interfaces.
  2945.  *
  2946.  * This function is called from two possible locations:
  2947.  *  - If built as module, this function is called from init_module().
  2948.  *  - If built in monolithic kernel, this function is called from within
  2949.  *    init/main.c.
  2950.  * Parsing is always done here.
  2951.  *
  2952.  * Valid parameters are:
  2953.  *
  2954.  *
  2955.  *   [NAME[:0xRRRR[:0xWWWW[:P]]]]
  2956.  *
  2957.  *     where P       is the channel protocol (always 0)
  2958.  *       0xRRRR is the cu number for the read channel
  2959.  *       0xWWWW is the cu number for the write channel
  2960.  *       NAME   is either ctc0 ... ctcN for CTC/A
  2961.  *                      or     escon0 ... esconN for Escon.
  2962.  *                      or     noauto
  2963.  *                             which switches off auto-detection of channels.
  2964.  *
  2965.  * @param setup    The parameter string to parse. MUST be writeable!
  2966.  * @param ints     Pointer to an array of ints. Only for kernel 2.2,
  2967.  *                 builtin (not module) version. With kernel 2.2,
  2968.  *                 normally all integer-parameters, preceeding some
  2969.  *                 configuration-string are pre-parsed in init/main.c
  2970.  *                 and handed over here.
  2971.  *                 To simplify 2.2/2.4 compatibility, by definition,
  2972.  *                 our parameters always start with a string and ints
  2973.  *                 is always unset and ignored.
  2974.  */
  2975. #ifdef MODULE
  2976.    static void ctc_setup(char *setup)
  2977. #  define ctc_setup_return return
  2978. #else MODULE
  2979. #  if LINUX_VERSION_CODE < 0x020300
  2980.      __initfunc(void ctc_setup(char *setup, int *ints))
  2981. #    define ctc_setup_return return
  2982. #    define ints local_ints
  2983. #  else
  2984.      static int __init ctc_setup(char *setup)
  2985. #    define ctc_setup_return return(1)
  2986. #  endif
  2987. #endif MODULE
  2988. {
  2989. int write_dev;
  2990. int read_dev;
  2991. int proto;
  2992. param *par;
  2993. char *dev_name;
  2994. int ints[CTC_MAX_INTPARMS+1];
  2995. while (parse_opts(&setup, &dev_name, ints, CTC_MAX_INTPARMS)) {
  2996. write_dev = -1;
  2997. read_dev = -1;
  2998. proto = CTC_PROTO_S390;
  2999. #ifdef DEBUG
  3000. printk(KERN_DEBUG
  3001.        "ctc: ctc_setup(): setup='%s' dev_name='%s',"
  3002.        " ints[0]=%d)n",
  3003.        setup, dev_name, ints[0]);
  3004. #endif DEBUG
  3005. if (dev_name == NULL) {
  3006. /**
  3007.  * happens if device name is not specified in
  3008.  * parameter line (cf. init/main.c:get_options()
  3009.  */
  3010. printk(KERN_WARNING
  3011.        "ctc: %s(): Device name not specifiedn",
  3012.        __FUNCTION__);
  3013. ctc_setup_return;
  3014. }
  3015. #ifdef DEBUG
  3016. printk(KERN_DEBUG "name=