1/*
2 *  Linux for S/390 Lan Channel Station Network Driver
3 *
4 *  Copyright IBM Corp. 1999, 2009
5 *  Author(s): Original Code written by
6 *			DJ Barrow <djbarrow@de.ibm.com,barrow_dj@yahoo.com>
7 *	       Rewritten by
8 *			Frank Pavlic <fpavlic@de.ibm.com> and
9 *			Martin Schwidefsky <schwidefsky@de.ibm.com>
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2, or (at your option)
14 * any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 */
25
26#define KMSG_COMPONENT		"lcs"
27#define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
28
29#include <linux/module.h>
30#include <linux/if.h>
31#include <linux/netdevice.h>
32#include <linux/etherdevice.h>
33#include <linux/fddidevice.h>
34#include <linux/inetdevice.h>
35#include <linux/in.h>
36#include <linux/igmp.h>
37#include <linux/delay.h>
38#include <linux/kthread.h>
39#include <linux/slab.h>
40#include <net/arp.h>
41#include <net/ip.h>
42
43#include <asm/debug.h>
44#include <asm/idals.h>
45#include <asm/timex.h>
46#include <linux/device.h>
47#include <asm/ccwgroup.h>
48
49#include "lcs.h"
50
51
52#if !defined(CONFIG_ETHERNET) && !defined(CONFIG_FDDI)
53#error Cannot compile lcs.c without some net devices switched on.
54#endif
55
56/**
57 * initialization string for output
58 */
59
60static char version[] __initdata = "LCS driver";
61
62/**
63  * the root device for lcs group devices
64  */
65static struct device *lcs_root_dev;
66
67/**
68 * Some prototypes.
69 */
70static void lcs_tasklet(unsigned long);
71static void lcs_start_kernel_thread(struct work_struct *);
72static void lcs_get_frames_cb(struct lcs_channel *, struct lcs_buffer *);
73#ifdef CONFIG_IP_MULTICAST
74static int lcs_send_delipm(struct lcs_card *, struct lcs_ipm_list *);
75#endif /* CONFIG_IP_MULTICAST */
76static int lcs_recovery(void *ptr);
77
78/**
79 * Debug Facility Stuff
80 */
81static char debug_buffer[255];
82static debug_info_t *lcs_dbf_setup;
83static debug_info_t *lcs_dbf_trace;
84
85/**
86 *  LCS Debug Facility functions
87 */
88static void
89lcs_unregister_debug_facility(void)
90{
91	debug_unregister(lcs_dbf_setup);
92	debug_unregister(lcs_dbf_trace);
93}
94
95static int
96lcs_register_debug_facility(void)
97{
98	lcs_dbf_setup = debug_register("lcs_setup", 2, 1, 8);
99	lcs_dbf_trace = debug_register("lcs_trace", 4, 1, 8);
100	if (lcs_dbf_setup == NULL || lcs_dbf_trace == NULL) {
101		pr_err("Not enough memory for debug facility.\n");
102		lcs_unregister_debug_facility();
103		return -ENOMEM;
104	}
105	debug_register_view(lcs_dbf_setup, &debug_hex_ascii_view);
106	debug_set_level(lcs_dbf_setup, 2);
107	debug_register_view(lcs_dbf_trace, &debug_hex_ascii_view);
108	debug_set_level(lcs_dbf_trace, 2);
109	return 0;
110}
111
112/**
113 * Allocate io buffers.
114 */
115static int
116lcs_alloc_channel(struct lcs_channel *channel)
117{
118	int cnt;
119
120	LCS_DBF_TEXT(2, setup, "ichalloc");
121	for (cnt = 0; cnt < LCS_NUM_BUFFS; cnt++) {
122		/* alloc memory fo iobuffer */
123		channel->iob[cnt].data =
124			kzalloc(LCS_IOBUFFERSIZE, GFP_DMA | GFP_KERNEL);
125		if (channel->iob[cnt].data == NULL)
126			break;
127		channel->iob[cnt].state = LCS_BUF_STATE_EMPTY;
128	}
129	if (cnt < LCS_NUM_BUFFS) {
130		/* Not all io buffers could be allocated. */
131		LCS_DBF_TEXT(2, setup, "echalloc");
132		while (cnt-- > 0)
133			kfree(channel->iob[cnt].data);
134		return -ENOMEM;
135	}
136	return 0;
137}
138
139/**
140 * Free io buffers.
141 */
142static void
143lcs_free_channel(struct lcs_channel *channel)
144{
145	int cnt;
146
147	LCS_DBF_TEXT(2, setup, "ichfree");
148	for (cnt = 0; cnt < LCS_NUM_BUFFS; cnt++) {
149		kfree(channel->iob[cnt].data);
150		channel->iob[cnt].data = NULL;
151	}
152}
153
154/*
155 * Cleanup channel.
156 */
157static void
158lcs_cleanup_channel(struct lcs_channel *channel)
159{
160	LCS_DBF_TEXT(3, setup, "cleanch");
161	/* Kill write channel tasklets. */
162	tasklet_kill(&channel->irq_tasklet);
163	/* Free channel buffers. */
164	lcs_free_channel(channel);
165}
166
167/**
168 * LCS free memory for card and channels.
169 */
170static void
171lcs_free_card(struct lcs_card *card)
172{
173	LCS_DBF_TEXT(2, setup, "remcard");
174	LCS_DBF_HEX(2, setup, &card, sizeof(void*));
175	kfree(card);
176}
177
178/**
179 * LCS alloc memory for card and channels
180 */
181static struct lcs_card *
182lcs_alloc_card(void)
183{
184	struct lcs_card *card;
185	int rc;
186
187	LCS_DBF_TEXT(2, setup, "alloclcs");
188
189	card = kzalloc(sizeof(struct lcs_card), GFP_KERNEL | GFP_DMA);
190	if (card == NULL)
191		return NULL;
192	card->lan_type = LCS_FRAME_TYPE_AUTO;
193	card->pkt_seq = 0;
194	card->lancmd_timeout = LCS_LANCMD_TIMEOUT_DEFAULT;
195	/* Allocate io buffers for the read channel. */
196	rc = lcs_alloc_channel(&card->read);
197	if (rc){
198		LCS_DBF_TEXT(2, setup, "iccwerr");
199		lcs_free_card(card);
200		return NULL;
201	}
202	/* Allocate io buffers for the write channel. */
203	rc = lcs_alloc_channel(&card->write);
204	if (rc) {
205		LCS_DBF_TEXT(2, setup, "iccwerr");
206		lcs_cleanup_channel(&card->read);
207		lcs_free_card(card);
208		return NULL;
209	}
210
211#ifdef CONFIG_IP_MULTICAST
212	INIT_LIST_HEAD(&card->ipm_list);
213#endif
214	LCS_DBF_HEX(2, setup, &card, sizeof(void*));
215	return card;
216}
217
218/*
219 * Setup read channel.
220 */
221static void
222lcs_setup_read_ccws(struct lcs_card *card)
223{
224	int cnt;
225
226	LCS_DBF_TEXT(2, setup, "ireadccw");
227	/* Setup read ccws. */
228	memset(card->read.ccws, 0, sizeof (struct ccw1) * (LCS_NUM_BUFFS + 1));
229	for (cnt = 0; cnt < LCS_NUM_BUFFS; cnt++) {
230		card->read.ccws[cnt].cmd_code = LCS_CCW_READ;
231		card->read.ccws[cnt].count = LCS_IOBUFFERSIZE;
232		card->read.ccws[cnt].flags =
233			CCW_FLAG_CC | CCW_FLAG_SLI | CCW_FLAG_PCI;
234		/*
235		 * Note: we have allocated the buffer with GFP_DMA, so
236		 * we do not need to do set_normalized_cda.
237		 */
238		card->read.ccws[cnt].cda =
239			(__u32) __pa(card->read.iob[cnt].data);
240		((struct lcs_header *)
241		 card->read.iob[cnt].data)->offset = LCS_ILLEGAL_OFFSET;
242		card->read.iob[cnt].callback = lcs_get_frames_cb;
243		card->read.iob[cnt].state = LCS_BUF_STATE_READY;
244		card->read.iob[cnt].count = LCS_IOBUFFERSIZE;
245	}
246	card->read.ccws[0].flags &= ~CCW_FLAG_PCI;
247	card->read.ccws[LCS_NUM_BUFFS - 1].flags &= ~CCW_FLAG_PCI;
248	card->read.ccws[LCS_NUM_BUFFS - 1].flags |= CCW_FLAG_SUSPEND;
249	/* Last ccw is a tic (transfer in channel). */
250	card->read.ccws[LCS_NUM_BUFFS].cmd_code = LCS_CCW_TRANSFER;
251	card->read.ccws[LCS_NUM_BUFFS].cda =
252		(__u32) __pa(card->read.ccws);
253	/* Setg initial state of the read channel. */
254	card->read.state = LCS_CH_STATE_INIT;
255
256	card->read.io_idx = 0;
257	card->read.buf_idx = 0;
258}
259
260static void
261lcs_setup_read(struct lcs_card *card)
262{
263	LCS_DBF_TEXT(3, setup, "initread");
264
265	lcs_setup_read_ccws(card);
266	/* Initialize read channel tasklet. */
267	card->read.irq_tasklet.data = (unsigned long) &card->read;
268	card->read.irq_tasklet.func = lcs_tasklet;
269	/* Initialize waitqueue. */
270	init_waitqueue_head(&card->read.wait_q);
271}
272
273/*
274 * Setup write channel.
275 */
276static void
277lcs_setup_write_ccws(struct lcs_card *card)
278{
279	int cnt;
280
281	LCS_DBF_TEXT(3, setup, "iwritccw");
282	/* Setup write ccws. */
283	memset(card->write.ccws, 0, sizeof(struct ccw1) * (LCS_NUM_BUFFS + 1));
284	for (cnt = 0; cnt < LCS_NUM_BUFFS; cnt++) {
285		card->write.ccws[cnt].cmd_code = LCS_CCW_WRITE;
286		card->write.ccws[cnt].count = 0;
287		card->write.ccws[cnt].flags =
288			CCW_FLAG_SUSPEND | CCW_FLAG_CC | CCW_FLAG_SLI;
289		/*
290		 * Note: we have allocated the buffer with GFP_DMA, so
291		 * we do not need to do set_normalized_cda.
292		 */
293		card->write.ccws[cnt].cda =
294			(__u32) __pa(card->write.iob[cnt].data);
295	}
296	/* Last ccw is a tic (transfer in channel). */
297	card->write.ccws[LCS_NUM_BUFFS].cmd_code = LCS_CCW_TRANSFER;
298	card->write.ccws[LCS_NUM_BUFFS].cda =
299		(__u32) __pa(card->write.ccws);
300	/* Set initial state of the write channel. */
301	card->read.state = LCS_CH_STATE_INIT;
302
303	card->write.io_idx = 0;
304	card->write.buf_idx = 0;
305}
306
307static void
308lcs_setup_write(struct lcs_card *card)
309{
310	LCS_DBF_TEXT(3, setup, "initwrit");
311
312	lcs_setup_write_ccws(card);
313	/* Initialize write channel tasklet. */
314	card->write.irq_tasklet.data = (unsigned long) &card->write;
315	card->write.irq_tasklet.func = lcs_tasklet;
316	/* Initialize waitqueue. */
317	init_waitqueue_head(&card->write.wait_q);
318}
319
320static void
321lcs_set_allowed_threads(struct lcs_card *card, unsigned long threads)
322{
323	unsigned long flags;
324
325	spin_lock_irqsave(&card->mask_lock, flags);
326	card->thread_allowed_mask = threads;
327	spin_unlock_irqrestore(&card->mask_lock, flags);
328	wake_up(&card->wait_q);
329}
330static inline int
331lcs_threads_running(struct lcs_card *card, unsigned long threads)
332{
333        unsigned long flags;
334        int rc = 0;
335
336	spin_lock_irqsave(&card->mask_lock, flags);
337        rc = (card->thread_running_mask & threads);
338	spin_unlock_irqrestore(&card->mask_lock, flags);
339        return rc;
340}
341
342static int
343lcs_wait_for_threads(struct lcs_card *card, unsigned long threads)
344{
345        return wait_event_interruptible(card->wait_q,
346                        lcs_threads_running(card, threads) == 0);
347}
348
349static inline int
350lcs_set_thread_start_bit(struct lcs_card *card, unsigned long thread)
351{
352        unsigned long flags;
353
354	spin_lock_irqsave(&card->mask_lock, flags);
355        if ( !(card->thread_allowed_mask & thread) ||
356              (card->thread_start_mask & thread) ) {
357                spin_unlock_irqrestore(&card->mask_lock, flags);
358                return -EPERM;
359        }
360        card->thread_start_mask |= thread;
361	spin_unlock_irqrestore(&card->mask_lock, flags);
362        return 0;
363}
364
365static void
366lcs_clear_thread_running_bit(struct lcs_card *card, unsigned long thread)
367{
368        unsigned long flags;
369
370	spin_lock_irqsave(&card->mask_lock, flags);
371        card->thread_running_mask &= ~thread;
372	spin_unlock_irqrestore(&card->mask_lock, flags);
373        wake_up(&card->wait_q);
374}
375
376static inline int
377__lcs_do_run_thread(struct lcs_card *card, unsigned long thread)
378{
379        unsigned long flags;
380        int rc = 0;
381
382	spin_lock_irqsave(&card->mask_lock, flags);
383        if (card->thread_start_mask & thread){
384                if ((card->thread_allowed_mask & thread) &&
385                    !(card->thread_running_mask & thread)){
386                        rc = 1;
387                        card->thread_start_mask &= ~thread;
388                        card->thread_running_mask |= thread;
389                } else
390                        rc = -EPERM;
391        }
392	spin_unlock_irqrestore(&card->mask_lock, flags);
393        return rc;
394}
395
396static int
397lcs_do_run_thread(struct lcs_card *card, unsigned long thread)
398{
399        int rc = 0;
400        wait_event(card->wait_q,
401                   (rc = __lcs_do_run_thread(card, thread)) >= 0);
402        return rc;
403}
404
405static int
406lcs_do_start_thread(struct lcs_card *card, unsigned long thread)
407{
408        unsigned long flags;
409        int rc = 0;
410
411	spin_lock_irqsave(&card->mask_lock, flags);
412        LCS_DBF_TEXT_(4, trace, "  %02x%02x%02x",
413                        (u8) card->thread_start_mask,
414                        (u8) card->thread_allowed_mask,
415                        (u8) card->thread_running_mask);
416        rc = (card->thread_start_mask & thread);
417	spin_unlock_irqrestore(&card->mask_lock, flags);
418        return rc;
419}
420
421/**
422 * Initialize channels,card and state machines.
423 */
424static void
425lcs_setup_card(struct lcs_card *card)
426{
427	LCS_DBF_TEXT(2, setup, "initcard");
428	LCS_DBF_HEX(2, setup, &card, sizeof(void*));
429
430	lcs_setup_read(card);
431	lcs_setup_write(card);
432	/* Set cards initial state. */
433	card->state = DEV_STATE_DOWN;
434	card->tx_buffer = NULL;
435	card->tx_emitted = 0;
436
437	init_waitqueue_head(&card->wait_q);
438	spin_lock_init(&card->lock);
439	spin_lock_init(&card->ipm_lock);
440	spin_lock_init(&card->mask_lock);
441#ifdef CONFIG_IP_MULTICAST
442	INIT_LIST_HEAD(&card->ipm_list);
443#endif
444	INIT_LIST_HEAD(&card->lancmd_waiters);
445}
446
447static inline void
448lcs_clear_multicast_list(struct lcs_card *card)
449{
450#ifdef	CONFIG_IP_MULTICAST
451	struct lcs_ipm_list *ipm;
452	unsigned long flags;
453
454	/* Free multicast list. */
455	LCS_DBF_TEXT(3, setup, "clmclist");
456	spin_lock_irqsave(&card->ipm_lock, flags);
457	while (!list_empty(&card->ipm_list)){
458		ipm = list_entry(card->ipm_list.next,
459				 struct lcs_ipm_list, list);
460		list_del(&ipm->list);
461		if (ipm->ipm_state != LCS_IPM_STATE_SET_REQUIRED){
462			spin_unlock_irqrestore(&card->ipm_lock, flags);
463			lcs_send_delipm(card, ipm);
464			spin_lock_irqsave(&card->ipm_lock, flags);
465		}
466		kfree(ipm);
467	}
468	spin_unlock_irqrestore(&card->ipm_lock, flags);
469#endif
470}
471/**
472 * Cleanup channels,card and state machines.
473 */
474static void
475lcs_cleanup_card(struct lcs_card *card)
476{
477
478	LCS_DBF_TEXT(3, setup, "cleancrd");
479	LCS_DBF_HEX(2,setup,&card,sizeof(void*));
480
481	if (card->dev != NULL)
482		free_netdev(card->dev);
483	/* Cleanup channels. */
484	lcs_cleanup_channel(&card->write);
485	lcs_cleanup_channel(&card->read);
486}
487
488/**
489 * Start channel.
490 */
491static int
492lcs_start_channel(struct lcs_channel *channel)
493{
494	unsigned long flags;
495	int rc;
496
497	LCS_DBF_TEXT_(4, trace,"ssch%s", dev_name(&channel->ccwdev->dev));
498	spin_lock_irqsave(get_ccwdev_lock(channel->ccwdev), flags);
499	rc = ccw_device_start(channel->ccwdev,
500			      channel->ccws + channel->io_idx, 0, 0,
501			      DOIO_DENY_PREFETCH | DOIO_ALLOW_SUSPEND);
502	if (rc == 0)
503		channel->state = LCS_CH_STATE_RUNNING;
504	spin_unlock_irqrestore(get_ccwdev_lock(channel->ccwdev), flags);
505	if (rc) {
506		LCS_DBF_TEXT_(4,trace,"essh%s",
507			      dev_name(&channel->ccwdev->dev));
508		dev_err(&channel->ccwdev->dev,
509			"Starting an LCS device resulted in an error,"
510			" rc=%d!\n", rc);
511	}
512	return rc;
513}
514
515static int
516lcs_clear_channel(struct lcs_channel *channel)
517{
518	unsigned long flags;
519	int rc;
520
521	LCS_DBF_TEXT(4,trace,"clearch");
522	LCS_DBF_TEXT_(4, trace, "%s", dev_name(&channel->ccwdev->dev));
523	spin_lock_irqsave(get_ccwdev_lock(channel->ccwdev), flags);
524	rc = ccw_device_clear(channel->ccwdev, (addr_t) channel);
525	spin_unlock_irqrestore(get_ccwdev_lock(channel->ccwdev), flags);
526	if (rc) {
527		LCS_DBF_TEXT_(4, trace, "ecsc%s",
528			      dev_name(&channel->ccwdev->dev));
529		return rc;
530	}
531	wait_event(channel->wait_q, (channel->state == LCS_CH_STATE_CLEARED));
532	channel->state = LCS_CH_STATE_STOPPED;
533	return rc;
534}
535
536
537/**
538 * Stop channel.
539 */
540static int
541lcs_stop_channel(struct lcs_channel *channel)
542{
543	unsigned long flags;
544	int rc;
545
546	if (channel->state == LCS_CH_STATE_STOPPED)
547		return 0;
548	LCS_DBF_TEXT(4,trace,"haltsch");
549	LCS_DBF_TEXT_(4, trace, "%s", dev_name(&channel->ccwdev->dev));
550	channel->state = LCS_CH_STATE_INIT;
551	spin_lock_irqsave(get_ccwdev_lock(channel->ccwdev), flags);
552	rc = ccw_device_halt(channel->ccwdev, (addr_t) channel);
553	spin_unlock_irqrestore(get_ccwdev_lock(channel->ccwdev), flags);
554	if (rc) {
555		LCS_DBF_TEXT_(4, trace, "ehsc%s",
556			      dev_name(&channel->ccwdev->dev));
557		return rc;
558	}
559	/* Asynchronous halt initialted. Wait for its completion. */
560	wait_event(channel->wait_q, (channel->state == LCS_CH_STATE_HALTED));
561	lcs_clear_channel(channel);
562	return 0;
563}
564
565/**
566 * start read and write channel
567 */
568static int
569lcs_start_channels(struct lcs_card *card)
570{
571	int rc;
572
573	LCS_DBF_TEXT(2, trace, "chstart");
574	/* start read channel */
575	rc = lcs_start_channel(&card->read);
576	if (rc)
577		return rc;
578	/* start write channel */
579	rc = lcs_start_channel(&card->write);
580	if (rc)
581		lcs_stop_channel(&card->read);
582	return rc;
583}
584
585/**
586 * stop read and write channel
587 */
588static int
589lcs_stop_channels(struct lcs_card *card)
590{
591	LCS_DBF_TEXT(2, trace, "chhalt");
592	lcs_stop_channel(&card->read);
593	lcs_stop_channel(&card->write);
594	return 0;
595}
596
597/**
598 * Get empty buffer.
599 */
600static struct lcs_buffer *
601__lcs_get_buffer(struct lcs_channel *channel)
602{
603	int index;
604
605	LCS_DBF_TEXT(5, trace, "_getbuff");
606	index = channel->io_idx;
607	do {
608		if (channel->iob[index].state == LCS_BUF_STATE_EMPTY) {
609			channel->iob[index].state = LCS_BUF_STATE_LOCKED;
610			return channel->iob + index;
611		}
612		index = (index + 1) & (LCS_NUM_BUFFS - 1);
613	} while (index != channel->io_idx);
614	return NULL;
615}
616
617static struct lcs_buffer *
618lcs_get_buffer(struct lcs_channel *channel)
619{
620	struct lcs_buffer *buffer;
621	unsigned long flags;
622
623	LCS_DBF_TEXT(5, trace, "getbuff");
624	spin_lock_irqsave(get_ccwdev_lock(channel->ccwdev), flags);
625	buffer = __lcs_get_buffer(channel);
626	spin_unlock_irqrestore(get_ccwdev_lock(channel->ccwdev), flags);
627	return buffer;
628}
629
630/**
631 * Resume channel program if the channel is suspended.
632 */
633static int
634__lcs_resume_channel(struct lcs_channel *channel)
635{
636	int rc;
637
638	if (channel->state != LCS_CH_STATE_SUSPENDED)
639		return 0;
640	if (channel->ccws[channel->io_idx].flags & CCW_FLAG_SUSPEND)
641		return 0;
642	LCS_DBF_TEXT_(5, trace, "rsch%s", dev_name(&channel->ccwdev->dev));
643	rc = ccw_device_resume(channel->ccwdev);
644	if (rc) {
645		LCS_DBF_TEXT_(4, trace, "ersc%s",
646			      dev_name(&channel->ccwdev->dev));
647		dev_err(&channel->ccwdev->dev,
648			"Sending data from the LCS device to the LAN failed"
649			" with rc=%d\n",rc);
650	} else
651		channel->state = LCS_CH_STATE_RUNNING;
652	return rc;
653
654}
655
656/**
657 * Make a buffer ready for processing.
658 */
659static inline void
660__lcs_ready_buffer_bits(struct lcs_channel *channel, int index)
661{
662	int prev, next;
663
664	LCS_DBF_TEXT(5, trace, "rdybits");
665	prev = (index - 1) & (LCS_NUM_BUFFS - 1);
666	next = (index + 1) & (LCS_NUM_BUFFS - 1);
667	/* Check if we may clear the suspend bit of this buffer. */
668	if (channel->ccws[next].flags & CCW_FLAG_SUSPEND) {
669		/* Check if we have to set the PCI bit. */
670		if (!(channel->ccws[prev].flags & CCW_FLAG_SUSPEND))
671			/* Suspend bit of the previous buffer is not set. */
672			channel->ccws[index].flags |= CCW_FLAG_PCI;
673		/* Suspend bit of the next buffer is set. */
674		channel->ccws[index].flags &= ~CCW_FLAG_SUSPEND;
675	}
676}
677
678static int
679lcs_ready_buffer(struct lcs_channel *channel, struct lcs_buffer *buffer)
680{
681	unsigned long flags;
682	int index, rc;
683
684	LCS_DBF_TEXT(5, trace, "rdybuff");
685	BUG_ON(buffer->state != LCS_BUF_STATE_LOCKED &&
686	       buffer->state != LCS_BUF_STATE_PROCESSED);
687	spin_lock_irqsave(get_ccwdev_lock(channel->ccwdev), flags);
688	buffer->state = LCS_BUF_STATE_READY;
689	index = buffer - channel->iob;
690	/* Set length. */
691	channel->ccws[index].count = buffer->count;
692	/* Check relevant PCI/suspend bits. */
693	__lcs_ready_buffer_bits(channel, index);
694	rc = __lcs_resume_channel(channel);
695	spin_unlock_irqrestore(get_ccwdev_lock(channel->ccwdev), flags);
696	return rc;
697}
698
699/**
700 * Mark the buffer as processed. Take care of the suspend bit
701 * of the previous buffer. This function is called from
702 * interrupt context, so the lock must not be taken.
703 */
704static int
705__lcs_processed_buffer(struct lcs_channel *channel, struct lcs_buffer *buffer)
706{
707	int index, prev, next;
708
709	LCS_DBF_TEXT(5, trace, "prcsbuff");
710	BUG_ON(buffer->state != LCS_BUF_STATE_READY);
711	buffer->state = LCS_BUF_STATE_PROCESSED;
712	index = buffer - channel->iob;
713	prev = (index - 1) & (LCS_NUM_BUFFS - 1);
714	next = (index + 1) & (LCS_NUM_BUFFS - 1);
715	/* Set the suspend bit and clear the PCI bit of this buffer. */
716	channel->ccws[index].flags |= CCW_FLAG_SUSPEND;
717	channel->ccws[index].flags &= ~CCW_FLAG_PCI;
718	/* Check the suspend bit of the previous buffer. */
719	if (channel->iob[prev].state == LCS_BUF_STATE_READY) {
720		/*
721		 * Previous buffer is in state ready. It might have
722		 * happened in lcs_ready_buffer that the suspend bit
723		 * has not been cleared to avoid an endless loop.
724		 * Do it now.
725		 */
726		__lcs_ready_buffer_bits(channel, prev);
727	}
728	/* Clear PCI bit of next buffer. */
729	channel->ccws[next].flags &= ~CCW_FLAG_PCI;
730	return __lcs_resume_channel(channel);
731}
732
733/**
734 * Put a processed buffer back to state empty.
735 */
736static void
737lcs_release_buffer(struct lcs_channel *channel, struct lcs_buffer *buffer)
738{
739	unsigned long flags;
740
741	LCS_DBF_TEXT(5, trace, "relbuff");
742	BUG_ON(buffer->state != LCS_BUF_STATE_LOCKED &&
743	       buffer->state != LCS_BUF_STATE_PROCESSED);
744	spin_lock_irqsave(get_ccwdev_lock(channel->ccwdev), flags);
745	buffer->state = LCS_BUF_STATE_EMPTY;
746	spin_unlock_irqrestore(get_ccwdev_lock(channel->ccwdev), flags);
747}
748
749/**
750 * Get buffer for a lan command.
751 */
752static struct lcs_buffer *
753lcs_get_lancmd(struct lcs_card *card, int count)
754{
755	struct lcs_buffer *buffer;
756	struct lcs_cmd *cmd;
757
758	LCS_DBF_TEXT(4, trace, "getlncmd");
759	/* Get buffer and wait if none is available. */
760	wait_event(card->write.wait_q,
761		   ((buffer = lcs_get_buffer(&card->write)) != NULL));
762	count += sizeof(struct lcs_header);
763	*(__u16 *)(buffer->data + count) = 0;
764	buffer->count = count + sizeof(__u16);
765	buffer->callback = lcs_release_buffer;
766	cmd = (struct lcs_cmd *) buffer->data;
767	cmd->offset = count;
768	cmd->type = LCS_FRAME_TYPE_CONTROL;
769	cmd->slot = 0;
770	return buffer;
771}
772
773
774static void
775lcs_get_reply(struct lcs_reply *reply)
776{
777	WARN_ON(atomic_read(&reply->refcnt) <= 0);
778	atomic_inc(&reply->refcnt);
779}
780
781static void
782lcs_put_reply(struct lcs_reply *reply)
783{
784        WARN_ON(atomic_read(&reply->refcnt) <= 0);
785        if (atomic_dec_and_test(&reply->refcnt)) {
786		kfree(reply);
787	}
788
789}
790
791static struct lcs_reply *
792lcs_alloc_reply(struct lcs_cmd *cmd)
793{
794	struct lcs_reply *reply;
795
796	LCS_DBF_TEXT(4, trace, "getreply");
797
798	reply = kzalloc(sizeof(struct lcs_reply), GFP_ATOMIC);
799	if (!reply)
800		return NULL;
801	atomic_set(&reply->refcnt,1);
802	reply->sequence_no = cmd->sequence_no;
803	reply->received = 0;
804	reply->rc = 0;
805	init_waitqueue_head(&reply->wait_q);
806
807	return reply;
808}
809
810/**
811 * Notifier function for lancmd replies. Called from read irq.
812 */
813static void
814lcs_notify_lancmd_waiters(struct lcs_card *card, struct lcs_cmd *cmd)
815{
816	struct list_head *l, *n;
817	struct lcs_reply *reply;
818
819	LCS_DBF_TEXT(4, trace, "notiwait");
820	spin_lock(&card->lock);
821	list_for_each_safe(l, n, &card->lancmd_waiters) {
822		reply = list_entry(l, struct lcs_reply, list);
823		if (reply->sequence_no == cmd->sequence_no) {
824			lcs_get_reply(reply);
825			list_del_init(&reply->list);
826			if (reply->callback != NULL)
827				reply->callback(card, cmd);
828			reply->received = 1;
829			reply->rc = cmd->return_code;
830			wake_up(&reply->wait_q);
831			lcs_put_reply(reply);
832			break;
833		}
834	}
835	spin_unlock(&card->lock);
836}
837
838/**
839 * Emit buffer of a lan command.
840 */
841static void
842lcs_lancmd_timeout(unsigned long data)
843{
844	struct lcs_reply *reply, *list_reply, *r;
845	unsigned long flags;
846
847	LCS_DBF_TEXT(4, trace, "timeout");
848	reply = (struct lcs_reply *) data;
849	spin_lock_irqsave(&reply->card->lock, flags);
850	list_for_each_entry_safe(list_reply, r,
851				 &reply->card->lancmd_waiters,list) {
852		if (reply == list_reply) {
853			lcs_get_reply(reply);
854			list_del_init(&reply->list);
855			spin_unlock_irqrestore(&reply->card->lock, flags);
856			reply->received = 1;
857			reply->rc = -ETIME;
858			wake_up(&reply->wait_q);
859			lcs_put_reply(reply);
860			return;
861		}
862	}
863	spin_unlock_irqrestore(&reply->card->lock, flags);
864}
865
866static int
867lcs_send_lancmd(struct lcs_card *card, struct lcs_buffer *buffer,
868		void (*reply_callback)(struct lcs_card *, struct lcs_cmd *))
869{
870	struct lcs_reply *reply;
871	struct lcs_cmd *cmd;
872	struct timer_list timer;
873	unsigned long flags;
874	int rc;
875
876	LCS_DBF_TEXT(4, trace, "sendcmd");
877	cmd = (struct lcs_cmd *) buffer->data;
878	cmd->return_code = 0;
879	cmd->sequence_no = card->sequence_no++;
880	reply = lcs_alloc_reply(cmd);
881	if (!reply)
882		return -ENOMEM;
883	reply->callback = reply_callback;
884	reply->card = card;
885	spin_lock_irqsave(&card->lock, flags);
886	list_add_tail(&reply->list, &card->lancmd_waiters);
887	spin_unlock_irqrestore(&card->lock, flags);
888
889	buffer->callback = lcs_release_buffer;
890	rc = lcs_ready_buffer(&card->write, buffer);
891	if (rc)
892		return rc;
893	init_timer_on_stack(&timer);
894	timer.function = lcs_lancmd_timeout;
895	timer.data = (unsigned long) reply;
896	timer.expires = jiffies + HZ*card->lancmd_timeout;
897	add_timer(&timer);
898	wait_event(reply->wait_q, reply->received);
899	del_timer_sync(&timer);
900	destroy_timer_on_stack(&timer);
901	LCS_DBF_TEXT_(4, trace, "rc:%d",reply->rc);
902	rc = reply->rc;
903	lcs_put_reply(reply);
904	return rc ? -EIO : 0;
905}
906
907/**
908 * LCS startup command
909 */
910static int
911lcs_send_startup(struct lcs_card *card, __u8 initiator)
912{
913	struct lcs_buffer *buffer;
914	struct lcs_cmd *cmd;
915
916	LCS_DBF_TEXT(2, trace, "startup");
917	buffer = lcs_get_lancmd(card, LCS_STD_CMD_SIZE);
918	cmd = (struct lcs_cmd *) buffer->data;
919	cmd->cmd_code = LCS_CMD_STARTUP;
920	cmd->initiator = initiator;
921	cmd->cmd.lcs_startup.buff_size = LCS_IOBUFFERSIZE;
922	return lcs_send_lancmd(card, buffer, NULL);
923}
924
925/**
926 * LCS shutdown command
927 */
928static int
929lcs_send_shutdown(struct lcs_card *card)
930{
931	struct lcs_buffer *buffer;
932	struct lcs_cmd *cmd;
933
934	LCS_DBF_TEXT(2, trace, "shutdown");
935	buffer = lcs_get_lancmd(card, LCS_STD_CMD_SIZE);
936	cmd = (struct lcs_cmd *) buffer->data;
937	cmd->cmd_code = LCS_CMD_SHUTDOWN;
938	cmd->initiator = LCS_INITIATOR_TCPIP;
939	return lcs_send_lancmd(card, buffer, NULL);
940}
941
942/**
943 * LCS lanstat command
944 */
945static void
946__lcs_lanstat_cb(struct lcs_card *card, struct lcs_cmd *cmd)
947{
948	LCS_DBF_TEXT(2, trace, "statcb");
949	memcpy(card->mac, cmd->cmd.lcs_lanstat_cmd.mac_addr, LCS_MAC_LENGTH);
950}
951
952static int
953lcs_send_lanstat(struct lcs_card *card)
954{
955	struct lcs_buffer *buffer;
956	struct lcs_cmd *cmd;
957
958	LCS_DBF_TEXT(2,trace, "cmdstat");
959	buffer = lcs_get_lancmd(card, LCS_STD_CMD_SIZE);
960	cmd = (struct lcs_cmd *) buffer->data;
961	/* Setup lanstat command. */
962	cmd->cmd_code = LCS_CMD_LANSTAT;
963	cmd->initiator = LCS_INITIATOR_TCPIP;
964	cmd->cmd.lcs_std_cmd.lan_type = card->lan_type;
965	cmd->cmd.lcs_std_cmd.portno = card->portno;
966	return lcs_send_lancmd(card, buffer, __lcs_lanstat_cb);
967}
968
969/**
970 * send stoplan command
971 */
972static int
973lcs_send_stoplan(struct lcs_card *card, __u8 initiator)
974{
975	struct lcs_buffer *buffer;
976	struct lcs_cmd *cmd;
977
978	LCS_DBF_TEXT(2, trace, "cmdstpln");
979	buffer = lcs_get_lancmd(card, LCS_STD_CMD_SIZE);
980	cmd = (struct lcs_cmd *) buffer->data;
981	cmd->cmd_code = LCS_CMD_STOPLAN;
982	cmd->initiator = initiator;
983	cmd->cmd.lcs_std_cmd.lan_type = card->lan_type;
984	cmd->cmd.lcs_std_cmd.portno = card->portno;
985	return lcs_send_lancmd(card, buffer, NULL);
986}
987
988/**
989 * send startlan command
990 */
991static void
992__lcs_send_startlan_cb(struct lcs_card *card, struct lcs_cmd *cmd)
993{
994	LCS_DBF_TEXT(2, trace, "srtlancb");
995	card->lan_type = cmd->cmd.lcs_std_cmd.lan_type;
996	card->portno = cmd->cmd.lcs_std_cmd.portno;
997}
998
999static int
1000lcs_send_startlan(struct lcs_card *card, __u8 initiator)
1001{
1002	struct lcs_buffer *buffer;
1003	struct lcs_cmd *cmd;
1004
1005	LCS_DBF_TEXT(2, trace, "cmdstaln");
1006	buffer = lcs_get_lancmd(card, LCS_STD_CMD_SIZE);
1007	cmd = (struct lcs_cmd *) buffer->data;
1008	cmd->cmd_code = LCS_CMD_STARTLAN;
1009	cmd->initiator = initiator;
1010	cmd->cmd.lcs_std_cmd.lan_type = card->lan_type;
1011	cmd->cmd.lcs_std_cmd.portno = card->portno;
1012	return lcs_send_lancmd(card, buffer, __lcs_send_startlan_cb);
1013}
1014
1015#ifdef CONFIG_IP_MULTICAST
1016/**
1017 * send setipm command (Multicast)
1018 */
1019static int
1020lcs_send_setipm(struct lcs_card *card,struct lcs_ipm_list *ipm_list)
1021{
1022	struct lcs_buffer *buffer;
1023	struct lcs_cmd *cmd;
1024
1025	LCS_DBF_TEXT(2, trace, "cmdsetim");
1026	buffer = lcs_get_lancmd(card, LCS_MULTICAST_CMD_SIZE);
1027	cmd = (struct lcs_cmd *) buffer->data;
1028	cmd->cmd_code = LCS_CMD_SETIPM;
1029	cmd->initiator = LCS_INITIATOR_TCPIP;
1030	cmd->cmd.lcs_qipassist.lan_type = card->lan_type;
1031	cmd->cmd.lcs_qipassist.portno = card->portno;
1032	cmd->cmd.lcs_qipassist.version = 4;
1033	cmd->cmd.lcs_qipassist.num_ip_pairs = 1;
1034	memcpy(cmd->cmd.lcs_qipassist.lcs_ipass_ctlmsg.ip_mac_pair,
1035	       &ipm_list->ipm, sizeof (struct lcs_ip_mac_pair));
1036	LCS_DBF_TEXT_(2, trace, "%x",ipm_list->ipm.ip_addr);
1037	return lcs_send_lancmd(card, buffer, NULL);
1038}
1039
1040/**
1041 * send delipm command (Multicast)
1042 */
1043static int
1044lcs_send_delipm(struct lcs_card *card,struct lcs_ipm_list *ipm_list)
1045{
1046	struct lcs_buffer *buffer;
1047	struct lcs_cmd *cmd;
1048
1049	LCS_DBF_TEXT(2, trace, "cmddelim");
1050	buffer = lcs_get_lancmd(card, LCS_MULTICAST_CMD_SIZE);
1051	cmd = (struct lcs_cmd *) buffer->data;
1052	cmd->cmd_code = LCS_CMD_DELIPM;
1053	cmd->initiator = LCS_INITIATOR_TCPIP;
1054	cmd->cmd.lcs_qipassist.lan_type = card->lan_type;
1055	cmd->cmd.lcs_qipassist.portno = card->portno;
1056	cmd->cmd.lcs_qipassist.version = 4;
1057	cmd->cmd.lcs_qipassist.num_ip_pairs = 1;
1058	memcpy(cmd->cmd.lcs_qipassist.lcs_ipass_ctlmsg.ip_mac_pair,
1059	       &ipm_list->ipm, sizeof (struct lcs_ip_mac_pair));
1060	LCS_DBF_TEXT_(2, trace, "%x",ipm_list->ipm.ip_addr);
1061	return lcs_send_lancmd(card, buffer, NULL);
1062}
1063
1064/**
1065 * check if multicast is supported by LCS
1066 */
1067static void
1068__lcs_check_multicast_cb(struct lcs_card *card, struct lcs_cmd *cmd)
1069{
1070	LCS_DBF_TEXT(2, trace, "chkmccb");
1071	card->ip_assists_supported =
1072		cmd->cmd.lcs_qipassist.ip_assists_supported;
1073	card->ip_assists_enabled =
1074		cmd->cmd.lcs_qipassist.ip_assists_enabled;
1075}
1076
1077static int
1078lcs_check_multicast_support(struct lcs_card *card)
1079{
1080	struct lcs_buffer *buffer;
1081	struct lcs_cmd *cmd;
1082	int rc;
1083
1084	LCS_DBF_TEXT(2, trace, "cmdqipa");
1085	/* Send query ipassist. */
1086	buffer = lcs_get_lancmd(card, LCS_STD_CMD_SIZE);
1087	cmd = (struct lcs_cmd *) buffer->data;
1088	cmd->cmd_code = LCS_CMD_QIPASSIST;
1089	cmd->initiator = LCS_INITIATOR_TCPIP;
1090	cmd->cmd.lcs_qipassist.lan_type = card->lan_type;
1091	cmd->cmd.lcs_qipassist.portno = card->portno;
1092	cmd->cmd.lcs_qipassist.version = 4;
1093	cmd->cmd.lcs_qipassist.num_ip_pairs = 1;
1094	rc = lcs_send_lancmd(card, buffer, __lcs_check_multicast_cb);
1095	if (rc != 0) {
1096		pr_err("Query IPAssist failed. Assuming unsupported!\n");
1097		return -EOPNOTSUPP;
1098	}
1099	if (card->ip_assists_supported & LCS_IPASS_MULTICAST_SUPPORT)
1100		return 0;
1101	return -EOPNOTSUPP;
1102}
1103
1104/**
1105 * set or del multicast address on LCS card
1106 */
1107static void
1108lcs_fix_multicast_list(struct lcs_card *card)
1109{
1110	struct list_head failed_list;
1111	struct lcs_ipm_list *ipm, *tmp;
1112	unsigned long flags;
1113	int rc;
1114
1115	LCS_DBF_TEXT(4,trace, "fixipm");
1116	INIT_LIST_HEAD(&failed_list);
1117	spin_lock_irqsave(&card->ipm_lock, flags);
1118list_modified:
1119	list_for_each_entry_safe(ipm, tmp, &card->ipm_list, list){
1120		switch (ipm->ipm_state) {
1121		case LCS_IPM_STATE_SET_REQUIRED:
1122			/* del from ipm_list so no one else can tamper with
1123			 * this entry */
1124			list_del_init(&ipm->list);
1125			spin_unlock_irqrestore(&card->ipm_lock, flags);
1126			rc = lcs_send_setipm(card, ipm);
1127			spin_lock_irqsave(&card->ipm_lock, flags);
1128			if (rc) {
1129				pr_info("Adding multicast address failed."
1130					" Table possibly full!\n");
1131				/* store ipm in failed list -> will be added
1132				 * to ipm_list again, so a retry will be done
1133				 * during the next call of this function */
1134				list_add_tail(&ipm->list, &failed_list);
1135			} else {
1136				ipm->ipm_state = LCS_IPM_STATE_ON_CARD;
1137				/* re-insert into ipm_list */
1138				list_add_tail(&ipm->list, &card->ipm_list);
1139			}
1140			goto list_modified;
1141		case LCS_IPM_STATE_DEL_REQUIRED:
1142			list_del(&ipm->list);
1143			spin_unlock_irqrestore(&card->ipm_lock, flags);
1144			lcs_send_delipm(card, ipm);
1145			spin_lock_irqsave(&card->ipm_lock, flags);
1146			kfree(ipm);
1147			goto list_modified;
1148		case LCS_IPM_STATE_ON_CARD:
1149			break;
1150		}
1151	}
1152	/* re-insert all entries from the failed_list into ipm_list */
1153	list_for_each_entry_safe(ipm, tmp, &failed_list, list)
1154		list_move_tail(&ipm->list, &card->ipm_list);
1155
1156	spin_unlock_irqrestore(&card->ipm_lock, flags);
1157}
1158
1159/**
1160 * get mac address for the relevant Multicast address
1161 */
1162static void
1163lcs_get_mac_for_ipm(__be32 ipm, char *mac, struct net_device *dev)
1164{
1165	LCS_DBF_TEXT(4,trace, "getmac");
1166	ip_eth_mc_map(ipm, mac);
1167}
1168
1169/**
1170 * function called by net device to handle multicast address relevant things
1171 */
1172static inline void
1173lcs_remove_mc_addresses(struct lcs_card *card, struct in_device *in4_dev)
1174{
1175	struct ip_mc_list *im4;
1176	struct list_head *l;
1177	struct lcs_ipm_list *ipm;
1178	unsigned long flags;
1179	char buf[MAX_ADDR_LEN];
1180
1181	LCS_DBF_TEXT(4, trace, "remmclst");
1182	spin_lock_irqsave(&card->ipm_lock, flags);
1183	list_for_each(l, &card->ipm_list) {
1184		ipm = list_entry(l, struct lcs_ipm_list, list);
1185		for (im4 = rcu_dereference(in4_dev->mc_list);
1186		     im4 != NULL; im4 = rcu_dereference(im4->next_rcu)) {
1187			lcs_get_mac_for_ipm(im4->multiaddr, buf, card->dev);
1188			if ( (ipm->ipm.ip_addr == im4->multiaddr) &&
1189			     (memcmp(buf, &ipm->ipm.mac_addr,
1190				     LCS_MAC_LENGTH) == 0) )
1191				break;
1192		}
1193		if (im4 == NULL)
1194			ipm->ipm_state = LCS_IPM_STATE_DEL_REQUIRED;
1195	}
1196	spin_unlock_irqrestore(&card->ipm_lock, flags);
1197}
1198
1199static inline struct lcs_ipm_list *
1200lcs_check_addr_entry(struct lcs_card *card, struct ip_mc_list *im4, char *buf)
1201{
1202	struct lcs_ipm_list *tmp, *ipm = NULL;
1203	struct list_head *l;
1204	unsigned long flags;
1205
1206	LCS_DBF_TEXT(4, trace, "chkmcent");
1207	spin_lock_irqsave(&card->ipm_lock, flags);
1208	list_for_each(l, &card->ipm_list) {
1209		tmp = list_entry(l, struct lcs_ipm_list, list);
1210		if ( (tmp->ipm.ip_addr == im4->multiaddr) &&
1211		     (memcmp(buf, &tmp->ipm.mac_addr,
1212			     LCS_MAC_LENGTH) == 0) ) {
1213			ipm = tmp;
1214			break;
1215		}
1216	}
1217	spin_unlock_irqrestore(&card->ipm_lock, flags);
1218	return ipm;
1219}
1220
1221static inline void
1222lcs_set_mc_addresses(struct lcs_card *card, struct in_device *in4_dev)
1223{
1224
1225	struct ip_mc_list *im4;
1226	struct lcs_ipm_list *ipm;
1227	char buf[MAX_ADDR_LEN];
1228	unsigned long flags;
1229
1230	LCS_DBF_TEXT(4, trace, "setmclst");
1231	for (im4 = rcu_dereference(in4_dev->mc_list); im4 != NULL;
1232	     im4 = rcu_dereference(im4->next_rcu)) {
1233		lcs_get_mac_for_ipm(im4->multiaddr, buf, card->dev);
1234		ipm = lcs_check_addr_entry(card, im4, buf);
1235		if (ipm != NULL)
1236			continue;	/* Address already in list. */
1237		ipm = kzalloc(sizeof(struct lcs_ipm_list), GFP_ATOMIC);
1238		if (ipm == NULL) {
1239			pr_info("Not enough memory to add"
1240				" new multicast entry!\n");
1241			break;
1242		}
1243		memcpy(&ipm->ipm.mac_addr, buf, LCS_MAC_LENGTH);
1244		ipm->ipm.ip_addr = im4->multiaddr;
1245		ipm->ipm_state = LCS_IPM_STATE_SET_REQUIRED;
1246		spin_lock_irqsave(&card->ipm_lock, flags);
1247		LCS_DBF_HEX(2,trace,&ipm->ipm.ip_addr,4);
1248		list_add(&ipm->list, &card->ipm_list);
1249		spin_unlock_irqrestore(&card->ipm_lock, flags);
1250	}
1251}
1252
1253static int
1254lcs_register_mc_addresses(void *data)
1255{
1256	struct lcs_card *card;
1257	struct in_device *in4_dev;
1258
1259	card = (struct lcs_card *) data;
1260
1261	if (!lcs_do_run_thread(card, LCS_SET_MC_THREAD))
1262		return 0;
1263	LCS_DBF_TEXT(4, trace, "regmulti");
1264
1265	in4_dev = in_dev_get(card->dev);
1266	if (in4_dev == NULL)
1267		goto out;
1268	rcu_read_lock();
1269	lcs_remove_mc_addresses(card,in4_dev);
1270	lcs_set_mc_addresses(card, in4_dev);
1271	rcu_read_unlock();
1272	in_dev_put(in4_dev);
1273
1274	netif_carrier_off(card->dev);
1275	netif_tx_disable(card->dev);
1276	wait_event(card->write.wait_q,
1277			(card->write.state != LCS_CH_STATE_RUNNING));
1278	lcs_fix_multicast_list(card);
1279	if (card->state == DEV_STATE_UP) {
1280		netif_carrier_on(card->dev);
1281		netif_wake_queue(card->dev);
1282	}
1283out:
1284	lcs_clear_thread_running_bit(card, LCS_SET_MC_THREAD);
1285	return 0;
1286}
1287#endif /* CONFIG_IP_MULTICAST */
1288
1289/**
1290 * function called by net device to
1291 * handle multicast address relevant things
1292 */
1293static void
1294lcs_set_multicast_list(struct net_device *dev)
1295{
1296#ifdef CONFIG_IP_MULTICAST
1297        struct lcs_card *card;
1298
1299        LCS_DBF_TEXT(4, trace, "setmulti");
1300        card = (struct lcs_card *) dev->ml_priv;
1301
1302        if (!lcs_set_thread_start_bit(card, LCS_SET_MC_THREAD))
1303		schedule_work(&card->kernel_thread_starter);
1304#endif /* CONFIG_IP_MULTICAST */
1305}
1306
1307static long
1308lcs_check_irb_error(struct ccw_device *cdev, struct irb *irb)
1309{
1310	if (!IS_ERR(irb))
1311		return 0;
1312
1313	switch (PTR_ERR(irb)) {
1314	case -EIO:
1315		dev_warn(&cdev->dev,
1316			"An I/O-error occurred on the LCS device\n");
1317		LCS_DBF_TEXT(2, trace, "ckirberr");
1318		LCS_DBF_TEXT_(2, trace, "  rc%d", -EIO);
1319		break;
1320	case -ETIMEDOUT:
1321		dev_warn(&cdev->dev,
1322			"A command timed out on the LCS device\n");
1323		LCS_DBF_TEXT(2, trace, "ckirberr");
1324		LCS_DBF_TEXT_(2, trace, "  rc%d", -ETIMEDOUT);
1325		break;
1326	default:
1327		dev_warn(&cdev->dev,
1328			"An error occurred on the LCS device, rc=%ld\n",
1329			PTR_ERR(irb));
1330		LCS_DBF_TEXT(2, trace, "ckirberr");
1331		LCS_DBF_TEXT(2, trace, "  rc???");
1332	}
1333	return PTR_ERR(irb);
1334}
1335
1336static int
1337lcs_get_problem(struct ccw_device *cdev, struct irb *irb)
1338{
1339	int dstat, cstat;
1340	char *sense;
1341
1342	sense = (char *) irb->ecw;
1343	cstat = irb->scsw.cmd.cstat;
1344	dstat = irb->scsw.cmd.dstat;
1345
1346	if (cstat & (SCHN_STAT_CHN_CTRL_CHK | SCHN_STAT_INTF_CTRL_CHK |
1347		     SCHN_STAT_CHN_DATA_CHK | SCHN_STAT_CHAIN_CHECK |
1348		     SCHN_STAT_PROT_CHECK   | SCHN_STAT_PROG_CHECK)) {
1349		LCS_DBF_TEXT(2, trace, "CGENCHK");
1350		return 1;
1351	}
1352	if (dstat & DEV_STAT_UNIT_CHECK) {
1353		if (sense[LCS_SENSE_BYTE_1] &
1354		    LCS_SENSE_RESETTING_EVENT) {
1355			LCS_DBF_TEXT(2, trace, "REVIND");
1356			return 1;
1357		}
1358		if (sense[LCS_SENSE_BYTE_0] &
1359		    LCS_SENSE_CMD_REJECT) {
1360			LCS_DBF_TEXT(2, trace, "CMDREJ");
1361			return 0;
1362		}
1363		if ((!sense[LCS_SENSE_BYTE_0]) &&
1364		    (!sense[LCS_SENSE_BYTE_1]) &&
1365		    (!sense[LCS_SENSE_BYTE_2]) &&
1366		    (!sense[LCS_SENSE_BYTE_3])) {
1367			LCS_DBF_TEXT(2, trace, "ZEROSEN");
1368			return 0;
1369		}
1370		LCS_DBF_TEXT(2, trace, "DGENCHK");
1371		return 1;
1372	}
1373	return 0;
1374}
1375
1376static void
1377lcs_schedule_recovery(struct lcs_card *card)
1378{
1379	LCS_DBF_TEXT(2, trace, "startrec");
1380	if (!lcs_set_thread_start_bit(card, LCS_RECOVERY_THREAD))
1381		schedule_work(&card->kernel_thread_starter);
1382}
1383
1384/**
1385 * IRQ Handler for LCS channels
1386 */
1387static void
1388lcs_irq(struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
1389{
1390	struct lcs_card *card;
1391	struct lcs_channel *channel;
1392	int rc, index;
1393	int cstat, dstat;
1394
1395	if (lcs_check_irb_error(cdev, irb))
1396		return;
1397
1398	card = CARD_FROM_DEV(cdev);
1399	if (card->read.ccwdev == cdev)
1400		channel = &card->read;
1401	else
1402		channel = &card->write;
1403
1404	cstat = irb->scsw.cmd.cstat;
1405	dstat = irb->scsw.cmd.dstat;
1406	LCS_DBF_TEXT_(5, trace, "Rint%s", dev_name(&cdev->dev));
1407	LCS_DBF_TEXT_(5, trace, "%4x%4x", irb->scsw.cmd.cstat,
1408		      irb->scsw.cmd.dstat);
1409	LCS_DBF_TEXT_(5, trace, "%4x%4x", irb->scsw.cmd.fctl,
1410		      irb->scsw.cmd.actl);
1411
1412	/* Check for channel and device errors presented */
1413	rc = lcs_get_problem(cdev, irb);
1414	if (rc || (dstat & DEV_STAT_UNIT_EXCEP)) {
1415		dev_warn(&cdev->dev,
1416			"The LCS device stopped because of an error,"
1417			" dstat=0x%X, cstat=0x%X \n",
1418			    dstat, cstat);
1419		if (rc) {
1420			channel->state = LCS_CH_STATE_ERROR;
1421		}
1422	}
1423	if (channel->state == LCS_CH_STATE_ERROR) {
1424		lcs_schedule_recovery(card);
1425		wake_up(&card->wait_q);
1426		return;
1427	}
1428	/* How far in the ccw chain have we processed? */
1429	if ((channel->state != LCS_CH_STATE_INIT) &&
1430	    (irb->scsw.cmd.fctl & SCSW_FCTL_START_FUNC) &&
1431	    (irb->scsw.cmd.cpa != 0)) {
1432		index = (struct ccw1 *) __va((addr_t) irb->scsw.cmd.cpa)
1433			- channel->ccws;
1434		if ((irb->scsw.cmd.actl & SCSW_ACTL_SUSPENDED) ||
1435		    (irb->scsw.cmd.cstat & SCHN_STAT_PCI))
1436			/* Bloody io subsystem tells us lies about cpa... */
1437			index = (index - 1) & (LCS_NUM_BUFFS - 1);
1438		while (channel->io_idx != index) {
1439			__lcs_processed_buffer(channel,
1440					       channel->iob + channel->io_idx);
1441			channel->io_idx =
1442				(channel->io_idx + 1) & (LCS_NUM_BUFFS - 1);
1443		}
1444	}
1445
1446	if ((irb->scsw.cmd.dstat & DEV_STAT_DEV_END) ||
1447	    (irb->scsw.cmd.dstat & DEV_STAT_CHN_END) ||
1448	    (irb->scsw.cmd.dstat & DEV_STAT_UNIT_CHECK))
1449		/* Mark channel as stopped. */
1450		channel->state = LCS_CH_STATE_STOPPED;
1451	else if (irb->scsw.cmd.actl & SCSW_ACTL_SUSPENDED)
1452		/* CCW execution stopped on a suspend bit. */
1453		channel->state = LCS_CH_STATE_SUSPENDED;
1454	if (irb->scsw.cmd.fctl & SCSW_FCTL_HALT_FUNC) {
1455		if (irb->scsw.cmd.cc != 0) {
1456			ccw_device_halt(channel->ccwdev, (addr_t) channel);
1457			return;
1458		}
1459		/* The channel has been stopped by halt_IO. */
1460		channel->state = LCS_CH_STATE_HALTED;
1461	}
1462	if (irb->scsw.cmd.fctl & SCSW_FCTL_CLEAR_FUNC)
1463		channel->state = LCS_CH_STATE_CLEARED;
1464	/* Do the rest in the tasklet. */
1465	tasklet_schedule(&channel->irq_tasklet);
1466}
1467
1468/**
1469 * Tasklet for IRQ handler
1470 */
1471static void
1472lcs_tasklet(unsigned long data)
1473{
1474	unsigned long flags;
1475	struct lcs_channel *channel;
1476	struct lcs_buffer *iob;
1477	int buf_idx;
1478
1479	channel = (struct lcs_channel *) data;
1480	LCS_DBF_TEXT_(5, trace, "tlet%s", dev_name(&channel->ccwdev->dev));
1481
1482	/* Check for processed buffers. */
1483	iob = channel->iob;
1484	buf_idx = channel->buf_idx;
1485	while (iob[buf_idx].state == LCS_BUF_STATE_PROCESSED) {
1486		/* Do the callback thing. */
1487		if (iob[buf_idx].callback != NULL)
1488			iob[buf_idx].callback(channel, iob + buf_idx);
1489		buf_idx = (buf_idx + 1) & (LCS_NUM_BUFFS - 1);
1490	}
1491	channel->buf_idx = buf_idx;
1492
1493	if (channel->state == LCS_CH_STATE_STOPPED)
1494		lcs_start_channel(channel);
1495	spin_lock_irqsave(get_ccwdev_lock(channel->ccwdev), flags);
1496	if (channel->state == LCS_CH_STATE_SUSPENDED &&
1497	    channel->iob[channel->io_idx].state == LCS_BUF_STATE_READY)
1498		__lcs_resume_channel(channel);
1499	spin_unlock_irqrestore(get_ccwdev_lock(channel->ccwdev), flags);
1500
1501	/* Something happened on the channel. Wake up waiters. */
1502	wake_up(&channel->wait_q);
1503}
1504
1505/**
1506 * Finish current tx buffer and make it ready for transmit.
1507 */
1508static void
1509__lcs_emit_txbuffer(struct lcs_card *card)
1510{
1511	LCS_DBF_TEXT(5, trace, "emittx");
1512	*(__u16 *)(card->tx_buffer->data + card->tx_buffer->count) = 0;
1513	card->tx_buffer->count += 2;
1514	lcs_ready_buffer(&card->write, card->tx_buffer);
1515	card->tx_buffer = NULL;
1516	card->tx_emitted++;
1517}
1518
1519/**
1520 * Callback for finished tx buffers.
1521 */
1522static void
1523lcs_txbuffer_cb(struct lcs_channel *channel, struct lcs_buffer *buffer)
1524{
1525	struct lcs_card *card;
1526
1527	LCS_DBF_TEXT(5, trace, "txbuffcb");
1528	/* Put buffer back to pool. */
1529	lcs_release_buffer(channel, buffer);
1530	card = container_of(channel, struct lcs_card, write);
1531	if (netif_queue_stopped(card->dev) && netif_carrier_ok(card->dev))
1532		netif_wake_queue(card->dev);
1533	spin_lock(&card->lock);
1534	card->tx_emitted--;
1535	if (card->tx_emitted <= 0 && card->tx_buffer != NULL)
1536		/*
1537		 * Last running tx buffer has finished. Submit partially
1538		 * filled current buffer.
1539		 */
1540		__lcs_emit_txbuffer(card);
1541	spin_unlock(&card->lock);
1542}
1543
1544/**
1545 * Packet transmit function called by network stack
1546 */
1547static int
1548__lcs_start_xmit(struct lcs_card *card, struct sk_buff *skb,
1549		 struct net_device *dev)
1550{
1551	struct lcs_header *header;
1552	int rc = NETDEV_TX_OK;
1553
1554	LCS_DBF_TEXT(5, trace, "hardxmit");
1555	if (skb == NULL) {
1556		card->stats.tx_dropped++;
1557		card->stats.tx_errors++;
1558		return NETDEV_TX_OK;
1559	}
1560	if (card->state != DEV_STATE_UP) {
1561		dev_kfree_skb(skb);
1562		card->stats.tx_dropped++;
1563		card->stats.tx_errors++;
1564		card->stats.tx_carrier_errors++;
1565		return NETDEV_TX_OK;
1566	}
1567	if (skb->protocol == htons(ETH_P_IPV6)) {
1568		dev_kfree_skb(skb);
1569		return NETDEV_TX_OK;
1570	}
1571	netif_stop_queue(card->dev);
1572	spin_lock(&card->lock);
1573	if (card->tx_buffer != NULL &&
1574	    card->tx_buffer->count + sizeof(struct lcs_header) +
1575	    skb->len + sizeof(u16) > LCS_IOBUFFERSIZE)
1576		/* skb too big for current tx buffer. */
1577		__lcs_emit_txbuffer(card);
1578	if (card->tx_buffer == NULL) {
1579		/* Get new tx buffer */
1580		card->tx_buffer = lcs_get_buffer(&card->write);
1581		if (card->tx_buffer == NULL) {
1582			card->stats.tx_dropped++;
1583			rc = NETDEV_TX_BUSY;
1584			goto out;
1585		}
1586		card->tx_buffer->callback = lcs_txbuffer_cb;
1587		card->tx_buffer->count = 0;
1588	}
1589	header = (struct lcs_header *)
1590		(card->tx_buffer->data + card->tx_buffer->count);
1591	card->tx_buffer->count += skb->len + sizeof(struct lcs_header);
1592	header->offset = card->tx_buffer->count;
1593	header->type = card->lan_type;
1594	header->slot = card->portno;
1595	skb_copy_from_linear_data(skb, header + 1, skb->len);
1596	spin_unlock(&card->lock);
1597	card->stats.tx_bytes += skb->len;
1598	card->stats.tx_packets++;
1599	dev_kfree_skb(skb);
1600	netif_wake_queue(card->dev);
1601	spin_lock(&card->lock);
1602	if (card->tx_emitted <= 0 && card->tx_buffer != NULL)
1603		/* If this is the first tx buffer emit it immediately. */
1604		__lcs_emit_txbuffer(card);
1605out:
1606	spin_unlock(&card->lock);
1607	return rc;
1608}
1609
1610static int
1611lcs_start_xmit(struct sk_buff *skb, struct net_device *dev)
1612{
1613	struct lcs_card *card;
1614	int rc;
1615
1616	LCS_DBF_TEXT(5, trace, "pktxmit");
1617	card = (struct lcs_card *) dev->ml_priv;
1618	rc = __lcs_start_xmit(card, skb, dev);
1619	return rc;
1620}
1621
1622/**
1623 * send startlan and lanstat command to make LCS device ready
1624 */
1625static int
1626lcs_startlan_auto(struct lcs_card *card)
1627{
1628	int rc;
1629
1630	LCS_DBF_TEXT(2, trace, "strtauto");
1631#ifdef CONFIG_ETHERNET
1632	card->lan_type = LCS_FRAME_TYPE_ENET;
1633	rc = lcs_send_startlan(card, LCS_INITIATOR_TCPIP);
1634	if (rc == 0)
1635		return 0;
1636
1637#endif
1638#ifdef CONFIG_FDDI
1639	card->lan_type = LCS_FRAME_TYPE_FDDI;
1640	rc = lcs_send_startlan(card, LCS_INITIATOR_TCPIP);
1641	if (rc == 0)
1642		return 0;
1643#endif
1644	return -EIO;
1645}
1646
1647static int
1648lcs_startlan(struct lcs_card *card)
1649{
1650	int rc, i;
1651
1652	LCS_DBF_TEXT(2, trace, "startlan");
1653	rc = 0;
1654	if (card->portno != LCS_INVALID_PORT_NO) {
1655		if (card->lan_type == LCS_FRAME_TYPE_AUTO)
1656			rc = lcs_startlan_auto(card);
1657		else
1658			rc = lcs_send_startlan(card, LCS_INITIATOR_TCPIP);
1659	} else {
1660                for (i = 0; i <= 16; i++) {
1661                        card->portno = i;
1662                        if (card->lan_type != LCS_FRAME_TYPE_AUTO)
1663                                rc = lcs_send_startlan(card,
1664                                                       LCS_INITIATOR_TCPIP);
1665                        else
1666                                /* autodetecting lan type */
1667                                rc = lcs_startlan_auto(card);
1668                        if (rc == 0)
1669                                break;
1670                }
1671        }
1672	if (rc == 0)
1673		return lcs_send_lanstat(card);
1674	return rc;
1675}
1676
1677/**
1678 * LCS detect function
1679 * setup channels and make them I/O ready
1680 */
1681static int
1682lcs_detect(struct lcs_card *card)
1683{
1684	int rc = 0;
1685
1686	LCS_DBF_TEXT(2, setup, "lcsdetct");
1687	/* start/reset card */
1688	if (card->dev)
1689		netif_stop_queue(card->dev);
1690	rc = lcs_stop_channels(card);
1691	if (rc == 0) {
1692		rc = lcs_start_channels(card);
1693		if (rc == 0) {
1694			rc = lcs_send_startup(card, LCS_INITIATOR_TCPIP);
1695			if (rc == 0)
1696				rc = lcs_startlan(card);
1697		}
1698	}
1699	if (rc == 0) {
1700		card->state = DEV_STATE_UP;
1701	} else {
1702		card->state = DEV_STATE_DOWN;
1703		card->write.state = LCS_CH_STATE_INIT;
1704		card->read.state =  LCS_CH_STATE_INIT;
1705	}
1706	return rc;
1707}
1708
1709/**
1710 * LCS Stop card
1711 */
1712static int
1713lcs_stopcard(struct lcs_card *card)
1714{
1715	int rc;
1716
1717	LCS_DBF_TEXT(3, setup, "stopcard");
1718
1719	if (card->read.state != LCS_CH_STATE_STOPPED &&
1720	    card->write.state != LCS_CH_STATE_STOPPED &&
1721	    card->read.state != LCS_CH_STATE_ERROR &&
1722	    card->write.state != LCS_CH_STATE_ERROR &&
1723	    card->state == DEV_STATE_UP) {
1724		lcs_clear_multicast_list(card);
1725		rc = lcs_send_stoplan(card,LCS_INITIATOR_TCPIP);
1726		rc = lcs_send_shutdown(card);
1727	}
1728	rc = lcs_stop_channels(card);
1729	card->state = DEV_STATE_DOWN;
1730
1731	return rc;
1732}
1733
1734/**
1735 * Kernel Thread helper functions for LGW initiated commands
1736 */
1737static void
1738lcs_start_kernel_thread(struct work_struct *work)
1739{
1740	struct lcs_card *card = container_of(work, struct lcs_card, kernel_thread_starter);
1741	LCS_DBF_TEXT(5, trace, "krnthrd");
1742	if (lcs_do_start_thread(card, LCS_RECOVERY_THREAD))
1743		kthread_run(lcs_recovery, card, "lcs_recover");
1744#ifdef CONFIG_IP_MULTICAST
1745	if (lcs_do_start_thread(card, LCS_SET_MC_THREAD))
1746		kthread_run(lcs_register_mc_addresses, card, "regipm");
1747#endif
1748}
1749
1750/**
1751 * Process control frames.
1752 */
1753static void
1754lcs_get_control(struct lcs_card *card, struct lcs_cmd *cmd)
1755{
1756	LCS_DBF_TEXT(5, trace, "getctrl");
1757	if (cmd->initiator == LCS_INITIATOR_LGW) {
1758		switch(cmd->cmd_code) {
1759		case LCS_CMD_STARTUP:
1760		case LCS_CMD_STARTLAN:
1761			lcs_schedule_recovery(card);
1762			break;
1763		case LCS_CMD_STOPLAN:
1764			pr_warning("Stoplan for %s initiated by LGW.\n",
1765				   card->dev->name);
1766			if (card->dev)
1767				netif_carrier_off(card->dev);
1768			break;
1769		default:
1770			LCS_DBF_TEXT(5, trace, "noLGWcmd");
1771			break;
1772		}
1773	} else
1774		lcs_notify_lancmd_waiters(card, cmd);
1775}
1776
1777/**
1778 * Unpack network packet.
1779 */
1780static void
1781lcs_get_skb(struct lcs_card *card, char *skb_data, unsigned int skb_len)
1782{
1783	struct sk_buff *skb;
1784
1785	LCS_DBF_TEXT(5, trace, "getskb");
1786	if (card->dev == NULL ||
1787	    card->state != DEV_STATE_UP)
1788		/* The card isn't up. Ignore the packet. */
1789		return;
1790
1791	skb = dev_alloc_skb(skb_len);
1792	if (skb == NULL) {
1793		dev_err(&card->dev->dev,
1794			" Allocating a socket buffer to interface %s failed\n",
1795			  card->dev->name);
1796		card->stats.rx_dropped++;
1797		return;
1798	}
1799	memcpy(skb_put(skb, skb_len), skb_data, skb_len);
1800	skb->protocol =	card->lan_type_trans(skb, card->dev);
1801	card->stats.rx_bytes += skb_len;
1802	card->stats.rx_packets++;
1803	if (skb->protocol == htons(ETH_P_802_2))
1804		*((__u32 *)skb->cb) = ++card->pkt_seq;
1805	netif_rx(skb);
1806}
1807
1808/**
1809 * LCS main routine to get packets and lancmd replies from the buffers
1810 */
1811static void
1812lcs_get_frames_cb(struct lcs_channel *channel, struct lcs_buffer *buffer)
1813{
1814	struct lcs_card *card;
1815	struct lcs_header *lcs_hdr;
1816	__u16 offset;
1817
1818	LCS_DBF_TEXT(5, trace, "lcsgtpkt");
1819	lcs_hdr = (struct lcs_header *) buffer->data;
1820	if (lcs_hdr->offset == LCS_ILLEGAL_OFFSET) {
1821		LCS_DBF_TEXT(4, trace, "-eiogpkt");
1822		return;
1823	}
1824	card = container_of(channel, struct lcs_card, read);
1825	offset = 0;
1826	while (lcs_hdr->offset != 0) {
1827		if (lcs_hdr->offset <= 0 ||
1828		    lcs_hdr->offset > LCS_IOBUFFERSIZE ||
1829		    lcs_hdr->offset < offset) {
1830			/* Offset invalid. */
1831			card->stats.rx_length_errors++;
1832			card->stats.rx_errors++;
1833			return;
1834		}
1835		/* What kind of frame is it? */
1836		if (lcs_hdr->type == LCS_FRAME_TYPE_CONTROL)
1837			/* Control frame. */
1838			lcs_get_control(card, (struct lcs_cmd *) lcs_hdr);
1839		else if (lcs_hdr->type == LCS_FRAME_TYPE_ENET ||
1840			 lcs_hdr->type == LCS_FRAME_TYPE_TR ||
1841			 lcs_hdr->type == LCS_FRAME_TYPE_FDDI)
1842			/* Normal network packet. */
1843			lcs_get_skb(card, (char *)(lcs_hdr + 1),
1844				    lcs_hdr->offset - offset -
1845				    sizeof(struct lcs_header));
1846		else
1847			/* Unknown frame type. */
1848			; // FIXME: error message ?
1849		/* Proceed to next frame. */
1850		offset = lcs_hdr->offset;
1851		lcs_hdr->offset = LCS_ILLEGAL_OFFSET;
1852		lcs_hdr = (struct lcs_header *) (buffer->data + offset);
1853	}
1854	/* The buffer is now empty. Make it ready again. */
1855	lcs_ready_buffer(&card->read, buffer);
1856}
1857
1858/**
1859 * get network statistics for ifconfig and other user programs
1860 */
1861static struct net_device_stats *
1862lcs_getstats(struct net_device *dev)
1863{
1864	struct lcs_card *card;
1865
1866	LCS_DBF_TEXT(4, trace, "netstats");
1867	card = (struct lcs_card *) dev->ml_priv;
1868	return &card->stats;
1869}
1870
1871/**
1872 * stop lcs device
1873 * This function will be called by user doing ifconfig xxx down
1874 */
1875static int
1876lcs_stop_device(struct net_device *dev)
1877{
1878	struct lcs_card *card;
1879	int rc;
1880
1881	LCS_DBF_TEXT(2, trace, "stopdev");
1882	card   = (struct lcs_card *) dev->ml_priv;
1883	netif_carrier_off(dev);
1884	netif_tx_disable(dev);
1885	dev->flags &= ~IFF_UP;
1886	wait_event(card->write.wait_q,
1887		(card->write.state != LCS_CH_STATE_RUNNING));
1888	rc = lcs_stopcard(card);
1889	if (rc)
1890		dev_err(&card->dev->dev,
1891			" Shutting down the LCS device failed\n ");
1892	return rc;
1893}
1894
1895/**
1896 * start lcs device and make it runnable
1897 * This function will be called by user doing ifconfig xxx up
1898 */
1899static int
1900lcs_open_device(struct net_device *dev)
1901{
1902	struct lcs_card *card;
1903	int rc;
1904
1905	LCS_DBF_TEXT(2, trace, "opendev");
1906	card = (struct lcs_card *) dev->ml_priv;
1907	/* initialize statistics */
1908	rc = lcs_detect(card);
1909	if (rc) {
1910		pr_err("Error in opening device!\n");
1911
1912	} else {
1913		dev->flags |= IFF_UP;
1914		netif_carrier_on(dev);
1915		netif_wake_queue(dev);
1916		card->state = DEV_STATE_UP;
1917	}
1918	return rc;
1919}
1920
1921/**
1922 * show function for portno called by cat or similar things
1923 */
1924static ssize_t
1925lcs_portno_show (struct device *dev, struct device_attribute *attr, char *buf)
1926{
1927        struct lcs_card *card;
1928
1929	card = dev_get_drvdata(dev);
1930
1931        if (!card)
1932                return 0;
1933
1934        return sprintf(buf, "%d\n", card->portno);
1935}
1936
1937/**
1938 * store the value which is piped to file portno
1939 */
1940static ssize_t
1941lcs_portno_store (struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
1942{
1943        struct lcs_card *card;
1944	int rc;
1945	s16 value;
1946
1947	card = dev_get_drvdata(dev);
1948
1949        if (!card)
1950                return 0;
1951
1952	rc = kstrtos16(buf, 0, &value);
1953	if (rc)
1954		return -EINVAL;
1955        /* TODO: sanity checks */
1956        card->portno = value;
1957
1958        return count;
1959
1960}
1961
1962static DEVICE_ATTR(portno, 0644, lcs_portno_show, lcs_portno_store);
1963
1964static const char *lcs_type[] = {
1965	"not a channel",
1966	"2216 parallel",
1967	"2216 channel",
1968	"OSA LCS card",
1969	"unknown channel type",
1970	"unsupported channel type",
1971};
1972
1973static ssize_t
1974lcs_type_show(struct device *dev, struct device_attribute *attr, char *buf)
1975{
1976	struct ccwgroup_device *cgdev;
1977
1978	cgdev = to_ccwgroupdev(dev);
1979	if (!cgdev)
1980		return -ENODEV;
1981
1982	return sprintf(buf, "%s\n", lcs_type[cgdev->cdev[0]->id.driver_info]);
1983}
1984
1985static DEVICE_ATTR(type, 0444, lcs_type_show, NULL);
1986
1987static ssize_t
1988lcs_timeout_show(struct device *dev, struct device_attribute *attr, char *buf)
1989{
1990	struct lcs_card *card;
1991
1992	card = dev_get_drvdata(dev);
1993
1994	return card ? sprintf(buf, "%u\n", card->lancmd_timeout) : 0;
1995}
1996
1997static ssize_t
1998lcs_timeout_store (struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
1999{
2000        struct lcs_card *card;
2001	unsigned int value;
2002	int rc;
2003
2004	card = dev_get_drvdata(dev);
2005
2006        if (!card)
2007                return 0;
2008
2009	rc = kstrtouint(buf, 0, &value);
2010	if (rc)
2011		return -EINVAL;
2012        /* TODO: sanity checks */
2013        card->lancmd_timeout = value;
2014
2015        return count;
2016
2017}
2018
2019static DEVICE_ATTR(lancmd_timeout, 0644, lcs_timeout_show, lcs_timeout_store);
2020
2021static ssize_t
2022lcs_dev_recover_store(struct device *dev, struct device_attribute *attr,
2023		      const char *buf, size_t count)
2024{
2025	struct lcs_card *card = dev_get_drvdata(dev);
2026	char *tmp;
2027	int i;
2028
2029	if (!card)
2030		return -EINVAL;
2031	if (card->state != DEV_STATE_UP)
2032		return -EPERM;
2033	i = simple_strtoul(buf, &tmp, 16);
2034	if (i == 1)
2035		lcs_schedule_recovery(card);
2036	return count;
2037}
2038
2039static DEVICE_ATTR(recover, 0200, NULL, lcs_dev_recover_store);
2040
2041static struct attribute * lcs_attrs[] = {
2042	&dev_attr_portno.attr,
2043	&dev_attr_type.attr,
2044	&dev_attr_lancmd_timeout.attr,
2045	&dev_attr_recover.attr,
2046	NULL,
2047};
2048static struct attribute_group lcs_attr_group = {
2049	.attrs = lcs_attrs,
2050};
2051static const struct attribute_group *lcs_attr_groups[] = {
2052	&lcs_attr_group,
2053	NULL,
2054};
2055static const struct device_type lcs_devtype = {
2056	.name = "lcs",
2057	.groups = lcs_attr_groups,
2058};
2059
2060/**
2061 * lcs_probe_device is called on establishing a new ccwgroup_device.
2062 */
2063static int
2064lcs_probe_device(struct ccwgroup_device *ccwgdev)
2065{
2066	struct lcs_card *card;
2067
2068	if (!get_device(&ccwgdev->dev))
2069		return -ENODEV;
2070
2071	LCS_DBF_TEXT(2, setup, "add_dev");
2072        card = lcs_alloc_card();
2073        if (!card) {
2074		LCS_DBF_TEXT_(2, setup, "  rc%d", -ENOMEM);
2075		put_device(&ccwgdev->dev);
2076                return -ENOMEM;
2077        }
2078	dev_set_drvdata(&ccwgdev->dev, card);
2079	ccwgdev->cdev[0]->handler = lcs_irq;
2080	ccwgdev->cdev[1]->handler = lcs_irq;
2081	card->gdev = ccwgdev;
2082	INIT_WORK(&card->kernel_thread_starter, lcs_start_kernel_thread);
2083	card->thread_start_mask = 0;
2084	card->thread_allowed_mask = 0;
2085	card->thread_running_mask = 0;
2086	ccwgdev->dev.type = &lcs_devtype;
2087
2088	return 0;
2089}
2090
2091static int
2092lcs_register_netdev(struct ccwgroup_device *ccwgdev)
2093{
2094	struct lcs_card *card;
2095
2096	LCS_DBF_TEXT(2, setup, "regnetdv");
2097	card = dev_get_drvdata(&ccwgdev->dev);
2098	if (card->dev->reg_state != NETREG_UNINITIALIZED)
2099		return 0;
2100	SET_NETDEV_DEV(card->dev, &ccwgdev->dev);
2101	return register_netdev(card->dev);
2102}
2103
2104/**
2105 * lcs_new_device will be called by setting the group device online.
2106 */
2107static const struct net_device_ops lcs_netdev_ops = {
2108	.ndo_open		= lcs_open_device,
2109	.ndo_stop		= lcs_stop_device,
2110	.ndo_get_stats		= lcs_getstats,
2111	.ndo_start_xmit		= lcs_start_xmit,
2112};
2113
2114static const struct net_device_ops lcs_mc_netdev_ops = {
2115	.ndo_open		= lcs_open_device,
2116	.ndo_stop		= lcs_stop_device,
2117	.ndo_get_stats		= lcs_getstats,
2118	.ndo_start_xmit		= lcs_start_xmit,
2119	.ndo_set_rx_mode	= lcs_set_multicast_list,
2120};
2121
2122static int
2123lcs_new_device(struct ccwgroup_device *ccwgdev)
2124{
2125	struct  lcs_card *card;
2126	struct net_device *dev=NULL;
2127	enum lcs_dev_states recover_state;
2128	int rc;
2129
2130	card = dev_get_drvdata(&ccwgdev->dev);
2131	if (!card)
2132		return -ENODEV;
2133
2134	LCS_DBF_TEXT(2, setup, "newdev");
2135	LCS_DBF_HEX(3, setup, &card, sizeof(void*));
2136	card->read.ccwdev  = ccwgdev->cdev[0];
2137	card->write.ccwdev = ccwgdev->cdev[1];
2138
2139	recover_state = card->state;
2140	rc = ccw_device_set_online(card->read.ccwdev);
2141	if (rc)
2142		goto out_err;
2143	rc = ccw_device_set_online(card->write.ccwdev);
2144	if (rc)
2145		goto out_werr;
2146
2147	LCS_DBF_TEXT(3, setup, "lcsnewdv");
2148
2149	lcs_setup_card(card);
2150	rc = lcs_detect(card);
2151	if (rc) {
2152		LCS_DBF_TEXT(2, setup, "dtctfail");
2153		dev_err(&ccwgdev->dev,
2154			"Detecting a network adapter for LCS devices"
2155			" failed with rc=%d (0x%x)\n", rc, rc);
2156		lcs_stopcard(card);
2157		goto out;
2158	}
2159	if (card->dev) {
2160		LCS_DBF_TEXT(2, setup, "samedev");
2161		LCS_DBF_HEX(3, setup, &card, sizeof(void*));
2162		goto netdev_out;
2163	}
2164	switch (card->lan_type) {
2165#ifdef CONFIG_ETHERNET
2166	case LCS_FRAME_TYPE_ENET:
2167		card->lan_type_trans = eth_type_trans;
2168		dev = alloc_etherdev(0);
2169		break;
2170#endif
2171#ifdef CONFIG_FDDI
2172	case LCS_FRAME_TYPE_FDDI:
2173		card->lan_type_trans = fddi_type_trans;
2174		dev = alloc_fddidev(0);
2175		break;
2176#endif
2177	default:
2178		LCS_DBF_TEXT(3, setup, "errinit");
2179		pr_err(" Initialization failed\n");
2180		goto out;
2181	}
2182	if (!dev)
2183		goto out;
2184	card->dev = dev;
2185	card->dev->ml_priv = card;
2186	card->dev->netdev_ops = &lcs_netdev_ops;
2187	memcpy(card->dev->dev_addr, card->mac, LCS_MAC_LENGTH);
2188#ifdef CONFIG_IP_MULTICAST
2189	if (!lcs_check_multicast_support(card))
2190		card->dev->netdev_ops = &lcs_mc_netdev_ops;
2191#endif
2192netdev_out:
2193	lcs_set_allowed_threads(card,0xffffffff);
2194	if (recover_state == DEV_STATE_RECOVER) {
2195		lcs_set_multicast_list(card->dev);
2196		card->dev->flags |= IFF_UP;
2197		netif_carrier_on(card->dev);
2198		netif_wake_queue(card->dev);
2199		card->state = DEV_STATE_UP;
2200	} else {
2201		lcs_stopcard(card);
2202	}
2203
2204	if (lcs_register_netdev(ccwgdev) != 0)
2205		goto out;
2206
2207	/* Print out supported assists: IPv6 */
2208	pr_info("LCS device %s %s IPv6 support\n", card->dev->name,
2209		(card->ip_assists_supported & LCS_IPASS_IPV6_SUPPORT) ?
2210		"with" : "without");
2211	/* Print out supported assist: Multicast */
2212	pr_info("LCS device %s %s Multicast support\n", card->dev->name,
2213		(card->ip_assists_supported & LCS_IPASS_MULTICAST_SUPPORT) ?
2214		"with" : "without");
2215	return 0;
2216out:
2217
2218	ccw_device_set_offline(card->write.ccwdev);
2219out_werr:
2220	ccw_device_set_offline(card->read.ccwdev);
2221out_err:
2222	return -ENODEV;
2223}
2224
2225/**
2226 * lcs_shutdown_device, called when setting the group device offline.
2227 */
2228static int
2229__lcs_shutdown_device(struct ccwgroup_device *ccwgdev, int recovery_mode)
2230{
2231	struct lcs_card *card;
2232	enum lcs_dev_states recover_state;
2233	int ret = 0, ret2 = 0, ret3 = 0;
2234
2235	LCS_DBF_TEXT(3, setup, "shtdndev");
2236	card = dev_get_drvdata(&ccwgdev->dev);
2237	if (!card)
2238		return -ENODEV;
2239	if (recovery_mode == 0) {
2240		lcs_set_allowed_threads(card, 0);
2241		if (lcs_wait_for_threads(card, LCS_SET_MC_THREAD))
2242			return -ERESTARTSYS;
2243	}
2244	LCS_DBF_HEX(3, setup, &card, sizeof(void*));
2245	recover_state = card->state;
2246
2247	ret = lcs_stop_device(card->dev);
2248	ret2 = ccw_device_set_offline(card->read.ccwdev);
2249	ret3 = ccw_device_set_offline(card->write.ccwdev);
2250	if (!ret)
2251		ret = (ret2) ? ret2 : ret3;
2252	if (ret)
2253		LCS_DBF_TEXT_(3, setup, "1err:%d", ret);
2254	if (recover_state == DEV_STATE_UP) {
2255		card->state = DEV_STATE_RECOVER;
2256	}
2257	return 0;
2258}
2259
2260static int
2261lcs_shutdown_device(struct ccwgroup_device *ccwgdev)
2262{
2263	return __lcs_shutdown_device(ccwgdev, 0);
2264}
2265
2266/**
2267 * drive lcs recovery after startup and startlan initiated by Lan Gateway
2268 */
2269static int
2270lcs_recovery(void *ptr)
2271{
2272	struct lcs_card *card;
2273	struct ccwgroup_device *gdev;
2274        int rc;
2275
2276	card = (struct lcs_card *) ptr;
2277
2278	LCS_DBF_TEXT(4, trace, "recover1");
2279	if (!lcs_do_run_thread(card, LCS_RECOVERY_THREAD))
2280		return 0;
2281	LCS_DBF_TEXT(4, trace, "recover2");
2282	gdev = card->gdev;
2283	dev_warn(&gdev->dev,
2284		"A recovery process has been started for the LCS device\n");
2285	rc = __lcs_shutdown_device(gdev, 1);
2286	rc = lcs_new_device(gdev);
2287	if (!rc)
2288		pr_info("Device %s successfully recovered!\n",
2289			card->dev->name);
2290	else
2291		pr_info("Device %s could not be recovered!\n",
2292			card->dev->name);
2293	lcs_clear_thread_running_bit(card, LCS_RECOVERY_THREAD);
2294	return 0;
2295}
2296
2297/**
2298 * lcs_remove_device, free buffers and card
2299 */
2300static void
2301lcs_remove_device(struct ccwgroup_device *ccwgdev)
2302{
2303	struct lcs_card *card;
2304
2305	card = dev_get_drvdata(&ccwgdev->dev);
2306	if (!card)
2307		return;
2308
2309	LCS_DBF_TEXT(3, setup, "remdev");
2310	LCS_DBF_HEX(3, setup, &card, sizeof(void*));
2311	if (ccwgdev->state == CCWGROUP_ONLINE) {
2312		lcs_shutdown_device(ccwgdev);
2313	}
2314	if (card->dev)
2315		unregister_netdev(card->dev);
2316	lcs_cleanup_card(card);
2317	lcs_free_card(card);
2318	dev_set_drvdata(&ccwgdev->dev, NULL);
2319	put_device(&ccwgdev->dev);
2320}
2321
2322static int lcs_pm_suspend(struct lcs_card *card)
2323{
2324	if (card->dev)
2325		netif_device_detach(card->dev);
2326	lcs_set_allowed_threads(card, 0);
2327	lcs_wait_for_threads(card, 0xffffffff);
2328	if (card->state != DEV_STATE_DOWN)
2329		__lcs_shutdown_device(card->gdev, 1);
2330	return 0;
2331}
2332
2333static int lcs_pm_resume(struct lcs_card *card)
2334{
2335	int rc = 0;
2336
2337	if (card->state == DEV_STATE_RECOVER)
2338		rc = lcs_new_device(card->gdev);
2339	if (card->dev)
2340		netif_device_attach(card->dev);
2341	if (rc) {
2342		dev_warn(&card->gdev->dev, "The lcs device driver "
2343			"failed to recover the device\n");
2344	}
2345	return rc;
2346}
2347
2348static int lcs_prepare(struct ccwgroup_device *gdev)
2349{
2350	return 0;
2351}
2352
2353static void lcs_complete(struct ccwgroup_device *gdev)
2354{
2355	return;
2356}
2357
2358static int lcs_freeze(struct ccwgroup_device *gdev)
2359{
2360	struct lcs_card *card = dev_get_drvdata(&gdev->dev);
2361	return lcs_pm_suspend(card);
2362}
2363
2364static int lcs_thaw(struct ccwgroup_device *gdev)
2365{
2366	struct lcs_card *card = dev_get_drvdata(&gdev->dev);
2367	return lcs_pm_resume(card);
2368}
2369
2370static int lcs_restore(struct ccwgroup_device *gdev)
2371{
2372	struct lcs_card *card = dev_get_drvdata(&gdev->dev);
2373	return lcs_pm_resume(card);
2374}
2375
2376static struct ccw_device_id lcs_ids[] = {
2377	{CCW_DEVICE(0x3088, 0x08), .driver_info = lcs_channel_type_parallel},
2378	{CCW_DEVICE(0x3088, 0x1f), .driver_info = lcs_channel_type_2216},
2379	{CCW_DEVICE(0x3088, 0x60), .driver_info = lcs_channel_type_osa2},
2380	{},
2381};
2382MODULE_DEVICE_TABLE(ccw, lcs_ids);
2383
2384static struct ccw_driver lcs_ccw_driver = {
2385	.driver = {
2386		.owner	= THIS_MODULE,
2387		.name	= "lcs",
2388	},
2389	.ids	= lcs_ids,
2390	.probe	= ccwgroup_probe_ccwdev,
2391	.remove	= ccwgroup_remove_ccwdev,
2392	.int_class = IRQIO_LCS,
2393};
2394
2395/**
2396 * LCS ccwgroup driver registration
2397 */
2398static struct ccwgroup_driver lcs_group_driver = {
2399	.driver = {
2400		.owner	= THIS_MODULE,
2401		.name	= "lcs",
2402	},
2403	.setup	     = lcs_probe_device,
2404	.remove      = lcs_remove_device,
2405	.set_online  = lcs_new_device,
2406	.set_offline = lcs_shutdown_device,
2407	.prepare     = lcs_prepare,
2408	.complete    = lcs_complete,
2409	.freeze	     = lcs_freeze,
2410	.thaw	     = lcs_thaw,
2411	.restore     = lcs_restore,
2412};
2413
2414static ssize_t lcs_driver_group_store(struct device_driver *ddrv,
2415				      const char *buf, size_t count)
2416{
2417	int err;
2418	err = ccwgroup_create_dev(lcs_root_dev, &lcs_group_driver, 2, buf);
2419	return err ? err : count;
2420}
2421static DRIVER_ATTR(group, 0200, NULL, lcs_driver_group_store);
2422
2423static struct attribute *lcs_drv_attrs[] = {
2424	&driver_attr_group.attr,
2425	NULL,
2426};
2427static struct attribute_group lcs_drv_attr_group = {
2428	.attrs = lcs_drv_attrs,
2429};
2430static const struct attribute_group *lcs_drv_attr_groups[] = {
2431	&lcs_drv_attr_group,
2432	NULL,
2433};
2434
2435/**
2436 *  LCS Module/Kernel initialization function
2437 */
2438static int
2439__init lcs_init_module(void)
2440{
2441	int rc;
2442
2443	pr_info("Loading %s\n", version);
2444	rc = lcs_register_debug_facility();
2445	LCS_DBF_TEXT(0, setup, "lcsinit");
2446	if (rc)
2447		goto out_err;
2448	lcs_root_dev = root_device_register("lcs");
2449	rc = PTR_ERR_OR_ZERO(lcs_root_dev);
2450	if (rc)
2451		goto register_err;
2452	rc = ccw_driver_register(&lcs_ccw_driver);
2453	if (rc)
2454		goto ccw_err;
2455	lcs_group_driver.driver.groups = lcs_drv_attr_groups;
2456	rc = ccwgroup_driver_register(&lcs_group_driver);
2457	if (rc)
2458		goto ccwgroup_err;
2459	return 0;
2460
2461ccwgroup_err:
2462	ccw_driver_unregister(&lcs_ccw_driver);
2463ccw_err:
2464	root_device_unregister(lcs_root_dev);
2465register_err:
2466	lcs_unregister_debug_facility();
2467out_err:
2468	pr_err("Initializing the lcs device driver failed\n");
2469	return rc;
2470}
2471
2472
2473/**
2474 *  LCS module cleanup function
2475 */
2476static void
2477__exit lcs_cleanup_module(void)
2478{
2479	pr_info("Terminating lcs module.\n");
2480	LCS_DBF_TEXT(0, trace, "cleanup");
2481	ccwgroup_driver_unregister(&lcs_group_driver);
2482	ccw_driver_unregister(&lcs_ccw_driver);
2483	root_device_unregister(lcs_root_dev);
2484	lcs_unregister_debug_facility();
2485}
2486
2487module_init(lcs_init_module);
2488module_exit(lcs_cleanup_module);
2489
2490MODULE_AUTHOR("Frank Pavlic <fpavlic@de.ibm.com>");
2491MODULE_LICENSE("GPL");
2492
2493