cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

lcs.c (61566B)


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