linux/drivers/s390/net/lcs.c
<<
>>
Prefs
   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_warn("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