linux/drivers/s390/net/qeth_core.h
<<
>>
Prefs
   1/*
   2 *    Copyright IBM Corp. 2007
   3 *    Author(s): Utz Bacher <utz.bacher@de.ibm.com>,
   4 *               Frank Pavlic <fpavlic@de.ibm.com>,
   5 *               Thomas Spatzier <tspat@de.ibm.com>,
   6 *               Frank Blaschka <frank.blaschka@de.ibm.com>
   7 */
   8
   9#ifndef __QETH_CORE_H__
  10#define __QETH_CORE_H__
  11
  12#include <linux/if.h>
  13#include <linux/if_arp.h>
  14#include <linux/etherdevice.h>
  15#include <linux/if_vlan.h>
  16#include <linux/ctype.h>
  17#include <linux/in6.h>
  18#include <linux/bitops.h>
  19#include <linux/seq_file.h>
  20#include <linux/ethtool.h>
  21
  22#include <net/ipv6.h>
  23#include <net/if_inet6.h>
  24#include <net/addrconf.h>
  25
  26#include <asm/debug.h>
  27#include <asm/qdio.h>
  28#include <asm/ccwdev.h>
  29#include <asm/ccwgroup.h>
  30#include <asm/sysinfo.h>
  31
  32#include "qeth_core_mpc.h"
  33
  34/**
  35 * Debug Facility stuff
  36 */
  37enum qeth_dbf_names {
  38        QETH_DBF_SETUP,
  39        QETH_DBF_MSG,
  40        QETH_DBF_CTRL,
  41        QETH_DBF_INFOS  /* must be last element */
  42};
  43
  44struct qeth_dbf_info {
  45        char name[DEBUG_MAX_NAME_LEN];
  46        int pages;
  47        int areas;
  48        int len;
  49        int level;
  50        struct debug_view *view;
  51        debug_info_t *id;
  52};
  53
  54#define QETH_DBF_CTRL_LEN 256
  55
  56#define QETH_DBF_TEXT(name, level, text) \
  57        debug_text_event(qeth_dbf[QETH_DBF_##name].id, level, text)
  58
  59#define QETH_DBF_HEX(name, level, addr, len) \
  60        debug_event(qeth_dbf[QETH_DBF_##name].id, level, (void *)(addr), len)
  61
  62#define QETH_DBF_MESSAGE(level, text...) \
  63        debug_sprintf_event(qeth_dbf[QETH_DBF_MSG].id, level, text)
  64
  65#define QETH_DBF_TEXT_(name, level, text...) \
  66        qeth_dbf_longtext(qeth_dbf[QETH_DBF_##name].id, level, text)
  67
  68#define QETH_CARD_TEXT(card, level, text) \
  69        debug_text_event(card->debug, level, text)
  70
  71#define QETH_CARD_HEX(card, level, addr, len) \
  72        debug_event(card->debug, level, (void *)(addr), len)
  73
  74#define QETH_CARD_MESSAGE(card, text...) \
  75        debug_sprintf_event(card->debug, level, text)
  76
  77#define QETH_CARD_TEXT_(card, level, text...) \
  78        qeth_dbf_longtext(card->debug, level, text)
  79
  80#define SENSE_COMMAND_REJECT_BYTE 0
  81#define SENSE_COMMAND_REJECT_FLAG 0x80
  82#define SENSE_RESETTING_EVENT_BYTE 1
  83#define SENSE_RESETTING_EVENT_FLAG 0x80
  84
  85/*
  86 * Common IO related definitions
  87 */
  88#define CARD_RDEV(card) card->read.ccwdev
  89#define CARD_WDEV(card) card->write.ccwdev
  90#define CARD_DDEV(card) card->data.ccwdev
  91#define CARD_BUS_ID(card) dev_name(&card->gdev->dev)
  92#define CARD_RDEV_ID(card) dev_name(&card->read.ccwdev->dev)
  93#define CARD_WDEV_ID(card) dev_name(&card->write.ccwdev->dev)
  94#define CARD_DDEV_ID(card) dev_name(&card->data.ccwdev->dev)
  95#define CHANNEL_ID(channel) dev_name(&channel->ccwdev->dev)
  96
  97/**
  98 * card stuff
  99 */
 100struct qeth_perf_stats {
 101        unsigned int bufs_rec;
 102        unsigned int bufs_sent;
 103
 104        unsigned int skbs_sent_pack;
 105        unsigned int bufs_sent_pack;
 106
 107        unsigned int sc_dp_p;
 108        unsigned int sc_p_dp;
 109        /* qdio_cq_handler: number of times called, time spent in */
 110        __u64 cq_start_time;
 111        unsigned int cq_cnt;
 112        unsigned int cq_time;
 113        /* qdio_input_handler: number of times called, time spent in */
 114        __u64 inbound_start_time;
 115        unsigned int inbound_cnt;
 116        unsigned int inbound_time;
 117        /* qeth_send_packet: number of times called, time spent in */
 118        __u64 outbound_start_time;
 119        unsigned int outbound_cnt;
 120        unsigned int outbound_time;
 121        /* qdio_output_handler: number of times called, time spent in */
 122        __u64 outbound_handler_start_time;
 123        unsigned int outbound_handler_cnt;
 124        unsigned int outbound_handler_time;
 125        /* number of calls to and time spent in do_QDIO for inbound queue */
 126        __u64 inbound_do_qdio_start_time;
 127        unsigned int inbound_do_qdio_cnt;
 128        unsigned int inbound_do_qdio_time;
 129        /* number of calls to and time spent in do_QDIO for outbound queues */
 130        __u64 outbound_do_qdio_start_time;
 131        unsigned int outbound_do_qdio_cnt;
 132        unsigned int outbound_do_qdio_time;
 133        unsigned int large_send_bytes;
 134        unsigned int large_send_cnt;
 135        unsigned int sg_skbs_sent;
 136        unsigned int sg_frags_sent;
 137        /* initial values when measuring starts */
 138        unsigned long initial_rx_packets;
 139        unsigned long initial_tx_packets;
 140        /* inbound scatter gather data */
 141        unsigned int sg_skbs_rx;
 142        unsigned int sg_frags_rx;
 143        unsigned int sg_alloc_page_rx;
 144        unsigned int tx_csum;
 145        unsigned int tx_lin;
 146};
 147
 148/* Routing stuff */
 149struct qeth_routing_info {
 150        enum qeth_routing_types type;
 151};
 152
 153/* IPA stuff */
 154struct qeth_ipa_info {
 155        __u32 supported_funcs;
 156        __u32 enabled_funcs;
 157};
 158
 159/* SETBRIDGEPORT stuff */
 160enum qeth_sbp_roles {
 161        QETH_SBP_ROLE_NONE      = 0,
 162        QETH_SBP_ROLE_PRIMARY   = 1,
 163        QETH_SBP_ROLE_SECONDARY = 2,
 164};
 165
 166enum qeth_sbp_states {
 167        QETH_SBP_STATE_INACTIVE = 0,
 168        QETH_SBP_STATE_STANDBY  = 1,
 169        QETH_SBP_STATE_ACTIVE   = 2,
 170};
 171
 172#define QETH_SBP_HOST_NOTIFICATION 1
 173
 174struct qeth_sbp_info {
 175        __u32 supported_funcs;
 176        enum qeth_sbp_roles role;
 177        __u32 hostnotification:1;
 178};
 179
 180static inline int qeth_is_ipa_supported(struct qeth_ipa_info *ipa,
 181                enum qeth_ipa_funcs func)
 182{
 183        return (ipa->supported_funcs & func);
 184}
 185
 186static inline int qeth_is_ipa_enabled(struct qeth_ipa_info *ipa,
 187                enum qeth_ipa_funcs func)
 188{
 189        return (ipa->supported_funcs & ipa->enabled_funcs & func);
 190}
 191
 192#define qeth_adp_supported(c, f) \
 193        qeth_is_ipa_supported(&c->options.adp, f)
 194#define qeth_adp_enabled(c, f) \
 195        qeth_is_ipa_enabled(&c->options.adp, f)
 196#define qeth_is_supported(c, f) \
 197        qeth_is_ipa_supported(&c->options.ipa4, f)
 198#define qeth_is_enabled(c, f) \
 199        qeth_is_ipa_enabled(&c->options.ipa4, f)
 200#define qeth_is_supported6(c, f) \
 201        qeth_is_ipa_supported(&c->options.ipa6, f)
 202#define qeth_is_enabled6(c, f) \
 203        qeth_is_ipa_enabled(&c->options.ipa6, f)
 204#define qeth_is_ipafunc_supported(c, prot, f) \
 205         ((prot == QETH_PROT_IPV6) ? \
 206                qeth_is_supported6(c, f) : qeth_is_supported(c, f))
 207#define qeth_is_ipafunc_enabled(c, prot, f) \
 208         ((prot == QETH_PROT_IPV6) ? \
 209                qeth_is_enabled6(c, f) : qeth_is_enabled(c, f))
 210
 211#define QETH_IDX_FUNC_LEVEL_OSD          0x0101
 212#define QETH_IDX_FUNC_LEVEL_IQD          0x4108
 213
 214#define QETH_MODELLIST_ARRAY \
 215        {{0x1731, 0x01, 0x1732, QETH_CARD_TYPE_OSD, QETH_MAX_QUEUES, 0}, \
 216         {0x1731, 0x05, 0x1732, QETH_CARD_TYPE_IQD, QETH_MAX_QUEUES, 0x103}, \
 217         {0x1731, 0x06, 0x1732, QETH_CARD_TYPE_OSN, QETH_MAX_QUEUES, 0}, \
 218         {0x1731, 0x02, 0x1732, QETH_CARD_TYPE_OSM, QETH_MAX_QUEUES, 0}, \
 219         {0x1731, 0x02, 0x1732, QETH_CARD_TYPE_OSX, QETH_MAX_QUEUES, 0}, \
 220         {0, 0, 0, 0, 0, 0} }
 221#define QETH_CU_TYPE_IND        0
 222#define QETH_CU_MODEL_IND       1
 223#define QETH_DEV_TYPE_IND       2
 224#define QETH_DEV_MODEL_IND      3
 225#define QETH_QUEUE_NO_IND       4
 226#define QETH_MULTICAST_IND      5
 227
 228#define QETH_REAL_CARD          1
 229#define QETH_VLAN_CARD          2
 230#define QETH_BUFSIZE            4096
 231
 232/**
 233 * some more defs
 234 */
 235#define QETH_TX_TIMEOUT         100 * HZ
 236#define QETH_RCD_TIMEOUT        60 * HZ
 237#define QETH_RECLAIM_WORK_TIME  HZ
 238#define QETH_HEADER_SIZE        32
 239#define QETH_MAX_PORTNO         15
 240
 241/*IPv6 address autoconfiguration stuff*/
 242#define UNIQUE_ID_IF_CREATE_ADDR_FAILED 0xfffe
 243#define UNIQUE_ID_NOT_BY_CARD           0x10000
 244
 245/*****************************************************************************/
 246/* QDIO queue and buffer handling                                            */
 247/*****************************************************************************/
 248#define QETH_MAX_QUEUES 4
 249#define QETH_IN_BUF_SIZE_DEFAULT 65536
 250#define QETH_IN_BUF_COUNT_DEFAULT 64
 251#define QETH_IN_BUF_COUNT_HSDEFAULT 128
 252#define QETH_IN_BUF_COUNT_MIN 8
 253#define QETH_IN_BUF_COUNT_MAX 128
 254#define QETH_MAX_BUFFER_ELEMENTS(card) ((card)->qdio.in_buf_size >> 12)
 255#define QETH_IN_BUF_REQUEUE_THRESHOLD(card) \
 256                 ((card)->qdio.in_buf_pool.buf_count / 2)
 257
 258/* buffers we have to be behind before we get a PCI */
 259#define QETH_PCI_THRESHOLD_A(card) ((card)->qdio.in_buf_pool.buf_count+1)
 260/*enqueued free buffers left before we get a PCI*/
 261#define QETH_PCI_THRESHOLD_B(card) 0
 262/*not used unless the microcode gets patched*/
 263#define QETH_PCI_TIMER_VALUE(card) 3
 264
 265/* priority queing */
 266#define QETH_PRIOQ_DEFAULT QETH_NO_PRIO_QUEUEING
 267#define QETH_DEFAULT_QUEUE    2
 268#define QETH_NO_PRIO_QUEUEING 0
 269#define QETH_PRIO_Q_ING_PREC  1
 270#define QETH_PRIO_Q_ING_TOS   2
 271#define IP_TOS_LOWDELAY 0x10
 272#define IP_TOS_HIGHTHROUGHPUT 0x08
 273#define IP_TOS_HIGHRELIABILITY 0x04
 274#define IP_TOS_NOTIMPORTANT 0x02
 275
 276/* Packing */
 277#define QETH_LOW_WATERMARK_PACK  2
 278#define QETH_HIGH_WATERMARK_PACK 5
 279#define QETH_WATERMARK_PACK_FUZZ 1
 280
 281#define QETH_IP_HEADER_SIZE 40
 282
 283/* large receive scatter gather copy break */
 284#define QETH_RX_SG_CB (PAGE_SIZE >> 1)
 285#define QETH_RX_PULL_LEN 256
 286
 287struct qeth_hdr_layer3 {
 288        __u8  id;
 289        __u8  flags;
 290        __u16 inbound_checksum; /*TSO:__u16 seqno */
 291        __u32 token;            /*TSO: __u32 reserved */
 292        __u16 length;
 293        __u8  vlan_prio;
 294        __u8  ext_flags;
 295        __u16 vlan_id;
 296        __u16 frame_offset;
 297        __u8  dest_addr[16];
 298} __attribute__ ((packed));
 299
 300struct qeth_hdr_layer2 {
 301        __u8 id;
 302        __u8 flags[3];
 303        __u8 port_no;
 304        __u8 hdr_length;
 305        __u16 pkt_length;
 306        __u16 seq_no;
 307        __u16 vlan_id;
 308        __u32 reserved;
 309        __u8 reserved2[16];
 310} __attribute__ ((packed));
 311
 312struct qeth_hdr_osn {
 313        __u8 id;
 314        __u8 reserved;
 315        __u16 seq_no;
 316        __u16 reserved2;
 317        __u16 control_flags;
 318        __u16 pdu_length;
 319        __u8 reserved3[18];
 320        __u32 ccid;
 321} __attribute__ ((packed));
 322
 323struct qeth_hdr {
 324        union {
 325                struct qeth_hdr_layer2 l2;
 326                struct qeth_hdr_layer3 l3;
 327                struct qeth_hdr_osn    osn;
 328        } hdr;
 329} __attribute__ ((packed));
 330
 331/*TCP Segmentation Offload header*/
 332struct qeth_hdr_ext_tso {
 333        __u16 hdr_tot_len;
 334        __u8  imb_hdr_no;
 335        __u8  reserved;
 336        __u8  hdr_type;
 337        __u8  hdr_version;
 338        __u16 hdr_len;
 339        __u32 payload_len;
 340        __u16 mss;
 341        __u16 dg_hdr_len;
 342        __u8  padding[16];
 343} __attribute__ ((packed));
 344
 345struct qeth_hdr_tso {
 346        struct qeth_hdr hdr;    /*hdr->hdr.l3.xxx*/
 347        struct qeth_hdr_ext_tso ext;
 348} __attribute__ ((packed));
 349
 350
 351/* flags for qeth_hdr.flags */
 352#define QETH_HDR_PASSTHRU 0x10
 353#define QETH_HDR_IPV6     0x80
 354#define QETH_HDR_CAST_MASK 0x07
 355enum qeth_cast_flags {
 356        QETH_CAST_UNICAST   = 0x06,
 357        QETH_CAST_MULTICAST = 0x04,
 358        QETH_CAST_BROADCAST = 0x05,
 359        QETH_CAST_ANYCAST   = 0x07,
 360        QETH_CAST_NOCAST    = 0x00,
 361};
 362
 363enum qeth_layer2_frame_flags {
 364        QETH_LAYER2_FLAG_MULTICAST = 0x01,
 365        QETH_LAYER2_FLAG_BROADCAST = 0x02,
 366        QETH_LAYER2_FLAG_UNICAST   = 0x04,
 367        QETH_LAYER2_FLAG_VLAN      = 0x10,
 368};
 369
 370enum qeth_header_ids {
 371        QETH_HEADER_TYPE_LAYER3 = 0x01,
 372        QETH_HEADER_TYPE_LAYER2 = 0x02,
 373        QETH_HEADER_TYPE_TSO    = 0x03,
 374        QETH_HEADER_TYPE_OSN    = 0x04,
 375};
 376/* flags for qeth_hdr.ext_flags */
 377#define QETH_HDR_EXT_VLAN_FRAME       0x01
 378#define QETH_HDR_EXT_TOKEN_ID         0x02
 379#define QETH_HDR_EXT_INCLUDE_VLAN_TAG 0x04
 380#define QETH_HDR_EXT_SRC_MAC_ADDR     0x08
 381#define QETH_HDR_EXT_CSUM_HDR_REQ     0x10
 382#define QETH_HDR_EXT_CSUM_TRANSP_REQ  0x20
 383#define QETH_HDR_EXT_UDP              0x40 /*bit off for TCP*/
 384
 385static inline int qeth_is_last_sbale(struct qdio_buffer_element *sbale)
 386{
 387        return (sbale->eflags & SBAL_EFLAGS_LAST_ENTRY);
 388}
 389
 390enum qeth_qdio_buffer_states {
 391        /*
 392         * inbound: read out by driver; owned by hardware in order to be filled
 393         * outbound: owned by driver in order to be filled
 394         */
 395        QETH_QDIO_BUF_EMPTY,
 396        /*
 397         * inbound: filled by hardware; owned by driver in order to be read out
 398         * outbound: filled by driver; owned by hardware in order to be sent
 399         */
 400        QETH_QDIO_BUF_PRIMED,
 401        /*
 402         * inbound: not applicable
 403         * outbound: identified to be pending in TPQ
 404         */
 405        QETH_QDIO_BUF_PENDING,
 406        /*
 407         * inbound: not applicable
 408         * outbound: found in completion queue
 409         */
 410        QETH_QDIO_BUF_IN_CQ,
 411        /*
 412         * inbound: not applicable
 413         * outbound: handled via transfer pending / completion queue
 414         */
 415        QETH_QDIO_BUF_HANDLED_DELAYED,
 416};
 417
 418enum qeth_qdio_info_states {
 419        QETH_QDIO_UNINITIALIZED,
 420        QETH_QDIO_ALLOCATED,
 421        QETH_QDIO_ESTABLISHED,
 422        QETH_QDIO_CLEANING
 423};
 424
 425struct qeth_buffer_pool_entry {
 426        struct list_head list;
 427        struct list_head init_list;
 428        void *elements[QDIO_MAX_ELEMENTS_PER_BUFFER];
 429};
 430
 431struct qeth_qdio_buffer_pool {
 432        struct list_head entry_list;
 433        int buf_count;
 434};
 435
 436struct qeth_qdio_buffer {
 437        struct qdio_buffer *buffer;
 438        /* the buffer pool entry currently associated to this buffer */
 439        struct qeth_buffer_pool_entry *pool_entry;
 440        struct sk_buff *rx_skb;
 441};
 442
 443struct qeth_qdio_q {
 444        struct qdio_buffer qdio_bufs[QDIO_MAX_BUFFERS_PER_Q];
 445        struct qeth_qdio_buffer bufs[QDIO_MAX_BUFFERS_PER_Q];
 446        int next_buf_to_init;
 447} __attribute__ ((aligned(256)));
 448
 449struct qeth_qdio_out_buffer {
 450        struct qdio_buffer *buffer;
 451        atomic_t state;
 452        int next_element_to_fill;
 453        struct sk_buff_head skb_list;
 454        int is_header[16];
 455
 456        struct qaob *aob;
 457        struct qeth_qdio_out_q *q;
 458        struct qeth_qdio_out_buffer *next_pending;
 459};
 460
 461struct qeth_card;
 462
 463enum qeth_out_q_states {
 464       QETH_OUT_Q_UNLOCKED,
 465       QETH_OUT_Q_LOCKED,
 466       QETH_OUT_Q_LOCKED_FLUSH,
 467};
 468
 469struct qeth_qdio_out_q {
 470        struct qdio_buffer qdio_bufs[QDIO_MAX_BUFFERS_PER_Q];
 471        struct qeth_qdio_out_buffer *bufs[QDIO_MAX_BUFFERS_PER_Q];
 472        struct qdio_outbuf_state *bufstates; /* convenience pointer */
 473        int queue_no;
 474        struct qeth_card *card;
 475        atomic_t state;
 476        int do_pack;
 477        /*
 478         * index of buffer to be filled by driver; state EMPTY or PACKING
 479         */
 480        int next_buf_to_fill;
 481        /*
 482         * number of buffers that are currently filled (PRIMED)
 483         * -> these buffers are hardware-owned
 484         */
 485        atomic_t used_buffers;
 486        /* indicates whether PCI flag must be set (or if one is outstanding) */
 487        atomic_t set_pci_flags_count;
 488} __attribute__ ((aligned(256)));
 489
 490struct qeth_qdio_info {
 491        atomic_t state;
 492        /* input */
 493        int no_in_queues;
 494        struct qeth_qdio_q *in_q;
 495        struct qeth_qdio_q *c_q;
 496        struct qeth_qdio_buffer_pool in_buf_pool;
 497        struct qeth_qdio_buffer_pool init_pool;
 498        int in_buf_size;
 499
 500        /* output */
 501        int no_out_queues;
 502        struct qeth_qdio_out_q **out_qs;
 503        struct qdio_outbuf_state *out_bufstates;
 504
 505        /* priority queueing */
 506        int do_prio_queueing;
 507        int default_out_queue;
 508};
 509
 510enum qeth_send_errors {
 511        QETH_SEND_ERROR_NONE,
 512        QETH_SEND_ERROR_LINK_FAILURE,
 513        QETH_SEND_ERROR_RETRY,
 514        QETH_SEND_ERROR_KICK_IT,
 515};
 516
 517#define QETH_ETH_MAC_V4      0x0100 /* like v4 */
 518#define QETH_ETH_MAC_V6      0x3333 /* like v6 */
 519/* tr mc mac is longer, but that will be enough to detect mc frames */
 520#define QETH_TR_MAC_NC       0xc000 /* non-canonical */
 521#define QETH_TR_MAC_C        0x0300 /* canonical */
 522
 523#define DEFAULT_ADD_HHLEN 0
 524#define MAX_ADD_HHLEN 1024
 525
 526/**
 527 * buffer stuff for read channel
 528 */
 529#define QETH_CMD_BUFFER_NO      8
 530
 531/**
 532 *  channel state machine
 533 */
 534enum qeth_channel_states {
 535        CH_STATE_UP,
 536        CH_STATE_DOWN,
 537        CH_STATE_ACTIVATING,
 538        CH_STATE_HALTED,
 539        CH_STATE_STOPPED,
 540        CH_STATE_RCD,
 541        CH_STATE_RCD_DONE,
 542};
 543/**
 544 * card state machine
 545 */
 546enum qeth_card_states {
 547        CARD_STATE_DOWN,
 548        CARD_STATE_HARDSETUP,
 549        CARD_STATE_SOFTSETUP,
 550        CARD_STATE_UP,
 551        CARD_STATE_RECOVER,
 552};
 553
 554/**
 555 * Protocol versions
 556 */
 557enum qeth_prot_versions {
 558        QETH_PROT_IPV4 = 0x0004,
 559        QETH_PROT_IPV6 = 0x0006,
 560};
 561
 562enum qeth_ip_types {
 563        QETH_IP_TYPE_NORMAL,
 564        QETH_IP_TYPE_VIPA,
 565        QETH_IP_TYPE_RXIP,
 566        QETH_IP_TYPE_DEL_ALL_MC,
 567};
 568
 569enum qeth_cmd_buffer_state {
 570        BUF_STATE_FREE,
 571        BUF_STATE_LOCKED,
 572        BUF_STATE_PROCESSED,
 573};
 574
 575enum qeth_cq {
 576        QETH_CQ_DISABLED = 0,
 577        QETH_CQ_ENABLED = 1,
 578        QETH_CQ_NOTAVAILABLE = 2,
 579};
 580
 581struct qeth_ipato {
 582        int enabled;
 583        int invert4;
 584        int invert6;
 585        struct list_head entries;
 586};
 587
 588struct qeth_channel;
 589
 590struct qeth_cmd_buffer {
 591        enum qeth_cmd_buffer_state state;
 592        struct qeth_channel *channel;
 593        unsigned char *data;
 594        int rc;
 595        void (*callback) (struct qeth_channel *, struct qeth_cmd_buffer *);
 596};
 597
 598/**
 599 * definition of a qeth channel, used for read and write
 600 */
 601struct qeth_channel {
 602        enum qeth_channel_states state;
 603        struct ccw1 ccw;
 604        spinlock_t iob_lock;
 605        wait_queue_head_t wait_q;
 606        struct tasklet_struct irq_tasklet;
 607        struct ccw_device *ccwdev;
 608/*command buffer for control data*/
 609        struct qeth_cmd_buffer iob[QETH_CMD_BUFFER_NO];
 610        atomic_t irq_pending;
 611        int io_buf_no;
 612        int buf_no;
 613};
 614
 615/**
 616 *  OSA card related definitions
 617 */
 618struct qeth_token {
 619        __u32 issuer_rm_w;
 620        __u32 issuer_rm_r;
 621        __u32 cm_filter_w;
 622        __u32 cm_filter_r;
 623        __u32 cm_connection_w;
 624        __u32 cm_connection_r;
 625        __u32 ulp_filter_w;
 626        __u32 ulp_filter_r;
 627        __u32 ulp_connection_w;
 628        __u32 ulp_connection_r;
 629};
 630
 631struct qeth_seqno {
 632        __u32 trans_hdr;
 633        __u32 pdu_hdr;
 634        __u32 pdu_hdr_ack;
 635        __u16 ipa;
 636        __u32 pkt_seqno;
 637};
 638
 639struct qeth_reply {
 640        struct list_head list;
 641        wait_queue_head_t wait_q;
 642        int (*callback)(struct qeth_card *, struct qeth_reply *,
 643                unsigned long);
 644        u32 seqno;
 645        unsigned long offset;
 646        atomic_t received;
 647        int rc;
 648        void *param;
 649        struct qeth_card *card;
 650        atomic_t refcnt;
 651};
 652
 653
 654struct qeth_card_blkt {
 655        int time_total;
 656        int inter_packet;
 657        int inter_packet_jumbo;
 658};
 659
 660#define QETH_BROADCAST_WITH_ECHO    0x01
 661#define QETH_BROADCAST_WITHOUT_ECHO 0x02
 662#define QETH_LAYER2_MAC_READ        0x01
 663#define QETH_LAYER2_MAC_REGISTERED  0x02
 664struct qeth_card_info {
 665        unsigned short unit_addr2;
 666        unsigned short cula;
 667        unsigned short chpid;
 668        __u16 func_level;
 669        char mcl_level[QETH_MCL_LENGTH + 1];
 670        int guestlan;
 671        int mac_bits;
 672        int portname_required;
 673        int portno;
 674        char portname[9];
 675        enum qeth_card_types type;
 676        enum qeth_link_types link_type;
 677        int is_multicast_different;
 678        int initial_mtu;
 679        int max_mtu;
 680        int broadcast_capable;
 681        int unique_id;
 682        struct qeth_card_blkt blkt;
 683        __u32 csum_mask;
 684        __u32 tx_csum_mask;
 685        enum qeth_ipa_promisc_modes promisc_mode;
 686        __u32 diagass_support;
 687        __u32 hwtrap;
 688};
 689
 690struct qeth_card_options {
 691        struct qeth_routing_info route4;
 692        struct qeth_ipa_info ipa4;
 693        struct qeth_ipa_info adp; /*Adapter parameters*/
 694        struct qeth_routing_info route6;
 695        struct qeth_ipa_info ipa6;
 696        struct qeth_sbp_info sbp; /* SETBRIDGEPORT options */
 697        int fake_broadcast;
 698        int add_hhlen;
 699        int layer2;
 700        int performance_stats;
 701        int rx_sg_cb;
 702        enum qeth_ipa_isolation_modes isolation;
 703        enum qeth_ipa_isolation_modes prev_isolation;
 704        int sniffer;
 705        enum qeth_cq cq;
 706        char hsuid[9];
 707};
 708
 709/*
 710 * thread bits for qeth_card thread masks
 711 */
 712enum qeth_threads {
 713        QETH_RECOVER_THREAD = 1,
 714};
 715
 716struct qeth_osn_info {
 717        int (*assist_cb)(struct net_device *dev, void *data);
 718        int (*data_cb)(struct sk_buff *skb);
 719};
 720
 721enum qeth_discipline_id {
 722        QETH_DISCIPLINE_LAYER3 = 0,
 723        QETH_DISCIPLINE_LAYER2 = 1,
 724};
 725
 726struct qeth_discipline {
 727        void (*start_poll)(struct ccw_device *, int, unsigned long);
 728        qdio_handler_t *input_handler;
 729        qdio_handler_t *output_handler;
 730        int (*recover)(void *ptr);
 731        int (*setup) (struct ccwgroup_device *);
 732        void (*remove) (struct ccwgroup_device *);
 733        int (*set_online) (struct ccwgroup_device *);
 734        int (*set_offline) (struct ccwgroup_device *);
 735        void (*shutdown)(struct ccwgroup_device *);
 736        int (*prepare) (struct ccwgroup_device *);
 737        void (*complete) (struct ccwgroup_device *);
 738        int (*freeze)(struct ccwgroup_device *);
 739        int (*thaw) (struct ccwgroup_device *);
 740        int (*restore)(struct ccwgroup_device *);
 741        int (*control_event_handler)(struct qeth_card *card,
 742                                        struct qeth_ipa_cmd *cmd);
 743};
 744
 745struct qeth_vlan_vid {
 746        struct list_head list;
 747        unsigned short vid;
 748};
 749
 750struct qeth_mc_mac {
 751        struct list_head list;
 752        __u8 mc_addr[MAX_ADDR_LEN];
 753        unsigned char mc_addrlen;
 754        int is_vmac;
 755};
 756
 757struct qeth_rx {
 758        int b_count;
 759        int b_index;
 760        struct qdio_buffer_element *b_element;
 761        int e_offset;
 762        int qdio_err;
 763};
 764
 765struct carrier_info {
 766        __u8  card_type;
 767        __u16 port_mode;
 768        __u32 port_speed;
 769};
 770
 771#define QETH_NAPI_WEIGHT NAPI_POLL_WEIGHT
 772
 773struct qeth_card {
 774        struct list_head list;
 775        enum qeth_card_states state;
 776        int lan_online;
 777        spinlock_t lock;
 778        struct ccwgroup_device *gdev;
 779        struct qeth_channel read;
 780        struct qeth_channel write;
 781        struct qeth_channel data;
 782
 783        struct net_device *dev;
 784        struct net_device_stats stats;
 785
 786        struct qeth_card_info info;
 787        struct qeth_token token;
 788        struct qeth_seqno seqno;
 789        struct qeth_card_options options;
 790
 791        wait_queue_head_t wait_q;
 792        spinlock_t vlanlock;
 793        spinlock_t mclock;
 794        unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)];
 795        struct list_head vid_list;
 796        struct list_head mc_list;
 797        struct work_struct kernel_thread_starter;
 798        spinlock_t thread_mask_lock;
 799        unsigned long thread_start_mask;
 800        unsigned long thread_allowed_mask;
 801        unsigned long thread_running_mask;
 802        struct task_struct *recovery_task;
 803        spinlock_t ip_lock;
 804        struct list_head ip_list;
 805        struct list_head *ip_tbd_list;
 806        struct qeth_ipato ipato;
 807        struct list_head cmd_waiter_list;
 808        /* QDIO buffer handling */
 809        struct qeth_qdio_info qdio;
 810        struct qeth_perf_stats perf_stats;
 811        int read_or_write_problem;
 812        struct qeth_osn_info osn_info;
 813        struct qeth_discipline *discipline;
 814        atomic_t force_alloc_skb;
 815        struct service_level qeth_service_level;
 816        struct qdio_ssqd_desc ssqd;
 817        debug_info_t *debug;
 818        struct mutex conf_mutex;
 819        struct mutex discipline_mutex;
 820        struct napi_struct napi;
 821        struct qeth_rx rx;
 822        struct delayed_work buffer_reclaim_work;
 823        int reclaim_index;
 824        struct work_struct close_dev_work;
 825};
 826
 827struct qeth_card_list_struct {
 828        struct list_head list;
 829        rwlock_t rwlock;
 830};
 831
 832struct qeth_trap_id {
 833        __u16 lparnr;
 834        char vmname[8];
 835        __u8 chpid;
 836        __u8 ssid;
 837        __u16 devno;
 838} __packed;
 839
 840/*some helper functions*/
 841#define QETH_CARD_IFNAME(card) (((card)->dev)? (card)->dev->name : "")
 842
 843static inline struct qeth_card *CARD_FROM_CDEV(struct ccw_device *cdev)
 844{
 845        struct qeth_card *card = dev_get_drvdata(&((struct ccwgroup_device *)
 846                dev_get_drvdata(&cdev->dev))->dev);
 847        return card;
 848}
 849
 850static inline int qeth_get_micros(void)
 851{
 852        return (int) (get_tod_clock() >> 12);
 853}
 854
 855static inline int qeth_get_ip_version(struct sk_buff *skb)
 856{
 857        struct ethhdr *ehdr = (struct ethhdr *)skb->data;
 858        switch (ehdr->h_proto) {
 859        case ETH_P_IPV6:
 860                return 6;
 861        case ETH_P_IP:
 862                return 4;
 863        default:
 864                return 0;
 865        }
 866}
 867
 868static inline void qeth_put_buffer_pool_entry(struct qeth_card *card,
 869                struct qeth_buffer_pool_entry *entry)
 870{
 871        list_add_tail(&entry->list, &card->qdio.in_buf_pool.entry_list);
 872}
 873
 874static inline int qeth_is_diagass_supported(struct qeth_card *card,
 875                enum qeth_diags_cmds cmd)
 876{
 877        return card->info.diagass_support & (__u32)cmd;
 878}
 879
 880extern struct qeth_discipline qeth_l2_discipline;
 881extern struct qeth_discipline qeth_l3_discipline;
 882extern const struct attribute_group *qeth_generic_attr_groups[];
 883extern const struct attribute_group *qeth_osn_attr_groups[];
 884extern struct workqueue_struct *qeth_wq;
 885
 886const char *qeth_get_cardname_short(struct qeth_card *);
 887int qeth_realloc_buffer_pool(struct qeth_card *, int);
 888int qeth_core_load_discipline(struct qeth_card *, enum qeth_discipline_id);
 889void qeth_core_free_discipline(struct qeth_card *);
 890void qeth_buffer_reclaim_work(struct work_struct *);
 891
 892/* exports for qeth discipline device drivers */
 893extern struct qeth_card_list_struct qeth_core_card_list;
 894extern struct kmem_cache *qeth_core_header_cache;
 895extern struct qeth_dbf_info qeth_dbf[QETH_DBF_INFOS];
 896
 897void qeth_set_recovery_task(struct qeth_card *);
 898void qeth_clear_recovery_task(struct qeth_card *);
 899void qeth_set_allowed_threads(struct qeth_card *, unsigned long , int);
 900int qeth_threads_running(struct qeth_card *, unsigned long);
 901int qeth_wait_for_threads(struct qeth_card *, unsigned long);
 902int qeth_do_run_thread(struct qeth_card *, unsigned long);
 903void qeth_clear_thread_start_bit(struct qeth_card *, unsigned long);
 904void qeth_clear_thread_running_bit(struct qeth_card *, unsigned long);
 905int qeth_core_hardsetup_card(struct qeth_card *);
 906void qeth_print_status_message(struct qeth_card *);
 907int qeth_init_qdio_queues(struct qeth_card *);
 908int qeth_send_startlan(struct qeth_card *);
 909int qeth_send_stoplan(struct qeth_card *);
 910int qeth_send_ipa_cmd(struct qeth_card *, struct qeth_cmd_buffer *,
 911                  int (*reply_cb)
 912                  (struct qeth_card *, struct qeth_reply *, unsigned long),
 913                  void *);
 914struct qeth_cmd_buffer *qeth_get_ipacmd_buffer(struct qeth_card *,
 915                        enum qeth_ipa_cmds, enum qeth_prot_versions);
 916int qeth_query_setadapterparms(struct qeth_card *);
 917int qeth_check_qdio_errors(struct qeth_card *, struct qdio_buffer *,
 918                unsigned int, const char *);
 919void qeth_queue_input_buffer(struct qeth_card *, int);
 920struct sk_buff *qeth_core_get_next_skb(struct qeth_card *,
 921                struct qeth_qdio_buffer *, struct qdio_buffer_element **, int *,
 922                struct qeth_hdr **);
 923void qeth_schedule_recovery(struct qeth_card *);
 924void qeth_qdio_start_poll(struct ccw_device *, int, unsigned long);
 925void qeth_qdio_input_handler(struct ccw_device *,
 926                unsigned int, unsigned int, int,
 927                int, unsigned long);
 928void qeth_qdio_output_handler(struct ccw_device *, unsigned int,
 929                        int, int, int, unsigned long);
 930void qeth_clear_ipacmd_list(struct qeth_card *);
 931int qeth_qdio_clear_card(struct qeth_card *, int);
 932void qeth_clear_working_pool_list(struct qeth_card *);
 933void qeth_clear_cmd_buffers(struct qeth_channel *);
 934void qeth_clear_qdio_buffers(struct qeth_card *);
 935void qeth_setadp_promisc_mode(struct qeth_card *);
 936struct net_device_stats *qeth_get_stats(struct net_device *);
 937int qeth_change_mtu(struct net_device *, int);
 938int qeth_setadpparms_change_macaddr(struct qeth_card *);
 939void qeth_tx_timeout(struct net_device *);
 940void qeth_prepare_control_data(struct qeth_card *, int,
 941                                struct qeth_cmd_buffer *);
 942void qeth_release_buffer(struct qeth_channel *, struct qeth_cmd_buffer *);
 943void qeth_prepare_ipa_cmd(struct qeth_card *, struct qeth_cmd_buffer *, char);
 944struct qeth_cmd_buffer *qeth_wait_for_buffer(struct qeth_channel *);
 945int qeth_mdio_read(struct net_device *, int, int);
 946int qeth_snmp_command(struct qeth_card *, char __user *);
 947int qeth_query_oat_command(struct qeth_card *, char __user *);
 948int qeth_query_card_info(struct qeth_card *card,
 949        struct carrier_info *carrier_info);
 950int qeth_send_control_data(struct qeth_card *, int, struct qeth_cmd_buffer *,
 951        int (*reply_cb)(struct qeth_card *, struct qeth_reply*, unsigned long),
 952        void *reply_param);
 953int qeth_bridgeport_query_ports(struct qeth_card *card,
 954        enum qeth_sbp_roles *role, enum qeth_sbp_states *state);
 955int qeth_bridgeport_setrole(struct qeth_card *card, enum qeth_sbp_roles role);
 956int qeth_bridgeport_an_set(struct qeth_card *card, int enable);
 957int qeth_get_priority_queue(struct qeth_card *, struct sk_buff *, int, int);
 958int qeth_get_elements_no(struct qeth_card *, struct sk_buff *, int);
 959int qeth_get_elements_for_frags(struct sk_buff *);
 960int qeth_do_send_packet_fast(struct qeth_card *, struct qeth_qdio_out_q *,
 961                        struct sk_buff *, struct qeth_hdr *, int, int, int);
 962int qeth_do_send_packet(struct qeth_card *, struct qeth_qdio_out_q *,
 963                    struct sk_buff *, struct qeth_hdr *, int);
 964int qeth_core_get_sset_count(struct net_device *, int);
 965void qeth_core_get_ethtool_stats(struct net_device *,
 966                                struct ethtool_stats *, u64 *);
 967void qeth_core_get_strings(struct net_device *, u32, u8 *);
 968void qeth_core_get_drvinfo(struct net_device *, struct ethtool_drvinfo *);
 969void qeth_dbf_longtext(debug_info_t *id, int level, char *text, ...);
 970int qeth_core_ethtool_get_settings(struct net_device *, struct ethtool_cmd *);
 971int qeth_set_access_ctrl_online(struct qeth_card *card, int fallback);
 972int qeth_hdr_chk_and_bounce(struct sk_buff *, struct qeth_hdr **, int);
 973int qeth_configure_cq(struct qeth_card *, enum qeth_cq);
 974int qeth_hw_trap(struct qeth_card *, enum qeth_diags_trap_action);
 975int qeth_query_ipassists(struct qeth_card *, enum qeth_prot_versions prot);
 976void qeth_trace_features(struct qeth_card *);
 977void qeth_close_dev(struct qeth_card *);
 978
 979/* exports for OSN */
 980int qeth_osn_assist(struct net_device *, void *, int);
 981int qeth_osn_register(unsigned char *read_dev_no, struct net_device **,
 982                int (*assist_cb)(struct net_device *, void *),
 983                int (*data_cb)(struct sk_buff *));
 984void qeth_osn_deregister(struct net_device *);
 985
 986#endif /* __QETH_CORE_H__ */
 987