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