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