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