]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/s390/net/netiucv.c
Merge tag 'stable/for-linus-3.11-rc6-tag' of git://git.kernel.org/pub/scm/linux/kerne...
[karo-tx-linux.git] / drivers / s390 / net / netiucv.c
1 /*
2  * IUCV network driver
3  *
4  * Copyright IBM Corp. 2001, 2009
5  *
6  * Author(s):
7  *      Original netiucv driver:
8  *              Fritz Elfert (elfert@de.ibm.com, felfert@millenux.com)
9  *      Sysfs integration and all bugs therein:
10  *              Cornelia Huck (cornelia.huck@de.ibm.com)
11  *      PM functions:
12  *              Ursula Braun (ursula.braun@de.ibm.com)
13  *
14  * Documentation used:
15  *  the source of the original IUCV driver by:
16  *    Stefan Hegewald <hegewald@de.ibm.com>
17  *    Hartmut Penner <hpenner@de.ibm.com>
18  *    Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
19  *    Martin Schwidefsky (schwidefsky@de.ibm.com)
20  *    Alan Altmark (Alan_Altmark@us.ibm.com)  Sept. 2000
21  *
22  * This program is free software; you can redistribute it and/or modify
23  * it under the terms of the GNU General Public License as published by
24  * the Free Software Foundation; either version 2, or (at your option)
25  * any later version.
26  *
27  * This program is distributed in the hope that it will be useful,
28  * but WITHOUT ANY WARRANTY; without even the implied warranty of
29  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
30  * GNU General Public License for more details.
31  *
32  * You should have received a copy of the GNU General Public License
33  * along with this program; if not, write to the Free Software
34  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
35  *
36  */
37
38 #define KMSG_COMPONENT "netiucv"
39 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
40
41 #undef DEBUG
42
43 #include <linux/module.h>
44 #include <linux/init.h>
45 #include <linux/kernel.h>
46 #include <linux/slab.h>
47 #include <linux/errno.h>
48 #include <linux/types.h>
49 #include <linux/interrupt.h>
50 #include <linux/timer.h>
51 #include <linux/bitops.h>
52
53 #include <linux/signal.h>
54 #include <linux/string.h>
55 #include <linux/device.h>
56
57 #include <linux/ip.h>
58 #include <linux/if_arp.h>
59 #include <linux/tcp.h>
60 #include <linux/skbuff.h>
61 #include <linux/ctype.h>
62 #include <net/dst.h>
63
64 #include <asm/io.h>
65 #include <asm/uaccess.h>
66 #include <asm/ebcdic.h>
67
68 #include <net/iucv/iucv.h>
69 #include "fsm.h"
70
71 MODULE_AUTHOR
72     ("(C) 2001 IBM Corporation by Fritz Elfert (felfert@millenux.com)");
73 MODULE_DESCRIPTION ("Linux for S/390 IUCV network driver");
74
75 /**
76  * Debug Facility stuff
77  */
78 #define IUCV_DBF_SETUP_NAME "iucv_setup"
79 #define IUCV_DBF_SETUP_LEN 64
80 #define IUCV_DBF_SETUP_PAGES 2
81 #define IUCV_DBF_SETUP_NR_AREAS 1
82 #define IUCV_DBF_SETUP_LEVEL 3
83
84 #define IUCV_DBF_DATA_NAME "iucv_data"
85 #define IUCV_DBF_DATA_LEN 128
86 #define IUCV_DBF_DATA_PAGES 2
87 #define IUCV_DBF_DATA_NR_AREAS 1
88 #define IUCV_DBF_DATA_LEVEL 2
89
90 #define IUCV_DBF_TRACE_NAME "iucv_trace"
91 #define IUCV_DBF_TRACE_LEN 16
92 #define IUCV_DBF_TRACE_PAGES 4
93 #define IUCV_DBF_TRACE_NR_AREAS 1
94 #define IUCV_DBF_TRACE_LEVEL 3
95
96 #define IUCV_DBF_TEXT(name,level,text) \
97         do { \
98                 debug_text_event(iucv_dbf_##name,level,text); \
99         } while (0)
100
101 #define IUCV_DBF_HEX(name,level,addr,len) \
102         do { \
103                 debug_event(iucv_dbf_##name,level,(void*)(addr),len); \
104         } while (0)
105
106 DECLARE_PER_CPU(char[256], iucv_dbf_txt_buf);
107
108 /* Allow to sort out low debug levels early to avoid wasted sprints */
109 static inline int iucv_dbf_passes(debug_info_t *dbf_grp, int level)
110 {
111         return (level <= dbf_grp->level);
112 }
113
114 #define IUCV_DBF_TEXT_(name, level, text...) \
115         do { \
116                 if (iucv_dbf_passes(iucv_dbf_##name, level)) { \
117                         char* __buf = get_cpu_var(iucv_dbf_txt_buf); \
118                         sprintf(__buf, text); \
119                         debug_text_event(iucv_dbf_##name, level, __buf); \
120                         put_cpu_var(iucv_dbf_txt_buf); \
121                 } \
122         } while (0)
123
124 #define IUCV_DBF_SPRINTF(name,level,text...) \
125         do { \
126                 debug_sprintf_event(iucv_dbf_trace, level, ##text ); \
127                 debug_sprintf_event(iucv_dbf_trace, level, text ); \
128         } while (0)
129
130 /**
131  * some more debug stuff
132  */
133 #define PRINTK_HEADER " iucv: "       /* for debugging */
134
135 /* dummy device to make sure netiucv_pm functions are called */
136 static struct device *netiucv_dev;
137
138 static int netiucv_pm_prepare(struct device *);
139 static void netiucv_pm_complete(struct device *);
140 static int netiucv_pm_freeze(struct device *);
141 static int netiucv_pm_restore_thaw(struct device *);
142
143 static const struct dev_pm_ops netiucv_pm_ops = {
144         .prepare = netiucv_pm_prepare,
145         .complete = netiucv_pm_complete,
146         .freeze = netiucv_pm_freeze,
147         .thaw = netiucv_pm_restore_thaw,
148         .restore = netiucv_pm_restore_thaw,
149 };
150
151 static struct device_driver netiucv_driver = {
152         .owner = THIS_MODULE,
153         .name = "netiucv",
154         .bus  = &iucv_bus,
155         .pm = &netiucv_pm_ops,
156 };
157
158 static int netiucv_callback_connreq(struct iucv_path *,
159                                     u8 ipvmid[8], u8 ipuser[16]);
160 static void netiucv_callback_connack(struct iucv_path *, u8 ipuser[16]);
161 static void netiucv_callback_connrej(struct iucv_path *, u8 ipuser[16]);
162 static void netiucv_callback_connsusp(struct iucv_path *, u8 ipuser[16]);
163 static void netiucv_callback_connres(struct iucv_path *, u8 ipuser[16]);
164 static void netiucv_callback_rx(struct iucv_path *, struct iucv_message *);
165 static void netiucv_callback_txdone(struct iucv_path *, struct iucv_message *);
166
167 static struct iucv_handler netiucv_handler = {
168         .path_pending     = netiucv_callback_connreq,
169         .path_complete    = netiucv_callback_connack,
170         .path_severed     = netiucv_callback_connrej,
171         .path_quiesced    = netiucv_callback_connsusp,
172         .path_resumed     = netiucv_callback_connres,
173         .message_pending  = netiucv_callback_rx,
174         .message_complete = netiucv_callback_txdone
175 };
176
177 /**
178  * Per connection profiling data
179  */
180 struct connection_profile {
181         unsigned long maxmulti;
182         unsigned long maxcqueue;
183         unsigned long doios_single;
184         unsigned long doios_multi;
185         unsigned long txlen;
186         unsigned long tx_time;
187         struct timespec send_stamp;
188         unsigned long tx_pending;
189         unsigned long tx_max_pending;
190 };
191
192 /**
193  * Representation of one iucv connection
194  */
195 struct iucv_connection {
196         struct list_head          list;
197         struct iucv_path          *path;
198         struct sk_buff            *rx_buff;
199         struct sk_buff            *tx_buff;
200         struct sk_buff_head       collect_queue;
201         struct sk_buff_head       commit_queue;
202         spinlock_t                collect_lock;
203         int                       collect_len;
204         int                       max_buffsize;
205         fsm_timer                 timer;
206         fsm_instance              *fsm;
207         struct net_device         *netdev;
208         struct connection_profile prof;
209         char                      userid[9];
210         char                      userdata[17];
211 };
212
213 /**
214  * Linked list of all connection structs.
215  */
216 static LIST_HEAD(iucv_connection_list);
217 static DEFINE_RWLOCK(iucv_connection_rwlock);
218
219 /**
220  * Representation of event-data for the
221  * connection state machine.
222  */
223 struct iucv_event {
224         struct iucv_connection *conn;
225         void                   *data;
226 };
227
228 /**
229  * Private part of the network device structure
230  */
231 struct netiucv_priv {
232         struct net_device_stats stats;
233         unsigned long           tbusy;
234         fsm_instance            *fsm;
235         struct iucv_connection  *conn;
236         struct device           *dev;
237         int                      pm_state;
238 };
239
240 /**
241  * Link level header for a packet.
242  */
243 struct ll_header {
244         u16 next;
245 };
246
247 #define NETIUCV_HDRLEN           (sizeof(struct ll_header))
248 #define NETIUCV_BUFSIZE_MAX      65537
249 #define NETIUCV_BUFSIZE_DEFAULT  NETIUCV_BUFSIZE_MAX
250 #define NETIUCV_MTU_MAX          (NETIUCV_BUFSIZE_MAX - NETIUCV_HDRLEN)
251 #define NETIUCV_MTU_DEFAULT      9216
252 #define NETIUCV_QUEUELEN_DEFAULT 50
253 #define NETIUCV_TIMEOUT_5SEC     5000
254
255 /**
256  * Compatibility macros for busy handling
257  * of network devices.
258  */
259 static inline void netiucv_clear_busy(struct net_device *dev)
260 {
261         struct netiucv_priv *priv = netdev_priv(dev);
262         clear_bit(0, &priv->tbusy);
263         netif_wake_queue(dev);
264 }
265
266 static inline int netiucv_test_and_set_busy(struct net_device *dev)
267 {
268         struct netiucv_priv *priv = netdev_priv(dev);
269         netif_stop_queue(dev);
270         return test_and_set_bit(0, &priv->tbusy);
271 }
272
273 static u8 iucvMagic_ascii[16] = {
274         0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
275         0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20
276 };
277
278 static u8 iucvMagic_ebcdic[16] = {
279         0xF0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
280         0xF0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40
281 };
282
283 /**
284  * Convert an iucv userId to its printable
285  * form (strip whitespace at end).
286  *
287  * @param An iucv userId
288  *
289  * @returns The printable string (static data!!)
290  */
291 static char *netiucv_printname(char *name, int len)
292 {
293         static char tmp[17];
294         char *p = tmp;
295         memcpy(tmp, name, len);
296         tmp[len] = '\0';
297         while (*p && ((p - tmp) < len) && (!isspace(*p)))
298                 p++;
299         *p = '\0';
300         return tmp;
301 }
302
303 static char *netiucv_printuser(struct iucv_connection *conn)
304 {
305         static char tmp_uid[9];
306         static char tmp_udat[17];
307         static char buf[100];
308
309         if (memcmp(conn->userdata, iucvMagic_ebcdic, 16)) {
310                 tmp_uid[8] = '\0';
311                 tmp_udat[16] = '\0';
312                 memcpy(tmp_uid, conn->userid, 8);
313                 memcpy(tmp_uid, netiucv_printname(tmp_uid, 8), 8);
314                 memcpy(tmp_udat, conn->userdata, 16);
315                 EBCASC(tmp_udat, 16);
316                 memcpy(tmp_udat, netiucv_printname(tmp_udat, 16), 16);
317                 sprintf(buf, "%s.%s", tmp_uid, tmp_udat);
318                 return buf;
319         } else
320                 return netiucv_printname(conn->userid, 8);
321 }
322
323 /**
324  * States of the interface statemachine.
325  */
326 enum dev_states {
327         DEV_STATE_STOPPED,
328         DEV_STATE_STARTWAIT,
329         DEV_STATE_STOPWAIT,
330         DEV_STATE_RUNNING,
331         /**
332          * MUST be always the last element!!
333          */
334         NR_DEV_STATES
335 };
336
337 static const char *dev_state_names[] = {
338         "Stopped",
339         "StartWait",
340         "StopWait",
341         "Running",
342 };
343
344 /**
345  * Events of the interface statemachine.
346  */
347 enum dev_events {
348         DEV_EVENT_START,
349         DEV_EVENT_STOP,
350         DEV_EVENT_CONUP,
351         DEV_EVENT_CONDOWN,
352         /**
353          * MUST be always the last element!!
354          */
355         NR_DEV_EVENTS
356 };
357
358 static const char *dev_event_names[] = {
359         "Start",
360         "Stop",
361         "Connection up",
362         "Connection down",
363 };
364
365 /**
366  * Events of the connection statemachine
367  */
368 enum conn_events {
369         /**
370          * Events, representing callbacks from
371          * lowlevel iucv layer)
372          */
373         CONN_EVENT_CONN_REQ,
374         CONN_EVENT_CONN_ACK,
375         CONN_EVENT_CONN_REJ,
376         CONN_EVENT_CONN_SUS,
377         CONN_EVENT_CONN_RES,
378         CONN_EVENT_RX,
379         CONN_EVENT_TXDONE,
380
381         /**
382          * Events, representing errors return codes from
383          * calls to lowlevel iucv layer
384          */
385
386         /**
387          * Event, representing timer expiry.
388          */
389         CONN_EVENT_TIMER,
390
391         /**
392          * Events, representing commands from upper levels.
393          */
394         CONN_EVENT_START,
395         CONN_EVENT_STOP,
396
397         /**
398          * MUST be always the last element!!
399          */
400         NR_CONN_EVENTS,
401 };
402
403 static const char *conn_event_names[] = {
404         "Remote connection request",
405         "Remote connection acknowledge",
406         "Remote connection reject",
407         "Connection suspended",
408         "Connection resumed",
409         "Data received",
410         "Data sent",
411
412         "Timer",
413
414         "Start",
415         "Stop",
416 };
417
418 /**
419  * States of the connection statemachine.
420  */
421 enum conn_states {
422         /**
423          * Connection not assigned to any device,
424          * initial state, invalid
425          */
426         CONN_STATE_INVALID,
427
428         /**
429          * Userid assigned but not operating
430          */
431         CONN_STATE_STOPPED,
432
433         /**
434          * Connection registered,
435          * no connection request sent yet,
436          * no connection request received
437          */
438         CONN_STATE_STARTWAIT,
439
440         /**
441          * Connection registered and connection request sent,
442          * no acknowledge and no connection request received yet.
443          */
444         CONN_STATE_SETUPWAIT,
445
446         /**
447          * Connection up and running idle
448          */
449         CONN_STATE_IDLE,
450
451         /**
452          * Data sent, awaiting CONN_EVENT_TXDONE
453          */
454         CONN_STATE_TX,
455
456         /**
457          * Error during registration.
458          */
459         CONN_STATE_REGERR,
460
461         /**
462          * Error during registration.
463          */
464         CONN_STATE_CONNERR,
465
466         /**
467          * MUST be always the last element!!
468          */
469         NR_CONN_STATES,
470 };
471
472 static const char *conn_state_names[] = {
473         "Invalid",
474         "Stopped",
475         "StartWait",
476         "SetupWait",
477         "Idle",
478         "TX",
479         "Terminating",
480         "Registration error",
481         "Connect error",
482 };
483
484
485 /**
486  * Debug Facility Stuff
487  */
488 static debug_info_t *iucv_dbf_setup = NULL;
489 static debug_info_t *iucv_dbf_data = NULL;
490 static debug_info_t *iucv_dbf_trace = NULL;
491
492 DEFINE_PER_CPU(char[256], iucv_dbf_txt_buf);
493
494 static void iucv_unregister_dbf_views(void)
495 {
496         if (iucv_dbf_setup)
497                 debug_unregister(iucv_dbf_setup);
498         if (iucv_dbf_data)
499                 debug_unregister(iucv_dbf_data);
500         if (iucv_dbf_trace)
501                 debug_unregister(iucv_dbf_trace);
502 }
503 static int iucv_register_dbf_views(void)
504 {
505         iucv_dbf_setup = debug_register(IUCV_DBF_SETUP_NAME,
506                                         IUCV_DBF_SETUP_PAGES,
507                                         IUCV_DBF_SETUP_NR_AREAS,
508                                         IUCV_DBF_SETUP_LEN);
509         iucv_dbf_data = debug_register(IUCV_DBF_DATA_NAME,
510                                        IUCV_DBF_DATA_PAGES,
511                                        IUCV_DBF_DATA_NR_AREAS,
512                                        IUCV_DBF_DATA_LEN);
513         iucv_dbf_trace = debug_register(IUCV_DBF_TRACE_NAME,
514                                         IUCV_DBF_TRACE_PAGES,
515                                         IUCV_DBF_TRACE_NR_AREAS,
516                                         IUCV_DBF_TRACE_LEN);
517
518         if ((iucv_dbf_setup == NULL) || (iucv_dbf_data == NULL) ||
519             (iucv_dbf_trace == NULL)) {
520                 iucv_unregister_dbf_views();
521                 return -ENOMEM;
522         }
523         debug_register_view(iucv_dbf_setup, &debug_hex_ascii_view);
524         debug_set_level(iucv_dbf_setup, IUCV_DBF_SETUP_LEVEL);
525
526         debug_register_view(iucv_dbf_data, &debug_hex_ascii_view);
527         debug_set_level(iucv_dbf_data, IUCV_DBF_DATA_LEVEL);
528
529         debug_register_view(iucv_dbf_trace, &debug_hex_ascii_view);
530         debug_set_level(iucv_dbf_trace, IUCV_DBF_TRACE_LEVEL);
531
532         return 0;
533 }
534
535 /*
536  * Callback-wrappers, called from lowlevel iucv layer.
537  */
538
539 static void netiucv_callback_rx(struct iucv_path *path,
540                                 struct iucv_message *msg)
541 {
542         struct iucv_connection *conn = path->private;
543         struct iucv_event ev;
544
545         ev.conn = conn;
546         ev.data = msg;
547         fsm_event(conn->fsm, CONN_EVENT_RX, &ev);
548 }
549
550 static void netiucv_callback_txdone(struct iucv_path *path,
551                                     struct iucv_message *msg)
552 {
553         struct iucv_connection *conn = path->private;
554         struct iucv_event ev;
555
556         ev.conn = conn;
557         ev.data = msg;
558         fsm_event(conn->fsm, CONN_EVENT_TXDONE, &ev);
559 }
560
561 static void netiucv_callback_connack(struct iucv_path *path, u8 ipuser[16])
562 {
563         struct iucv_connection *conn = path->private;
564
565         fsm_event(conn->fsm, CONN_EVENT_CONN_ACK, conn);
566 }
567
568 static int netiucv_callback_connreq(struct iucv_path *path,
569                                     u8 ipvmid[8], u8 ipuser[16])
570 {
571         struct iucv_connection *conn = path->private;
572         struct iucv_event ev;
573         static char tmp_user[9];
574         static char tmp_udat[17];
575         int rc;
576
577         rc = -EINVAL;
578         memcpy(tmp_user, netiucv_printname(ipvmid, 8), 8);
579         memcpy(tmp_udat, ipuser, 16);
580         EBCASC(tmp_udat, 16);
581         read_lock_bh(&iucv_connection_rwlock);
582         list_for_each_entry(conn, &iucv_connection_list, list) {
583                 if (strncmp(ipvmid, conn->userid, 8) ||
584                     strncmp(ipuser, conn->userdata, 16))
585                         continue;
586                 /* Found a matching connection for this path. */
587                 conn->path = path;
588                 ev.conn = conn;
589                 ev.data = path;
590                 fsm_event(conn->fsm, CONN_EVENT_CONN_REQ, &ev);
591                 rc = 0;
592         }
593         IUCV_DBF_TEXT_(setup, 2, "Connection requested for %s.%s\n",
594                        tmp_user, netiucv_printname(tmp_udat, 16));
595         read_unlock_bh(&iucv_connection_rwlock);
596         return rc;
597 }
598
599 static void netiucv_callback_connrej(struct iucv_path *path, u8 ipuser[16])
600 {
601         struct iucv_connection *conn = path->private;
602
603         fsm_event(conn->fsm, CONN_EVENT_CONN_REJ, conn);
604 }
605
606 static void netiucv_callback_connsusp(struct iucv_path *path, u8 ipuser[16])
607 {
608         struct iucv_connection *conn = path->private;
609
610         fsm_event(conn->fsm, CONN_EVENT_CONN_SUS, conn);
611 }
612
613 static void netiucv_callback_connres(struct iucv_path *path, u8 ipuser[16])
614 {
615         struct iucv_connection *conn = path->private;
616
617         fsm_event(conn->fsm, CONN_EVENT_CONN_RES, conn);
618 }
619
620 /**
621  * NOP action for statemachines
622  */
623 static void netiucv_action_nop(fsm_instance *fi, int event, void *arg)
624 {
625 }
626
627 /*
628  * Actions of the connection statemachine
629  */
630
631 /**
632  * netiucv_unpack_skb
633  * @conn: The connection where this skb has been received.
634  * @pskb: The received skb.
635  *
636  * Unpack a just received skb and hand it over to upper layers.
637  * Helper function for conn_action_rx.
638  */
639 static void netiucv_unpack_skb(struct iucv_connection *conn,
640                                struct sk_buff *pskb)
641 {
642         struct net_device     *dev = conn->netdev;
643         struct netiucv_priv   *privptr = netdev_priv(dev);
644         u16 offset = 0;
645
646         skb_put(pskb, NETIUCV_HDRLEN);
647         pskb->dev = dev;
648         pskb->ip_summed = CHECKSUM_NONE;
649         pskb->protocol = ntohs(ETH_P_IP);
650
651         while (1) {
652                 struct sk_buff *skb;
653                 struct ll_header *header = (struct ll_header *) pskb->data;
654
655                 if (!header->next)
656                         break;
657
658                 skb_pull(pskb, NETIUCV_HDRLEN);
659                 header->next -= offset;
660                 offset += header->next;
661                 header->next -= NETIUCV_HDRLEN;
662                 if (skb_tailroom(pskb) < header->next) {
663                         IUCV_DBF_TEXT_(data, 2, "Illegal next field: %d > %d\n",
664                                 header->next, skb_tailroom(pskb));
665                         return;
666                 }
667                 skb_put(pskb, header->next);
668                 skb_reset_mac_header(pskb);
669                 skb = dev_alloc_skb(pskb->len);
670                 if (!skb) {
671                         IUCV_DBF_TEXT(data, 2,
672                                 "Out of memory in netiucv_unpack_skb\n");
673                         privptr->stats.rx_dropped++;
674                         return;
675                 }
676                 skb_copy_from_linear_data(pskb, skb_put(skb, pskb->len),
677                                           pskb->len);
678                 skb_reset_mac_header(skb);
679                 skb->dev = pskb->dev;
680                 skb->protocol = pskb->protocol;
681                 pskb->ip_summed = CHECKSUM_UNNECESSARY;
682                 privptr->stats.rx_packets++;
683                 privptr->stats.rx_bytes += skb->len;
684                 /*
685                  * Since receiving is always initiated from a tasklet (in iucv.c),
686                  * we must use netif_rx_ni() instead of netif_rx()
687                  */
688                 netif_rx_ni(skb);
689                 skb_pull(pskb, header->next);
690                 skb_put(pskb, NETIUCV_HDRLEN);
691         }
692 }
693
694 static void conn_action_rx(fsm_instance *fi, int event, void *arg)
695 {
696         struct iucv_event *ev = arg;
697         struct iucv_connection *conn = ev->conn;
698         struct iucv_message *msg = ev->data;
699         struct netiucv_priv *privptr = netdev_priv(conn->netdev);
700         int rc;
701
702         IUCV_DBF_TEXT(trace, 4, __func__);
703
704         if (!conn->netdev) {
705                 iucv_message_reject(conn->path, msg);
706                 IUCV_DBF_TEXT(data, 2,
707                               "Received data for unlinked connection\n");
708                 return;
709         }
710         if (msg->length > conn->max_buffsize) {
711                 iucv_message_reject(conn->path, msg);
712                 privptr->stats.rx_dropped++;
713                 IUCV_DBF_TEXT_(data, 2, "msglen %d > max_buffsize %d\n",
714                                msg->length, conn->max_buffsize);
715                 return;
716         }
717         conn->rx_buff->data = conn->rx_buff->head;
718         skb_reset_tail_pointer(conn->rx_buff);
719         conn->rx_buff->len = 0;
720         rc = iucv_message_receive(conn->path, msg, 0, conn->rx_buff->data,
721                                   msg->length, NULL);
722         if (rc || msg->length < 5) {
723                 privptr->stats.rx_errors++;
724                 IUCV_DBF_TEXT_(data, 2, "rc %d from iucv_receive\n", rc);
725                 return;
726         }
727         netiucv_unpack_skb(conn, conn->rx_buff);
728 }
729
730 static void conn_action_txdone(fsm_instance *fi, int event, void *arg)
731 {
732         struct iucv_event *ev = arg;
733         struct iucv_connection *conn = ev->conn;
734         struct iucv_message *msg = ev->data;
735         struct iucv_message txmsg;
736         struct netiucv_priv *privptr = NULL;
737         u32 single_flag = msg->tag;
738         u32 txbytes = 0;
739         u32 txpackets = 0;
740         u32 stat_maxcq = 0;
741         struct sk_buff *skb;
742         unsigned long saveflags;
743         struct ll_header header;
744         int rc;
745
746         IUCV_DBF_TEXT(trace, 4, __func__);
747
748         if (conn && conn->netdev)
749                 privptr = netdev_priv(conn->netdev);
750         conn->prof.tx_pending--;
751         if (single_flag) {
752                 if ((skb = skb_dequeue(&conn->commit_queue))) {
753                         atomic_dec(&skb->users);
754                         if (privptr) {
755                                 privptr->stats.tx_packets++;
756                                 privptr->stats.tx_bytes +=
757                                         (skb->len - NETIUCV_HDRLEN
758                                                   - NETIUCV_HDRLEN);
759                         }
760                         dev_kfree_skb_any(skb);
761                 }
762         }
763         conn->tx_buff->data = conn->tx_buff->head;
764         skb_reset_tail_pointer(conn->tx_buff);
765         conn->tx_buff->len = 0;
766         spin_lock_irqsave(&conn->collect_lock, saveflags);
767         while ((skb = skb_dequeue(&conn->collect_queue))) {
768                 header.next = conn->tx_buff->len + skb->len + NETIUCV_HDRLEN;
769                 memcpy(skb_put(conn->tx_buff, NETIUCV_HDRLEN), &header,
770                        NETIUCV_HDRLEN);
771                 skb_copy_from_linear_data(skb,
772                                           skb_put(conn->tx_buff, skb->len),
773                                           skb->len);
774                 txbytes += skb->len;
775                 txpackets++;
776                 stat_maxcq++;
777                 atomic_dec(&skb->users);
778                 dev_kfree_skb_any(skb);
779         }
780         if (conn->collect_len > conn->prof.maxmulti)
781                 conn->prof.maxmulti = conn->collect_len;
782         conn->collect_len = 0;
783         spin_unlock_irqrestore(&conn->collect_lock, saveflags);
784         if (conn->tx_buff->len == 0) {
785                 fsm_newstate(fi, CONN_STATE_IDLE);
786                 return;
787         }
788
789         header.next = 0;
790         memcpy(skb_put(conn->tx_buff, NETIUCV_HDRLEN), &header, NETIUCV_HDRLEN);
791         conn->prof.send_stamp = current_kernel_time();
792         txmsg.class = 0;
793         txmsg.tag = 0;
794         rc = iucv_message_send(conn->path, &txmsg, 0, 0,
795                                conn->tx_buff->data, conn->tx_buff->len);
796         conn->prof.doios_multi++;
797         conn->prof.txlen += conn->tx_buff->len;
798         conn->prof.tx_pending++;
799         if (conn->prof.tx_pending > conn->prof.tx_max_pending)
800                 conn->prof.tx_max_pending = conn->prof.tx_pending;
801         if (rc) {
802                 conn->prof.tx_pending--;
803                 fsm_newstate(fi, CONN_STATE_IDLE);
804                 if (privptr)
805                         privptr->stats.tx_errors += txpackets;
806                 IUCV_DBF_TEXT_(data, 2, "rc %d from iucv_send\n", rc);
807         } else {
808                 if (privptr) {
809                         privptr->stats.tx_packets += txpackets;
810                         privptr->stats.tx_bytes += txbytes;
811                 }
812                 if (stat_maxcq > conn->prof.maxcqueue)
813                         conn->prof.maxcqueue = stat_maxcq;
814         }
815 }
816
817 static void conn_action_connaccept(fsm_instance *fi, int event, void *arg)
818 {
819         struct iucv_event *ev = arg;
820         struct iucv_connection *conn = ev->conn;
821         struct iucv_path *path = ev->data;
822         struct net_device *netdev = conn->netdev;
823         struct netiucv_priv *privptr = netdev_priv(netdev);
824         int rc;
825
826         IUCV_DBF_TEXT(trace, 3, __func__);
827
828         conn->path = path;
829         path->msglim = NETIUCV_QUEUELEN_DEFAULT;
830         path->flags = 0;
831         rc = iucv_path_accept(path, &netiucv_handler, conn->userdata , conn);
832         if (rc) {
833                 IUCV_DBF_TEXT_(setup, 2, "rc %d from iucv_accept", rc);
834                 return;
835         }
836         fsm_newstate(fi, CONN_STATE_IDLE);
837         netdev->tx_queue_len = conn->path->msglim;
838         fsm_event(privptr->fsm, DEV_EVENT_CONUP, netdev);
839 }
840
841 static void conn_action_connreject(fsm_instance *fi, int event, void *arg)
842 {
843         struct iucv_event *ev = arg;
844         struct iucv_path *path = ev->data;
845
846         IUCV_DBF_TEXT(trace, 3, __func__);
847         iucv_path_sever(path, NULL);
848 }
849
850 static void conn_action_connack(fsm_instance *fi, int event, void *arg)
851 {
852         struct iucv_connection *conn = arg;
853         struct net_device *netdev = conn->netdev;
854         struct netiucv_priv *privptr = netdev_priv(netdev);
855
856         IUCV_DBF_TEXT(trace, 3, __func__);
857         fsm_deltimer(&conn->timer);
858         fsm_newstate(fi, CONN_STATE_IDLE);
859         netdev->tx_queue_len = conn->path->msglim;
860         fsm_event(privptr->fsm, DEV_EVENT_CONUP, netdev);
861 }
862
863 static void conn_action_conntimsev(fsm_instance *fi, int event, void *arg)
864 {
865         struct iucv_connection *conn = arg;
866
867         IUCV_DBF_TEXT(trace, 3, __func__);
868         fsm_deltimer(&conn->timer);
869         iucv_path_sever(conn->path, conn->userdata);
870         fsm_newstate(fi, CONN_STATE_STARTWAIT);
871 }
872
873 static void conn_action_connsever(fsm_instance *fi, int event, void *arg)
874 {
875         struct iucv_connection *conn = arg;
876         struct net_device *netdev = conn->netdev;
877         struct netiucv_priv *privptr = netdev_priv(netdev);
878
879         IUCV_DBF_TEXT(trace, 3, __func__);
880
881         fsm_deltimer(&conn->timer);
882         iucv_path_sever(conn->path, conn->userdata);
883         dev_info(privptr->dev, "The peer z/VM guest %s has closed the "
884                                "connection\n", netiucv_printuser(conn));
885         IUCV_DBF_TEXT(data, 2,
886                       "conn_action_connsever: Remote dropped connection\n");
887         fsm_newstate(fi, CONN_STATE_STARTWAIT);
888         fsm_event(privptr->fsm, DEV_EVENT_CONDOWN, netdev);
889 }
890
891 static void conn_action_start(fsm_instance *fi, int event, void *arg)
892 {
893         struct iucv_connection *conn = arg;
894         struct net_device *netdev = conn->netdev;
895         struct netiucv_priv *privptr = netdev_priv(netdev);
896         int rc;
897
898         IUCV_DBF_TEXT(trace, 3, __func__);
899
900         fsm_newstate(fi, CONN_STATE_STARTWAIT);
901
902         /*
903          * We must set the state before calling iucv_connect because the
904          * callback handler could be called at any point after the connection
905          * request is sent
906          */
907
908         fsm_newstate(fi, CONN_STATE_SETUPWAIT);
909         conn->path = iucv_path_alloc(NETIUCV_QUEUELEN_DEFAULT, 0, GFP_KERNEL);
910         IUCV_DBF_TEXT_(setup, 2, "%s: connecting to %s ...\n",
911                 netdev->name, netiucv_printuser(conn));
912
913         rc = iucv_path_connect(conn->path, &netiucv_handler, conn->userid,
914                                NULL, conn->userdata, conn);
915         switch (rc) {
916         case 0:
917                 netdev->tx_queue_len = conn->path->msglim;
918                 fsm_addtimer(&conn->timer, NETIUCV_TIMEOUT_5SEC,
919                              CONN_EVENT_TIMER, conn);
920                 return;
921         case 11:
922                 dev_warn(privptr->dev,
923                         "The IUCV device failed to connect to z/VM guest %s\n",
924                         netiucv_printname(conn->userid, 8));
925                 fsm_newstate(fi, CONN_STATE_STARTWAIT);
926                 break;
927         case 12:
928                 dev_warn(privptr->dev,
929                         "The IUCV device failed to connect to the peer on z/VM"
930                         " guest %s\n", netiucv_printname(conn->userid, 8));
931                 fsm_newstate(fi, CONN_STATE_STARTWAIT);
932                 break;
933         case 13:
934                 dev_err(privptr->dev,
935                         "Connecting the IUCV device would exceed the maximum"
936                         " number of IUCV connections\n");
937                 fsm_newstate(fi, CONN_STATE_CONNERR);
938                 break;
939         case 14:
940                 dev_err(privptr->dev,
941                         "z/VM guest %s has too many IUCV connections"
942                         " to connect with the IUCV device\n",
943                         netiucv_printname(conn->userid, 8));
944                 fsm_newstate(fi, CONN_STATE_CONNERR);
945                 break;
946         case 15:
947                 dev_err(privptr->dev,
948                         "The IUCV device cannot connect to a z/VM guest with no"
949                         " IUCV authorization\n");
950                 fsm_newstate(fi, CONN_STATE_CONNERR);
951                 break;
952         default:
953                 dev_err(privptr->dev,
954                         "Connecting the IUCV device failed with error %d\n",
955                         rc);
956                 fsm_newstate(fi, CONN_STATE_CONNERR);
957                 break;
958         }
959         IUCV_DBF_TEXT_(setup, 5, "iucv_connect rc is %d\n", rc);
960         kfree(conn->path);
961         conn->path = NULL;
962 }
963
964 static void netiucv_purge_skb_queue(struct sk_buff_head *q)
965 {
966         struct sk_buff *skb;
967
968         while ((skb = skb_dequeue(q))) {
969                 atomic_dec(&skb->users);
970                 dev_kfree_skb_any(skb);
971         }
972 }
973
974 static void conn_action_stop(fsm_instance *fi, int event, void *arg)
975 {
976         struct iucv_event *ev = arg;
977         struct iucv_connection *conn = ev->conn;
978         struct net_device *netdev = conn->netdev;
979         struct netiucv_priv *privptr = netdev_priv(netdev);
980
981         IUCV_DBF_TEXT(trace, 3, __func__);
982
983         fsm_deltimer(&conn->timer);
984         fsm_newstate(fi, CONN_STATE_STOPPED);
985         netiucv_purge_skb_queue(&conn->collect_queue);
986         if (conn->path) {
987                 IUCV_DBF_TEXT(trace, 5, "calling iucv_path_sever\n");
988                 iucv_path_sever(conn->path, conn->userdata);
989                 kfree(conn->path);
990                 conn->path = NULL;
991         }
992         netiucv_purge_skb_queue(&conn->commit_queue);
993         fsm_event(privptr->fsm, DEV_EVENT_CONDOWN, netdev);
994 }
995
996 static void conn_action_inval(fsm_instance *fi, int event, void *arg)
997 {
998         struct iucv_connection *conn = arg;
999         struct net_device *netdev = conn->netdev;
1000
1001         IUCV_DBF_TEXT_(data, 2, "%s('%s'): conn_action_inval called\n",
1002                 netdev->name, conn->userid);
1003 }
1004
1005 static const fsm_node conn_fsm[] = {
1006         { CONN_STATE_INVALID,   CONN_EVENT_START,    conn_action_inval      },
1007         { CONN_STATE_STOPPED,   CONN_EVENT_START,    conn_action_start      },
1008
1009         { CONN_STATE_STOPPED,   CONN_EVENT_STOP,     conn_action_stop       },
1010         { CONN_STATE_STARTWAIT, CONN_EVENT_STOP,     conn_action_stop       },
1011         { CONN_STATE_SETUPWAIT, CONN_EVENT_STOP,     conn_action_stop       },
1012         { CONN_STATE_IDLE,      CONN_EVENT_STOP,     conn_action_stop       },
1013         { CONN_STATE_TX,        CONN_EVENT_STOP,     conn_action_stop       },
1014         { CONN_STATE_REGERR,    CONN_EVENT_STOP,     conn_action_stop       },
1015         { CONN_STATE_CONNERR,   CONN_EVENT_STOP,     conn_action_stop       },
1016
1017         { CONN_STATE_STOPPED,   CONN_EVENT_CONN_REQ, conn_action_connreject },
1018         { CONN_STATE_STARTWAIT, CONN_EVENT_CONN_REQ, conn_action_connaccept },
1019         { CONN_STATE_SETUPWAIT, CONN_EVENT_CONN_REQ, conn_action_connaccept },
1020         { CONN_STATE_IDLE,      CONN_EVENT_CONN_REQ, conn_action_connreject },
1021         { CONN_STATE_TX,        CONN_EVENT_CONN_REQ, conn_action_connreject },
1022
1023         { CONN_STATE_SETUPWAIT, CONN_EVENT_CONN_ACK, conn_action_connack    },
1024         { CONN_STATE_SETUPWAIT, CONN_EVENT_TIMER,    conn_action_conntimsev },
1025
1026         { CONN_STATE_SETUPWAIT, CONN_EVENT_CONN_REJ, conn_action_connsever  },
1027         { CONN_STATE_IDLE,      CONN_EVENT_CONN_REJ, conn_action_connsever  },
1028         { CONN_STATE_TX,        CONN_EVENT_CONN_REJ, conn_action_connsever  },
1029
1030         { CONN_STATE_IDLE,      CONN_EVENT_RX,       conn_action_rx         },
1031         { CONN_STATE_TX,        CONN_EVENT_RX,       conn_action_rx         },
1032
1033         { CONN_STATE_TX,        CONN_EVENT_TXDONE,   conn_action_txdone     },
1034         { CONN_STATE_IDLE,      CONN_EVENT_TXDONE,   conn_action_txdone     },
1035 };
1036
1037 static const int CONN_FSM_LEN = sizeof(conn_fsm) / sizeof(fsm_node);
1038
1039
1040 /*
1041  * Actions for interface - statemachine.
1042  */
1043
1044 /**
1045  * dev_action_start
1046  * @fi: An instance of an interface statemachine.
1047  * @event: The event, just happened.
1048  * @arg: Generic pointer, casted from struct net_device * upon call.
1049  *
1050  * Startup connection by sending CONN_EVENT_START to it.
1051  */
1052 static void dev_action_start(fsm_instance *fi, int event, void *arg)
1053 {
1054         struct net_device   *dev = arg;
1055         struct netiucv_priv *privptr = netdev_priv(dev);
1056
1057         IUCV_DBF_TEXT(trace, 3, __func__);
1058
1059         fsm_newstate(fi, DEV_STATE_STARTWAIT);
1060         fsm_event(privptr->conn->fsm, CONN_EVENT_START, privptr->conn);
1061 }
1062
1063 /**
1064  * Shutdown connection by sending CONN_EVENT_STOP to it.
1065  *
1066  * @param fi    An instance of an interface statemachine.
1067  * @param event The event, just happened.
1068  * @param arg   Generic pointer, casted from struct net_device * upon call.
1069  */
1070 static void
1071 dev_action_stop(fsm_instance *fi, int event, void *arg)
1072 {
1073         struct net_device   *dev = arg;
1074         struct netiucv_priv *privptr = netdev_priv(dev);
1075         struct iucv_event   ev;
1076
1077         IUCV_DBF_TEXT(trace, 3, __func__);
1078
1079         ev.conn = privptr->conn;
1080
1081         fsm_newstate(fi, DEV_STATE_STOPWAIT);
1082         fsm_event(privptr->conn->fsm, CONN_EVENT_STOP, &ev);
1083 }
1084
1085 /**
1086  * Called from connection statemachine
1087  * when a connection is up and running.
1088  *
1089  * @param fi    An instance of an interface statemachine.
1090  * @param event The event, just happened.
1091  * @param arg   Generic pointer, casted from struct net_device * upon call.
1092  */
1093 static void
1094 dev_action_connup(fsm_instance *fi, int event, void *arg)
1095 {
1096         struct net_device   *dev = arg;
1097         struct netiucv_priv *privptr = netdev_priv(dev);
1098
1099         IUCV_DBF_TEXT(trace, 3, __func__);
1100
1101         switch (fsm_getstate(fi)) {
1102                 case DEV_STATE_STARTWAIT:
1103                         fsm_newstate(fi, DEV_STATE_RUNNING);
1104                         dev_info(privptr->dev,
1105                                 "The IUCV device has been connected"
1106                                 " successfully to %s\n",
1107                                 netiucv_printuser(privptr->conn));
1108                         IUCV_DBF_TEXT(setup, 3,
1109                                 "connection is up and running\n");
1110                         break;
1111                 case DEV_STATE_STOPWAIT:
1112                         IUCV_DBF_TEXT(data, 2,
1113                                 "dev_action_connup: in DEV_STATE_STOPWAIT\n");
1114                         break;
1115         }
1116 }
1117
1118 /**
1119  * Called from connection statemachine
1120  * when a connection has been shutdown.
1121  *
1122  * @param fi    An instance of an interface statemachine.
1123  * @param event The event, just happened.
1124  * @param arg   Generic pointer, casted from struct net_device * upon call.
1125  */
1126 static void
1127 dev_action_conndown(fsm_instance *fi, int event, void *arg)
1128 {
1129         IUCV_DBF_TEXT(trace, 3, __func__);
1130
1131         switch (fsm_getstate(fi)) {
1132                 case DEV_STATE_RUNNING:
1133                         fsm_newstate(fi, DEV_STATE_STARTWAIT);
1134                         break;
1135                 case DEV_STATE_STOPWAIT:
1136                         fsm_newstate(fi, DEV_STATE_STOPPED);
1137                         IUCV_DBF_TEXT(setup, 3, "connection is down\n");
1138                         break;
1139         }
1140 }
1141
1142 static const fsm_node dev_fsm[] = {
1143         { DEV_STATE_STOPPED,    DEV_EVENT_START,   dev_action_start    },
1144
1145         { DEV_STATE_STOPWAIT,   DEV_EVENT_START,   dev_action_start    },
1146         { DEV_STATE_STOPWAIT,   DEV_EVENT_CONDOWN, dev_action_conndown },
1147
1148         { DEV_STATE_STARTWAIT,  DEV_EVENT_STOP,    dev_action_stop     },
1149         { DEV_STATE_STARTWAIT,  DEV_EVENT_CONUP,   dev_action_connup   },
1150
1151         { DEV_STATE_RUNNING,    DEV_EVENT_STOP,    dev_action_stop     },
1152         { DEV_STATE_RUNNING,    DEV_EVENT_CONDOWN, dev_action_conndown },
1153         { DEV_STATE_RUNNING,    DEV_EVENT_CONUP,   netiucv_action_nop  },
1154 };
1155
1156 static const int DEV_FSM_LEN = sizeof(dev_fsm) / sizeof(fsm_node);
1157
1158 /**
1159  * Transmit a packet.
1160  * This is a helper function for netiucv_tx().
1161  *
1162  * @param conn Connection to be used for sending.
1163  * @param skb Pointer to struct sk_buff of packet to send.
1164  *            The linklevel header has already been set up
1165  *            by netiucv_tx().
1166  *
1167  * @return 0 on success, -ERRNO on failure. (Never fails.)
1168  */
1169 static int netiucv_transmit_skb(struct iucv_connection *conn,
1170                                 struct sk_buff *skb)
1171 {
1172         struct iucv_message msg;
1173         unsigned long saveflags;
1174         struct ll_header header;
1175         int rc;
1176
1177         if (fsm_getstate(conn->fsm) != CONN_STATE_IDLE) {
1178                 int l = skb->len + NETIUCV_HDRLEN;
1179
1180                 spin_lock_irqsave(&conn->collect_lock, saveflags);
1181                 if (conn->collect_len + l >
1182                     (conn->max_buffsize - NETIUCV_HDRLEN)) {
1183                         rc = -EBUSY;
1184                         IUCV_DBF_TEXT(data, 2,
1185                                       "EBUSY from netiucv_transmit_skb\n");
1186                 } else {
1187                         atomic_inc(&skb->users);
1188                         skb_queue_tail(&conn->collect_queue, skb);
1189                         conn->collect_len += l;
1190                         rc = 0;
1191                 }
1192                 spin_unlock_irqrestore(&conn->collect_lock, saveflags);
1193         } else {
1194                 struct sk_buff *nskb = skb;
1195                 /**
1196                  * Copy the skb to a new allocated skb in lowmem only if the
1197                  * data is located above 2G in memory or tailroom is < 2.
1198                  */
1199                 unsigned long hi = ((unsigned long)(skb_tail_pointer(skb) +
1200                                     NETIUCV_HDRLEN)) >> 31;
1201                 int copied = 0;
1202                 if (hi || (skb_tailroom(skb) < 2)) {
1203                         nskb = alloc_skb(skb->len + NETIUCV_HDRLEN +
1204                                          NETIUCV_HDRLEN, GFP_ATOMIC | GFP_DMA);
1205                         if (!nskb) {
1206                                 IUCV_DBF_TEXT(data, 2, "alloc_skb failed\n");
1207                                 rc = -ENOMEM;
1208                                 return rc;
1209                         } else {
1210                                 skb_reserve(nskb, NETIUCV_HDRLEN);
1211                                 memcpy(skb_put(nskb, skb->len),
1212                                        skb->data, skb->len);
1213                         }
1214                         copied = 1;
1215                 }
1216                 /**
1217                  * skb now is below 2G and has enough room. Add headers.
1218                  */
1219                 header.next = nskb->len + NETIUCV_HDRLEN;
1220                 memcpy(skb_push(nskb, NETIUCV_HDRLEN), &header, NETIUCV_HDRLEN);
1221                 header.next = 0;
1222                 memcpy(skb_put(nskb, NETIUCV_HDRLEN), &header,  NETIUCV_HDRLEN);
1223
1224                 fsm_newstate(conn->fsm, CONN_STATE_TX);
1225                 conn->prof.send_stamp = current_kernel_time();
1226
1227                 msg.tag = 1;
1228                 msg.class = 0;
1229                 rc = iucv_message_send(conn->path, &msg, 0, 0,
1230                                        nskb->data, nskb->len);
1231                 conn->prof.doios_single++;
1232                 conn->prof.txlen += skb->len;
1233                 conn->prof.tx_pending++;
1234                 if (conn->prof.tx_pending > conn->prof.tx_max_pending)
1235                         conn->prof.tx_max_pending = conn->prof.tx_pending;
1236                 if (rc) {
1237                         struct netiucv_priv *privptr;
1238                         fsm_newstate(conn->fsm, CONN_STATE_IDLE);
1239                         conn->prof.tx_pending--;
1240                         privptr = netdev_priv(conn->netdev);
1241                         if (privptr)
1242                                 privptr->stats.tx_errors++;
1243                         if (copied)
1244                                 dev_kfree_skb(nskb);
1245                         else {
1246                                 /**
1247                                  * Remove our headers. They get added
1248                                  * again on retransmit.
1249                                  */
1250                                 skb_pull(skb, NETIUCV_HDRLEN);
1251                                 skb_trim(skb, skb->len - NETIUCV_HDRLEN);
1252                         }
1253                         IUCV_DBF_TEXT_(data, 2, "rc %d from iucv_send\n", rc);
1254                 } else {
1255                         if (copied)
1256                                 dev_kfree_skb(skb);
1257                         atomic_inc(&nskb->users);
1258                         skb_queue_tail(&conn->commit_queue, nskb);
1259                 }
1260         }
1261
1262         return rc;
1263 }
1264
1265 /*
1266  * Interface API for upper network layers
1267  */
1268
1269 /**
1270  * Open an interface.
1271  * Called from generic network layer when ifconfig up is run.
1272  *
1273  * @param dev Pointer to interface struct.
1274  *
1275  * @return 0 on success, -ERRNO on failure. (Never fails.)
1276  */
1277 static int netiucv_open(struct net_device *dev)
1278 {
1279         struct netiucv_priv *priv = netdev_priv(dev);
1280
1281         fsm_event(priv->fsm, DEV_EVENT_START, dev);
1282         return 0;
1283 }
1284
1285 /**
1286  * Close an interface.
1287  * Called from generic network layer when ifconfig down is run.
1288  *
1289  * @param dev Pointer to interface struct.
1290  *
1291  * @return 0 on success, -ERRNO on failure. (Never fails.)
1292  */
1293 static int netiucv_close(struct net_device *dev)
1294 {
1295         struct netiucv_priv *priv = netdev_priv(dev);
1296
1297         fsm_event(priv->fsm, DEV_EVENT_STOP, dev);
1298         return 0;
1299 }
1300
1301 static int netiucv_pm_prepare(struct device *dev)
1302 {
1303         IUCV_DBF_TEXT(trace, 3, __func__);
1304         return 0;
1305 }
1306
1307 static void netiucv_pm_complete(struct device *dev)
1308 {
1309         IUCV_DBF_TEXT(trace, 3, __func__);
1310         return;
1311 }
1312
1313 /**
1314  * netiucv_pm_freeze() - Freeze PM callback
1315  * @dev:        netiucv device
1316  *
1317  * close open netiucv interfaces
1318  */
1319 static int netiucv_pm_freeze(struct device *dev)
1320 {
1321         struct netiucv_priv *priv = dev_get_drvdata(dev);
1322         struct net_device *ndev = NULL;
1323         int rc = 0;
1324
1325         IUCV_DBF_TEXT(trace, 3, __func__);
1326         if (priv && priv->conn)
1327                 ndev = priv->conn->netdev;
1328         if (!ndev)
1329                 goto out;
1330         netif_device_detach(ndev);
1331         priv->pm_state = fsm_getstate(priv->fsm);
1332         rc = netiucv_close(ndev);
1333 out:
1334         return rc;
1335 }
1336
1337 /**
1338  * netiucv_pm_restore_thaw() - Thaw and restore PM callback
1339  * @dev:        netiucv device
1340  *
1341  * re-open netiucv interfaces closed during freeze
1342  */
1343 static int netiucv_pm_restore_thaw(struct device *dev)
1344 {
1345         struct netiucv_priv *priv = dev_get_drvdata(dev);
1346         struct net_device *ndev = NULL;
1347         int rc = 0;
1348
1349         IUCV_DBF_TEXT(trace, 3, __func__);
1350         if (priv && priv->conn)
1351                 ndev = priv->conn->netdev;
1352         if (!ndev)
1353                 goto out;
1354         switch (priv->pm_state) {
1355         case DEV_STATE_RUNNING:
1356         case DEV_STATE_STARTWAIT:
1357                 rc = netiucv_open(ndev);
1358                 break;
1359         default:
1360                 break;
1361         }
1362         netif_device_attach(ndev);
1363 out:
1364         return rc;
1365 }
1366
1367 /**
1368  * Start transmission of a packet.
1369  * Called from generic network device layer.
1370  *
1371  * @param skb Pointer to buffer containing the packet.
1372  * @param dev Pointer to interface struct.
1373  *
1374  * @return 0 if packet consumed, !0 if packet rejected.
1375  *         Note: If we return !0, then the packet is free'd by
1376  *               the generic network layer.
1377  */
1378 static int netiucv_tx(struct sk_buff *skb, struct net_device *dev)
1379 {
1380         struct netiucv_priv *privptr = netdev_priv(dev);
1381         int rc;
1382
1383         IUCV_DBF_TEXT(trace, 4, __func__);
1384         /**
1385          * Some sanity checks ...
1386          */
1387         if (skb == NULL) {
1388                 IUCV_DBF_TEXT(data, 2, "netiucv_tx: skb is NULL\n");
1389                 privptr->stats.tx_dropped++;
1390                 return NETDEV_TX_OK;
1391         }
1392         if (skb_headroom(skb) < NETIUCV_HDRLEN) {
1393                 IUCV_DBF_TEXT(data, 2,
1394                         "netiucv_tx: skb_headroom < NETIUCV_HDRLEN\n");
1395                 dev_kfree_skb(skb);
1396                 privptr->stats.tx_dropped++;
1397                 return NETDEV_TX_OK;
1398         }
1399
1400         /**
1401          * If connection is not running, try to restart it
1402          * and throw away packet.
1403          */
1404         if (fsm_getstate(privptr->fsm) != DEV_STATE_RUNNING) {
1405                 dev_kfree_skb(skb);
1406                 privptr->stats.tx_dropped++;
1407                 privptr->stats.tx_errors++;
1408                 privptr->stats.tx_carrier_errors++;
1409                 return NETDEV_TX_OK;
1410         }
1411
1412         if (netiucv_test_and_set_busy(dev)) {
1413                 IUCV_DBF_TEXT(data, 2, "EBUSY from netiucv_tx\n");
1414                 return NETDEV_TX_BUSY;
1415         }
1416         dev->trans_start = jiffies;
1417         rc = netiucv_transmit_skb(privptr->conn, skb);
1418         netiucv_clear_busy(dev);
1419         return rc ? NETDEV_TX_BUSY : NETDEV_TX_OK;
1420 }
1421
1422 /**
1423  * netiucv_stats
1424  * @dev: Pointer to interface struct.
1425  *
1426  * Returns interface statistics of a device.
1427  *
1428  * Returns pointer to stats struct of this interface.
1429  */
1430 static struct net_device_stats *netiucv_stats (struct net_device * dev)
1431 {
1432         struct netiucv_priv *priv = netdev_priv(dev);
1433
1434         IUCV_DBF_TEXT(trace, 5, __func__);
1435         return &priv->stats;
1436 }
1437
1438 /**
1439  * netiucv_change_mtu
1440  * @dev: Pointer to interface struct.
1441  * @new_mtu: The new MTU to use for this interface.
1442  *
1443  * Sets MTU of an interface.
1444  *
1445  * Returns 0 on success, -EINVAL if MTU is out of valid range.
1446  *         (valid range is 576 .. NETIUCV_MTU_MAX).
1447  */
1448 static int netiucv_change_mtu(struct net_device * dev, int new_mtu)
1449 {
1450         IUCV_DBF_TEXT(trace, 3, __func__);
1451         if (new_mtu < 576 || new_mtu > NETIUCV_MTU_MAX) {
1452                 IUCV_DBF_TEXT(setup, 2, "given MTU out of valid range\n");
1453                 return -EINVAL;
1454         }
1455         dev->mtu = new_mtu;
1456         return 0;
1457 }
1458
1459 /*
1460  * attributes in sysfs
1461  */
1462
1463 static ssize_t user_show(struct device *dev, struct device_attribute *attr,
1464                          char *buf)
1465 {
1466         struct netiucv_priv *priv = dev_get_drvdata(dev);
1467
1468         IUCV_DBF_TEXT(trace, 5, __func__);
1469         return sprintf(buf, "%s\n", netiucv_printuser(priv->conn));
1470 }
1471
1472 static int netiucv_check_user(const char *buf, size_t count, char *username,
1473                               char *userdata)
1474 {
1475         const char *p;
1476         int i;
1477
1478         p = strchr(buf, '.');
1479         if ((p && ((count > 26) ||
1480                    ((p - buf) > 8) ||
1481                    (buf + count - p > 18))) ||
1482             (!p && (count > 9))) {
1483                 IUCV_DBF_TEXT(setup, 2, "conn_write: too long\n");
1484                 return -EINVAL;
1485         }
1486
1487         for (i = 0, p = buf; i < 8 && *p && *p != '.'; i++, p++) {
1488                 if (isalnum(*p) || *p == '$') {
1489                         username[i] = toupper(*p);
1490                         continue;
1491                 }
1492                 if (*p == '\n')
1493                         /* trailing lf, grr */
1494                         break;
1495                 IUCV_DBF_TEXT_(setup, 2,
1496                                "conn_write: invalid character %02x\n", *p);
1497                 return -EINVAL;
1498         }
1499         while (i < 8)
1500                 username[i++] = ' ';
1501         username[8] = '\0';
1502
1503         if (*p == '.') {
1504                 p++;
1505                 for (i = 0; i < 16 && *p; i++, p++) {
1506                         if (*p == '\n')
1507                                 break;
1508                         userdata[i] = toupper(*p);
1509                 }
1510                 while (i > 0 && i < 16)
1511                         userdata[i++] = ' ';
1512         } else
1513                 memcpy(userdata, iucvMagic_ascii, 16);
1514         userdata[16] = '\0';
1515         ASCEBC(userdata, 16);
1516
1517         return 0;
1518 }
1519
1520 static ssize_t user_write(struct device *dev, struct device_attribute *attr,
1521                           const char *buf, size_t count)
1522 {
1523         struct netiucv_priv *priv = dev_get_drvdata(dev);
1524         struct net_device *ndev = priv->conn->netdev;
1525         char    username[9];
1526         char    userdata[17];
1527         int     rc;
1528         struct iucv_connection *cp;
1529
1530         IUCV_DBF_TEXT(trace, 3, __func__);
1531         rc = netiucv_check_user(buf, count, username, userdata);
1532         if (rc)
1533                 return rc;
1534
1535         if (memcmp(username, priv->conn->userid, 9) &&
1536             (ndev->flags & (IFF_UP | IFF_RUNNING))) {
1537                 /* username changed while the interface is active. */
1538                 IUCV_DBF_TEXT(setup, 2, "user_write: device active\n");
1539                 return -EPERM;
1540         }
1541         read_lock_bh(&iucv_connection_rwlock);
1542         list_for_each_entry(cp, &iucv_connection_list, list) {
1543                 if (!strncmp(username, cp->userid, 9) &&
1544                    !strncmp(userdata, cp->userdata, 17) && cp->netdev != ndev) {
1545                         read_unlock_bh(&iucv_connection_rwlock);
1546                         IUCV_DBF_TEXT_(setup, 2, "user_write: Connection to %s "
1547                                 "already exists\n", netiucv_printuser(cp));
1548                         return -EEXIST;
1549                 }
1550         }
1551         read_unlock_bh(&iucv_connection_rwlock);
1552         memcpy(priv->conn->userid, username, 9);
1553         memcpy(priv->conn->userdata, userdata, 17);
1554         return count;
1555 }
1556
1557 static DEVICE_ATTR(user, 0644, user_show, user_write);
1558
1559 static ssize_t buffer_show (struct device *dev, struct device_attribute *attr,
1560                             char *buf)
1561 {
1562         struct netiucv_priv *priv = dev_get_drvdata(dev);
1563
1564         IUCV_DBF_TEXT(trace, 5, __func__);
1565         return sprintf(buf, "%d\n", priv->conn->max_buffsize);
1566 }
1567
1568 static ssize_t buffer_write (struct device *dev, struct device_attribute *attr,
1569                              const char *buf, size_t count)
1570 {
1571         struct netiucv_priv *priv = dev_get_drvdata(dev);
1572         struct net_device *ndev = priv->conn->netdev;
1573         char         *e;
1574         int          bs1;
1575
1576         IUCV_DBF_TEXT(trace, 3, __func__);
1577         if (count >= 39)
1578                 return -EINVAL;
1579
1580         bs1 = simple_strtoul(buf, &e, 0);
1581
1582         if (e && (!isspace(*e))) {
1583                 IUCV_DBF_TEXT_(setup, 2, "buffer_write: invalid char %02x\n",
1584                         *e);
1585                 return -EINVAL;
1586         }
1587         if (bs1 > NETIUCV_BUFSIZE_MAX) {
1588                 IUCV_DBF_TEXT_(setup, 2,
1589                         "buffer_write: buffer size %d too large\n",
1590                         bs1);
1591                 return -EINVAL;
1592         }
1593         if ((ndev->flags & IFF_RUNNING) &&
1594             (bs1 < (ndev->mtu + NETIUCV_HDRLEN + 2))) {
1595                 IUCV_DBF_TEXT_(setup, 2,
1596                         "buffer_write: buffer size %d too small\n",
1597                         bs1);
1598                 return -EINVAL;
1599         }
1600         if (bs1 < (576 + NETIUCV_HDRLEN + NETIUCV_HDRLEN)) {
1601                 IUCV_DBF_TEXT_(setup, 2,
1602                         "buffer_write: buffer size %d too small\n",
1603                         bs1);
1604                 return -EINVAL;
1605         }
1606
1607         priv->conn->max_buffsize = bs1;
1608         if (!(ndev->flags & IFF_RUNNING))
1609                 ndev->mtu = bs1 - NETIUCV_HDRLEN - NETIUCV_HDRLEN;
1610
1611         return count;
1612
1613 }
1614
1615 static DEVICE_ATTR(buffer, 0644, buffer_show, buffer_write);
1616
1617 static ssize_t dev_fsm_show (struct device *dev, struct device_attribute *attr,
1618                              char *buf)
1619 {
1620         struct netiucv_priv *priv = dev_get_drvdata(dev);
1621
1622         IUCV_DBF_TEXT(trace, 5, __func__);
1623         return sprintf(buf, "%s\n", fsm_getstate_str(priv->fsm));
1624 }
1625
1626 static DEVICE_ATTR(device_fsm_state, 0444, dev_fsm_show, NULL);
1627
1628 static ssize_t conn_fsm_show (struct device *dev,
1629                               struct device_attribute *attr, char *buf)
1630 {
1631         struct netiucv_priv *priv = dev_get_drvdata(dev);
1632
1633         IUCV_DBF_TEXT(trace, 5, __func__);
1634         return sprintf(buf, "%s\n", fsm_getstate_str(priv->conn->fsm));
1635 }
1636
1637 static DEVICE_ATTR(connection_fsm_state, 0444, conn_fsm_show, NULL);
1638
1639 static ssize_t maxmulti_show (struct device *dev,
1640                               struct device_attribute *attr, char *buf)
1641 {
1642         struct netiucv_priv *priv = dev_get_drvdata(dev);
1643
1644         IUCV_DBF_TEXT(trace, 5, __func__);
1645         return sprintf(buf, "%ld\n", priv->conn->prof.maxmulti);
1646 }
1647
1648 static ssize_t maxmulti_write (struct device *dev,
1649                                struct device_attribute *attr,
1650                                const char *buf, size_t count)
1651 {
1652         struct netiucv_priv *priv = dev_get_drvdata(dev);
1653
1654         IUCV_DBF_TEXT(trace, 4, __func__);
1655         priv->conn->prof.maxmulti = 0;
1656         return count;
1657 }
1658
1659 static DEVICE_ATTR(max_tx_buffer_used, 0644, maxmulti_show, maxmulti_write);
1660
1661 static ssize_t maxcq_show (struct device *dev, struct device_attribute *attr,
1662                            char *buf)
1663 {
1664         struct netiucv_priv *priv = dev_get_drvdata(dev);
1665
1666         IUCV_DBF_TEXT(trace, 5, __func__);
1667         return sprintf(buf, "%ld\n", priv->conn->prof.maxcqueue);
1668 }
1669
1670 static ssize_t maxcq_write (struct device *dev, struct device_attribute *attr,
1671                             const char *buf, size_t count)
1672 {
1673         struct netiucv_priv *priv = dev_get_drvdata(dev);
1674
1675         IUCV_DBF_TEXT(trace, 4, __func__);
1676         priv->conn->prof.maxcqueue = 0;
1677         return count;
1678 }
1679
1680 static DEVICE_ATTR(max_chained_skbs, 0644, maxcq_show, maxcq_write);
1681
1682 static ssize_t sdoio_show (struct device *dev, struct device_attribute *attr,
1683                            char *buf)
1684 {
1685         struct netiucv_priv *priv = dev_get_drvdata(dev);
1686
1687         IUCV_DBF_TEXT(trace, 5, __func__);
1688         return sprintf(buf, "%ld\n", priv->conn->prof.doios_single);
1689 }
1690
1691 static ssize_t sdoio_write (struct device *dev, struct device_attribute *attr,
1692                             const char *buf, size_t count)
1693 {
1694         struct netiucv_priv *priv = dev_get_drvdata(dev);
1695
1696         IUCV_DBF_TEXT(trace, 4, __func__);
1697         priv->conn->prof.doios_single = 0;
1698         return count;
1699 }
1700
1701 static DEVICE_ATTR(tx_single_write_ops, 0644, sdoio_show, sdoio_write);
1702
1703 static ssize_t mdoio_show (struct device *dev, struct device_attribute *attr,
1704                            char *buf)
1705 {
1706         struct netiucv_priv *priv = dev_get_drvdata(dev);
1707
1708         IUCV_DBF_TEXT(trace, 5, __func__);
1709         return sprintf(buf, "%ld\n", priv->conn->prof.doios_multi);
1710 }
1711
1712 static ssize_t mdoio_write (struct device *dev, struct device_attribute *attr,
1713                             const char *buf, size_t count)
1714 {
1715         struct netiucv_priv *priv = dev_get_drvdata(dev);
1716
1717         IUCV_DBF_TEXT(trace, 5, __func__);
1718         priv->conn->prof.doios_multi = 0;
1719         return count;
1720 }
1721
1722 static DEVICE_ATTR(tx_multi_write_ops, 0644, mdoio_show, mdoio_write);
1723
1724 static ssize_t txlen_show (struct device *dev, struct device_attribute *attr,
1725                            char *buf)
1726 {
1727         struct netiucv_priv *priv = dev_get_drvdata(dev);
1728
1729         IUCV_DBF_TEXT(trace, 5, __func__);
1730         return sprintf(buf, "%ld\n", priv->conn->prof.txlen);
1731 }
1732
1733 static ssize_t txlen_write (struct device *dev, struct device_attribute *attr,
1734                             const char *buf, size_t count)
1735 {
1736         struct netiucv_priv *priv = dev_get_drvdata(dev);
1737
1738         IUCV_DBF_TEXT(trace, 4, __func__);
1739         priv->conn->prof.txlen = 0;
1740         return count;
1741 }
1742
1743 static DEVICE_ATTR(netto_bytes, 0644, txlen_show, txlen_write);
1744
1745 static ssize_t txtime_show (struct device *dev, struct device_attribute *attr,
1746                             char *buf)
1747 {
1748         struct netiucv_priv *priv = dev_get_drvdata(dev);
1749
1750         IUCV_DBF_TEXT(trace, 5, __func__);
1751         return sprintf(buf, "%ld\n", priv->conn->prof.tx_time);
1752 }
1753
1754 static ssize_t txtime_write (struct device *dev, struct device_attribute *attr,
1755                              const char *buf, size_t count)
1756 {
1757         struct netiucv_priv *priv = dev_get_drvdata(dev);
1758
1759         IUCV_DBF_TEXT(trace, 4, __func__);
1760         priv->conn->prof.tx_time = 0;
1761         return count;
1762 }
1763
1764 static DEVICE_ATTR(max_tx_io_time, 0644, txtime_show, txtime_write);
1765
1766 static ssize_t txpend_show (struct device *dev, struct device_attribute *attr,
1767                             char *buf)
1768 {
1769         struct netiucv_priv *priv = dev_get_drvdata(dev);
1770
1771         IUCV_DBF_TEXT(trace, 5, __func__);
1772         return sprintf(buf, "%ld\n", priv->conn->prof.tx_pending);
1773 }
1774
1775 static ssize_t txpend_write (struct device *dev, struct device_attribute *attr,
1776                              const char *buf, size_t count)
1777 {
1778         struct netiucv_priv *priv = dev_get_drvdata(dev);
1779
1780         IUCV_DBF_TEXT(trace, 4, __func__);
1781         priv->conn->prof.tx_pending = 0;
1782         return count;
1783 }
1784
1785 static DEVICE_ATTR(tx_pending, 0644, txpend_show, txpend_write);
1786
1787 static ssize_t txmpnd_show (struct device *dev, struct device_attribute *attr,
1788                             char *buf)
1789 {
1790         struct netiucv_priv *priv = dev_get_drvdata(dev);
1791
1792         IUCV_DBF_TEXT(trace, 5, __func__);
1793         return sprintf(buf, "%ld\n", priv->conn->prof.tx_max_pending);
1794 }
1795
1796 static ssize_t txmpnd_write (struct device *dev, struct device_attribute *attr,
1797                              const char *buf, size_t count)
1798 {
1799         struct netiucv_priv *priv = dev_get_drvdata(dev);
1800
1801         IUCV_DBF_TEXT(trace, 4, __func__);
1802         priv->conn->prof.tx_max_pending = 0;
1803         return count;
1804 }
1805
1806 static DEVICE_ATTR(tx_max_pending, 0644, txmpnd_show, txmpnd_write);
1807
1808 static struct attribute *netiucv_attrs[] = {
1809         &dev_attr_buffer.attr,
1810         &dev_attr_user.attr,
1811         NULL,
1812 };
1813
1814 static struct attribute_group netiucv_attr_group = {
1815         .attrs = netiucv_attrs,
1816 };
1817
1818 static struct attribute *netiucv_stat_attrs[] = {
1819         &dev_attr_device_fsm_state.attr,
1820         &dev_attr_connection_fsm_state.attr,
1821         &dev_attr_max_tx_buffer_used.attr,
1822         &dev_attr_max_chained_skbs.attr,
1823         &dev_attr_tx_single_write_ops.attr,
1824         &dev_attr_tx_multi_write_ops.attr,
1825         &dev_attr_netto_bytes.attr,
1826         &dev_attr_max_tx_io_time.attr,
1827         &dev_attr_tx_pending.attr,
1828         &dev_attr_tx_max_pending.attr,
1829         NULL,
1830 };
1831
1832 static struct attribute_group netiucv_stat_attr_group = {
1833         .name  = "stats",
1834         .attrs = netiucv_stat_attrs,
1835 };
1836
1837 static const struct attribute_group *netiucv_attr_groups[] = {
1838         &netiucv_stat_attr_group,
1839         &netiucv_attr_group,
1840         NULL,
1841 };
1842
1843 static int netiucv_register_device(struct net_device *ndev)
1844 {
1845         struct netiucv_priv *priv = netdev_priv(ndev);
1846         struct device *dev = kzalloc(sizeof(struct device), GFP_KERNEL);
1847         int ret;
1848
1849         IUCV_DBF_TEXT(trace, 3, __func__);
1850
1851         if (dev) {
1852                 dev_set_name(dev, "net%s", ndev->name);
1853                 dev->bus = &iucv_bus;
1854                 dev->parent = iucv_root;
1855                 dev->groups = netiucv_attr_groups;
1856                 /*
1857                  * The release function could be called after the
1858                  * module has been unloaded. It's _only_ task is to
1859                  * free the struct. Therefore, we specify kfree()
1860                  * directly here. (Probably a little bit obfuscating
1861                  * but legitime ...).
1862                  */
1863                 dev->release = (void (*)(struct device *))kfree;
1864                 dev->driver = &netiucv_driver;
1865         } else
1866                 return -ENOMEM;
1867
1868         ret = device_register(dev);
1869         if (ret) {
1870                 put_device(dev);
1871                 return ret;
1872         }
1873         priv->dev = dev;
1874         dev_set_drvdata(dev, priv);
1875         return 0;
1876 }
1877
1878 static void netiucv_unregister_device(struct device *dev)
1879 {
1880         IUCV_DBF_TEXT(trace, 3, __func__);
1881         device_unregister(dev);
1882 }
1883
1884 /**
1885  * Allocate and initialize a new connection structure.
1886  * Add it to the list of netiucv connections;
1887  */
1888 static struct iucv_connection *netiucv_new_connection(struct net_device *dev,
1889                                                       char *username,
1890                                                       char *userdata)
1891 {
1892         struct iucv_connection *conn;
1893
1894         conn = kzalloc(sizeof(*conn), GFP_KERNEL);
1895         if (!conn)
1896                 goto out;
1897         skb_queue_head_init(&conn->collect_queue);
1898         skb_queue_head_init(&conn->commit_queue);
1899         spin_lock_init(&conn->collect_lock);
1900         conn->max_buffsize = NETIUCV_BUFSIZE_DEFAULT;
1901         conn->netdev = dev;
1902
1903         conn->rx_buff = alloc_skb(conn->max_buffsize, GFP_KERNEL | GFP_DMA);
1904         if (!conn->rx_buff)
1905                 goto out_conn;
1906         conn->tx_buff = alloc_skb(conn->max_buffsize, GFP_KERNEL | GFP_DMA);
1907         if (!conn->tx_buff)
1908                 goto out_rx;
1909         conn->fsm = init_fsm("netiucvconn", conn_state_names,
1910                              conn_event_names, NR_CONN_STATES,
1911                              NR_CONN_EVENTS, conn_fsm, CONN_FSM_LEN,
1912                              GFP_KERNEL);
1913         if (!conn->fsm)
1914                 goto out_tx;
1915
1916         fsm_settimer(conn->fsm, &conn->timer);
1917         fsm_newstate(conn->fsm, CONN_STATE_INVALID);
1918
1919         if (userdata)
1920                 memcpy(conn->userdata, userdata, 17);
1921         if (username) {
1922                 memcpy(conn->userid, username, 9);
1923                 fsm_newstate(conn->fsm, CONN_STATE_STOPPED);
1924         }
1925
1926         write_lock_bh(&iucv_connection_rwlock);
1927         list_add_tail(&conn->list, &iucv_connection_list);
1928         write_unlock_bh(&iucv_connection_rwlock);
1929         return conn;
1930
1931 out_tx:
1932         kfree_skb(conn->tx_buff);
1933 out_rx:
1934         kfree_skb(conn->rx_buff);
1935 out_conn:
1936         kfree(conn);
1937 out:
1938         return NULL;
1939 }
1940
1941 /**
1942  * Release a connection structure and remove it from the
1943  * list of netiucv connections.
1944  */
1945 static void netiucv_remove_connection(struct iucv_connection *conn)
1946 {
1947
1948         IUCV_DBF_TEXT(trace, 3, __func__);
1949         write_lock_bh(&iucv_connection_rwlock);
1950         list_del_init(&conn->list);
1951         write_unlock_bh(&iucv_connection_rwlock);
1952         fsm_deltimer(&conn->timer);
1953         netiucv_purge_skb_queue(&conn->collect_queue);
1954         if (conn->path) {
1955                 iucv_path_sever(conn->path, conn->userdata);
1956                 kfree(conn->path);
1957                 conn->path = NULL;
1958         }
1959         netiucv_purge_skb_queue(&conn->commit_queue);
1960         kfree_fsm(conn->fsm);
1961         kfree_skb(conn->rx_buff);
1962         kfree_skb(conn->tx_buff);
1963 }
1964
1965 /**
1966  * Release everything of a net device.
1967  */
1968 static void netiucv_free_netdevice(struct net_device *dev)
1969 {
1970         struct netiucv_priv *privptr = netdev_priv(dev);
1971
1972         IUCV_DBF_TEXT(trace, 3, __func__);
1973
1974         if (!dev)
1975                 return;
1976
1977         if (privptr) {
1978                 if (privptr->conn)
1979                         netiucv_remove_connection(privptr->conn);
1980                 if (privptr->fsm)
1981                         kfree_fsm(privptr->fsm);
1982                 privptr->conn = NULL; privptr->fsm = NULL;
1983                 /* privptr gets freed by free_netdev() */
1984         }
1985         free_netdev(dev);
1986 }
1987
1988 /**
1989  * Initialize a net device. (Called from kernel in alloc_netdev())
1990  */
1991 static const struct net_device_ops netiucv_netdev_ops = {
1992         .ndo_open               = netiucv_open,
1993         .ndo_stop               = netiucv_close,
1994         .ndo_get_stats          = netiucv_stats,
1995         .ndo_start_xmit         = netiucv_tx,
1996         .ndo_change_mtu         = netiucv_change_mtu,
1997 };
1998
1999 static void netiucv_setup_netdevice(struct net_device *dev)
2000 {
2001         dev->mtu                 = NETIUCV_MTU_DEFAULT;
2002         dev->destructor          = netiucv_free_netdevice;
2003         dev->hard_header_len     = NETIUCV_HDRLEN;
2004         dev->addr_len            = 0;
2005         dev->type                = ARPHRD_SLIP;
2006         dev->tx_queue_len        = NETIUCV_QUEUELEN_DEFAULT;
2007         dev->flags               = IFF_POINTOPOINT | IFF_NOARP;
2008         dev->netdev_ops          = &netiucv_netdev_ops;
2009 }
2010
2011 /**
2012  * Allocate and initialize everything of a net device.
2013  */
2014 static struct net_device *netiucv_init_netdevice(char *username, char *userdata)
2015 {
2016         struct netiucv_priv *privptr;
2017         struct net_device *dev;
2018
2019         dev = alloc_netdev(sizeof(struct netiucv_priv), "iucv%d",
2020                            netiucv_setup_netdevice);
2021         if (!dev)
2022                 return NULL;
2023         rtnl_lock();
2024         if (dev_alloc_name(dev, dev->name) < 0)
2025                 goto out_netdev;
2026
2027         privptr = netdev_priv(dev);
2028         privptr->fsm = init_fsm("netiucvdev", dev_state_names,
2029                                 dev_event_names, NR_DEV_STATES, NR_DEV_EVENTS,
2030                                 dev_fsm, DEV_FSM_LEN, GFP_KERNEL);
2031         if (!privptr->fsm)
2032                 goto out_netdev;
2033
2034         privptr->conn = netiucv_new_connection(dev, username, userdata);
2035         if (!privptr->conn) {
2036                 IUCV_DBF_TEXT(setup, 2, "NULL from netiucv_new_connection\n");
2037                 goto out_fsm;
2038         }
2039         fsm_newstate(privptr->fsm, DEV_STATE_STOPPED);
2040         return dev;
2041
2042 out_fsm:
2043         kfree_fsm(privptr->fsm);
2044 out_netdev:
2045         rtnl_unlock();
2046         free_netdev(dev);
2047         return NULL;
2048 }
2049
2050 static ssize_t conn_write(struct device_driver *drv,
2051                           const char *buf, size_t count)
2052 {
2053         char username[9];
2054         char userdata[17];
2055         int rc;
2056         struct net_device *dev;
2057         struct netiucv_priv *priv;
2058         struct iucv_connection *cp;
2059
2060         IUCV_DBF_TEXT(trace, 3, __func__);
2061         rc = netiucv_check_user(buf, count, username, userdata);
2062         if (rc)
2063                 return rc;
2064
2065         read_lock_bh(&iucv_connection_rwlock);
2066         list_for_each_entry(cp, &iucv_connection_list, list) {
2067                 if (!strncmp(username, cp->userid, 9) &&
2068                     !strncmp(userdata, cp->userdata, 17)) {
2069                         read_unlock_bh(&iucv_connection_rwlock);
2070                         IUCV_DBF_TEXT_(setup, 2, "conn_write: Connection to %s "
2071                                 "already exists\n", netiucv_printuser(cp));
2072                         return -EEXIST;
2073                 }
2074         }
2075         read_unlock_bh(&iucv_connection_rwlock);
2076
2077         dev = netiucv_init_netdevice(username, userdata);
2078         if (!dev) {
2079                 IUCV_DBF_TEXT(setup, 2, "NULL from netiucv_init_netdevice\n");
2080                 return -ENODEV;
2081         }
2082
2083         rc = netiucv_register_device(dev);
2084         if (rc) {
2085                 rtnl_unlock();
2086                 IUCV_DBF_TEXT_(setup, 2,
2087                         "ret %d from netiucv_register_device\n", rc);
2088                 goto out_free_ndev;
2089         }
2090
2091         /* sysfs magic */
2092         priv = netdev_priv(dev);
2093         SET_NETDEV_DEV(dev, priv->dev);
2094
2095         rc = register_netdevice(dev);
2096         rtnl_unlock();
2097         if (rc)
2098                 goto out_unreg;
2099
2100         dev_info(priv->dev, "The IUCV interface to %s has been established "
2101                             "successfully\n",
2102                 netiucv_printuser(priv->conn));
2103
2104         return count;
2105
2106 out_unreg:
2107         netiucv_unregister_device(priv->dev);
2108 out_free_ndev:
2109         netiucv_free_netdevice(dev);
2110         return rc;
2111 }
2112
2113 static DRIVER_ATTR(connection, 0200, NULL, conn_write);
2114
2115 static ssize_t remove_write (struct device_driver *drv,
2116                              const char *buf, size_t count)
2117 {
2118         struct iucv_connection *cp;
2119         struct net_device *ndev;
2120         struct netiucv_priv *priv;
2121         struct device *dev;
2122         char name[IFNAMSIZ];
2123         const char *p;
2124         int i;
2125
2126         IUCV_DBF_TEXT(trace, 3, __func__);
2127
2128         if (count >= IFNAMSIZ)
2129                 count = IFNAMSIZ - 1;
2130
2131         for (i = 0, p = buf; i < count && *p; i++, p++) {
2132                 if (*p == '\n' || *p == ' ')
2133                         /* trailing lf, grr */
2134                         break;
2135                 name[i] = *p;
2136         }
2137         name[i] = '\0';
2138
2139         read_lock_bh(&iucv_connection_rwlock);
2140         list_for_each_entry(cp, &iucv_connection_list, list) {
2141                 ndev = cp->netdev;
2142                 priv = netdev_priv(ndev);
2143                 dev = priv->dev;
2144                 if (strncmp(name, ndev->name, count))
2145                         continue;
2146                 read_unlock_bh(&iucv_connection_rwlock);
2147                 if (ndev->flags & (IFF_UP | IFF_RUNNING)) {
2148                         dev_warn(dev, "The IUCV device is connected"
2149                                 " to %s and cannot be removed\n",
2150                                 priv->conn->userid);
2151                         IUCV_DBF_TEXT(data, 2, "remove_write: still active\n");
2152                         return -EPERM;
2153                 }
2154                 unregister_netdev(ndev);
2155                 netiucv_unregister_device(dev);
2156                 return count;
2157         }
2158         read_unlock_bh(&iucv_connection_rwlock);
2159         IUCV_DBF_TEXT(data, 2, "remove_write: unknown device\n");
2160         return -EINVAL;
2161 }
2162
2163 static DRIVER_ATTR(remove, 0200, NULL, remove_write);
2164
2165 static struct attribute * netiucv_drv_attrs[] = {
2166         &driver_attr_connection.attr,
2167         &driver_attr_remove.attr,
2168         NULL,
2169 };
2170
2171 static struct attribute_group netiucv_drv_attr_group = {
2172         .attrs = netiucv_drv_attrs,
2173 };
2174
2175 static const struct attribute_group *netiucv_drv_attr_groups[] = {
2176         &netiucv_drv_attr_group,
2177         NULL,
2178 };
2179
2180 static void netiucv_banner(void)
2181 {
2182         pr_info("driver initialized\n");
2183 }
2184
2185 static void __exit netiucv_exit(void)
2186 {
2187         struct iucv_connection *cp;
2188         struct net_device *ndev;
2189         struct netiucv_priv *priv;
2190         struct device *dev;
2191
2192         IUCV_DBF_TEXT(trace, 3, __func__);
2193         while (!list_empty(&iucv_connection_list)) {
2194                 cp = list_entry(iucv_connection_list.next,
2195                                 struct iucv_connection, list);
2196                 ndev = cp->netdev;
2197                 priv = netdev_priv(ndev);
2198                 dev = priv->dev;
2199
2200                 unregister_netdev(ndev);
2201                 netiucv_unregister_device(dev);
2202         }
2203
2204         device_unregister(netiucv_dev);
2205         driver_unregister(&netiucv_driver);
2206         iucv_unregister(&netiucv_handler, 1);
2207         iucv_unregister_dbf_views();
2208
2209         pr_info("driver unloaded\n");
2210         return;
2211 }
2212
2213 static int __init netiucv_init(void)
2214 {
2215         int rc;
2216
2217         rc = iucv_register_dbf_views();
2218         if (rc)
2219                 goto out;
2220         rc = iucv_register(&netiucv_handler, 1);
2221         if (rc)
2222                 goto out_dbf;
2223         IUCV_DBF_TEXT(trace, 3, __func__);
2224         netiucv_driver.groups = netiucv_drv_attr_groups;
2225         rc = driver_register(&netiucv_driver);
2226         if (rc) {
2227                 IUCV_DBF_TEXT_(setup, 2, "ret %d from driver_register\n", rc);
2228                 goto out_iucv;
2229         }
2230         /* establish dummy device */
2231         netiucv_dev = kzalloc(sizeof(struct device), GFP_KERNEL);
2232         if (!netiucv_dev) {
2233                 rc = -ENOMEM;
2234                 goto out_driver;
2235         }
2236         dev_set_name(netiucv_dev, "netiucv");
2237         netiucv_dev->bus = &iucv_bus;
2238         netiucv_dev->parent = iucv_root;
2239         netiucv_dev->release = (void (*)(struct device *))kfree;
2240         netiucv_dev->driver = &netiucv_driver;
2241         rc = device_register(netiucv_dev);
2242         if (rc) {
2243                 put_device(netiucv_dev);
2244                 goto out_driver;
2245         }
2246         netiucv_banner();
2247         return rc;
2248
2249 out_driver:
2250         driver_unregister(&netiucv_driver);
2251 out_iucv:
2252         iucv_unregister(&netiucv_handler, 1);
2253 out_dbf:
2254         iucv_unregister_dbf_views();
2255 out:
2256         return rc;
2257 }
2258
2259 module_init(netiucv_init);
2260 module_exit(netiucv_exit);
2261 MODULE_LICENSE("GPL");