linux/drivers/net/cnic_defs.h
<<
>>
Prefs
   1
   2/* cnic.c: Broadcom CNIC core network driver.
   3 *
   4 * Copyright (c) 2006-2009 Broadcom Corporation
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License as published by
   8 * the Free Software Foundation.
   9 *
  10 */
  11
  12#ifndef CNIC_DEFS_H
  13#define CNIC_DEFS_H
  14
  15/* KWQ (kernel work queue) request op codes */
  16#define L2_KWQE_OPCODE_VALUE_FLUSH                  (4)
  17#define L2_KWQE_OPCODE_VALUE_VM_FREE_RX_QUEUE       (8)
  18
  19#define L4_KWQE_OPCODE_VALUE_CONNECT1               (50)
  20#define L4_KWQE_OPCODE_VALUE_CONNECT2               (51)
  21#define L4_KWQE_OPCODE_VALUE_CONNECT3               (52)
  22#define L4_KWQE_OPCODE_VALUE_RESET                  (53)
  23#define L4_KWQE_OPCODE_VALUE_CLOSE                  (54)
  24#define L4_KWQE_OPCODE_VALUE_UPDATE_SECRET          (60)
  25#define L4_KWQE_OPCODE_VALUE_INIT_ULP               (61)
  26
  27#define L4_KWQE_OPCODE_VALUE_OFFLOAD_PG             (1)
  28#define L4_KWQE_OPCODE_VALUE_UPDATE_PG              (9)
  29#define L4_KWQE_OPCODE_VALUE_UPLOAD_PG              (14)
  30
  31#define L5CM_RAMROD_CMD_ID_BASE                 (0x80)
  32#define L5CM_RAMROD_CMD_ID_TCP_CONNECT          (L5CM_RAMROD_CMD_ID_BASE + 3)
  33#define L5CM_RAMROD_CMD_ID_CLOSE                (L5CM_RAMROD_CMD_ID_BASE + 12)
  34#define L5CM_RAMROD_CMD_ID_ABORT                (L5CM_RAMROD_CMD_ID_BASE + 13)
  35#define L5CM_RAMROD_CMD_ID_SEARCHER_DELETE      (L5CM_RAMROD_CMD_ID_BASE + 14)
  36#define L5CM_RAMROD_CMD_ID_TERMINATE_OFFLOAD    (L5CM_RAMROD_CMD_ID_BASE + 15)
  37
  38#define FCOE_KCQE_OPCODE_INIT_FUNC                      (0x10)
  39#define FCOE_KCQE_OPCODE_DESTROY_FUNC                   (0x11)
  40#define FCOE_KCQE_OPCODE_STAT_FUNC                      (0x12)
  41#define FCOE_KCQE_OPCODE_OFFLOAD_CONN                   (0x15)
  42#define FCOE_KCQE_OPCODE_ENABLE_CONN                    (0x16)
  43#define FCOE_KCQE_OPCODE_DISABLE_CONN                   (0x17)
  44#define FCOE_KCQE_OPCODE_DESTROY_CONN                   (0x18)
  45#define FCOE_KCQE_OPCODE_CQ_EVENT_NOTIFICATION  (0x20)
  46#define FCOE_KCQE_OPCODE_FCOE_ERROR                             (0x21)
  47
  48#define FCOE_RAMROD_CMD_ID_INIT_FUNC            (FCOE_KCQE_OPCODE_INIT_FUNC)
  49#define FCOE_RAMROD_CMD_ID_DESTROY_FUNC         (FCOE_KCQE_OPCODE_DESTROY_FUNC)
  50#define FCOE_RAMROD_CMD_ID_STAT_FUNC            (FCOE_KCQE_OPCODE_STAT_FUNC)
  51#define FCOE_RAMROD_CMD_ID_OFFLOAD_CONN         (FCOE_KCQE_OPCODE_OFFLOAD_CONN)
  52#define FCOE_RAMROD_CMD_ID_ENABLE_CONN          (FCOE_KCQE_OPCODE_ENABLE_CONN)
  53#define FCOE_RAMROD_CMD_ID_DISABLE_CONN         (FCOE_KCQE_OPCODE_DISABLE_CONN)
  54#define FCOE_RAMROD_CMD_ID_DESTROY_CONN         (FCOE_KCQE_OPCODE_DESTROY_CONN)
  55#define FCOE_RAMROD_CMD_ID_TERMINATE_CONN       (0x81)
  56
  57#define FCOE_KWQE_OPCODE_INIT1                  (0)
  58#define FCOE_KWQE_OPCODE_INIT2                  (1)
  59#define FCOE_KWQE_OPCODE_INIT3                  (2)
  60#define FCOE_KWQE_OPCODE_OFFLOAD_CONN1  (3)
  61#define FCOE_KWQE_OPCODE_OFFLOAD_CONN2  (4)
  62#define FCOE_KWQE_OPCODE_OFFLOAD_CONN3  (5)
  63#define FCOE_KWQE_OPCODE_OFFLOAD_CONN4  (6)
  64#define FCOE_KWQE_OPCODE_ENABLE_CONN    (7)
  65#define FCOE_KWQE_OPCODE_DISABLE_CONN   (8)
  66#define FCOE_KWQE_OPCODE_DESTROY_CONN   (9)
  67#define FCOE_KWQE_OPCODE_DESTROY                (10)
  68#define FCOE_KWQE_OPCODE_STAT                   (11)
  69
  70#define FCOE_KCQE_COMPLETION_STATUS_CTX_ALLOC_FAILURE   (0x3)
  71
  72/* KCQ (kernel completion queue) response op codes */
  73#define L4_KCQE_OPCODE_VALUE_CLOSE_COMP             (53)
  74#define L4_KCQE_OPCODE_VALUE_RESET_COMP             (54)
  75#define L4_KCQE_OPCODE_VALUE_FW_TCP_UPDATE          (55)
  76#define L4_KCQE_OPCODE_VALUE_CONNECT_COMPLETE       (56)
  77#define L4_KCQE_OPCODE_VALUE_RESET_RECEIVED         (57)
  78#define L4_KCQE_OPCODE_VALUE_CLOSE_RECEIVED         (58)
  79#define L4_KCQE_OPCODE_VALUE_INIT_ULP               (61)
  80
  81#define L4_KCQE_OPCODE_VALUE_OFFLOAD_PG             (1)
  82#define L4_KCQE_OPCODE_VALUE_UPDATE_PG              (9)
  83#define L4_KCQE_OPCODE_VALUE_UPLOAD_PG              (14)
  84
  85/* KCQ (kernel completion queue) completion status */
  86#define L4_KCQE_COMPLETION_STATUS_SUCCESS           (0)
  87#define L4_KCQE_COMPLETION_STATUS_TIMEOUT           (0x93)
  88
  89#define L4_KCQE_COMPLETION_STATUS_CTX_ALLOC_FAIL    (0x83)
  90#define L4_KCQE_COMPLETION_STATUS_OFFLOADED_PG      (0x89)
  91
  92#define L4_KCQE_OPCODE_VALUE_OOO_EVENT_NOTIFICATION (0xa0)
  93#define L4_KCQE_OPCODE_VALUE_OOO_FLUSH              (0xa1)
  94
  95#define L4_LAYER_CODE (4)
  96#define L2_LAYER_CODE (2)
  97
  98/*
  99 * L4 KCQ CQE
 100 */
 101struct l4_kcq {
 102        u32 cid;
 103        u32 pg_cid;
 104        u32 conn_id;
 105        u32 pg_host_opaque;
 106#if defined(__BIG_ENDIAN)
 107        u16 status;
 108        u16 reserved1;
 109#elif defined(__LITTLE_ENDIAN)
 110        u16 reserved1;
 111        u16 status;
 112#endif
 113        u32 reserved2[2];
 114#if defined(__BIG_ENDIAN)
 115        u8 flags;
 116#define L4_KCQ_RESERVED3 (0x7<<0)
 117#define L4_KCQ_RESERVED3_SHIFT 0
 118#define L4_KCQ_RAMROD_COMPLETION (0x1<<3) /* Everest only */
 119#define L4_KCQ_RAMROD_COMPLETION_SHIFT 3
 120#define L4_KCQ_LAYER_CODE (0x7<<4)
 121#define L4_KCQ_LAYER_CODE_SHIFT 4
 122#define L4_KCQ_RESERVED4 (0x1<<7)
 123#define L4_KCQ_RESERVED4_SHIFT 7
 124        u8 op_code;
 125        u16 qe_self_seq;
 126#elif defined(__LITTLE_ENDIAN)
 127        u16 qe_self_seq;
 128        u8 op_code;
 129        u8 flags;
 130#define L4_KCQ_RESERVED3 (0xF<<0)
 131#define L4_KCQ_RESERVED3_SHIFT 0
 132#define L4_KCQ_RAMROD_COMPLETION (0x1<<3) /* Everest only */
 133#define L4_KCQ_RAMROD_COMPLETION_SHIFT 3
 134#define L4_KCQ_LAYER_CODE (0x7<<4)
 135#define L4_KCQ_LAYER_CODE_SHIFT 4
 136#define L4_KCQ_RESERVED4 (0x1<<7)
 137#define L4_KCQ_RESERVED4_SHIFT 7
 138#endif
 139};
 140
 141
 142/*
 143 * L4 KCQ CQE PG upload
 144 */
 145struct l4_kcq_upload_pg {
 146        u32 pg_cid;
 147#if defined(__BIG_ENDIAN)
 148        u16 pg_status;
 149        u16 pg_ipid_count;
 150#elif defined(__LITTLE_ENDIAN)
 151        u16 pg_ipid_count;
 152        u16 pg_status;
 153#endif
 154        u32 reserved1[5];
 155#if defined(__BIG_ENDIAN)
 156        u8 flags;
 157#define L4_KCQ_UPLOAD_PG_RESERVED3 (0xF<<0)
 158#define L4_KCQ_UPLOAD_PG_RESERVED3_SHIFT 0
 159#define L4_KCQ_UPLOAD_PG_LAYER_CODE (0x7<<4)
 160#define L4_KCQ_UPLOAD_PG_LAYER_CODE_SHIFT 4
 161#define L4_KCQ_UPLOAD_PG_RESERVED4 (0x1<<7)
 162#define L4_KCQ_UPLOAD_PG_RESERVED4_SHIFT 7
 163        u8 op_code;
 164        u16 qe_self_seq;
 165#elif defined(__LITTLE_ENDIAN)
 166        u16 qe_self_seq;
 167        u8 op_code;
 168        u8 flags;
 169#define L4_KCQ_UPLOAD_PG_RESERVED3 (0xF<<0)
 170#define L4_KCQ_UPLOAD_PG_RESERVED3_SHIFT 0
 171#define L4_KCQ_UPLOAD_PG_LAYER_CODE (0x7<<4)
 172#define L4_KCQ_UPLOAD_PG_LAYER_CODE_SHIFT 4
 173#define L4_KCQ_UPLOAD_PG_RESERVED4 (0x1<<7)
 174#define L4_KCQ_UPLOAD_PG_RESERVED4_SHIFT 7
 175#endif
 176};
 177
 178
 179/*
 180 * Gracefully close the connection request
 181 */
 182struct l4_kwq_close_req {
 183#if defined(__BIG_ENDIAN)
 184        u8 flags;
 185#define L4_KWQ_CLOSE_REQ_RESERVED1 (0xF<<0)
 186#define L4_KWQ_CLOSE_REQ_RESERVED1_SHIFT 0
 187#define L4_KWQ_CLOSE_REQ_LAYER_CODE (0x7<<4)
 188#define L4_KWQ_CLOSE_REQ_LAYER_CODE_SHIFT 4
 189#define L4_KWQ_CLOSE_REQ_LINKED_WITH_NEXT (0x1<<7)
 190#define L4_KWQ_CLOSE_REQ_LINKED_WITH_NEXT_SHIFT 7
 191        u8 op_code;
 192        u16 reserved0;
 193#elif defined(__LITTLE_ENDIAN)
 194        u16 reserved0;
 195        u8 op_code;
 196        u8 flags;
 197#define L4_KWQ_CLOSE_REQ_RESERVED1 (0xF<<0)
 198#define L4_KWQ_CLOSE_REQ_RESERVED1_SHIFT 0
 199#define L4_KWQ_CLOSE_REQ_LAYER_CODE (0x7<<4)
 200#define L4_KWQ_CLOSE_REQ_LAYER_CODE_SHIFT 4
 201#define L4_KWQ_CLOSE_REQ_LINKED_WITH_NEXT (0x1<<7)
 202#define L4_KWQ_CLOSE_REQ_LINKED_WITH_NEXT_SHIFT 7
 203#endif
 204        u32 cid;
 205        u32 reserved2[6];
 206};
 207
 208
 209/*
 210 * The first request to be passed in order to establish connection in option2
 211 */
 212struct l4_kwq_connect_req1 {
 213#if defined(__BIG_ENDIAN)
 214        u8 flags;
 215#define L4_KWQ_CONNECT_REQ1_RESERVED1 (0xF<<0)
 216#define L4_KWQ_CONNECT_REQ1_RESERVED1_SHIFT 0
 217#define L4_KWQ_CONNECT_REQ1_LAYER_CODE (0x7<<4)
 218#define L4_KWQ_CONNECT_REQ1_LAYER_CODE_SHIFT 4
 219#define L4_KWQ_CONNECT_REQ1_LINKED_WITH_NEXT (0x1<<7)
 220#define L4_KWQ_CONNECT_REQ1_LINKED_WITH_NEXT_SHIFT 7
 221        u8 op_code;
 222        u8 reserved0;
 223        u8 conn_flags;
 224#define L4_KWQ_CONNECT_REQ1_IS_PG_HOST_OPAQUE (0x1<<0)
 225#define L4_KWQ_CONNECT_REQ1_IS_PG_HOST_OPAQUE_SHIFT 0
 226#define L4_KWQ_CONNECT_REQ1_IP_V6 (0x1<<1)
 227#define L4_KWQ_CONNECT_REQ1_IP_V6_SHIFT 1
 228#define L4_KWQ_CONNECT_REQ1_PASSIVE_FLAG (0x1<<2)
 229#define L4_KWQ_CONNECT_REQ1_PASSIVE_FLAG_SHIFT 2
 230#define L4_KWQ_CONNECT_REQ1_RSRV (0x1F<<3)
 231#define L4_KWQ_CONNECT_REQ1_RSRV_SHIFT 3
 232#elif defined(__LITTLE_ENDIAN)
 233        u8 conn_flags;
 234#define L4_KWQ_CONNECT_REQ1_IS_PG_HOST_OPAQUE (0x1<<0)
 235#define L4_KWQ_CONNECT_REQ1_IS_PG_HOST_OPAQUE_SHIFT 0
 236#define L4_KWQ_CONNECT_REQ1_IP_V6 (0x1<<1)
 237#define L4_KWQ_CONNECT_REQ1_IP_V6_SHIFT 1
 238#define L4_KWQ_CONNECT_REQ1_PASSIVE_FLAG (0x1<<2)
 239#define L4_KWQ_CONNECT_REQ1_PASSIVE_FLAG_SHIFT 2
 240#define L4_KWQ_CONNECT_REQ1_RSRV (0x1F<<3)
 241#define L4_KWQ_CONNECT_REQ1_RSRV_SHIFT 3
 242        u8 reserved0;
 243        u8 op_code;
 244        u8 flags;
 245#define L4_KWQ_CONNECT_REQ1_RESERVED1 (0xF<<0)
 246#define L4_KWQ_CONNECT_REQ1_RESERVED1_SHIFT 0
 247#define L4_KWQ_CONNECT_REQ1_LAYER_CODE (0x7<<4)
 248#define L4_KWQ_CONNECT_REQ1_LAYER_CODE_SHIFT 4
 249#define L4_KWQ_CONNECT_REQ1_LINKED_WITH_NEXT (0x1<<7)
 250#define L4_KWQ_CONNECT_REQ1_LINKED_WITH_NEXT_SHIFT 7
 251#endif
 252        u32 cid;
 253        u32 pg_cid;
 254        u32 src_ip;
 255        u32 dst_ip;
 256#if defined(__BIG_ENDIAN)
 257        u16 dst_port;
 258        u16 src_port;
 259#elif defined(__LITTLE_ENDIAN)
 260        u16 src_port;
 261        u16 dst_port;
 262#endif
 263#if defined(__BIG_ENDIAN)
 264        u8 rsrv1[3];
 265        u8 tcp_flags;
 266#define L4_KWQ_CONNECT_REQ1_NO_DELAY_ACK (0x1<<0)
 267#define L4_KWQ_CONNECT_REQ1_NO_DELAY_ACK_SHIFT 0
 268#define L4_KWQ_CONNECT_REQ1_KEEP_ALIVE (0x1<<1)
 269#define L4_KWQ_CONNECT_REQ1_KEEP_ALIVE_SHIFT 1
 270#define L4_KWQ_CONNECT_REQ1_NAGLE_ENABLE (0x1<<2)
 271#define L4_KWQ_CONNECT_REQ1_NAGLE_ENABLE_SHIFT 2
 272#define L4_KWQ_CONNECT_REQ1_TIME_STAMP (0x1<<3)
 273#define L4_KWQ_CONNECT_REQ1_TIME_STAMP_SHIFT 3
 274#define L4_KWQ_CONNECT_REQ1_SACK (0x1<<4)
 275#define L4_KWQ_CONNECT_REQ1_SACK_SHIFT 4
 276#define L4_KWQ_CONNECT_REQ1_SEG_SCALING (0x1<<5)
 277#define L4_KWQ_CONNECT_REQ1_SEG_SCALING_SHIFT 5
 278#define L4_KWQ_CONNECT_REQ1_RESERVED2 (0x3<<6)
 279#define L4_KWQ_CONNECT_REQ1_RESERVED2_SHIFT 6
 280#elif defined(__LITTLE_ENDIAN)
 281        u8 tcp_flags;
 282#define L4_KWQ_CONNECT_REQ1_NO_DELAY_ACK (0x1<<0)
 283#define L4_KWQ_CONNECT_REQ1_NO_DELAY_ACK_SHIFT 0
 284#define L4_KWQ_CONNECT_REQ1_KEEP_ALIVE (0x1<<1)
 285#define L4_KWQ_CONNECT_REQ1_KEEP_ALIVE_SHIFT 1
 286#define L4_KWQ_CONNECT_REQ1_NAGLE_ENABLE (0x1<<2)
 287#define L4_KWQ_CONNECT_REQ1_NAGLE_ENABLE_SHIFT 2
 288#define L4_KWQ_CONNECT_REQ1_TIME_STAMP (0x1<<3)
 289#define L4_KWQ_CONNECT_REQ1_TIME_STAMP_SHIFT 3
 290#define L4_KWQ_CONNECT_REQ1_SACK (0x1<<4)
 291#define L4_KWQ_CONNECT_REQ1_SACK_SHIFT 4
 292#define L4_KWQ_CONNECT_REQ1_SEG_SCALING (0x1<<5)
 293#define L4_KWQ_CONNECT_REQ1_SEG_SCALING_SHIFT 5
 294#define L4_KWQ_CONNECT_REQ1_RESERVED2 (0x3<<6)
 295#define L4_KWQ_CONNECT_REQ1_RESERVED2_SHIFT 6
 296        u8 rsrv1[3];
 297#endif
 298        u32 rsrv2;
 299};
 300
 301
 302/*
 303 * The second ( optional )request to be passed in order to establish
 304 * connection in option2 - for IPv6 only
 305 */
 306struct l4_kwq_connect_req2 {
 307#if defined(__BIG_ENDIAN)
 308        u8 flags;
 309#define L4_KWQ_CONNECT_REQ2_RESERVED1 (0xF<<0)
 310#define L4_KWQ_CONNECT_REQ2_RESERVED1_SHIFT 0
 311#define L4_KWQ_CONNECT_REQ2_LAYER_CODE (0x7<<4)
 312#define L4_KWQ_CONNECT_REQ2_LAYER_CODE_SHIFT 4
 313#define L4_KWQ_CONNECT_REQ2_LINKED_WITH_NEXT (0x1<<7)
 314#define L4_KWQ_CONNECT_REQ2_LINKED_WITH_NEXT_SHIFT 7
 315        u8 op_code;
 316        u8 reserved0;
 317        u8 rsrv;
 318#elif defined(__LITTLE_ENDIAN)
 319        u8 rsrv;
 320        u8 reserved0;
 321        u8 op_code;
 322        u8 flags;
 323#define L4_KWQ_CONNECT_REQ2_RESERVED1 (0xF<<0)
 324#define L4_KWQ_CONNECT_REQ2_RESERVED1_SHIFT 0
 325#define L4_KWQ_CONNECT_REQ2_LAYER_CODE (0x7<<4)
 326#define L4_KWQ_CONNECT_REQ2_LAYER_CODE_SHIFT 4
 327#define L4_KWQ_CONNECT_REQ2_LINKED_WITH_NEXT (0x1<<7)
 328#define L4_KWQ_CONNECT_REQ2_LINKED_WITH_NEXT_SHIFT 7
 329#endif
 330        u32 reserved2;
 331        u32 src_ip_v6_2;
 332        u32 src_ip_v6_3;
 333        u32 src_ip_v6_4;
 334        u32 dst_ip_v6_2;
 335        u32 dst_ip_v6_3;
 336        u32 dst_ip_v6_4;
 337};
 338
 339
 340/*
 341 * The third ( and last )request to be passed in order to establish
 342 * connection in option2
 343 */
 344struct l4_kwq_connect_req3 {
 345#if defined(__BIG_ENDIAN)
 346        u8 flags;
 347#define L4_KWQ_CONNECT_REQ3_RESERVED1 (0xF<<0)
 348#define L4_KWQ_CONNECT_REQ3_RESERVED1_SHIFT 0
 349#define L4_KWQ_CONNECT_REQ3_LAYER_CODE (0x7<<4)
 350#define L4_KWQ_CONNECT_REQ3_LAYER_CODE_SHIFT 4
 351#define L4_KWQ_CONNECT_REQ3_LINKED_WITH_NEXT (0x1<<7)
 352#define L4_KWQ_CONNECT_REQ3_LINKED_WITH_NEXT_SHIFT 7
 353        u8 op_code;
 354        u16 reserved0;
 355#elif defined(__LITTLE_ENDIAN)
 356        u16 reserved0;
 357        u8 op_code;
 358        u8 flags;
 359#define L4_KWQ_CONNECT_REQ3_RESERVED1 (0xF<<0)
 360#define L4_KWQ_CONNECT_REQ3_RESERVED1_SHIFT 0
 361#define L4_KWQ_CONNECT_REQ3_LAYER_CODE (0x7<<4)
 362#define L4_KWQ_CONNECT_REQ3_LAYER_CODE_SHIFT 4
 363#define L4_KWQ_CONNECT_REQ3_LINKED_WITH_NEXT (0x1<<7)
 364#define L4_KWQ_CONNECT_REQ3_LINKED_WITH_NEXT_SHIFT 7
 365#endif
 366        u32 ka_timeout;
 367        u32 ka_interval ;
 368#if defined(__BIG_ENDIAN)
 369        u8 snd_seq_scale;
 370        u8 ttl;
 371        u8 tos;
 372        u8 ka_max_probe_count;
 373#elif defined(__LITTLE_ENDIAN)
 374        u8 ka_max_probe_count;
 375        u8 tos;
 376        u8 ttl;
 377        u8 snd_seq_scale;
 378#endif
 379#if defined(__BIG_ENDIAN)
 380        u16 pmtu;
 381        u16 mss;
 382#elif defined(__LITTLE_ENDIAN)
 383        u16 mss;
 384        u16 pmtu;
 385#endif
 386        u32 rcv_buf;
 387        u32 snd_buf;
 388        u32 seed;
 389};
 390
 391
 392/*
 393 * a KWQE request to offload a PG connection
 394 */
 395struct l4_kwq_offload_pg {
 396#if defined(__BIG_ENDIAN)
 397        u8 flags;
 398#define L4_KWQ_OFFLOAD_PG_RESERVED1 (0xF<<0)
 399#define L4_KWQ_OFFLOAD_PG_RESERVED1_SHIFT 0
 400#define L4_KWQ_OFFLOAD_PG_LAYER_CODE (0x7<<4)
 401#define L4_KWQ_OFFLOAD_PG_LAYER_CODE_SHIFT 4
 402#define L4_KWQ_OFFLOAD_PG_LINKED_WITH_NEXT (0x1<<7)
 403#define L4_KWQ_OFFLOAD_PG_LINKED_WITH_NEXT_SHIFT 7
 404        u8 op_code;
 405        u16 reserved0;
 406#elif defined(__LITTLE_ENDIAN)
 407        u16 reserved0;
 408        u8 op_code;
 409        u8 flags;
 410#define L4_KWQ_OFFLOAD_PG_RESERVED1 (0xF<<0)
 411#define L4_KWQ_OFFLOAD_PG_RESERVED1_SHIFT 0
 412#define L4_KWQ_OFFLOAD_PG_LAYER_CODE (0x7<<4)
 413#define L4_KWQ_OFFLOAD_PG_LAYER_CODE_SHIFT 4
 414#define L4_KWQ_OFFLOAD_PG_LINKED_WITH_NEXT (0x1<<7)
 415#define L4_KWQ_OFFLOAD_PG_LINKED_WITH_NEXT_SHIFT 7
 416#endif
 417#if defined(__BIG_ENDIAN)
 418        u8 l2hdr_nbytes;
 419        u8 pg_flags;
 420#define L4_KWQ_OFFLOAD_PG_SNAP_ENCAP (0x1<<0)
 421#define L4_KWQ_OFFLOAD_PG_SNAP_ENCAP_SHIFT 0
 422#define L4_KWQ_OFFLOAD_PG_VLAN_TAGGING (0x1<<1)
 423#define L4_KWQ_OFFLOAD_PG_VLAN_TAGGING_SHIFT 1
 424#define L4_KWQ_OFFLOAD_PG_RESERVED2 (0x3F<<2)
 425#define L4_KWQ_OFFLOAD_PG_RESERVED2_SHIFT 2
 426        u8 da0;
 427        u8 da1;
 428#elif defined(__LITTLE_ENDIAN)
 429        u8 da1;
 430        u8 da0;
 431        u8 pg_flags;
 432#define L4_KWQ_OFFLOAD_PG_SNAP_ENCAP (0x1<<0)
 433#define L4_KWQ_OFFLOAD_PG_SNAP_ENCAP_SHIFT 0
 434#define L4_KWQ_OFFLOAD_PG_VLAN_TAGGING (0x1<<1)
 435#define L4_KWQ_OFFLOAD_PG_VLAN_TAGGING_SHIFT 1
 436#define L4_KWQ_OFFLOAD_PG_RESERVED2 (0x3F<<2)
 437#define L4_KWQ_OFFLOAD_PG_RESERVED2_SHIFT 2
 438        u8 l2hdr_nbytes;
 439#endif
 440#if defined(__BIG_ENDIAN)
 441        u8 da2;
 442        u8 da3;
 443        u8 da4;
 444        u8 da5;
 445#elif defined(__LITTLE_ENDIAN)
 446        u8 da5;
 447        u8 da4;
 448        u8 da3;
 449        u8 da2;
 450#endif
 451#if defined(__BIG_ENDIAN)
 452        u8 sa0;
 453        u8 sa1;
 454        u8 sa2;
 455        u8 sa3;
 456#elif defined(__LITTLE_ENDIAN)
 457        u8 sa3;
 458        u8 sa2;
 459        u8 sa1;
 460        u8 sa0;
 461#endif
 462#if defined(__BIG_ENDIAN)
 463        u8 sa4;
 464        u8 sa5;
 465        u16 etype;
 466#elif defined(__LITTLE_ENDIAN)
 467        u16 etype;
 468        u8 sa5;
 469        u8 sa4;
 470#endif
 471#if defined(__BIG_ENDIAN)
 472        u16 vlan_tag;
 473        u16 ipid_start;
 474#elif defined(__LITTLE_ENDIAN)
 475        u16 ipid_start;
 476        u16 vlan_tag;
 477#endif
 478#if defined(__BIG_ENDIAN)
 479        u16 ipid_count;
 480        u16 reserved3;
 481#elif defined(__LITTLE_ENDIAN)
 482        u16 reserved3;
 483        u16 ipid_count;
 484#endif
 485        u32 host_opaque;
 486};
 487
 488
 489/*
 490 * Abortively close the connection request
 491 */
 492struct l4_kwq_reset_req {
 493#if defined(__BIG_ENDIAN)
 494        u8 flags;
 495#define L4_KWQ_RESET_REQ_RESERVED1 (0xF<<0)
 496#define L4_KWQ_RESET_REQ_RESERVED1_SHIFT 0
 497#define L4_KWQ_RESET_REQ_LAYER_CODE (0x7<<4)
 498#define L4_KWQ_RESET_REQ_LAYER_CODE_SHIFT 4
 499#define L4_KWQ_RESET_REQ_LINKED_WITH_NEXT (0x1<<7)
 500#define L4_KWQ_RESET_REQ_LINKED_WITH_NEXT_SHIFT 7
 501        u8 op_code;
 502        u16 reserved0;
 503#elif defined(__LITTLE_ENDIAN)
 504        u16 reserved0;
 505        u8 op_code;
 506        u8 flags;
 507#define L4_KWQ_RESET_REQ_RESERVED1 (0xF<<0)
 508#define L4_KWQ_RESET_REQ_RESERVED1_SHIFT 0
 509#define L4_KWQ_RESET_REQ_LAYER_CODE (0x7<<4)
 510#define L4_KWQ_RESET_REQ_LAYER_CODE_SHIFT 4
 511#define L4_KWQ_RESET_REQ_LINKED_WITH_NEXT (0x1<<7)
 512#define L4_KWQ_RESET_REQ_LINKED_WITH_NEXT_SHIFT 7
 513#endif
 514        u32 cid;
 515        u32 reserved2[6];
 516};
 517
 518
 519/*
 520 * a KWQE request to update a PG connection
 521 */
 522struct l4_kwq_update_pg {
 523#if defined(__BIG_ENDIAN)
 524        u8 flags;
 525#define L4_KWQ_UPDATE_PG_RESERVED1 (0xF<<0)
 526#define L4_KWQ_UPDATE_PG_RESERVED1_SHIFT 0
 527#define L4_KWQ_UPDATE_PG_LAYER_CODE (0x7<<4)
 528#define L4_KWQ_UPDATE_PG_LAYER_CODE_SHIFT 4
 529#define L4_KWQ_UPDATE_PG_LINKED_WITH_NEXT (0x1<<7)
 530#define L4_KWQ_UPDATE_PG_LINKED_WITH_NEXT_SHIFT 7
 531        u8 opcode;
 532        u16 oper16;
 533#elif defined(__LITTLE_ENDIAN)
 534        u16 oper16;
 535        u8 opcode;
 536        u8 flags;
 537#define L4_KWQ_UPDATE_PG_RESERVED1 (0xF<<0)
 538#define L4_KWQ_UPDATE_PG_RESERVED1_SHIFT 0
 539#define L4_KWQ_UPDATE_PG_LAYER_CODE (0x7<<4)
 540#define L4_KWQ_UPDATE_PG_LAYER_CODE_SHIFT 4
 541#define L4_KWQ_UPDATE_PG_LINKED_WITH_NEXT (0x1<<7)
 542#define L4_KWQ_UPDATE_PG_LINKED_WITH_NEXT_SHIFT 7
 543#endif
 544        u32 pg_cid;
 545        u32 pg_host_opaque;
 546#if defined(__BIG_ENDIAN)
 547        u8 pg_valids;
 548#define L4_KWQ_UPDATE_PG_VALIDS_IPID_COUNT (0x1<<0)
 549#define L4_KWQ_UPDATE_PG_VALIDS_IPID_COUNT_SHIFT 0
 550#define L4_KWQ_UPDATE_PG_VALIDS_DA (0x1<<1)
 551#define L4_KWQ_UPDATE_PG_VALIDS_DA_SHIFT 1
 552#define L4_KWQ_UPDATE_PG_RESERVERD2 (0x3F<<2)
 553#define L4_KWQ_UPDATE_PG_RESERVERD2_SHIFT 2
 554        u8 pg_unused_a;
 555        u16 pg_ipid_count;
 556#elif defined(__LITTLE_ENDIAN)
 557        u16 pg_ipid_count;
 558        u8 pg_unused_a;
 559        u8 pg_valids;
 560#define L4_KWQ_UPDATE_PG_VALIDS_IPID_COUNT (0x1<<0)
 561#define L4_KWQ_UPDATE_PG_VALIDS_IPID_COUNT_SHIFT 0
 562#define L4_KWQ_UPDATE_PG_VALIDS_DA (0x1<<1)
 563#define L4_KWQ_UPDATE_PG_VALIDS_DA_SHIFT 1
 564#define L4_KWQ_UPDATE_PG_RESERVERD2 (0x3F<<2)
 565#define L4_KWQ_UPDATE_PG_RESERVERD2_SHIFT 2
 566#endif
 567#if defined(__BIG_ENDIAN)
 568        u16 reserverd3;
 569        u8 da0;
 570        u8 da1;
 571#elif defined(__LITTLE_ENDIAN)
 572        u8 da1;
 573        u8 da0;
 574        u16 reserverd3;
 575#endif
 576#if defined(__BIG_ENDIAN)
 577        u8 da2;
 578        u8 da3;
 579        u8 da4;
 580        u8 da5;
 581#elif defined(__LITTLE_ENDIAN)
 582        u8 da5;
 583        u8 da4;
 584        u8 da3;
 585        u8 da2;
 586#endif
 587        u32 reserved4;
 588        u32 reserved5;
 589};
 590
 591
 592/*
 593 * a KWQE request to upload a PG or L4 context
 594 */
 595struct l4_kwq_upload {
 596#if defined(__BIG_ENDIAN)
 597        u8 flags;
 598#define L4_KWQ_UPLOAD_RESERVED1 (0xF<<0)
 599#define L4_KWQ_UPLOAD_RESERVED1_SHIFT 0
 600#define L4_KWQ_UPLOAD_LAYER_CODE (0x7<<4)
 601#define L4_KWQ_UPLOAD_LAYER_CODE_SHIFT 4
 602#define L4_KWQ_UPLOAD_LINKED_WITH_NEXT (0x1<<7)
 603#define L4_KWQ_UPLOAD_LINKED_WITH_NEXT_SHIFT 7
 604        u8 opcode;
 605        u16 oper16;
 606#elif defined(__LITTLE_ENDIAN)
 607        u16 oper16;
 608        u8 opcode;
 609        u8 flags;
 610#define L4_KWQ_UPLOAD_RESERVED1 (0xF<<0)
 611#define L4_KWQ_UPLOAD_RESERVED1_SHIFT 0
 612#define L4_KWQ_UPLOAD_LAYER_CODE (0x7<<4)
 613#define L4_KWQ_UPLOAD_LAYER_CODE_SHIFT 4
 614#define L4_KWQ_UPLOAD_LINKED_WITH_NEXT (0x1<<7)
 615#define L4_KWQ_UPLOAD_LINKED_WITH_NEXT_SHIFT 7
 616#endif
 617        u32 cid;
 618        u32 reserved2[6];
 619};
 620
 621/*
 622 * bnx2x structures
 623 */
 624
 625/*
 626 * The iscsi aggregative context of Cstorm
 627 */
 628struct cstorm_iscsi_ag_context {
 629        u32 agg_vars1;
 630#define CSTORM_ISCSI_AG_CONTEXT_STATE (0xFF<<0)
 631#define CSTORM_ISCSI_AG_CONTEXT_STATE_SHIFT 0
 632#define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<8)
 633#define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 8
 634#define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<9)
 635#define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 9
 636#define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<10)
 637#define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 10
 638#define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<11)
 639#define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 11
 640#define __CSTORM_ISCSI_AG_CONTEXT_RESERVED_ULP_RX_SE_CF_EN (0x1<<12)
 641#define __CSTORM_ISCSI_AG_CONTEXT_RESERVED_ULP_RX_SE_CF_EN_SHIFT 12
 642#define __CSTORM_ISCSI_AG_CONTEXT_RESERVED_ULP_RX_INV_CF_EN (0x1<<13)
 643#define __CSTORM_ISCSI_AG_CONTEXT_RESERVED_ULP_RX_INV_CF_EN_SHIFT 13
 644#define __CSTORM_ISCSI_AG_CONTEXT_AUX4_CF (0x3<<14)
 645#define __CSTORM_ISCSI_AG_CONTEXT_AUX4_CF_SHIFT 14
 646#define __CSTORM_ISCSI_AG_CONTEXT_RESERVED66 (0x3<<16)
 647#define __CSTORM_ISCSI_AG_CONTEXT_RESERVED66_SHIFT 16
 648#define __CSTORM_ISCSI_AG_CONTEXT_FIN_RECEIVED_CF_EN (0x1<<18)
 649#define __CSTORM_ISCSI_AG_CONTEXT_FIN_RECEIVED_CF_EN_SHIFT 18
 650#define __CSTORM_ISCSI_AG_CONTEXT_AUX1_CF_EN (0x1<<19)
 651#define __CSTORM_ISCSI_AG_CONTEXT_AUX1_CF_EN_SHIFT 19
 652#define __CSTORM_ISCSI_AG_CONTEXT_AUX2_CF_EN (0x1<<20)
 653#define __CSTORM_ISCSI_AG_CONTEXT_AUX2_CF_EN_SHIFT 20
 654#define __CSTORM_ISCSI_AG_CONTEXT_AUX3_CF_EN (0x1<<21)
 655#define __CSTORM_ISCSI_AG_CONTEXT_AUX3_CF_EN_SHIFT 21
 656#define __CSTORM_ISCSI_AG_CONTEXT_AUX4_CF_EN (0x1<<22)
 657#define __CSTORM_ISCSI_AG_CONTEXT_AUX4_CF_EN_SHIFT 22
 658#define __CSTORM_ISCSI_AG_CONTEXT_REL_SEQ_RULE (0x7<<23)
 659#define __CSTORM_ISCSI_AG_CONTEXT_REL_SEQ_RULE_SHIFT 23
 660#define CSTORM_ISCSI_AG_CONTEXT_HQ_PROD_RULE (0x3<<26)
 661#define CSTORM_ISCSI_AG_CONTEXT_HQ_PROD_RULE_SHIFT 26
 662#define __CSTORM_ISCSI_AG_CONTEXT_RESERVED52 (0x3<<28)
 663#define __CSTORM_ISCSI_AG_CONTEXT_RESERVED52_SHIFT 28
 664#define __CSTORM_ISCSI_AG_CONTEXT_RESERVED53 (0x3<<30)
 665#define __CSTORM_ISCSI_AG_CONTEXT_RESERVED53_SHIFT 30
 666#if defined(__BIG_ENDIAN)
 667        u8 __aux1_th;
 668        u8 __aux1_val;
 669        u16 __agg_vars2;
 670#elif defined(__LITTLE_ENDIAN)
 671        u16 __agg_vars2;
 672        u8 __aux1_val;
 673        u8 __aux1_th;
 674#endif
 675        u32 rel_seq;
 676        u32 rel_seq_th;
 677#if defined(__BIG_ENDIAN)
 678        u16 hq_cons;
 679        u16 hq_prod;
 680#elif defined(__LITTLE_ENDIAN)
 681        u16 hq_prod;
 682        u16 hq_cons;
 683#endif
 684#if defined(__BIG_ENDIAN)
 685        u8 __reserved62;
 686        u8 __reserved61;
 687        u8 __reserved60;
 688        u8 __reserved59;
 689#elif defined(__LITTLE_ENDIAN)
 690        u8 __reserved59;
 691        u8 __reserved60;
 692        u8 __reserved61;
 693        u8 __reserved62;
 694#endif
 695#if defined(__BIG_ENDIAN)
 696        u16 __reserved64;
 697        u16 cq_u_prod;
 698#elif defined(__LITTLE_ENDIAN)
 699        u16 cq_u_prod;
 700        u16 __reserved64;
 701#endif
 702        u32 __cq_u_prod1;
 703#if defined(__BIG_ENDIAN)
 704        u16 __agg_vars3;
 705        u16 cq_u_pend;
 706#elif defined(__LITTLE_ENDIAN)
 707        u16 cq_u_pend;
 708        u16 __agg_vars3;
 709#endif
 710#if defined(__BIG_ENDIAN)
 711        u16 __aux2_th;
 712        u16 aux2_val;
 713#elif defined(__LITTLE_ENDIAN)
 714        u16 aux2_val;
 715        u16 __aux2_th;
 716#endif
 717};
 718
 719/*
 720 * The fcoe extra aggregative context section of Tstorm
 721 */
 722struct tstorm_fcoe_extra_ag_context_section {
 723        u32 __agg_val1;
 724#if defined(__BIG_ENDIAN)
 725        u8 __tcp_agg_vars2;
 726        u8 __agg_val3;
 727        u16 __agg_val2;
 728#elif defined(__LITTLE_ENDIAN)
 729        u16 __agg_val2;
 730        u8 __agg_val3;
 731        u8 __tcp_agg_vars2;
 732#endif
 733#if defined(__BIG_ENDIAN)
 734        u16 __agg_val5;
 735        u8 __agg_val6;
 736        u8 __tcp_agg_vars3;
 737#elif defined(__LITTLE_ENDIAN)
 738        u8 __tcp_agg_vars3;
 739        u8 __agg_val6;
 740        u16 __agg_val5;
 741#endif
 742        u32 __lcq_prod;
 743        u32 rtt_seq;
 744        u32 rtt_time;
 745        u32 __reserved66;
 746        u32 wnd_right_edge;
 747        u32 tcp_agg_vars1;
 748#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_FIN_SENT_FLAG (0x1<<0)
 749#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_FIN_SENT_FLAG_SHIFT 0
 750#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_LAST_PACKET_FIN_FLAG (0x1<<1)
 751#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_LAST_PACKET_FIN_FLAG_SHIFT 1
 752#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_WND_UPD_CF (0x3<<2)
 753#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_WND_UPD_CF_SHIFT 2
 754#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TIMEOUT_CF (0x3<<4)
 755#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TIMEOUT_CF_SHIFT 4
 756#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_WND_UPD_CF_EN (0x1<<6)
 757#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_WND_UPD_CF_EN_SHIFT 6
 758#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TIMEOUT_CF_EN (0x1<<7)
 759#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TIMEOUT_CF_EN_SHIFT 7
 760#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RETRANSMIT_SEQ_EN (0x1<<8)
 761#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RETRANSMIT_SEQ_EN_SHIFT 8
 762#define __TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_LCQ_SND_EN (0x1<<9)
 763#define __TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_LCQ_SND_EN_SHIFT 9
 764#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX1_FLAG (0x1<<10)
 765#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX1_FLAG_SHIFT 10
 766#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX2_FLAG (0x1<<11)
 767#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX2_FLAG_SHIFT 11
 768#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX1_CF_EN (0x1<<12)
 769#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX1_CF_EN_SHIFT 12
 770#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX2_CF_EN (0x1<<13)
 771#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX2_CF_EN_SHIFT 13
 772#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX1_CF (0x3<<14)
 773#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX1_CF_SHIFT 14
 774#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX2_CF (0x3<<16)
 775#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX2_CF_SHIFT 16
 776#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TX_BLOCKED (0x1<<18)
 777#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TX_BLOCKED_SHIFT 18
 778#define __TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX10_CF_EN (0x1<<19)
 779#define __TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX10_CF_EN_SHIFT 19
 780#define __TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX11_CF_EN (0x1<<20)
 781#define __TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX11_CF_EN_SHIFT 20
 782#define __TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX12_CF_EN (0x1<<21)
 783#define __TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX12_CF_EN_SHIFT 21
 784#define __TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED1 (0x3<<22)
 785#define __TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED1_SHIFT 22
 786#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RETRANSMIT_PEND_SEQ (0xF<<24)
 787#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RETRANSMIT_PEND_SEQ_SHIFT 24
 788#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RETRANSMIT_DONE_SEQ (0xF<<28)
 789#define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RETRANSMIT_DONE_SEQ_SHIFT 28
 790        u32 snd_max;
 791        u32 __lcq_cons;
 792        u32 __reserved2;
 793};
 794
 795/*
 796 * The fcoe aggregative context of Tstorm
 797 */
 798struct tstorm_fcoe_ag_context {
 799#if defined(__BIG_ENDIAN)
 800        u16 ulp_credit;
 801        u8 agg_vars1;
 802#define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
 803#define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
 804#define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
 805#define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
 806#define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
 807#define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
 808#define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
 809#define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
 810#define __TSTORM_FCOE_AG_CONTEXT_QUEUE0_FLUSH_CF (0x3<<4)
 811#define __TSTORM_FCOE_AG_CONTEXT_QUEUE0_FLUSH_CF_SHIFT 4
 812#define __TSTORM_FCOE_AG_CONTEXT_AUX3_FLAG (0x1<<6)
 813#define __TSTORM_FCOE_AG_CONTEXT_AUX3_FLAG_SHIFT 6
 814#define __TSTORM_FCOE_AG_CONTEXT_AUX4_FLAG (0x1<<7)
 815#define __TSTORM_FCOE_AG_CONTEXT_AUX4_FLAG_SHIFT 7
 816        u8 state;
 817#elif defined(__LITTLE_ENDIAN)
 818        u8 state;
 819        u8 agg_vars1;
 820#define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
 821#define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
 822#define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
 823#define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
 824#define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
 825#define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
 826#define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
 827#define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
 828#define __TSTORM_FCOE_AG_CONTEXT_QUEUE0_FLUSH_CF (0x3<<4)
 829#define __TSTORM_FCOE_AG_CONTEXT_QUEUE0_FLUSH_CF_SHIFT 4
 830#define __TSTORM_FCOE_AG_CONTEXT_AUX3_FLAG (0x1<<6)
 831#define __TSTORM_FCOE_AG_CONTEXT_AUX3_FLAG_SHIFT 6
 832#define __TSTORM_FCOE_AG_CONTEXT_AUX4_FLAG (0x1<<7)
 833#define __TSTORM_FCOE_AG_CONTEXT_AUX4_FLAG_SHIFT 7
 834        u16 ulp_credit;
 835#endif
 836#if defined(__BIG_ENDIAN)
 837        u16 __agg_val4;
 838        u16 agg_vars2;
 839#define __TSTORM_FCOE_AG_CONTEXT_AUX5_FLAG (0x1<<0)
 840#define __TSTORM_FCOE_AG_CONTEXT_AUX5_FLAG_SHIFT 0
 841#define __TSTORM_FCOE_AG_CONTEXT_AUX6_FLAG (0x1<<1)
 842#define __TSTORM_FCOE_AG_CONTEXT_AUX6_FLAG_SHIFT 1
 843#define __TSTORM_FCOE_AG_CONTEXT_AUX4_CF (0x3<<2)
 844#define __TSTORM_FCOE_AG_CONTEXT_AUX4_CF_SHIFT 2
 845#define __TSTORM_FCOE_AG_CONTEXT_AUX5_CF (0x3<<4)
 846#define __TSTORM_FCOE_AG_CONTEXT_AUX5_CF_SHIFT 4
 847#define __TSTORM_FCOE_AG_CONTEXT_AUX6_CF (0x3<<6)
 848#define __TSTORM_FCOE_AG_CONTEXT_AUX6_CF_SHIFT 6
 849#define __TSTORM_FCOE_AG_CONTEXT_AUX7_CF (0x3<<8)
 850#define __TSTORM_FCOE_AG_CONTEXT_AUX7_CF_SHIFT 8
 851#define __TSTORM_FCOE_AG_CONTEXT_AUX7_FLAG (0x1<<10)
 852#define __TSTORM_FCOE_AG_CONTEXT_AUX7_FLAG_SHIFT 10
 853#define __TSTORM_FCOE_AG_CONTEXT_QUEUE0_FLUSH_CF_EN (0x1<<11)
 854#define __TSTORM_FCOE_AG_CONTEXT_QUEUE0_FLUSH_CF_EN_SHIFT 11
 855#define TSTORM_FCOE_AG_CONTEXT_AUX4_CF_EN (0x1<<12)
 856#define TSTORM_FCOE_AG_CONTEXT_AUX4_CF_EN_SHIFT 12
 857#define TSTORM_FCOE_AG_CONTEXT_AUX5_CF_EN (0x1<<13)
 858#define TSTORM_FCOE_AG_CONTEXT_AUX5_CF_EN_SHIFT 13
 859#define TSTORM_FCOE_AG_CONTEXT_AUX6_CF_EN (0x1<<14)
 860#define TSTORM_FCOE_AG_CONTEXT_AUX6_CF_EN_SHIFT 14
 861#define TSTORM_FCOE_AG_CONTEXT_AUX7_CF_EN (0x1<<15)
 862#define TSTORM_FCOE_AG_CONTEXT_AUX7_CF_EN_SHIFT 15
 863#elif defined(__LITTLE_ENDIAN)
 864        u16 agg_vars2;
 865#define __TSTORM_FCOE_AG_CONTEXT_AUX5_FLAG (0x1<<0)
 866#define __TSTORM_FCOE_AG_CONTEXT_AUX5_FLAG_SHIFT 0
 867#define __TSTORM_FCOE_AG_CONTEXT_AUX6_FLAG (0x1<<1)
 868#define __TSTORM_FCOE_AG_CONTEXT_AUX6_FLAG_SHIFT 1
 869#define __TSTORM_FCOE_AG_CONTEXT_AUX4_CF (0x3<<2)
 870#define __TSTORM_FCOE_AG_CONTEXT_AUX4_CF_SHIFT 2
 871#define __TSTORM_FCOE_AG_CONTEXT_AUX5_CF (0x3<<4)
 872#define __TSTORM_FCOE_AG_CONTEXT_AUX5_CF_SHIFT 4
 873#define __TSTORM_FCOE_AG_CONTEXT_AUX6_CF (0x3<<6)
 874#define __TSTORM_FCOE_AG_CONTEXT_AUX6_CF_SHIFT 6
 875#define __TSTORM_FCOE_AG_CONTEXT_AUX7_CF (0x3<<8)
 876#define __TSTORM_FCOE_AG_CONTEXT_AUX7_CF_SHIFT 8
 877#define __TSTORM_FCOE_AG_CONTEXT_AUX7_FLAG (0x1<<10)
 878#define __TSTORM_FCOE_AG_CONTEXT_AUX7_FLAG_SHIFT 10
 879#define __TSTORM_FCOE_AG_CONTEXT_QUEUE0_FLUSH_CF_EN (0x1<<11)
 880#define __TSTORM_FCOE_AG_CONTEXT_QUEUE0_FLUSH_CF_EN_SHIFT 11
 881#define TSTORM_FCOE_AG_CONTEXT_AUX4_CF_EN (0x1<<12)
 882#define TSTORM_FCOE_AG_CONTEXT_AUX4_CF_EN_SHIFT 12
 883#define TSTORM_FCOE_AG_CONTEXT_AUX5_CF_EN (0x1<<13)
 884#define TSTORM_FCOE_AG_CONTEXT_AUX5_CF_EN_SHIFT 13
 885#define TSTORM_FCOE_AG_CONTEXT_AUX6_CF_EN (0x1<<14)
 886#define TSTORM_FCOE_AG_CONTEXT_AUX6_CF_EN_SHIFT 14
 887#define TSTORM_FCOE_AG_CONTEXT_AUX7_CF_EN (0x1<<15)
 888#define TSTORM_FCOE_AG_CONTEXT_AUX7_CF_EN_SHIFT 15
 889        u16 __agg_val4;
 890#endif
 891        struct tstorm_fcoe_extra_ag_context_section __extra_section;
 892};
 893
 894
 895
 896/*
 897 * The tcp aggregative context section of Tstorm
 898 */
 899struct tstorm_tcp_tcp_ag_context_section {
 900        u32 __agg_val1;
 901#if defined(__BIG_ENDIAN)
 902        u8 __tcp_agg_vars2;
 903        u8 __agg_val3;
 904        u16 __agg_val2;
 905#elif defined(__LITTLE_ENDIAN)
 906        u16 __agg_val2;
 907        u8 __agg_val3;
 908        u8 __tcp_agg_vars2;
 909#endif
 910#if defined(__BIG_ENDIAN)
 911        u16 __agg_val5;
 912        u8 __agg_val6;
 913        u8 __tcp_agg_vars3;
 914#elif defined(__LITTLE_ENDIAN)
 915        u8 __tcp_agg_vars3;
 916        u8 __agg_val6;
 917        u16 __agg_val5;
 918#endif
 919        u32 snd_nxt;
 920        u32 rtt_seq;
 921        u32 rtt_time;
 922        u32 __reserved66;
 923        u32 wnd_right_edge;
 924        u32 tcp_agg_vars1;
 925#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_FIN_SENT_FLAG (0x1<<0)
 926#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_FIN_SENT_FLAG_SHIFT 0
 927#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_LAST_PACKET_FIN_FLAG (0x1<<1)
 928#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_LAST_PACKET_FIN_FLAG_SHIFT 1
 929#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_WND_UPD_CF (0x3<<2)
 930#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_WND_UPD_CF_SHIFT 2
 931#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_TIMEOUT_CF (0x3<<4)
 932#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_TIMEOUT_CF_SHIFT 4
 933#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_WND_UPD_CF_EN (0x1<<6)
 934#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_WND_UPD_CF_EN_SHIFT 6
 935#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_TIMEOUT_CF_EN (0x1<<7)
 936#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_TIMEOUT_CF_EN_SHIFT 7
 937#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RETRANSMIT_SEQ_EN (0x1<<8)
 938#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RETRANSMIT_SEQ_EN_SHIFT 8
 939#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_SND_NXT_EN (0x1<<9)
 940#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_SND_NXT_EN_SHIFT 9
 941#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_FLAG (0x1<<10)
 942#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_FLAG_SHIFT 10
 943#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX2_FLAG (0x1<<11)
 944#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX2_FLAG_SHIFT 11
 945#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_CF_EN (0x1<<12)
 946#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_CF_EN_SHIFT 12
 947#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX2_CF_EN (0x1<<13)
 948#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX2_CF_EN_SHIFT 13
 949#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_CF (0x3<<14)
 950#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_CF_SHIFT 14
 951#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX2_CF (0x3<<16)
 952#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX2_CF_SHIFT 16
 953#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_BLOCKED (0x1<<18)
 954#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_BLOCKED_SHIFT 18
 955#define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX10_CF_EN (0x1<<19)
 956#define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX10_CF_EN_SHIFT 19
 957#define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX11_CF_EN (0x1<<20)
 958#define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX11_CF_EN_SHIFT 20
 959#define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX12_CF_EN (0x1<<21)
 960#define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX12_CF_EN_SHIFT 21
 961#define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RESERVED1 (0x3<<22)
 962#define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RESERVED1_SHIFT 22
 963#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RETRANSMIT_PEND_SEQ (0xF<<24)
 964#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RETRANSMIT_PEND_SEQ_SHIFT 24
 965#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RETRANSMIT_DONE_SEQ (0xF<<28)
 966#define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RETRANSMIT_DONE_SEQ_SHIFT 28
 967        u32 snd_max;
 968        u32 snd_una;
 969        u32 __reserved2;
 970};
 971
 972/*
 973 * The iscsi aggregative context of Tstorm
 974 */
 975struct tstorm_iscsi_ag_context {
 976#if defined(__BIG_ENDIAN)
 977        u16 ulp_credit;
 978        u8 agg_vars1;
 979#define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
 980#define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
 981#define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
 982#define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
 983#define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
 984#define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
 985#define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
 986#define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
 987#define __TSTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF (0x3<<4)
 988#define __TSTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_SHIFT 4
 989#define __TSTORM_ISCSI_AG_CONTEXT_AUX3_FLAG (0x1<<6)
 990#define __TSTORM_ISCSI_AG_CONTEXT_AUX3_FLAG_SHIFT 6
 991#define __TSTORM_ISCSI_AG_CONTEXT_ACK_ON_FIN_SENT_FLAG (0x1<<7)
 992#define __TSTORM_ISCSI_AG_CONTEXT_ACK_ON_FIN_SENT_FLAG_SHIFT 7
 993        u8 state;
 994#elif defined(__LITTLE_ENDIAN)
 995        u8 state;
 996        u8 agg_vars1;
 997#define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
 998#define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
 999#define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
1000#define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
1001#define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
1002#define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
1003#define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
1004#define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
1005#define __TSTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF (0x3<<4)
1006#define __TSTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_SHIFT 4
1007#define __TSTORM_ISCSI_AG_CONTEXT_AUX3_FLAG (0x1<<6)
1008#define __TSTORM_ISCSI_AG_CONTEXT_AUX3_FLAG_SHIFT 6
1009#define __TSTORM_ISCSI_AG_CONTEXT_ACK_ON_FIN_SENT_FLAG (0x1<<7)
1010#define __TSTORM_ISCSI_AG_CONTEXT_ACK_ON_FIN_SENT_FLAG_SHIFT 7
1011        u16 ulp_credit;
1012#endif
1013#if defined(__BIG_ENDIAN)
1014        u16 __agg_val4;
1015        u16 agg_vars2;
1016#define __TSTORM_ISCSI_AG_CONTEXT_MSL_TIMER_SET_FLAG (0x1<<0)
1017#define __TSTORM_ISCSI_AG_CONTEXT_MSL_TIMER_SET_FLAG_SHIFT 0
1018#define __TSTORM_ISCSI_AG_CONTEXT_FIN_SENT_FIRST_FLAG (0x1<<1)
1019#define __TSTORM_ISCSI_AG_CONTEXT_FIN_SENT_FIRST_FLAG_SHIFT 1
1020#define __TSTORM_ISCSI_AG_CONTEXT_RST_SENT_CF (0x3<<2)
1021#define __TSTORM_ISCSI_AG_CONTEXT_RST_SENT_CF_SHIFT 2
1022#define __TSTORM_ISCSI_AG_CONTEXT_WAKEUP_CALL_CF (0x3<<4)
1023#define __TSTORM_ISCSI_AG_CONTEXT_WAKEUP_CALL_CF_SHIFT 4
1024#define __TSTORM_ISCSI_AG_CONTEXT_AUX6_CF (0x3<<6)
1025#define __TSTORM_ISCSI_AG_CONTEXT_AUX6_CF_SHIFT 6
1026#define __TSTORM_ISCSI_AG_CONTEXT_AUX7_CF (0x3<<8)
1027#define __TSTORM_ISCSI_AG_CONTEXT_AUX7_CF_SHIFT 8
1028#define __TSTORM_ISCSI_AG_CONTEXT_AUX7_FLAG (0x1<<10)
1029#define __TSTORM_ISCSI_AG_CONTEXT_AUX7_FLAG_SHIFT 10
1030#define __TSTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_EN (0x1<<11)
1031#define __TSTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_EN_SHIFT 11
1032#define __TSTORM_ISCSI_AG_CONTEXT_RST_SENT_CF_EN (0x1<<12)
1033#define __TSTORM_ISCSI_AG_CONTEXT_RST_SENT_CF_EN_SHIFT 12
1034#define __TSTORM_ISCSI_AG_CONTEXT_WAKEUP_CALL_CF_EN (0x1<<13)
1035#define __TSTORM_ISCSI_AG_CONTEXT_WAKEUP_CALL_CF_EN_SHIFT 13
1036#define TSTORM_ISCSI_AG_CONTEXT_AUX6_CF_EN (0x1<<14)
1037#define TSTORM_ISCSI_AG_CONTEXT_AUX6_CF_EN_SHIFT 14
1038#define TSTORM_ISCSI_AG_CONTEXT_AUX7_CF_EN (0x1<<15)
1039#define TSTORM_ISCSI_AG_CONTEXT_AUX7_CF_EN_SHIFT 15
1040#elif defined(__LITTLE_ENDIAN)
1041        u16 agg_vars2;
1042#define __TSTORM_ISCSI_AG_CONTEXT_MSL_TIMER_SET_FLAG (0x1<<0)
1043#define __TSTORM_ISCSI_AG_CONTEXT_MSL_TIMER_SET_FLAG_SHIFT 0
1044#define __TSTORM_ISCSI_AG_CONTEXT_FIN_SENT_FIRST_FLAG (0x1<<1)
1045#define __TSTORM_ISCSI_AG_CONTEXT_FIN_SENT_FIRST_FLAG_SHIFT 1
1046#define __TSTORM_ISCSI_AG_CONTEXT_RST_SENT_CF (0x3<<2)
1047#define __TSTORM_ISCSI_AG_CONTEXT_RST_SENT_CF_SHIFT 2
1048#define __TSTORM_ISCSI_AG_CONTEXT_WAKEUP_CALL_CF (0x3<<4)
1049#define __TSTORM_ISCSI_AG_CONTEXT_WAKEUP_CALL_CF_SHIFT 4
1050#define __TSTORM_ISCSI_AG_CONTEXT_AUX6_CF (0x3<<6)
1051#define __TSTORM_ISCSI_AG_CONTEXT_AUX6_CF_SHIFT 6
1052#define __TSTORM_ISCSI_AG_CONTEXT_AUX7_CF (0x3<<8)
1053#define __TSTORM_ISCSI_AG_CONTEXT_AUX7_CF_SHIFT 8
1054#define __TSTORM_ISCSI_AG_CONTEXT_AUX7_FLAG (0x1<<10)
1055#define __TSTORM_ISCSI_AG_CONTEXT_AUX7_FLAG_SHIFT 10
1056#define __TSTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_EN (0x1<<11)
1057#define __TSTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_EN_SHIFT 11
1058#define __TSTORM_ISCSI_AG_CONTEXT_RST_SENT_CF_EN (0x1<<12)
1059#define __TSTORM_ISCSI_AG_CONTEXT_RST_SENT_CF_EN_SHIFT 12
1060#define __TSTORM_ISCSI_AG_CONTEXT_WAKEUP_CALL_CF_EN (0x1<<13)
1061#define __TSTORM_ISCSI_AG_CONTEXT_WAKEUP_CALL_CF_EN_SHIFT 13
1062#define TSTORM_ISCSI_AG_CONTEXT_AUX6_CF_EN (0x1<<14)
1063#define TSTORM_ISCSI_AG_CONTEXT_AUX6_CF_EN_SHIFT 14
1064#define TSTORM_ISCSI_AG_CONTEXT_AUX7_CF_EN (0x1<<15)
1065#define TSTORM_ISCSI_AG_CONTEXT_AUX7_CF_EN_SHIFT 15
1066        u16 __agg_val4;
1067#endif
1068        struct tstorm_tcp_tcp_ag_context_section tcp;
1069};
1070
1071
1072
1073/*
1074 * The fcoe aggregative context of Ustorm
1075 */
1076struct ustorm_fcoe_ag_context {
1077#if defined(__BIG_ENDIAN)
1078        u8 __aux_counter_flags;
1079        u8 agg_vars2;
1080#define USTORM_FCOE_AG_CONTEXT_TX_CF (0x3<<0)
1081#define USTORM_FCOE_AG_CONTEXT_TX_CF_SHIFT 0
1082#define __USTORM_FCOE_AG_CONTEXT_TIMER_CF (0x3<<2)
1083#define __USTORM_FCOE_AG_CONTEXT_TIMER_CF_SHIFT 2
1084#define USTORM_FCOE_AG_CONTEXT_AGG_MISC4_RULE (0x7<<4)
1085#define USTORM_FCOE_AG_CONTEXT_AGG_MISC4_RULE_SHIFT 4
1086#define __USTORM_FCOE_AG_CONTEXT_AGG_VAL2_MASK (0x1<<7)
1087#define __USTORM_FCOE_AG_CONTEXT_AGG_VAL2_MASK_SHIFT 7
1088        u8 agg_vars1;
1089#define __USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
1090#define __USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
1091#define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
1092#define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
1093#define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
1094#define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
1095#define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
1096#define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
1097#define USTORM_FCOE_AG_CONTEXT_INV_CF (0x3<<4)
1098#define USTORM_FCOE_AG_CONTEXT_INV_CF_SHIFT 4
1099#define USTORM_FCOE_AG_CONTEXT_COMPLETION_CF (0x3<<6)
1100#define USTORM_FCOE_AG_CONTEXT_COMPLETION_CF_SHIFT 6
1101        u8 state;
1102#elif defined(__LITTLE_ENDIAN)
1103        u8 state;
1104        u8 agg_vars1;
1105#define __USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
1106#define __USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
1107#define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
1108#define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
1109#define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
1110#define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
1111#define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
1112#define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
1113#define USTORM_FCOE_AG_CONTEXT_INV_CF (0x3<<4)
1114#define USTORM_FCOE_AG_CONTEXT_INV_CF_SHIFT 4
1115#define USTORM_FCOE_AG_CONTEXT_COMPLETION_CF (0x3<<6)
1116#define USTORM_FCOE_AG_CONTEXT_COMPLETION_CF_SHIFT 6
1117        u8 agg_vars2;
1118#define USTORM_FCOE_AG_CONTEXT_TX_CF (0x3<<0)
1119#define USTORM_FCOE_AG_CONTEXT_TX_CF_SHIFT 0
1120#define __USTORM_FCOE_AG_CONTEXT_TIMER_CF (0x3<<2)
1121#define __USTORM_FCOE_AG_CONTEXT_TIMER_CF_SHIFT 2
1122#define USTORM_FCOE_AG_CONTEXT_AGG_MISC4_RULE (0x7<<4)
1123#define USTORM_FCOE_AG_CONTEXT_AGG_MISC4_RULE_SHIFT 4
1124#define __USTORM_FCOE_AG_CONTEXT_AGG_VAL2_MASK (0x1<<7)
1125#define __USTORM_FCOE_AG_CONTEXT_AGG_VAL2_MASK_SHIFT 7
1126        u8 __aux_counter_flags;
1127#endif
1128#if defined(__BIG_ENDIAN)
1129        u8 cdu_usage;
1130        u8 agg_misc2;
1131        u16 pbf_tx_seq_ack;
1132#elif defined(__LITTLE_ENDIAN)
1133        u16 pbf_tx_seq_ack;
1134        u8 agg_misc2;
1135        u8 cdu_usage;
1136#endif
1137        u32 agg_misc4;
1138#if defined(__BIG_ENDIAN)
1139        u8 agg_val3_th;
1140        u8 agg_val3;
1141        u16 agg_misc3;
1142#elif defined(__LITTLE_ENDIAN)
1143        u16 agg_misc3;
1144        u8 agg_val3;
1145        u8 agg_val3_th;
1146#endif
1147        u32 expired_task_id;
1148        u32 agg_misc4_th;
1149#if defined(__BIG_ENDIAN)
1150        u16 cq_prod;
1151        u16 cq_cons;
1152#elif defined(__LITTLE_ENDIAN)
1153        u16 cq_cons;
1154        u16 cq_prod;
1155#endif
1156#if defined(__BIG_ENDIAN)
1157        u16 __reserved2;
1158        u8 decision_rules;
1159#define USTORM_FCOE_AG_CONTEXT_CQ_DEC_RULE (0x7<<0)
1160#define USTORM_FCOE_AG_CONTEXT_CQ_DEC_RULE_SHIFT 0
1161#define __USTORM_FCOE_AG_CONTEXT_AGG_VAL3_RULE (0x7<<3)
1162#define __USTORM_FCOE_AG_CONTEXT_AGG_VAL3_RULE_SHIFT 3
1163#define USTORM_FCOE_AG_CONTEXT_CQ_ARM_N_FLAG (0x1<<6)
1164#define USTORM_FCOE_AG_CONTEXT_CQ_ARM_N_FLAG_SHIFT 6
1165#define __USTORM_FCOE_AG_CONTEXT_RESERVED1 (0x1<<7)
1166#define __USTORM_FCOE_AG_CONTEXT_RESERVED1_SHIFT 7
1167        u8 decision_rule_enable_bits;
1168#define __USTORM_FCOE_AG_CONTEXT_RESERVED_INV_CF_EN (0x1<<0)
1169#define __USTORM_FCOE_AG_CONTEXT_RESERVED_INV_CF_EN_SHIFT 0
1170#define USTORM_FCOE_AG_CONTEXT_COMPLETION_CF_EN (0x1<<1)
1171#define USTORM_FCOE_AG_CONTEXT_COMPLETION_CF_EN_SHIFT 1
1172#define USTORM_FCOE_AG_CONTEXT_TX_CF_EN (0x1<<2)
1173#define USTORM_FCOE_AG_CONTEXT_TX_CF_EN_SHIFT 2
1174#define __USTORM_FCOE_AG_CONTEXT_TIMER_CF_EN (0x1<<3)
1175#define __USTORM_FCOE_AG_CONTEXT_TIMER_CF_EN_SHIFT 3
1176#define __USTORM_FCOE_AG_CONTEXT_AUX1_CF_EN (0x1<<4)
1177#define __USTORM_FCOE_AG_CONTEXT_AUX1_CF_EN_SHIFT 4
1178#define __USTORM_FCOE_AG_CONTEXT_QUEUE0_CF_EN (0x1<<5)
1179#define __USTORM_FCOE_AG_CONTEXT_QUEUE0_CF_EN_SHIFT 5
1180#define __USTORM_FCOE_AG_CONTEXT_AUX3_CF_EN (0x1<<6)
1181#define __USTORM_FCOE_AG_CONTEXT_AUX3_CF_EN_SHIFT 6
1182#define __USTORM_FCOE_AG_CONTEXT_DQ_CF_EN (0x1<<7)
1183#define __USTORM_FCOE_AG_CONTEXT_DQ_CF_EN_SHIFT 7
1184#elif defined(__LITTLE_ENDIAN)
1185        u8 decision_rule_enable_bits;
1186#define __USTORM_FCOE_AG_CONTEXT_RESERVED_INV_CF_EN (0x1<<0)
1187#define __USTORM_FCOE_AG_CONTEXT_RESERVED_INV_CF_EN_SHIFT 0
1188#define USTORM_FCOE_AG_CONTEXT_COMPLETION_CF_EN (0x1<<1)
1189#define USTORM_FCOE_AG_CONTEXT_COMPLETION_CF_EN_SHIFT 1
1190#define USTORM_FCOE_AG_CONTEXT_TX_CF_EN (0x1<<2)
1191#define USTORM_FCOE_AG_CONTEXT_TX_CF_EN_SHIFT 2
1192#define __USTORM_FCOE_AG_CONTEXT_TIMER_CF_EN (0x1<<3)
1193#define __USTORM_FCOE_AG_CONTEXT_TIMER_CF_EN_SHIFT 3
1194#define __USTORM_FCOE_AG_CONTEXT_AUX1_CF_EN (0x1<<4)
1195#define __USTORM_FCOE_AG_CONTEXT_AUX1_CF_EN_SHIFT 4
1196#define __USTORM_FCOE_AG_CONTEXT_QUEUE0_CF_EN (0x1<<5)
1197#define __USTORM_FCOE_AG_CONTEXT_QUEUE0_CF_EN_SHIFT 5
1198#define __USTORM_FCOE_AG_CONTEXT_AUX3_CF_EN (0x1<<6)
1199#define __USTORM_FCOE_AG_CONTEXT_AUX3_CF_EN_SHIFT 6
1200#define __USTORM_FCOE_AG_CONTEXT_DQ_CF_EN (0x1<<7)
1201#define __USTORM_FCOE_AG_CONTEXT_DQ_CF_EN_SHIFT 7
1202        u8 decision_rules;
1203#define USTORM_FCOE_AG_CONTEXT_CQ_DEC_RULE (0x7<<0)
1204#define USTORM_FCOE_AG_CONTEXT_CQ_DEC_RULE_SHIFT 0
1205#define __USTORM_FCOE_AG_CONTEXT_AGG_VAL3_RULE (0x7<<3)
1206#define __USTORM_FCOE_AG_CONTEXT_AGG_VAL3_RULE_SHIFT 3
1207#define USTORM_FCOE_AG_CONTEXT_CQ_ARM_N_FLAG (0x1<<6)
1208#define USTORM_FCOE_AG_CONTEXT_CQ_ARM_N_FLAG_SHIFT 6
1209#define __USTORM_FCOE_AG_CONTEXT_RESERVED1 (0x1<<7)
1210#define __USTORM_FCOE_AG_CONTEXT_RESERVED1_SHIFT 7
1211        u16 __reserved2;
1212#endif
1213};
1214
1215
1216/*
1217 * The iscsi aggregative context of Ustorm
1218 */
1219struct ustorm_iscsi_ag_context {
1220#if defined(__BIG_ENDIAN)
1221        u8 __aux_counter_flags;
1222        u8 agg_vars2;
1223#define USTORM_ISCSI_AG_CONTEXT_TX_CF (0x3<<0)
1224#define USTORM_ISCSI_AG_CONTEXT_TX_CF_SHIFT 0
1225#define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF (0x3<<2)
1226#define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF_SHIFT 2
1227#define USTORM_ISCSI_AG_CONTEXT_AGG_MISC4_RULE (0x7<<4)
1228#define USTORM_ISCSI_AG_CONTEXT_AGG_MISC4_RULE_SHIFT 4
1229#define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_MASK (0x1<<7)
1230#define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_MASK_SHIFT 7
1231        u8 agg_vars1;
1232#define __USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
1233#define __USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
1234#define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
1235#define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
1236#define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
1237#define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
1238#define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
1239#define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
1240#define USTORM_ISCSI_AG_CONTEXT_INV_CF (0x3<<4)
1241#define USTORM_ISCSI_AG_CONTEXT_INV_CF_SHIFT 4
1242#define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF (0x3<<6)
1243#define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF_SHIFT 6
1244        u8 state;
1245#elif defined(__LITTLE_ENDIAN)
1246        u8 state;
1247        u8 agg_vars1;
1248#define __USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
1249#define __USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
1250#define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
1251#define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
1252#define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
1253#define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
1254#define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
1255#define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
1256#define USTORM_ISCSI_AG_CONTEXT_INV_CF (0x3<<4)
1257#define USTORM_ISCSI_AG_CONTEXT_INV_CF_SHIFT 4
1258#define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF (0x3<<6)
1259#define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF_SHIFT 6
1260        u8 agg_vars2;
1261#define USTORM_ISCSI_AG_CONTEXT_TX_CF (0x3<<0)
1262#define USTORM_ISCSI_AG_CONTEXT_TX_CF_SHIFT 0
1263#define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF (0x3<<2)
1264#define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF_SHIFT 2
1265#define USTORM_ISCSI_AG_CONTEXT_AGG_MISC4_RULE (0x7<<4)
1266#define USTORM_ISCSI_AG_CONTEXT_AGG_MISC4_RULE_SHIFT 4
1267#define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_MASK (0x1<<7)
1268#define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_MASK_SHIFT 7
1269        u8 __aux_counter_flags;
1270#endif
1271#if defined(__BIG_ENDIAN)
1272        u8 cdu_usage;
1273        u8 agg_misc2;
1274        u16 __cq_local_comp_itt_val;
1275#elif defined(__LITTLE_ENDIAN)
1276        u16 __cq_local_comp_itt_val;
1277        u8 agg_misc2;
1278        u8 cdu_usage;
1279#endif
1280        u32 agg_misc4;
1281#if defined(__BIG_ENDIAN)
1282        u8 agg_val3_th;
1283        u8 agg_val3;
1284        u16 agg_misc3;
1285#elif defined(__LITTLE_ENDIAN)
1286        u16 agg_misc3;
1287        u8 agg_val3;
1288        u8 agg_val3_th;
1289#endif
1290        u32 agg_val1;
1291        u32 agg_misc4_th;
1292#if defined(__BIG_ENDIAN)
1293        u16 agg_val2_th;
1294        u16 agg_val2;
1295#elif defined(__LITTLE_ENDIAN)
1296        u16 agg_val2;
1297        u16 agg_val2_th;
1298#endif
1299#if defined(__BIG_ENDIAN)
1300        u16 __reserved2;
1301        u8 decision_rules;
1302#define USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_RULE (0x7<<0)
1303#define USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_RULE_SHIFT 0
1304#define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL3_RULE (0x7<<3)
1305#define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL3_RULE_SHIFT 3
1306#define USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_ARM_N_FLAG (0x1<<6)
1307#define USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_ARM_N_FLAG_SHIFT 6
1308#define __USTORM_ISCSI_AG_CONTEXT_RESERVED1 (0x1<<7)
1309#define __USTORM_ISCSI_AG_CONTEXT_RESERVED1_SHIFT 7
1310        u8 decision_rule_enable_bits;
1311#define USTORM_ISCSI_AG_CONTEXT_INV_CF_EN (0x1<<0)
1312#define USTORM_ISCSI_AG_CONTEXT_INV_CF_EN_SHIFT 0
1313#define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF_EN (0x1<<1)
1314#define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF_EN_SHIFT 1
1315#define USTORM_ISCSI_AG_CONTEXT_TX_CF_EN (0x1<<2)
1316#define USTORM_ISCSI_AG_CONTEXT_TX_CF_EN_SHIFT 2
1317#define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF_EN (0x1<<3)
1318#define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF_EN_SHIFT 3
1319#define __USTORM_ISCSI_AG_CONTEXT_CQ_LOCAL_COMP_CF_EN (0x1<<4)
1320#define __USTORM_ISCSI_AG_CONTEXT_CQ_LOCAL_COMP_CF_EN_SHIFT 4
1321#define __USTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_EN (0x1<<5)
1322#define __USTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_EN_SHIFT 5
1323#define __USTORM_ISCSI_AG_CONTEXT_AUX3_CF_EN (0x1<<6)
1324#define __USTORM_ISCSI_AG_CONTEXT_AUX3_CF_EN_SHIFT 6
1325#define __USTORM_ISCSI_AG_CONTEXT_DQ_CF_EN (0x1<<7)
1326#define __USTORM_ISCSI_AG_CONTEXT_DQ_CF_EN_SHIFT 7
1327#elif defined(__LITTLE_ENDIAN)
1328        u8 decision_rule_enable_bits;
1329#define USTORM_ISCSI_AG_CONTEXT_INV_CF_EN (0x1<<0)
1330#define USTORM_ISCSI_AG_CONTEXT_INV_CF_EN_SHIFT 0
1331#define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF_EN (0x1<<1)
1332#define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF_EN_SHIFT 1
1333#define USTORM_ISCSI_AG_CONTEXT_TX_CF_EN (0x1<<2)
1334#define USTORM_ISCSI_AG_CONTEXT_TX_CF_EN_SHIFT 2
1335#define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF_EN (0x1<<3)
1336#define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF_EN_SHIFT 3
1337#define __USTORM_ISCSI_AG_CONTEXT_CQ_LOCAL_COMP_CF_EN (0x1<<4)
1338#define __USTORM_ISCSI_AG_CONTEXT_CQ_LOCAL_COMP_CF_EN_SHIFT 4
1339#define __USTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_EN (0x1<<5)
1340#define __USTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_EN_SHIFT 5
1341#define __USTORM_ISCSI_AG_CONTEXT_AUX3_CF_EN (0x1<<6)
1342#define __USTORM_ISCSI_AG_CONTEXT_AUX3_CF_EN_SHIFT 6
1343#define __USTORM_ISCSI_AG_CONTEXT_DQ_CF_EN (0x1<<7)
1344#define __USTORM_ISCSI_AG_CONTEXT_DQ_CF_EN_SHIFT 7
1345        u8 decision_rules;
1346#define USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_RULE (0x7<<0)
1347#define USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_RULE_SHIFT 0
1348#define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL3_RULE (0x7<<3)
1349#define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL3_RULE_SHIFT 3
1350#define USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_ARM_N_FLAG (0x1<<6)
1351#define USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_ARM_N_FLAG_SHIFT 6
1352#define __USTORM_ISCSI_AG_CONTEXT_RESERVED1 (0x1<<7)
1353#define __USTORM_ISCSI_AG_CONTEXT_RESERVED1_SHIFT 7
1354        u16 __reserved2;
1355#endif
1356};
1357
1358
1359/*
1360 * The fcoe aggregative context section of Xstorm
1361 */
1362struct xstorm_fcoe_extra_ag_context_section {
1363#if defined(__BIG_ENDIAN)
1364        u8 tcp_agg_vars1;
1365#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED51 (0x3<<0)
1366#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED51_SHIFT 0
1367#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED (0x3<<2)
1368#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED_SHIFT 2
1369#define XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF (0x3<<4)
1370#define XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_SHIFT 4
1371#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_CLEAR_DA_TIMER_EN (0x1<<6)
1372#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_CLEAR_DA_TIMER_EN_SHIFT 6
1373#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_DA_EXPIRATION_FLAG (0x1<<7)
1374#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_DA_EXPIRATION_FLAG_SHIFT 7
1375        u8 __reserved_da_cnt;
1376        u16 __mtu;
1377#elif defined(__LITTLE_ENDIAN)
1378        u16 __mtu;
1379        u8 __reserved_da_cnt;
1380        u8 tcp_agg_vars1;
1381#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED51 (0x3<<0)
1382#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED51_SHIFT 0
1383#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED (0x3<<2)
1384#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED_SHIFT 2
1385#define XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF (0x3<<4)
1386#define XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_SHIFT 4
1387#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_CLEAR_DA_TIMER_EN (0x1<<6)
1388#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_CLEAR_DA_TIMER_EN_SHIFT 6
1389#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_DA_EXPIRATION_FLAG (0x1<<7)
1390#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_DA_EXPIRATION_FLAG_SHIFT 7
1391#endif
1392        u32 snd_nxt;
1393        u32 tx_wnd;
1394        u32 __reserved55;
1395        u32 local_adv_wnd;
1396#if defined(__BIG_ENDIAN)
1397        u8 __agg_val8_th;
1398        u8 __tx_dest;
1399        u16 tcp_agg_vars2;
1400#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED57 (0x1<<0)
1401#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED57_SHIFT 0
1402#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED58 (0x1<<1)
1403#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED58_SHIFT 1
1404#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED59 (0x1<<2)
1405#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED59_SHIFT 2
1406#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX3_FLAG (0x1<<3)
1407#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX3_FLAG_SHIFT 3
1408#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX4_FLAG (0x1<<4)
1409#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX4_FLAG_SHIFT 4
1410#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED60 (0x1<<5)
1411#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED60_SHIFT 5
1412#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_ACK_TO_FE_UPDATED_EN (0x1<<6)
1413#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_ACK_TO_FE_UPDATED_EN_SHIFT 6
1414#define XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_EN (0x1<<7)
1415#define XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_EN_SHIFT 7
1416#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_TX_FIN_FLAG_EN (0x1<<8)
1417#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_TX_FIN_FLAG_EN_SHIFT 8
1418#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX1_FLAG (0x1<<9)
1419#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX1_FLAG_SHIFT 9
1420#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SET_RTO_CF (0x3<<10)
1421#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SET_RTO_CF_SHIFT 10
1422#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TS_TO_ECHO_UPDATED_CF (0x3<<12)
1423#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TS_TO_ECHO_UPDATED_CF_SHIFT 12
1424#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TX_DEST_UPDATED_CF (0x3<<14)
1425#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TX_DEST_UPDATED_CF_SHIFT 14
1426#elif defined(__LITTLE_ENDIAN)
1427        u16 tcp_agg_vars2;
1428#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED57 (0x1<<0)
1429#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED57_SHIFT 0
1430#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED58 (0x1<<1)
1431#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED58_SHIFT 1
1432#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED59 (0x1<<2)
1433#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED59_SHIFT 2
1434#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX3_FLAG (0x1<<3)
1435#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX3_FLAG_SHIFT 3
1436#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX4_FLAG (0x1<<4)
1437#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX4_FLAG_SHIFT 4
1438#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED60 (0x1<<5)
1439#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED60_SHIFT 5
1440#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_ACK_TO_FE_UPDATED_EN (0x1<<6)
1441#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_ACK_TO_FE_UPDATED_EN_SHIFT 6
1442#define XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_EN (0x1<<7)
1443#define XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_EN_SHIFT 7
1444#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_TX_FIN_FLAG_EN (0x1<<8)
1445#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_TX_FIN_FLAG_EN_SHIFT 8
1446#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX1_FLAG (0x1<<9)
1447#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX1_FLAG_SHIFT 9
1448#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SET_RTO_CF (0x3<<10)
1449#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SET_RTO_CF_SHIFT 10
1450#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TS_TO_ECHO_UPDATED_CF (0x3<<12)
1451#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TS_TO_ECHO_UPDATED_CF_SHIFT 12
1452#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TX_DEST_UPDATED_CF (0x3<<14)
1453#define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TX_DEST_UPDATED_CF_SHIFT 14
1454        u8 __tx_dest;
1455        u8 __agg_val8_th;
1456#endif
1457        u32 __sq_base_addr_lo;
1458        u32 __sq_base_addr_hi;
1459        u32 __xfrq_base_addr_lo;
1460        u32 __xfrq_base_addr_hi;
1461#if defined(__BIG_ENDIAN)
1462        u16 __xfrq_cons;
1463        u16 __xfrq_prod;
1464#elif defined(__LITTLE_ENDIAN)
1465        u16 __xfrq_prod;
1466        u16 __xfrq_cons;
1467#endif
1468#if defined(__BIG_ENDIAN)
1469        u8 __tcp_agg_vars5;
1470        u8 __tcp_agg_vars4;
1471        u8 __tcp_agg_vars3;
1472        u8 __reserved_force_pure_ack_cnt;
1473#elif defined(__LITTLE_ENDIAN)
1474        u8 __reserved_force_pure_ack_cnt;
1475        u8 __tcp_agg_vars3;
1476        u8 __tcp_agg_vars4;
1477        u8 __tcp_agg_vars5;
1478#endif
1479        u32 __tcp_agg_vars6;
1480#if defined(__BIG_ENDIAN)
1481        u16 __agg_misc6;
1482        u16 __tcp_agg_vars7;
1483#elif defined(__LITTLE_ENDIAN)
1484        u16 __tcp_agg_vars7;
1485        u16 __agg_misc6;
1486#endif
1487        u32 __agg_val10;
1488        u32 __agg_val10_th;
1489#if defined(__BIG_ENDIAN)
1490        u16 __reserved3;
1491        u8 __reserved2;
1492        u8 __da_only_cnt;
1493#elif defined(__LITTLE_ENDIAN)
1494        u8 __da_only_cnt;
1495        u8 __reserved2;
1496        u16 __reserved3;
1497#endif
1498};
1499
1500/*
1501 * The fcoe aggregative context of Xstorm
1502 */
1503struct xstorm_fcoe_ag_context {
1504#if defined(__BIG_ENDIAN)
1505        u16 agg_val1;
1506        u8 agg_vars1;
1507#define __XSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
1508#define __XSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
1509#define __XSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
1510#define __XSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
1511#define __XSTORM_FCOE_AG_CONTEXT_RESERVED51 (0x1<<2)
1512#define __XSTORM_FCOE_AG_CONTEXT_RESERVED51_SHIFT 2
1513#define __XSTORM_FCOE_AG_CONTEXT_RESERVED52 (0x1<<3)
1514#define __XSTORM_FCOE_AG_CONTEXT_RESERVED52_SHIFT 3
1515#define __XSTORM_FCOE_AG_CONTEXT_MORE_TO_SEND_EN (0x1<<4)
1516#define __XSTORM_FCOE_AG_CONTEXT_MORE_TO_SEND_EN_SHIFT 4
1517#define XSTORM_FCOE_AG_CONTEXT_NAGLE_EN (0x1<<5)
1518#define XSTORM_FCOE_AG_CONTEXT_NAGLE_EN_SHIFT 5
1519#define __XSTORM_FCOE_AG_CONTEXT_DQ_SPARE_FLAG (0x1<<6)
1520#define __XSTORM_FCOE_AG_CONTEXT_DQ_SPARE_FLAG_SHIFT 6
1521#define __XSTORM_FCOE_AG_CONTEXT_RESERVED_UNA_GT_NXT_EN (0x1<<7)
1522#define __XSTORM_FCOE_AG_CONTEXT_RESERVED_UNA_GT_NXT_EN_SHIFT 7
1523        u8 __state;
1524#elif defined(__LITTLE_ENDIAN)
1525        u8 __state;
1526        u8 agg_vars1;
1527#define __XSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
1528#define __XSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
1529#define __XSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
1530#define __XSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
1531#define __XSTORM_FCOE_AG_CONTEXT_RESERVED51 (0x1<<2)
1532#define __XSTORM_FCOE_AG_CONTEXT_RESERVED51_SHIFT 2
1533#define __XSTORM_FCOE_AG_CONTEXT_RESERVED52 (0x1<<3)
1534#define __XSTORM_FCOE_AG_CONTEXT_RESERVED52_SHIFT 3
1535#define __XSTORM_FCOE_AG_CONTEXT_MORE_TO_SEND_EN (0x1<<4)
1536#define __XSTORM_FCOE_AG_CONTEXT_MORE_TO_SEND_EN_SHIFT 4
1537#define XSTORM_FCOE_AG_CONTEXT_NAGLE_EN (0x1<<5)
1538#define XSTORM_FCOE_AG_CONTEXT_NAGLE_EN_SHIFT 5
1539#define __XSTORM_FCOE_AG_CONTEXT_DQ_SPARE_FLAG (0x1<<6)
1540#define __XSTORM_FCOE_AG_CONTEXT_DQ_SPARE_FLAG_SHIFT 6
1541#define __XSTORM_FCOE_AG_CONTEXT_RESERVED_UNA_GT_NXT_EN (0x1<<7)
1542#define __XSTORM_FCOE_AG_CONTEXT_RESERVED_UNA_GT_NXT_EN_SHIFT 7
1543        u16 agg_val1;
1544#endif
1545#if defined(__BIG_ENDIAN)
1546        u8 cdu_reserved;
1547        u8 __agg_vars4;
1548        u8 agg_vars3;
1549#define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM2 (0x3F<<0)
1550#define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM2_SHIFT 0
1551#define __XSTORM_FCOE_AG_CONTEXT_AUX19_CF (0x3<<6)
1552#define __XSTORM_FCOE_AG_CONTEXT_AUX19_CF_SHIFT 6
1553        u8 agg_vars2;
1554#define __XSTORM_FCOE_AG_CONTEXT_DQ_CF (0x3<<0)
1555#define __XSTORM_FCOE_AG_CONTEXT_DQ_CF_SHIFT 0
1556#define __XSTORM_FCOE_AG_CONTEXT_DQ_SPARE_FLAG_EN (0x1<<2)
1557#define __XSTORM_FCOE_AG_CONTEXT_DQ_SPARE_FLAG_EN_SHIFT 2
1558#define __XSTORM_FCOE_AG_CONTEXT_AUX8_FLAG (0x1<<3)
1559#define __XSTORM_FCOE_AG_CONTEXT_AUX8_FLAG_SHIFT 3
1560#define __XSTORM_FCOE_AG_CONTEXT_AUX9_FLAG (0x1<<4)
1561#define __XSTORM_FCOE_AG_CONTEXT_AUX9_FLAG_SHIFT 4
1562#define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE1 (0x3<<5)
1563#define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE1_SHIFT 5
1564#define __XSTORM_FCOE_AG_CONTEXT_DQ_CF_EN (0x1<<7)
1565#define __XSTORM_FCOE_AG_CONTEXT_DQ_CF_EN_SHIFT 7
1566#elif defined(__LITTLE_ENDIAN)
1567        u8 agg_vars2;
1568#define __XSTORM_FCOE_AG_CONTEXT_DQ_CF (0x3<<0)
1569#define __XSTORM_FCOE_AG_CONTEXT_DQ_CF_SHIFT 0
1570#define __XSTORM_FCOE_AG_CONTEXT_DQ_SPARE_FLAG_EN (0x1<<2)
1571#define __XSTORM_FCOE_AG_CONTEXT_DQ_SPARE_FLAG_EN_SHIFT 2
1572#define __XSTORM_FCOE_AG_CONTEXT_AUX8_FLAG (0x1<<3)
1573#define __XSTORM_FCOE_AG_CONTEXT_AUX8_FLAG_SHIFT 3
1574#define __XSTORM_FCOE_AG_CONTEXT_AUX9_FLAG (0x1<<4)
1575#define __XSTORM_FCOE_AG_CONTEXT_AUX9_FLAG_SHIFT 4
1576#define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE1 (0x3<<5)
1577#define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE1_SHIFT 5
1578#define __XSTORM_FCOE_AG_CONTEXT_DQ_CF_EN (0x1<<7)
1579#define __XSTORM_FCOE_AG_CONTEXT_DQ_CF_EN_SHIFT 7
1580        u8 agg_vars3;
1581#define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM2 (0x3F<<0)
1582#define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM2_SHIFT 0
1583#define __XSTORM_FCOE_AG_CONTEXT_AUX19_CF (0x3<<6)
1584#define __XSTORM_FCOE_AG_CONTEXT_AUX19_CF_SHIFT 6
1585        u8 __agg_vars4;
1586        u8 cdu_reserved;
1587#endif
1588        u32 more_to_send;
1589#if defined(__BIG_ENDIAN)
1590        u16 agg_vars5;
1591#define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE5 (0x3<<0)
1592#define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE5_SHIFT 0
1593#define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM0 (0x3F<<2)
1594#define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM0_SHIFT 2
1595#define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM1 (0x3F<<8)
1596#define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM1_SHIFT 8
1597#define __XSTORM_FCOE_AG_CONTEXT_CONFQ_DEC_RULE (0x3<<14)
1598#define __XSTORM_FCOE_AG_CONTEXT_CONFQ_DEC_RULE_SHIFT 14
1599        u16 sq_cons;
1600#elif defined(__LITTLE_ENDIAN)
1601        u16 sq_cons;
1602        u16 agg_vars5;
1603#define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE5 (0x3<<0)
1604#define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE5_SHIFT 0
1605#define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM0 (0x3F<<2)
1606#define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM0_SHIFT 2
1607#define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM1 (0x3F<<8)
1608#define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM1_SHIFT 8
1609#define __XSTORM_FCOE_AG_CONTEXT_CONFQ_DEC_RULE (0x3<<14)
1610#define __XSTORM_FCOE_AG_CONTEXT_CONFQ_DEC_RULE_SHIFT 14
1611#endif
1612        struct xstorm_fcoe_extra_ag_context_section __extra_section;
1613#if defined(__BIG_ENDIAN)
1614        u16 agg_vars7;
1615#define __XSTORM_FCOE_AG_CONTEXT_AGG_VAL11_DECISION_RULE (0x7<<0)
1616#define __XSTORM_FCOE_AG_CONTEXT_AGG_VAL11_DECISION_RULE_SHIFT 0
1617#define __XSTORM_FCOE_AG_CONTEXT_AUX13_FLAG (0x1<<3)
1618#define __XSTORM_FCOE_AG_CONTEXT_AUX13_FLAG_SHIFT 3
1619#define __XSTORM_FCOE_AG_CONTEXT_QUEUE0_CF (0x3<<4)
1620#define __XSTORM_FCOE_AG_CONTEXT_QUEUE0_CF_SHIFT 4
1621#define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE3 (0x3<<6)
1622#define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE3_SHIFT 6
1623#define XSTORM_FCOE_AG_CONTEXT_AUX1_CF (0x3<<8)
1624#define XSTORM_FCOE_AG_CONTEXT_AUX1_CF_SHIFT 8
1625#define __XSTORM_FCOE_AG_CONTEXT_RESERVED62 (0x1<<10)
1626#define __XSTORM_FCOE_AG_CONTEXT_RESERVED62_SHIFT 10
1627#define __XSTORM_FCOE_AG_CONTEXT_AUX1_CF_EN (0x1<<11)
1628#define __XSTORM_FCOE_AG_CONTEXT_AUX1_CF_EN_SHIFT 11
1629#define __XSTORM_FCOE_AG_CONTEXT_AUX10_FLAG (0x1<<12)
1630#define __XSTORM_FCOE_AG_CONTEXT_AUX10_FLAG_SHIFT 12
1631#define __XSTORM_FCOE_AG_CONTEXT_AUX11_FLAG (0x1<<13)
1632#define __XSTORM_FCOE_AG_CONTEXT_AUX11_FLAG_SHIFT 13
1633#define __XSTORM_FCOE_AG_CONTEXT_AUX12_FLAG (0x1<<14)
1634#define __XSTORM_FCOE_AG_CONTEXT_AUX12_FLAG_SHIFT 14
1635#define __XSTORM_FCOE_AG_CONTEXT_AUX2_FLAG (0x1<<15)
1636#define __XSTORM_FCOE_AG_CONTEXT_AUX2_FLAG_SHIFT 15
1637        u8 agg_val3_th;
1638        u8 agg_vars6;
1639#define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE6 (0x7<<0)
1640#define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE6_SHIFT 0
1641#define __XSTORM_FCOE_AG_CONTEXT_XFRQ_DEC_RULE (0x7<<3)
1642#define __XSTORM_FCOE_AG_CONTEXT_XFRQ_DEC_RULE_SHIFT 3
1643#define __XSTORM_FCOE_AG_CONTEXT_SQ_DEC_RULE (0x3<<6)
1644#define __XSTORM_FCOE_AG_CONTEXT_SQ_DEC_RULE_SHIFT 6
1645#elif defined(__LITTLE_ENDIAN)
1646        u8 agg_vars6;
1647#define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE6 (0x7<<0)
1648#define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE6_SHIFT 0
1649#define __XSTORM_FCOE_AG_CONTEXT_XFRQ_DEC_RULE (0x7<<3)
1650#define __XSTORM_FCOE_AG_CONTEXT_XFRQ_DEC_RULE_SHIFT 3
1651#define __XSTORM_FCOE_AG_CONTEXT_SQ_DEC_RULE (0x3<<6)
1652#define __XSTORM_FCOE_AG_CONTEXT_SQ_DEC_RULE_SHIFT 6
1653        u8 agg_val3_th;
1654        u16 agg_vars7;
1655#define __XSTORM_FCOE_AG_CONTEXT_AGG_VAL11_DECISION_RULE (0x7<<0)
1656#define __XSTORM_FCOE_AG_CONTEXT_AGG_VAL11_DECISION_RULE_SHIFT 0
1657#define __XSTORM_FCOE_AG_CONTEXT_AUX13_FLAG (0x1<<3)
1658#define __XSTORM_FCOE_AG_CONTEXT_AUX13_FLAG_SHIFT 3
1659#define __XSTORM_FCOE_AG_CONTEXT_QUEUE0_CF (0x3<<4)
1660#define __XSTORM_FCOE_AG_CONTEXT_QUEUE0_CF_SHIFT 4
1661#define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE3 (0x3<<6)
1662#define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE3_SHIFT 6
1663#define XSTORM_FCOE_AG_CONTEXT_AUX1_CF (0x3<<8)
1664#define XSTORM_FCOE_AG_CONTEXT_AUX1_CF_SHIFT 8
1665#define __XSTORM_FCOE_AG_CONTEXT_RESERVED62 (0x1<<10)
1666#define __XSTORM_FCOE_AG_CONTEXT_RESERVED62_SHIFT 10
1667#define __XSTORM_FCOE_AG_CONTEXT_AUX1_CF_EN (0x1<<11)
1668#define __XSTORM_FCOE_AG_CONTEXT_AUX1_CF_EN_SHIFT 11
1669#define __XSTORM_FCOE_AG_CONTEXT_AUX10_FLAG (0x1<<12)
1670#define __XSTORM_FCOE_AG_CONTEXT_AUX10_FLAG_SHIFT 12
1671#define __XSTORM_FCOE_AG_CONTEXT_AUX11_FLAG (0x1<<13)
1672#define __XSTORM_FCOE_AG_CONTEXT_AUX11_FLAG_SHIFT 13
1673#define __XSTORM_FCOE_AG_CONTEXT_AUX12_FLAG (0x1<<14)
1674#define __XSTORM_FCOE_AG_CONTEXT_AUX12_FLAG_SHIFT 14
1675#define __XSTORM_FCOE_AG_CONTEXT_AUX2_FLAG (0x1<<15)
1676#define __XSTORM_FCOE_AG_CONTEXT_AUX2_FLAG_SHIFT 15
1677#endif
1678#if defined(__BIG_ENDIAN)
1679        u16 __agg_val11_th;
1680        u16 __agg_val11;
1681#elif defined(__LITTLE_ENDIAN)
1682        u16 __agg_val11;
1683        u16 __agg_val11_th;
1684#endif
1685#if defined(__BIG_ENDIAN)
1686        u8 __reserved1;
1687        u8 __agg_val6_th;
1688        u16 __agg_val9;
1689#elif defined(__LITTLE_ENDIAN)
1690        u16 __agg_val9;
1691        u8 __agg_val6_th;
1692        u8 __reserved1;
1693#endif
1694#if defined(__BIG_ENDIAN)
1695        u16 confq_cons;
1696        u16 confq_prod;
1697#elif defined(__LITTLE_ENDIAN)
1698        u16 confq_prod;
1699        u16 confq_cons;
1700#endif
1701        u32 agg_vars8;
1702#define XSTORM_FCOE_AG_CONTEXT_AGG_MISC2 (0xFFFFFF<<0)
1703#define XSTORM_FCOE_AG_CONTEXT_AGG_MISC2_SHIFT 0
1704#define XSTORM_FCOE_AG_CONTEXT_AGG_MISC3 (0xFF<<24)
1705#define XSTORM_FCOE_AG_CONTEXT_AGG_MISC3_SHIFT 24
1706#if defined(__BIG_ENDIAN)
1707        u16 agg_misc0;
1708        u16 sq_prod;
1709#elif defined(__LITTLE_ENDIAN)
1710        u16 sq_prod;
1711        u16 agg_misc0;
1712#endif
1713#if defined(__BIG_ENDIAN)
1714        u8 agg_val3;
1715        u8 agg_val6;
1716        u8 agg_val5_th;
1717        u8 agg_val5;
1718#elif defined(__LITTLE_ENDIAN)
1719        u8 agg_val5;
1720        u8 agg_val5_th;
1721        u8 agg_val6;
1722        u8 agg_val3;
1723#endif
1724#if defined(__BIG_ENDIAN)
1725        u16 __agg_misc1;
1726        u16 agg_limit1;
1727#elif defined(__LITTLE_ENDIAN)
1728        u16 agg_limit1;
1729        u16 __agg_misc1;
1730#endif
1731        u32 completion_seq;
1732        u32 confq_pbl_base_lo;
1733        u32 confq_pbl_base_hi;
1734};
1735
1736
1737
1738/*
1739 * The tcp aggregative context section of Xstorm
1740 */
1741struct xstorm_tcp_tcp_ag_context_section {
1742#if defined(__BIG_ENDIAN)
1743        u8 tcp_agg_vars1;
1744#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SET_DA_TIMER_CF (0x3<<0)
1745#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SET_DA_TIMER_CF_SHIFT 0
1746#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED (0x3<<2)
1747#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED_SHIFT 2
1748#define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF (0x3<<4)
1749#define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_SHIFT 4
1750#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_CLEAR_DA_TIMER_EN (0x1<<6)
1751#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_CLEAR_DA_TIMER_EN_SHIFT 6
1752#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_EXPIRATION_FLAG (0x1<<7)
1753#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_EXPIRATION_FLAG_SHIFT 7
1754        u8 __da_cnt;
1755        u16 mss;
1756#elif defined(__LITTLE_ENDIAN)
1757        u16 mss;
1758        u8 __da_cnt;
1759        u8 tcp_agg_vars1;
1760#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SET_DA_TIMER_CF (0x3<<0)
1761#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SET_DA_TIMER_CF_SHIFT 0
1762#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED (0x3<<2)
1763#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED_SHIFT 2
1764#define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF (0x3<<4)
1765#define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_SHIFT 4
1766#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_CLEAR_DA_TIMER_EN (0x1<<6)
1767#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_CLEAR_DA_TIMER_EN_SHIFT 6
1768#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_EXPIRATION_FLAG (0x1<<7)
1769#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_EXPIRATION_FLAG_SHIFT 7
1770#endif
1771        u32 snd_nxt;
1772        u32 tx_wnd;
1773        u32 snd_una;
1774        u32 local_adv_wnd;
1775#if defined(__BIG_ENDIAN)
1776        u8 __agg_val8_th;
1777        u8 __tx_dest;
1778        u16 tcp_agg_vars2;
1779#define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG (0x1<<0)
1780#define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG_SHIFT 0
1781#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_UNBLOCKED (0x1<<1)
1782#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_UNBLOCKED_SHIFT 1
1783#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_TIMER_ACTIVE (0x1<<2)
1784#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_TIMER_ACTIVE_SHIFT 2
1785#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX3_FLAG (0x1<<3)
1786#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX3_FLAG_SHIFT 3
1787#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX4_FLAG (0x1<<4)
1788#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX4_FLAG_SHIFT 4
1789#define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_ENABLE (0x1<<5)
1790#define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_ENABLE_SHIFT 5
1791#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED_EN (0x1<<6)
1792#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED_EN_SHIFT 6
1793#define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_EN (0x1<<7)
1794#define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_EN_SHIFT 7
1795#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG_EN (0x1<<8)
1796#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG_EN_SHIFT 8
1797#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_FLAG (0x1<<9)
1798#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_FLAG_SHIFT 9
1799#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SET_RTO_CF (0x3<<10)
1800#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SET_RTO_CF_SHIFT 10
1801#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TS_TO_ECHO_UPDATED_CF (0x3<<12)
1802#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TS_TO_ECHO_UPDATED_CF_SHIFT 12
1803#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_DEST_UPDATED_CF (0x3<<14)
1804#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_DEST_UPDATED_CF_SHIFT 14
1805#elif defined(__LITTLE_ENDIAN)
1806        u16 tcp_agg_vars2;
1807#define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG (0x1<<0)
1808#define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG_SHIFT 0
1809#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_UNBLOCKED (0x1<<1)
1810#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_UNBLOCKED_SHIFT 1
1811#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_TIMER_ACTIVE (0x1<<2)
1812#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_TIMER_ACTIVE_SHIFT 2
1813#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX3_FLAG (0x1<<3)
1814#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX3_FLAG_SHIFT 3
1815#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX4_FLAG (0x1<<4)
1816#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX4_FLAG_SHIFT 4
1817#define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_ENABLE (0x1<<5)
1818#define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_ENABLE_SHIFT 5
1819#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED_EN (0x1<<6)
1820#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED_EN_SHIFT 6
1821#define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_EN (0x1<<7)
1822#define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_EN_SHIFT 7
1823#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG_EN (0x1<<8)
1824#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG_EN_SHIFT 8
1825#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_FLAG (0x1<<9)
1826#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_FLAG_SHIFT 9
1827#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SET_RTO_CF (0x3<<10)
1828#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SET_RTO_CF_SHIFT 10
1829#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TS_TO_ECHO_UPDATED_CF (0x3<<12)
1830#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TS_TO_ECHO_UPDATED_CF_SHIFT 12
1831#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_DEST_UPDATED_CF (0x3<<14)
1832#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_DEST_UPDATED_CF_SHIFT 14
1833        u8 __tx_dest;
1834        u8 __agg_val8_th;
1835#endif
1836        u32 ack_to_far_end;
1837        u32 rto_timer;
1838        u32 ka_timer;
1839        u32 ts_to_echo;
1840#if defined(__BIG_ENDIAN)
1841        u16 __agg_val7_th;
1842        u16 __agg_val7;
1843#elif defined(__LITTLE_ENDIAN)
1844        u16 __agg_val7;
1845        u16 __agg_val7_th;
1846#endif
1847#if defined(__BIG_ENDIAN)
1848        u8 __tcp_agg_vars5;
1849        u8 __tcp_agg_vars4;
1850        u8 __tcp_agg_vars3;
1851        u8 __force_pure_ack_cnt;
1852#elif defined(__LITTLE_ENDIAN)
1853        u8 __force_pure_ack_cnt;
1854        u8 __tcp_agg_vars3;
1855        u8 __tcp_agg_vars4;
1856        u8 __tcp_agg_vars5;
1857#endif
1858        u32 tcp_agg_vars6;
1859#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TS_TO_ECHO_CF_EN (0x1<<0)
1860#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TS_TO_ECHO_CF_EN_SHIFT 0
1861#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_DEST_UPDATED_CF_EN (0x1<<1)
1862#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_DEST_UPDATED_CF_EN_SHIFT 1
1863#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX9_CF_EN (0x1<<2)
1864#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX9_CF_EN_SHIFT 2
1865#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX10_CF_EN (0x1<<3)
1866#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX10_CF_EN_SHIFT 3
1867#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX6_FLAG (0x1<<4)
1868#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX6_FLAG_SHIFT 4
1869#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX7_FLAG (0x1<<5)
1870#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX7_FLAG_SHIFT 5
1871#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX5_CF (0x3<<6)
1872#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX5_CF_SHIFT 6
1873#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX9_CF (0x3<<8)
1874#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX9_CF_SHIFT 8
1875#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX10_CF (0x3<<10)
1876#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX10_CF_SHIFT 10
1877#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX11_CF (0x3<<12)
1878#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX11_CF_SHIFT 12
1879#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX12_CF (0x3<<14)
1880#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX12_CF_SHIFT 14
1881#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX13_CF (0x3<<16)
1882#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX13_CF_SHIFT 16
1883#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX14_CF (0x3<<18)
1884#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX14_CF_SHIFT 18
1885#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX15_CF (0x3<<20)
1886#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX15_CF_SHIFT 20
1887#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX16_CF (0x3<<22)
1888#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX16_CF_SHIFT 22
1889#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX17_CF (0x3<<24)
1890#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX17_CF_SHIFT 24
1891#define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ECE_FLAG (0x1<<26)
1892#define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ECE_FLAG_SHIFT 26
1893#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_RESERVED71 (0x1<<27)
1894#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_RESERVED71_SHIFT 27
1895#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_FORCE_PURE_ACK_CNT_DIRTY (0x1<<28)
1896#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_FORCE_PURE_ACK_CNT_DIRTY_SHIFT 28
1897#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TCP_AUTO_STOP_FLAG (0x1<<29)
1898#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TCP_AUTO_STOP_FLAG_SHIFT 29
1899#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DO_TS_UPDATE_FLAG (0x1<<30)
1900#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DO_TS_UPDATE_FLAG_SHIFT 30
1901#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_CANCEL_RETRANSMIT_FLAG (0x1<<31)
1902#define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_CANCEL_RETRANSMIT_FLAG_SHIFT 31
1903#if defined(__BIG_ENDIAN)
1904        u16 __agg_misc6;
1905        u16 __tcp_agg_vars7;
1906#elif defined(__LITTLE_ENDIAN)
1907        u16 __tcp_agg_vars7;
1908        u16 __agg_misc6;
1909#endif
1910        u32 __agg_val10;
1911        u32 __agg_val10_th;
1912#if defined(__BIG_ENDIAN)
1913        u16 __reserved3;
1914        u8 __reserved2;
1915        u8 __da_only_cnt;
1916#elif defined(__LITTLE_ENDIAN)
1917        u8 __da_only_cnt;
1918        u8 __reserved2;
1919        u16 __reserved3;
1920#endif
1921};
1922
1923/*
1924 * The iscsi aggregative context of Xstorm
1925 */
1926struct xstorm_iscsi_ag_context {
1927#if defined(__BIG_ENDIAN)
1928        u16 agg_val1;
1929        u8 agg_vars1;
1930#define __XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
1931#define __XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
1932#define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
1933#define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
1934#define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
1935#define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
1936#define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
1937#define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
1938#define __XSTORM_ISCSI_AG_CONTEXT_MORE_TO_SEND_EN (0x1<<4)
1939#define __XSTORM_ISCSI_AG_CONTEXT_MORE_TO_SEND_EN_SHIFT 4
1940#define XSTORM_ISCSI_AG_CONTEXT_NAGLE_EN (0x1<<5)
1941#define XSTORM_ISCSI_AG_CONTEXT_NAGLE_EN_SHIFT 5
1942#define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG (0x1<<6)
1943#define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG_SHIFT 6
1944#define __XSTORM_ISCSI_AG_CONTEXT_UNA_GT_NXT_EN (0x1<<7)
1945#define __XSTORM_ISCSI_AG_CONTEXT_UNA_GT_NXT_EN_SHIFT 7
1946        u8 state;
1947#elif defined(__LITTLE_ENDIAN)
1948        u8 state;
1949        u8 agg_vars1;
1950#define __XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
1951#define __XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
1952#define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
1953#define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
1954#define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
1955#define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
1956#define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
1957#define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
1958#define __XSTORM_ISCSI_AG_CONTEXT_MORE_TO_SEND_EN (0x1<<4)
1959#define __XSTORM_ISCSI_AG_CONTEXT_MORE_TO_SEND_EN_SHIFT 4
1960#define XSTORM_ISCSI_AG_CONTEXT_NAGLE_EN (0x1<<5)
1961#define XSTORM_ISCSI_AG_CONTEXT_NAGLE_EN_SHIFT 5
1962#define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG (0x1<<6)
1963#define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG_SHIFT 6
1964#define __XSTORM_ISCSI_AG_CONTEXT_UNA_GT_NXT_EN (0x1<<7)
1965#define __XSTORM_ISCSI_AG_CONTEXT_UNA_GT_NXT_EN_SHIFT 7
1966        u16 agg_val1;
1967#endif
1968#if defined(__BIG_ENDIAN)
1969        u8 cdu_reserved;
1970        u8 __agg_vars4;
1971        u8 agg_vars3;
1972#define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM2 (0x3F<<0)
1973#define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM2_SHIFT 0
1974#define __XSTORM_ISCSI_AG_CONTEXT_RX_TS_EN_CF (0x3<<6)
1975#define __XSTORM_ISCSI_AG_CONTEXT_RX_TS_EN_CF_SHIFT 6
1976        u8 agg_vars2;
1977#define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF (0x3<<0)
1978#define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF_SHIFT 0
1979#define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG_EN (0x1<<2)
1980#define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG_EN_SHIFT 2
1981#define __XSTORM_ISCSI_AG_CONTEXT_AUX8_FLAG (0x1<<3)
1982#define __XSTORM_ISCSI_AG_CONTEXT_AUX8_FLAG_SHIFT 3
1983#define __XSTORM_ISCSI_AG_CONTEXT_AUX9_FLAG (0x1<<4)
1984#define __XSTORM_ISCSI_AG_CONTEXT_AUX9_FLAG_SHIFT 4
1985#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE1 (0x3<<5)
1986#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE1_SHIFT 5
1987#define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF_EN (0x1<<7)
1988#define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF_EN_SHIFT 7
1989#elif defined(__LITTLE_ENDIAN)
1990        u8 agg_vars2;
1991#define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF (0x3<<0)
1992#define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF_SHIFT 0
1993#define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG_EN (0x1<<2)
1994#define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG_EN_SHIFT 2
1995#define __XSTORM_ISCSI_AG_CONTEXT_AUX8_FLAG (0x1<<3)
1996#define __XSTORM_ISCSI_AG_CONTEXT_AUX8_FLAG_SHIFT 3
1997#define __XSTORM_ISCSI_AG_CONTEXT_AUX9_FLAG (0x1<<4)
1998#define __XSTORM_ISCSI_AG_CONTEXT_AUX9_FLAG_SHIFT 4
1999#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE1 (0x3<<5)
2000#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE1_SHIFT 5
2001#define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF_EN (0x1<<7)
2002#define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF_EN_SHIFT 7
2003        u8 agg_vars3;
2004#define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM2 (0x3F<<0)
2005#define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM2_SHIFT 0
2006#define __XSTORM_ISCSI_AG_CONTEXT_RX_TS_EN_CF (0x3<<6)
2007#define __XSTORM_ISCSI_AG_CONTEXT_RX_TS_EN_CF_SHIFT 6
2008        u8 __agg_vars4;
2009        u8 cdu_reserved;
2010#endif
2011        u32 more_to_send;
2012#if defined(__BIG_ENDIAN)
2013        u16 agg_vars5;
2014#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE5 (0x3<<0)
2015#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE5_SHIFT 0
2016#define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM0 (0x3F<<2)
2017#define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM0_SHIFT 2
2018#define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM1 (0x3F<<8)
2019#define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM1_SHIFT 8
2020#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE2 (0x3<<14)
2021#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE2_SHIFT 14
2022        u16 sq_cons;
2023#elif defined(__LITTLE_ENDIAN)
2024        u16 sq_cons;
2025        u16 agg_vars5;
2026#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE5 (0x3<<0)
2027#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE5_SHIFT 0
2028#define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM0 (0x3F<<2)
2029#define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM0_SHIFT 2
2030#define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM1 (0x3F<<8)
2031#define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM1_SHIFT 8
2032#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE2 (0x3<<14)
2033#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE2_SHIFT 14
2034#endif
2035        struct xstorm_tcp_tcp_ag_context_section tcp;
2036#if defined(__BIG_ENDIAN)
2037        u16 agg_vars7;
2038#define __XSTORM_ISCSI_AG_CONTEXT_AGG_VAL11_DECISION_RULE (0x7<<0)
2039#define __XSTORM_ISCSI_AG_CONTEXT_AGG_VAL11_DECISION_RULE_SHIFT 0
2040#define __XSTORM_ISCSI_AG_CONTEXT_AUX13_FLAG (0x1<<3)
2041#define __XSTORM_ISCSI_AG_CONTEXT_AUX13_FLAG_SHIFT 3
2042#define __XSTORM_ISCSI_AG_CONTEXT_STORMS_SYNC_CF (0x3<<4)
2043#define __XSTORM_ISCSI_AG_CONTEXT_STORMS_SYNC_CF_SHIFT 4
2044#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE3 (0x3<<6)
2045#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE3_SHIFT 6
2046#define XSTORM_ISCSI_AG_CONTEXT_AUX1_CF (0x3<<8)
2047#define XSTORM_ISCSI_AG_CONTEXT_AUX1_CF_SHIFT 8
2048#define __XSTORM_ISCSI_AG_CONTEXT_COMPLETION_SEQ_DECISION_MASK (0x1<<10)
2049#define __XSTORM_ISCSI_AG_CONTEXT_COMPLETION_SEQ_DECISION_MASK_SHIFT 10
2050#define __XSTORM_ISCSI_AG_CONTEXT_AUX1_CF_EN (0x1<<11)
2051#define __XSTORM_ISCSI_AG_CONTEXT_AUX1_CF_EN_SHIFT 11
2052#define __XSTORM_ISCSI_AG_CONTEXT_AUX10_FLAG (0x1<<12)
2053#define __XSTORM_ISCSI_AG_CONTEXT_AUX10_FLAG_SHIFT 12
2054#define __XSTORM_ISCSI_AG_CONTEXT_AUX11_FLAG (0x1<<13)
2055#define __XSTORM_ISCSI_AG_CONTEXT_AUX11_FLAG_SHIFT 13
2056#define __XSTORM_ISCSI_AG_CONTEXT_AUX12_FLAG (0x1<<14)
2057#define __XSTORM_ISCSI_AG_CONTEXT_AUX12_FLAG_SHIFT 14
2058#define __XSTORM_ISCSI_AG_CONTEXT_RX_WND_SCL_EN (0x1<<15)
2059#define __XSTORM_ISCSI_AG_CONTEXT_RX_WND_SCL_EN_SHIFT 15
2060        u8 agg_val3_th;
2061        u8 agg_vars6;
2062#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE6 (0x7<<0)
2063#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE6_SHIFT 0
2064#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE7 (0x7<<3)
2065#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE7_SHIFT 3
2066#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE4 (0x3<<6)
2067#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE4_SHIFT 6
2068#elif defined(__LITTLE_ENDIAN)
2069        u8 agg_vars6;
2070#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE6 (0x7<<0)
2071#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE6_SHIFT 0
2072#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE7 (0x7<<3)
2073#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE7_SHIFT 3
2074#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE4 (0x3<<6)
2075#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE4_SHIFT 6
2076        u8 agg_val3_th;
2077        u16 agg_vars7;
2078#define __XSTORM_ISCSI_AG_CONTEXT_AGG_VAL11_DECISION_RULE (0x7<<0)
2079#define __XSTORM_ISCSI_AG_CONTEXT_AGG_VAL11_DECISION_RULE_SHIFT 0
2080#define __XSTORM_ISCSI_AG_CONTEXT_AUX13_FLAG (0x1<<3)
2081#define __XSTORM_ISCSI_AG_CONTEXT_AUX13_FLAG_SHIFT 3
2082#define __XSTORM_ISCSI_AG_CONTEXT_STORMS_SYNC_CF (0x3<<4)
2083#define __XSTORM_ISCSI_AG_CONTEXT_STORMS_SYNC_CF_SHIFT 4
2084#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE3 (0x3<<6)
2085#define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE3_SHIFT 6
2086#define XSTORM_ISCSI_AG_CONTEXT_AUX1_CF (0x3<<8)
2087#define XSTORM_ISCSI_AG_CONTEXT_AUX1_CF_SHIFT 8
2088#define __XSTORM_ISCSI_AG_CONTEXT_COMPLETION_SEQ_DECISION_MASK (0x1<<10)
2089#define __XSTORM_ISCSI_AG_CONTEXT_COMPLETION_SEQ_DECISION_MASK_SHIFT 10
2090#define __XSTORM_ISCSI_AG_CONTEXT_AUX1_CF_EN (0x1<<11)
2091#define __XSTORM_ISCSI_AG_CONTEXT_AUX1_CF_EN_SHIFT 11
2092#define __XSTORM_ISCSI_AG_CONTEXT_AUX10_FLAG (0x1<<12)
2093#define __XSTORM_ISCSI_AG_CONTEXT_AUX10_FLAG_SHIFT 12
2094#define __XSTORM_ISCSI_AG_CONTEXT_AUX11_FLAG (0x1<<13)
2095#define __XSTORM_ISCSI_AG_CONTEXT_AUX11_FLAG_SHIFT 13
2096#define __XSTORM_ISCSI_AG_CONTEXT_AUX12_FLAG (0x1<<14)
2097#define __XSTORM_ISCSI_AG_CONTEXT_AUX12_FLAG_SHIFT 14
2098#define __XSTORM_ISCSI_AG_CONTEXT_RX_WND_SCL_EN (0x1<<15)
2099#define __XSTORM_ISCSI_AG_CONTEXT_RX_WND_SCL_EN_SHIFT 15
2100#endif
2101#if defined(__BIG_ENDIAN)
2102        u16 __agg_val11_th;
2103        u16 __gen_data;
2104#elif defined(__LITTLE_ENDIAN)
2105        u16 __gen_data;
2106        u16 __agg_val11_th;
2107#endif
2108#if defined(__BIG_ENDIAN)
2109        u8 __reserved1;
2110        u8 __agg_val6_th;
2111        u16 __agg_val9;
2112#elif defined(__LITTLE_ENDIAN)
2113        u16 __agg_val9;
2114        u8 __agg_val6_th;
2115        u8 __reserved1;
2116#endif
2117#if defined(__BIG_ENDIAN)
2118        u16 hq_prod;
2119        u16 hq_cons;
2120#elif defined(__LITTLE_ENDIAN)
2121        u16 hq_cons;
2122        u16 hq_prod;
2123#endif
2124        u32 agg_vars8;
2125#define XSTORM_ISCSI_AG_CONTEXT_AGG_MISC2 (0xFFFFFF<<0)
2126#define XSTORM_ISCSI_AG_CONTEXT_AGG_MISC2_SHIFT 0
2127#define XSTORM_ISCSI_AG_CONTEXT_AGG_MISC3 (0xFF<<24)
2128#define XSTORM_ISCSI_AG_CONTEXT_AGG_MISC3_SHIFT 24
2129#if defined(__BIG_ENDIAN)
2130        u16 r2tq_prod;
2131        u16 sq_prod;
2132#elif defined(__LITTLE_ENDIAN)
2133        u16 sq_prod;
2134        u16 r2tq_prod;
2135#endif
2136#if defined(__BIG_ENDIAN)
2137        u8 agg_val3;
2138        u8 agg_val6;
2139        u8 agg_val5_th;
2140        u8 agg_val5;
2141#elif defined(__LITTLE_ENDIAN)
2142        u8 agg_val5;
2143        u8 agg_val5_th;
2144        u8 agg_val6;
2145        u8 agg_val3;
2146#endif
2147#if defined(__BIG_ENDIAN)
2148        u16 __agg_misc1;
2149        u16 agg_limit1;
2150#elif defined(__LITTLE_ENDIAN)
2151        u16 agg_limit1;
2152        u16 __agg_misc1;
2153#endif
2154        u32 hq_cons_tcp_seq;
2155        u32 exp_stat_sn;
2156        u32 rst_seq_num;
2157};
2158
2159
2160/*
2161 * The L5cm aggregative context of XStorm
2162 */
2163struct xstorm_l5cm_ag_context {
2164#if defined(__BIG_ENDIAN)
2165        u16 agg_val1;
2166        u8 agg_vars1;
2167#define __XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
2168#define __XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
2169#define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
2170#define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
2171#define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
2172#define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
2173#define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
2174#define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
2175#define __XSTORM_L5CM_AG_CONTEXT_MORE_TO_SEND_EN (0x1<<4)
2176#define __XSTORM_L5CM_AG_CONTEXT_MORE_TO_SEND_EN_SHIFT 4
2177#define XSTORM_L5CM_AG_CONTEXT_NAGLE_EN (0x1<<5)
2178#define XSTORM_L5CM_AG_CONTEXT_NAGLE_EN_SHIFT 5
2179#define __XSTORM_L5CM_AG_CONTEXT_DQ_SPARE_FLAG (0x1<<6)
2180#define __XSTORM_L5CM_AG_CONTEXT_DQ_SPARE_FLAG_SHIFT 6
2181#define __XSTORM_L5CM_AG_CONTEXT_UNA_GT_NXT_EN (0x1<<7)
2182#define __XSTORM_L5CM_AG_CONTEXT_UNA_GT_NXT_EN_SHIFT 7
2183        u8 state;
2184#elif defined(__LITTLE_ENDIAN)
2185        u8 state;
2186        u8 agg_vars1;
2187#define __XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
2188#define __XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
2189#define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
2190#define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
2191#define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
2192#define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
2193#define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
2194#define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
2195#define __XSTORM_L5CM_AG_CONTEXT_MORE_TO_SEND_EN (0x1<<4)
2196#define __XSTORM_L5CM_AG_CONTEXT_MORE_TO_SEND_EN_SHIFT 4
2197#define XSTORM_L5CM_AG_CONTEXT_NAGLE_EN (0x1<<5)
2198#define XSTORM_L5CM_AG_CONTEXT_NAGLE_EN_SHIFT 5
2199#define __XSTORM_L5CM_AG_CONTEXT_DQ_SPARE_FLAG (0x1<<6)
2200#define __XSTORM_L5CM_AG_CONTEXT_DQ_SPARE_FLAG_SHIFT 6
2201#define __XSTORM_L5CM_AG_CONTEXT_UNA_GT_NXT_EN (0x1<<7)
2202#define __XSTORM_L5CM_AG_CONTEXT_UNA_GT_NXT_EN_SHIFT 7
2203        u16 agg_val1;
2204#endif
2205#if defined(__BIG_ENDIAN)
2206        u8 cdu_reserved;
2207        u8 __agg_vars4;
2208        u8 agg_vars3;
2209#define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM2 (0x3F<<0)
2210#define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM2_SHIFT 0
2211#define __XSTORM_L5CM_AG_CONTEXT_RX_TS_EN_CF (0x3<<6)
2212#define __XSTORM_L5CM_AG_CONTEXT_RX_TS_EN_CF_SHIFT 6
2213        u8 agg_vars2;
2214#define XSTORM_L5CM_AG_CONTEXT_AUX4_CF (0x3<<0)
2215#define XSTORM_L5CM_AG_CONTEXT_AUX4_CF_SHIFT 0
2216#define __XSTORM_L5CM_AG_CONTEXT_DQ_SPARE_FLAG_EN (0x1<<2)
2217#define __XSTORM_L5CM_AG_CONTEXT_DQ_SPARE_FLAG_EN_SHIFT 2
2218#define __XSTORM_L5CM_AG_CONTEXT_AUX8_FLAG (0x1<<3)
2219#define __XSTORM_L5CM_AG_CONTEXT_AUX8_FLAG_SHIFT 3
2220#define __XSTORM_L5CM_AG_CONTEXT_AUX9_FLAG (0x1<<4)
2221#define __XSTORM_L5CM_AG_CONTEXT_AUX9_FLAG_SHIFT 4
2222#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE1 (0x3<<5)
2223#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE1_SHIFT 5
2224#define XSTORM_L5CM_AG_CONTEXT_AUX4_CF_EN (0x1<<7)
2225#define XSTORM_L5CM_AG_CONTEXT_AUX4_CF_EN_SHIFT 7
2226#elif defined(__LITTLE_ENDIAN)
2227        u8 agg_vars2;
2228#define XSTORM_L5CM_AG_CONTEXT_AUX4_CF (0x3<<0)
2229#define XSTORM_L5CM_AG_CONTEXT_AUX4_CF_SHIFT 0
2230#define __XSTORM_L5CM_AG_CONTEXT_DQ_SPARE_FLAG_EN (0x1<<2)
2231#define __XSTORM_L5CM_AG_CONTEXT_DQ_SPARE_FLAG_EN_SHIFT 2
2232#define __XSTORM_L5CM_AG_CONTEXT_AUX8_FLAG (0x1<<3)
2233#define __XSTORM_L5CM_AG_CONTEXT_AUX8_FLAG_SHIFT 3
2234#define __XSTORM_L5CM_AG_CONTEXT_AUX9_FLAG (0x1<<4)
2235#define __XSTORM_L5CM_AG_CONTEXT_AUX9_FLAG_SHIFT 4
2236#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE1 (0x3<<5)
2237#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE1_SHIFT 5
2238#define XSTORM_L5CM_AG_CONTEXT_AUX4_CF_EN (0x1<<7)
2239#define XSTORM_L5CM_AG_CONTEXT_AUX4_CF_EN_SHIFT 7
2240        u8 agg_vars3;
2241#define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM2 (0x3F<<0)
2242#define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM2_SHIFT 0
2243#define __XSTORM_L5CM_AG_CONTEXT_RX_TS_EN_CF (0x3<<6)
2244#define __XSTORM_L5CM_AG_CONTEXT_RX_TS_EN_CF_SHIFT 6
2245        u8 __agg_vars4;
2246        u8 cdu_reserved;
2247#endif
2248        u32 more_to_send;
2249#if defined(__BIG_ENDIAN)
2250        u16 agg_vars5;
2251#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE5 (0x3<<0)
2252#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE5_SHIFT 0
2253#define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM0 (0x3F<<2)
2254#define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM0_SHIFT 2
2255#define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM1 (0x3F<<8)
2256#define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM1_SHIFT 8
2257#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE2 (0x3<<14)
2258#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE2_SHIFT 14
2259        u16 agg_val4_th;
2260#elif defined(__LITTLE_ENDIAN)
2261        u16 agg_val4_th;
2262        u16 agg_vars5;
2263#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE5 (0x3<<0)
2264#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE5_SHIFT 0
2265#define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM0 (0x3F<<2)
2266#define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM0_SHIFT 2
2267#define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM1 (0x3F<<8)
2268#define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM1_SHIFT 8
2269#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE2 (0x3<<14)
2270#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE2_SHIFT 14
2271#endif
2272        struct xstorm_tcp_tcp_ag_context_section tcp;
2273#if defined(__BIG_ENDIAN)
2274        u16 agg_vars7;
2275#define __XSTORM_L5CM_AG_CONTEXT_AGG_VAL11_DECISION_RULE (0x7<<0)
2276#define __XSTORM_L5CM_AG_CONTEXT_AGG_VAL11_DECISION_RULE_SHIFT 0
2277#define __XSTORM_L5CM_AG_CONTEXT_AUX13_FLAG (0x1<<3)
2278#define __XSTORM_L5CM_AG_CONTEXT_AUX13_FLAG_SHIFT 3
2279#define __XSTORM_L5CM_AG_CONTEXT_STORMS_SYNC_CF (0x3<<4)
2280#define __XSTORM_L5CM_AG_CONTEXT_STORMS_SYNC_CF_SHIFT 4
2281#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE3 (0x3<<6)
2282#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE3_SHIFT 6
2283#define XSTORM_L5CM_AG_CONTEXT_AUX1_CF (0x3<<8)
2284#define XSTORM_L5CM_AG_CONTEXT_AUX1_CF_SHIFT 8
2285#define __XSTORM_L5CM_AG_CONTEXT_COMPLETION_SEQ_DECISION_MASK (0x1<<10)
2286#define __XSTORM_L5CM_AG_CONTEXT_COMPLETION_SEQ_DECISION_MASK_SHIFT 10
2287#define __XSTORM_L5CM_AG_CONTEXT_AUX1_CF_EN (0x1<<11)
2288#define __XSTORM_L5CM_AG_CONTEXT_AUX1_CF_EN_SHIFT 11
2289#define __XSTORM_L5CM_AG_CONTEXT_AUX10_FLAG (0x1<<12)
2290#define __XSTORM_L5CM_AG_CONTEXT_AUX10_FLAG_SHIFT 12
2291#define __XSTORM_L5CM_AG_CONTEXT_AUX11_FLAG (0x1<<13)
2292#define __XSTORM_L5CM_AG_CONTEXT_AUX11_FLAG_SHIFT 13
2293#define __XSTORM_L5CM_AG_CONTEXT_AUX12_FLAG (0x1<<14)
2294#define __XSTORM_L5CM_AG_CONTEXT_AUX12_FLAG_SHIFT 14
2295#define __XSTORM_L5CM_AG_CONTEXT_RX_WND_SCL_EN (0x1<<15)
2296#define __XSTORM_L5CM_AG_CONTEXT_RX_WND_SCL_EN_SHIFT 15
2297        u8 agg_val3_th;
2298        u8 agg_vars6;
2299#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE6 (0x7<<0)
2300#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE6_SHIFT 0
2301#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE7 (0x7<<3)
2302#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE7_SHIFT 3
2303#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE4 (0x3<<6)
2304#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE4_SHIFT 6
2305#elif defined(__LITTLE_ENDIAN)
2306        u8 agg_vars6;
2307#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE6 (0x7<<0)
2308#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE6_SHIFT 0
2309#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE7 (0x7<<3)
2310#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE7_SHIFT 3
2311#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE4 (0x3<<6)
2312#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE4_SHIFT 6
2313        u8 agg_val3_th;
2314        u16 agg_vars7;
2315#define __XSTORM_L5CM_AG_CONTEXT_AGG_VAL11_DECISION_RULE (0x7<<0)
2316#define __XSTORM_L5CM_AG_CONTEXT_AGG_VAL11_DECISION_RULE_SHIFT 0
2317#define __XSTORM_L5CM_AG_CONTEXT_AUX13_FLAG (0x1<<3)
2318#define __XSTORM_L5CM_AG_CONTEXT_AUX13_FLAG_SHIFT 3
2319#define __XSTORM_L5CM_AG_CONTEXT_STORMS_SYNC_CF (0x3<<4)
2320#define __XSTORM_L5CM_AG_CONTEXT_STORMS_SYNC_CF_SHIFT 4
2321#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE3 (0x3<<6)
2322#define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE3_SHIFT 6
2323#define XSTORM_L5CM_AG_CONTEXT_AUX1_CF (0x3<<8)
2324#define XSTORM_L5CM_AG_CONTEXT_AUX1_CF_SHIFT 8
2325#define __XSTORM_L5CM_AG_CONTEXT_COMPLETION_SEQ_DECISION_MASK (0x1<<10)
2326#define __XSTORM_L5CM_AG_CONTEXT_COMPLETION_SEQ_DECISION_MASK_SHIFT 10
2327#define __XSTORM_L5CM_AG_CONTEXT_AUX1_CF_EN (0x1<<11)
2328#define __XSTORM_L5CM_AG_CONTEXT_AUX1_CF_EN_SHIFT 11
2329#define __XSTORM_L5CM_AG_CONTEXT_AUX10_FLAG (0x1<<12)
2330#define __XSTORM_L5CM_AG_CONTEXT_AUX10_FLAG_SHIFT 12
2331#define __XSTORM_L5CM_AG_CONTEXT_AUX11_FLAG (0x1<<13)
2332#define __XSTORM_L5CM_AG_CONTEXT_AUX11_FLAG_SHIFT 13
2333#define __XSTORM_L5CM_AG_CONTEXT_AUX12_FLAG (0x1<<14)
2334#define __XSTORM_L5CM_AG_CONTEXT_AUX12_FLAG_SHIFT 14
2335#define __XSTORM_L5CM_AG_CONTEXT_RX_WND_SCL_EN (0x1<<15)
2336#define __XSTORM_L5CM_AG_CONTEXT_RX_WND_SCL_EN_SHIFT 15
2337#endif
2338#if defined(__BIG_ENDIAN)
2339        u16 __agg_val11_th;
2340        u16 __gen_data;
2341#elif defined(__LITTLE_ENDIAN)
2342        u16 __gen_data;
2343        u16 __agg_val11_th;
2344#endif
2345#if defined(__BIG_ENDIAN)
2346        u8 __reserved1;
2347        u8 __agg_val6_th;
2348        u16 __agg_val9;
2349#elif defined(__LITTLE_ENDIAN)
2350        u16 __agg_val9;
2351        u8 __agg_val6_th;
2352        u8 __reserved1;
2353#endif
2354#if defined(__BIG_ENDIAN)
2355        u16 agg_val2_th;
2356        u16 agg_val2;
2357#elif defined(__LITTLE_ENDIAN)
2358        u16 agg_val2;
2359        u16 agg_val2_th;
2360#endif
2361        u32 agg_vars8;
2362#define XSTORM_L5CM_AG_CONTEXT_AGG_MISC2 (0xFFFFFF<<0)
2363#define XSTORM_L5CM_AG_CONTEXT_AGG_MISC2_SHIFT 0
2364#define XSTORM_L5CM_AG_CONTEXT_AGG_MISC3 (0xFF<<24)
2365#define XSTORM_L5CM_AG_CONTEXT_AGG_MISC3_SHIFT 24
2366#if defined(__BIG_ENDIAN)
2367        u16 agg_misc0;
2368        u16 agg_val4;
2369#elif defined(__LITTLE_ENDIAN)
2370        u16 agg_val4;
2371        u16 agg_misc0;
2372#endif
2373#if defined(__BIG_ENDIAN)
2374        u8 agg_val3;
2375        u8 agg_val6;
2376        u8 agg_val5_th;
2377        u8 agg_val5;
2378#elif defined(__LITTLE_ENDIAN)
2379        u8 agg_val5;
2380        u8 agg_val5_th;
2381        u8 agg_val6;
2382        u8 agg_val3;
2383#endif
2384#if defined(__BIG_ENDIAN)
2385        u16 __agg_misc1;
2386        u16 agg_limit1;
2387#elif defined(__LITTLE_ENDIAN)
2388        u16 agg_limit1;
2389        u16 __agg_misc1;
2390#endif
2391        u32 completion_seq;
2392        u32 agg_misc4;
2393        u32 rst_seq_num;
2394};
2395
2396/*
2397 * ABTS info $$KEEP_ENDIANNESS$$
2398 */
2399struct fcoe_abts_info {
2400        __le16 aborted_task_id;
2401        __le16 reserved0;
2402        __le32 reserved1;
2403};
2404
2405
2406/*
2407 * Fixed size structure in order to plant it in Union structure
2408 * $$KEEP_ENDIANNESS$$
2409 */
2410struct fcoe_abts_rsp_union {
2411        u8 r_ctl;
2412        u8 rsrv[3];
2413        __le32 abts_rsp_payload[7];
2414};
2415
2416
2417/*
2418 * 4 regs size $$KEEP_ENDIANNESS$$
2419 */
2420struct fcoe_bd_ctx {
2421        __le32 buf_addr_hi;
2422        __le32 buf_addr_lo;
2423        __le16 buf_len;
2424        __le16 rsrv0;
2425        __le16 flags;
2426        __le16 rsrv1;
2427};
2428
2429
2430/*
2431 * FCoE cached sges context $$KEEP_ENDIANNESS$$
2432 */
2433struct fcoe_cached_sge_ctx {
2434        struct regpair cur_buf_addr;
2435        __le16 cur_buf_rem;
2436        __le16 second_buf_rem;
2437        struct regpair second_buf_addr;
2438};
2439
2440
2441/*
2442 * Cleanup info $$KEEP_ENDIANNESS$$
2443 */
2444struct fcoe_cleanup_info {
2445        __le16 cleaned_task_id;
2446        __le16 rolled_tx_seq_cnt;
2447        __le32 rolled_tx_data_offset;
2448};
2449
2450
2451/*
2452 * Fcp RSP flags $$KEEP_ENDIANNESS$$
2453 */
2454struct fcoe_fcp_rsp_flags {
2455        u8 flags;
2456#define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID (0x1<<0)
2457#define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID_SHIFT 0
2458#define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID (0x1<<1)
2459#define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID_SHIFT 1
2460#define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER (0x1<<2)
2461#define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER_SHIFT 2
2462#define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER (0x1<<3)
2463#define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER_SHIFT 3
2464#define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ (0x1<<4)
2465#define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ_SHIFT 4
2466#define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS (0x7<<5)
2467#define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS_SHIFT 5
2468};
2469
2470/*
2471 * Fcp RSP payload $$KEEP_ENDIANNESS$$
2472 */
2473struct fcoe_fcp_rsp_payload {
2474        struct regpair reserved0;
2475        __le32 fcp_resid;
2476        u8 scsi_status_code;
2477        struct fcoe_fcp_rsp_flags fcp_flags;
2478        __le16 retry_delay_timer;
2479        __le32 fcp_rsp_len;
2480        __le32 fcp_sns_len;
2481};
2482
2483/*
2484 * Fixed size structure in order to plant it in Union structure
2485 * $$KEEP_ENDIANNESS$$
2486 */
2487struct fcoe_fcp_rsp_union {
2488        struct fcoe_fcp_rsp_payload payload;
2489        struct regpair reserved0;
2490};
2491
2492/*
2493 * FC header $$KEEP_ENDIANNESS$$
2494 */
2495struct fcoe_fc_hdr {
2496        u8 s_id[3];
2497        u8 cs_ctl;
2498        u8 d_id[3];
2499        u8 r_ctl;
2500        __le16 seq_cnt;
2501        u8 df_ctl;
2502        u8 seq_id;
2503        u8 f_ctl[3];
2504        u8 type;
2505        __le32 parameters;
2506        __le16 rx_id;
2507        __le16 ox_id;
2508};
2509
2510/*
2511 * FC header union $$KEEP_ENDIANNESS$$
2512 */
2513struct fcoe_mp_rsp_union {
2514        struct fcoe_fc_hdr fc_hdr;
2515        __le32 mp_payload_len;
2516        __le32 rsrv;
2517};
2518
2519/*
2520 * Completion information $$KEEP_ENDIANNESS$$
2521 */
2522union fcoe_comp_flow_info {
2523        struct fcoe_fcp_rsp_union fcp_rsp;
2524        struct fcoe_abts_rsp_union abts_rsp;
2525        struct fcoe_mp_rsp_union mp_rsp;
2526        __le32 opaque[8];
2527};
2528
2529
2530/*
2531 * External ABTS info $$KEEP_ENDIANNESS$$
2532 */
2533struct fcoe_ext_abts_info {
2534        __le32 rsrv0[6];
2535        struct fcoe_abts_info ctx;
2536};
2537
2538
2539/*
2540 * External cleanup info $$KEEP_ENDIANNESS$$
2541 */
2542struct fcoe_ext_cleanup_info {
2543        __le32 rsrv0[6];
2544        struct fcoe_cleanup_info ctx;
2545};
2546
2547
2548/*
2549 * Fcoe FW Tx sequence context $$KEEP_ENDIANNESS$$
2550 */
2551struct fcoe_fw_tx_seq_ctx {
2552        __le32 data_offset;
2553        __le16 seq_cnt;
2554        __le16 rsrv0;
2555};
2556
2557/*
2558 * Fcoe external FW Tx sequence context $$KEEP_ENDIANNESS$$
2559 */
2560struct fcoe_ext_fw_tx_seq_ctx {
2561        __le32 rsrv0[6];
2562        struct fcoe_fw_tx_seq_ctx ctx;
2563};
2564
2565
2566/*
2567 * FCoE multiple sges context $$KEEP_ENDIANNESS$$
2568 */
2569struct fcoe_mul_sges_ctx {
2570        struct regpair cur_sge_addr;
2571        __le16 cur_sge_off;
2572        u8 cur_sge_idx;
2573        u8 sgl_size;
2574};
2575
2576/*
2577 * FCoE external multiple sges context $$KEEP_ENDIANNESS$$
2578 */
2579struct fcoe_ext_mul_sges_ctx {
2580        struct fcoe_mul_sges_ctx mul_sgl;
2581        struct regpair rsrv0;
2582};
2583
2584
2585/*
2586 * FCP CMD payload $$KEEP_ENDIANNESS$$
2587 */
2588struct fcoe_fcp_cmd_payload {
2589        __le32 opaque[8];
2590};
2591
2592
2593
2594
2595
2596/*
2597 * Fcp xfr rdy payload $$KEEP_ENDIANNESS$$
2598 */
2599struct fcoe_fcp_xfr_rdy_payload {
2600        __le32 burst_len;
2601        __le32 data_ro;
2602};
2603
2604
2605/*
2606 * FC frame $$KEEP_ENDIANNESS$$
2607 */
2608struct fcoe_fc_frame {
2609        struct fcoe_fc_hdr fc_hdr;
2610        __le32 reserved0[2];
2611};
2612
2613
2614
2615
2616/*
2617 * FCoE KCQ CQE parameters $$KEEP_ENDIANNESS$$
2618 */
2619union fcoe_kcqe_params {
2620        __le32 reserved0[4];
2621};
2622
2623/*
2624 * FCoE KCQ CQE $$KEEP_ENDIANNESS$$
2625 */
2626struct fcoe_kcqe {
2627        __le32 fcoe_conn_id;
2628        __le32 completion_status;
2629        __le32 fcoe_conn_context_id;
2630        union fcoe_kcqe_params params;
2631        __le16 qe_self_seq;
2632        u8 op_code;
2633        u8 flags;
2634#define FCOE_KCQE_RESERVED0 (0x7<<0)
2635#define FCOE_KCQE_RESERVED0_SHIFT 0
2636#define FCOE_KCQE_RAMROD_COMPLETION (0x1<<3)
2637#define FCOE_KCQE_RAMROD_COMPLETION_SHIFT 3
2638#define FCOE_KCQE_LAYER_CODE (0x7<<4)
2639#define FCOE_KCQE_LAYER_CODE_SHIFT 4
2640#define FCOE_KCQE_LINKED_WITH_NEXT (0x1<<7)
2641#define FCOE_KCQE_LINKED_WITH_NEXT_SHIFT 7
2642};
2643
2644
2645
2646/*
2647 * FCoE KWQE header $$KEEP_ENDIANNESS$$
2648 */
2649struct fcoe_kwqe_header {
2650        u8 op_code;
2651        u8 flags;
2652#define FCOE_KWQE_HEADER_RESERVED0 (0xF<<0)
2653#define FCOE_KWQE_HEADER_RESERVED0_SHIFT 0
2654#define FCOE_KWQE_HEADER_LAYER_CODE (0x7<<4)
2655#define FCOE_KWQE_HEADER_LAYER_CODE_SHIFT 4
2656#define FCOE_KWQE_HEADER_RESERVED1 (0x1<<7)
2657#define FCOE_KWQE_HEADER_RESERVED1_SHIFT 7
2658};
2659
2660/*
2661 * FCoE firmware init request 1 $$KEEP_ENDIANNESS$$
2662 */
2663struct fcoe_kwqe_init1 {
2664        __le16 num_tasks;
2665        struct fcoe_kwqe_header hdr;
2666        __le32 task_list_pbl_addr_lo;
2667        __le32 task_list_pbl_addr_hi;
2668        __le32 dummy_buffer_addr_lo;
2669        __le32 dummy_buffer_addr_hi;
2670        __le16 sq_num_wqes;
2671        __le16 rq_num_wqes;
2672        __le16 rq_buffer_log_size;
2673        __le16 cq_num_wqes;
2674        __le16 mtu;
2675        u8 num_sessions_log;
2676        u8 flags;
2677#define FCOE_KWQE_INIT1_LOG_PAGE_SIZE (0xF<<0)
2678#define FCOE_KWQE_INIT1_LOG_PAGE_SIZE_SHIFT 0
2679#define FCOE_KWQE_INIT1_LOG_CACHED_PBES_PER_FUNC (0x7<<4)
2680#define FCOE_KWQE_INIT1_LOG_CACHED_PBES_PER_FUNC_SHIFT 4
2681#define FCOE_KWQE_INIT1_RESERVED1 (0x1<<7)
2682#define FCOE_KWQE_INIT1_RESERVED1_SHIFT 7
2683};
2684
2685/*
2686 * FCoE firmware init request 2 $$KEEP_ENDIANNESS$$
2687 */
2688struct fcoe_kwqe_init2 {
2689        u8 hsi_major_version;
2690        u8 hsi_minor_version;
2691        struct fcoe_kwqe_header hdr;
2692        __le32 hash_tbl_pbl_addr_lo;
2693        __le32 hash_tbl_pbl_addr_hi;
2694        __le32 t2_hash_tbl_addr_lo;
2695        __le32 t2_hash_tbl_addr_hi;
2696        __le32 t2_ptr_hash_tbl_addr_lo;
2697        __le32 t2_ptr_hash_tbl_addr_hi;
2698        __le32 free_list_count;
2699};
2700
2701/*
2702 * FCoE firmware init request 3 $$KEEP_ENDIANNESS$$
2703 */
2704struct fcoe_kwqe_init3 {
2705        __le16 reserved0;
2706        struct fcoe_kwqe_header hdr;
2707        __le32 error_bit_map_lo;
2708        __le32 error_bit_map_hi;
2709        u8 perf_config;
2710        u8 reserved21[3];
2711        __le32 reserved2[4];
2712};
2713
2714/*
2715 * FCoE connection offload request 1 $$KEEP_ENDIANNESS$$
2716 */
2717struct fcoe_kwqe_conn_offload1 {
2718        __le16 fcoe_conn_id;
2719        struct fcoe_kwqe_header hdr;
2720        __le32 sq_addr_lo;
2721        __le32 sq_addr_hi;
2722        __le32 rq_pbl_addr_lo;
2723        __le32 rq_pbl_addr_hi;
2724        __le32 rq_first_pbe_addr_lo;
2725        __le32 rq_first_pbe_addr_hi;
2726        __le16 rq_prod;
2727        __le16 reserved0;
2728};
2729
2730/*
2731 * FCoE connection offload request 2 $$KEEP_ENDIANNESS$$
2732 */
2733struct fcoe_kwqe_conn_offload2 {
2734        __le16 tx_max_fc_pay_len;
2735        struct fcoe_kwqe_header hdr;
2736        __le32 cq_addr_lo;
2737        __le32 cq_addr_hi;
2738        __le32 xferq_addr_lo;
2739        __le32 xferq_addr_hi;
2740        __le32 conn_db_addr_lo;
2741        __le32 conn_db_addr_hi;
2742        __le32 reserved1;
2743};
2744
2745/*
2746 * FCoE connection offload request 3 $$KEEP_ENDIANNESS$$
2747 */
2748struct fcoe_kwqe_conn_offload3 {
2749        __le16 vlan_tag;
2750#define FCOE_KWQE_CONN_OFFLOAD3_VLAN_ID (0xFFF<<0)
2751#define FCOE_KWQE_CONN_OFFLOAD3_VLAN_ID_SHIFT 0
2752#define FCOE_KWQE_CONN_OFFLOAD3_CFI (0x1<<12)
2753#define FCOE_KWQE_CONN_OFFLOAD3_CFI_SHIFT 12
2754#define FCOE_KWQE_CONN_OFFLOAD3_PRIORITY (0x7<<13)
2755#define FCOE_KWQE_CONN_OFFLOAD3_PRIORITY_SHIFT 13
2756        struct fcoe_kwqe_header hdr;
2757        u8 s_id[3];
2758        u8 tx_max_conc_seqs_c3;
2759        u8 d_id[3];
2760        u8 flags;
2761#define FCOE_KWQE_CONN_OFFLOAD3_B_MUL_N_PORT_IDS (0x1<<0)
2762#define FCOE_KWQE_CONN_OFFLOAD3_B_MUL_N_PORT_IDS_SHIFT 0
2763#define FCOE_KWQE_CONN_OFFLOAD3_B_E_D_TOV_RES (0x1<<1)
2764#define FCOE_KWQE_CONN_OFFLOAD3_B_E_D_TOV_RES_SHIFT 1
2765#define FCOE_KWQE_CONN_OFFLOAD3_B_CONT_INCR_SEQ_CNT (0x1<<2)
2766#define FCOE_KWQE_CONN_OFFLOAD3_B_CONT_INCR_SEQ_CNT_SHIFT 2
2767#define FCOE_KWQE_CONN_OFFLOAD3_B_CONF_REQ (0x1<<3)
2768#define FCOE_KWQE_CONN_OFFLOAD3_B_CONF_REQ_SHIFT 3
2769#define FCOE_KWQE_CONN_OFFLOAD3_B_REC_VALID (0x1<<4)
2770#define FCOE_KWQE_CONN_OFFLOAD3_B_REC_VALID_SHIFT 4
2771#define FCOE_KWQE_CONN_OFFLOAD3_B_C2_VALID (0x1<<5)
2772#define FCOE_KWQE_CONN_OFFLOAD3_B_C2_VALID_SHIFT 5
2773#define FCOE_KWQE_CONN_OFFLOAD3_B_ACK_0 (0x1<<6)
2774#define FCOE_KWQE_CONN_OFFLOAD3_B_ACK_0_SHIFT 6
2775#define FCOE_KWQE_CONN_OFFLOAD3_B_VLAN_FLAG (0x1<<7)
2776#define FCOE_KWQE_CONN_OFFLOAD3_B_VLAN_FLAG_SHIFT 7
2777        __le32 reserved;
2778        __le32 confq_first_pbe_addr_lo;
2779        __le32 confq_first_pbe_addr_hi;
2780        __le16 tx_total_conc_seqs;
2781        __le16 rx_max_fc_pay_len;
2782        __le16 rx_total_conc_seqs;
2783        u8 rx_max_conc_seqs_c3;
2784        u8 rx_open_seqs_exch_c3;
2785};
2786
2787/*
2788 * FCoE connection offload request 4 $$KEEP_ENDIANNESS$$
2789 */
2790struct fcoe_kwqe_conn_offload4 {
2791        u8 e_d_tov_timer_val;
2792        u8 reserved2;
2793        struct fcoe_kwqe_header hdr;
2794        u8 src_mac_addr_lo[2];
2795        u8 src_mac_addr_mid[2];
2796        u8 src_mac_addr_hi[2];
2797        u8 dst_mac_addr_hi[2];
2798        u8 dst_mac_addr_lo[2];
2799        u8 dst_mac_addr_mid[2];
2800        __le32 lcq_addr_lo;
2801        __le32 lcq_addr_hi;
2802        __le32 confq_pbl_base_addr_lo;
2803        __le32 confq_pbl_base_addr_hi;
2804};
2805
2806/*
2807 * FCoE connection enable request $$KEEP_ENDIANNESS$$
2808 */
2809struct fcoe_kwqe_conn_enable_disable {
2810        __le16 reserved0;
2811        struct fcoe_kwqe_header hdr;
2812        u8 src_mac_addr_lo[2];
2813        u8 src_mac_addr_mid[2];
2814        u8 src_mac_addr_hi[2];
2815        u16 vlan_tag;
2816#define FCOE_KWQE_CONN_ENABLE_DISABLE_VLAN_ID (0xFFF<<0)
2817#define FCOE_KWQE_CONN_ENABLE_DISABLE_VLAN_ID_SHIFT 0
2818#define FCOE_KWQE_CONN_ENABLE_DISABLE_CFI (0x1<<12)
2819#define FCOE_KWQE_CONN_ENABLE_DISABLE_CFI_SHIFT 12
2820#define FCOE_KWQE_CONN_ENABLE_DISABLE_PRIORITY (0x7<<13)
2821#define FCOE_KWQE_CONN_ENABLE_DISABLE_PRIORITY_SHIFT 13
2822        u8 dst_mac_addr_lo[2];
2823        u8 dst_mac_addr_mid[2];
2824        u8 dst_mac_addr_hi[2];
2825        __le16 reserved1;
2826        u8 s_id[3];
2827        u8 vlan_flag;
2828        u8 d_id[3];
2829        u8 reserved3;
2830        __le32 context_id;
2831        __le32 conn_id;
2832        __le32 reserved4;
2833};
2834
2835/*
2836 * FCoE connection destroy request $$KEEP_ENDIANNESS$$
2837 */
2838struct fcoe_kwqe_conn_destroy {
2839        __le16 reserved0;
2840        struct fcoe_kwqe_header hdr;
2841        __le32 context_id;
2842        __le32 conn_id;
2843        __le32 reserved1[5];
2844};
2845
2846/*
2847 * FCoe destroy request $$KEEP_ENDIANNESS$$
2848 */
2849struct fcoe_kwqe_destroy {
2850        __le16 reserved0;
2851        struct fcoe_kwqe_header hdr;
2852        __le32 reserved1[7];
2853};
2854
2855/*
2856 * FCoe statistics request $$KEEP_ENDIANNESS$$
2857 */
2858struct fcoe_kwqe_stat {
2859        __le16 reserved0;
2860        struct fcoe_kwqe_header hdr;
2861        __le32 stat_params_addr_lo;
2862        __le32 stat_params_addr_hi;
2863        __le32 reserved1[5];
2864};
2865
2866/*
2867 * FCoE KWQ WQE $$KEEP_ENDIANNESS$$
2868 */
2869union fcoe_kwqe {
2870        struct fcoe_kwqe_init1 init1;
2871        struct fcoe_kwqe_init2 init2;
2872        struct fcoe_kwqe_init3 init3;
2873        struct fcoe_kwqe_conn_offload1 conn_offload1;
2874        struct fcoe_kwqe_conn_offload2 conn_offload2;
2875        struct fcoe_kwqe_conn_offload3 conn_offload3;
2876        struct fcoe_kwqe_conn_offload4 conn_offload4;
2877        struct fcoe_kwqe_conn_enable_disable conn_enable_disable;
2878        struct fcoe_kwqe_conn_destroy conn_destroy;
2879        struct fcoe_kwqe_destroy destroy;
2880        struct fcoe_kwqe_stat statistics;
2881};
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898/*
2899 * TX SGL context $$KEEP_ENDIANNESS$$
2900 */
2901union fcoe_sgl_union_ctx {
2902        struct fcoe_cached_sge_ctx cached_sge;
2903        struct fcoe_ext_mul_sges_ctx sgl;
2904        __le32 opaque[5];
2905};
2906
2907/*
2908 * Data-In/ELS/BLS information $$KEEP_ENDIANNESS$$
2909 */
2910struct fcoe_read_flow_info {
2911        union fcoe_sgl_union_ctx sgl_ctx;
2912        __le32 rsrv0[3];
2913};
2914
2915
2916/*
2917 * Fcoe stat context $$KEEP_ENDIANNESS$$
2918 */
2919struct fcoe_s_stat_ctx {
2920        u8 flags;
2921#define FCOE_S_STAT_CTX_ACTIVE (0x1<<0)
2922#define FCOE_S_STAT_CTX_ACTIVE_SHIFT 0
2923#define FCOE_S_STAT_CTX_ACK_ABORT_SEQ_COND (0x1<<1)
2924#define FCOE_S_STAT_CTX_ACK_ABORT_SEQ_COND_SHIFT 1
2925#define FCOE_S_STAT_CTX_ABTS_PERFORMED (0x1<<2)
2926#define FCOE_S_STAT_CTX_ABTS_PERFORMED_SHIFT 2
2927#define FCOE_S_STAT_CTX_SEQ_TIMEOUT (0x1<<3)
2928#define FCOE_S_STAT_CTX_SEQ_TIMEOUT_SHIFT 3
2929#define FCOE_S_STAT_CTX_P_RJT (0x1<<4)
2930#define FCOE_S_STAT_CTX_P_RJT_SHIFT 4
2931#define FCOE_S_STAT_CTX_ACK_EOFT (0x1<<5)
2932#define FCOE_S_STAT_CTX_ACK_EOFT_SHIFT 5
2933#define FCOE_S_STAT_CTX_RSRV1 (0x3<<6)
2934#define FCOE_S_STAT_CTX_RSRV1_SHIFT 6
2935};
2936
2937/*
2938 * Fcoe rx seq context $$KEEP_ENDIANNESS$$
2939 */
2940struct fcoe_rx_seq_ctx {
2941        u8 seq_id;
2942        struct fcoe_s_stat_ctx s_stat;
2943        __le16 seq_cnt;
2944        __le32 low_exp_ro;
2945        __le32 high_exp_ro;
2946};
2947
2948
2949/*
2950 * Fcoe rx_wr union context $$KEEP_ENDIANNESS$$
2951 */
2952union fcoe_rx_wr_union_ctx {
2953        struct fcoe_read_flow_info read_info;
2954        union fcoe_comp_flow_info comp_info;
2955        __le32 opaque[8];
2956};
2957
2958
2959
2960/*
2961 * FCoE SQ element $$KEEP_ENDIANNESS$$
2962 */
2963struct fcoe_sqe {
2964        __le16 wqe;
2965#define FCOE_SQE_TASK_ID (0x7FFF<<0)
2966#define FCOE_SQE_TASK_ID_SHIFT 0
2967#define FCOE_SQE_TOGGLE_BIT (0x1<<15)
2968#define FCOE_SQE_TOGGLE_BIT_SHIFT 15
2969};
2970
2971
2972
2973/*
2974 * 14 regs $$KEEP_ENDIANNESS$$
2975 */
2976struct fcoe_tce_tx_only {
2977        union fcoe_sgl_union_ctx sgl_ctx;
2978        __le32 rsrv0;
2979};
2980
2981/*
2982 * 32 bytes (8 regs) used for TX only purposes $$KEEP_ENDIANNESS$$
2983 */
2984union fcoe_tx_wr_rx_rd_union_ctx {
2985        struct fcoe_fc_frame tx_frame;
2986        struct fcoe_fcp_cmd_payload fcp_cmd;
2987        struct fcoe_ext_cleanup_info cleanup;
2988        struct fcoe_ext_abts_info abts;
2989        struct fcoe_ext_fw_tx_seq_ctx tx_seq;
2990        __le32 opaque[8];
2991};
2992
2993/*
2994 * tce_tx_wr_rx_rd_const $$KEEP_ENDIANNESS$$
2995 */
2996struct fcoe_tce_tx_wr_rx_rd_const {
2997        u8 init_flags;
2998#define FCOE_TCE_TX_WR_RX_RD_CONST_TASK_TYPE (0x7<<0)
2999#define FCOE_TCE_TX_WR_RX_RD_CONST_TASK_TYPE_SHIFT 0
3000#define FCOE_TCE_TX_WR_RX_RD_CONST_DEV_TYPE (0x1<<3)
3001#define FCOE_TCE_TX_WR_RX_RD_CONST_DEV_TYPE_SHIFT 3
3002#define FCOE_TCE_TX_WR_RX_RD_CONST_CLASS_TYPE (0x1<<4)
3003#define FCOE_TCE_TX_WR_RX_RD_CONST_CLASS_TYPE_SHIFT 4
3004#define FCOE_TCE_TX_WR_RX_RD_CONST_CACHED_SGE (0x3<<5)
3005#define FCOE_TCE_TX_WR_RX_RD_CONST_CACHED_SGE_SHIFT 5
3006#define FCOE_TCE_TX_WR_RX_RD_CONST_SUPPORT_REC_TOV (0x1<<7)
3007#define FCOE_TCE_TX_WR_RX_RD_CONST_SUPPORT_REC_TOV_SHIFT 7
3008        u8 tx_flags;
3009#define FCOE_TCE_TX_WR_RX_RD_CONST_TX_VALID (0x1<<0)
3010#define FCOE_TCE_TX_WR_RX_RD_CONST_TX_VALID_SHIFT 0
3011#define FCOE_TCE_TX_WR_RX_RD_CONST_TX_STATE (0xF<<1)
3012#define FCOE_TCE_TX_WR_RX_RD_CONST_TX_STATE_SHIFT 1
3013#define FCOE_TCE_TX_WR_RX_RD_CONST_RSRV1 (0x1<<5)
3014#define FCOE_TCE_TX_WR_RX_RD_CONST_RSRV1_SHIFT 5
3015#define FCOE_TCE_TX_WR_RX_RD_CONST_TX_SEQ_INIT (0x1<<6)
3016#define FCOE_TCE_TX_WR_RX_RD_CONST_TX_SEQ_INIT_SHIFT 6
3017#define FCOE_TCE_TX_WR_RX_RD_CONST_RSRV2 (0x1<<7)
3018#define FCOE_TCE_TX_WR_RX_RD_CONST_RSRV2_SHIFT 7
3019        __le16 rsrv3;
3020        __le32 verify_tx_seq;
3021};
3022
3023/*
3024 * tce_tx_wr_rx_rd $$KEEP_ENDIANNESS$$
3025 */
3026struct fcoe_tce_tx_wr_rx_rd {
3027        union fcoe_tx_wr_rx_rd_union_ctx union_ctx;
3028        struct fcoe_tce_tx_wr_rx_rd_const const_ctx;
3029};
3030
3031/*
3032 * tce_rx_wr_tx_rd_const $$KEEP_ENDIANNESS$$
3033 */
3034struct fcoe_tce_rx_wr_tx_rd_const {
3035        __le32 data_2_trns;
3036        __le32 init_flags;
3037#define FCOE_TCE_RX_WR_TX_RD_CONST_CID (0xFFFFFF<<0)
3038#define FCOE_TCE_RX_WR_TX_RD_CONST_CID_SHIFT 0
3039#define FCOE_TCE_RX_WR_TX_RD_CONST_RSRV0 (0xFF<<24)
3040#define FCOE_TCE_RX_WR_TX_RD_CONST_RSRV0_SHIFT 24
3041};
3042
3043/*
3044 * tce_rx_wr_tx_rd_var $$KEEP_ENDIANNESS$$
3045 */
3046struct fcoe_tce_rx_wr_tx_rd_var {
3047        __le16 rx_flags;
3048#define FCOE_TCE_RX_WR_TX_RD_VAR_RSRV1 (0xF<<0)
3049#define FCOE_TCE_RX_WR_TX_RD_VAR_RSRV1_SHIFT 0
3050#define FCOE_TCE_RX_WR_TX_RD_VAR_NUM_RQ_WQE (0x7<<4)
3051#define FCOE_TCE_RX_WR_TX_RD_VAR_NUM_RQ_WQE_SHIFT 4
3052#define FCOE_TCE_RX_WR_TX_RD_VAR_CONF_REQ (0x1<<7)
3053#define FCOE_TCE_RX_WR_TX_RD_VAR_CONF_REQ_SHIFT 7
3054#define FCOE_TCE_RX_WR_TX_RD_VAR_RX_STATE (0xF<<8)
3055#define FCOE_TCE_RX_WR_TX_RD_VAR_RX_STATE_SHIFT 8
3056#define FCOE_TCE_RX_WR_TX_RD_VAR_EXP_FIRST_FRAME (0x1<<12)
3057#define FCOE_TCE_RX_WR_TX_RD_VAR_EXP_FIRST_FRAME_SHIFT 12
3058#define FCOE_TCE_RX_WR_TX_RD_VAR_RX_SEQ_INIT (0x1<<13)
3059#define FCOE_TCE_RX_WR_TX_RD_VAR_RX_SEQ_INIT_SHIFT 13
3060#define FCOE_TCE_RX_WR_TX_RD_VAR_RSRV2 (0x1<<14)
3061#define FCOE_TCE_RX_WR_TX_RD_VAR_RSRV2_SHIFT 14
3062#define FCOE_TCE_RX_WR_TX_RD_VAR_RX_VALID (0x1<<15)
3063#define FCOE_TCE_RX_WR_TX_RD_VAR_RX_VALID_SHIFT 15
3064        __le16 rx_id;
3065        struct fcoe_fcp_xfr_rdy_payload fcp_xfr_rdy;
3066};
3067
3068/*
3069 * tce_rx_wr_tx_rd $$KEEP_ENDIANNESS$$
3070 */
3071struct fcoe_tce_rx_wr_tx_rd {
3072        struct fcoe_tce_rx_wr_tx_rd_const const_ctx;
3073        struct fcoe_tce_rx_wr_tx_rd_var var_ctx;
3074};
3075
3076/*
3077 * tce_rx_only $$KEEP_ENDIANNESS$$
3078 */
3079struct fcoe_tce_rx_only {
3080        struct fcoe_rx_seq_ctx rx_seq_ctx;
3081        union fcoe_rx_wr_union_ctx union_ctx;
3082};
3083
3084/*
3085 * task_ctx_entry $$KEEP_ENDIANNESS$$
3086 */
3087struct fcoe_task_ctx_entry {
3088        struct fcoe_tce_tx_only txwr_only;
3089        struct fcoe_tce_tx_wr_rx_rd txwr_rxrd;
3090        struct fcoe_tce_rx_wr_tx_rd rxwr_txrd;
3091        struct fcoe_tce_rx_only rxwr_only;
3092};
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103/*
3104 * FCoE XFRQ element $$KEEP_ENDIANNESS$$
3105 */
3106struct fcoe_xfrqe {
3107        __le16 wqe;
3108#define FCOE_XFRQE_TASK_ID (0x7FFF<<0)
3109#define FCOE_XFRQE_TASK_ID_SHIFT 0
3110#define FCOE_XFRQE_TOGGLE_BIT (0x1<<15)
3111#define FCOE_XFRQE_TOGGLE_BIT_SHIFT 15
3112};
3113
3114
3115/*
3116 * Cached SGEs $$KEEP_ENDIANNESS$$
3117 */
3118struct common_fcoe_sgl {
3119        struct fcoe_bd_ctx sge[3];
3120};
3121
3122
3123/*
3124 * FCoE SQ\XFRQ element
3125 */
3126struct fcoe_cached_wqe {
3127        struct fcoe_sqe sqe;
3128        struct fcoe_xfrqe xfrqe;
3129};
3130
3131
3132/*
3133 * FCoE connection enable\disable params passed by driver to FW in FCoE enable
3134 * ramrod $$KEEP_ENDIANNESS$$
3135 */
3136struct fcoe_conn_enable_disable_ramrod_params {
3137        struct fcoe_kwqe_conn_enable_disable enable_disable_kwqe;
3138};
3139
3140
3141/*
3142 * FCoE connection offload params passed by driver to FW in FCoE offload ramrod
3143 * $$KEEP_ENDIANNESS$$
3144 */
3145struct fcoe_conn_offload_ramrod_params {
3146        struct fcoe_kwqe_conn_offload1 offload_kwqe1;
3147        struct fcoe_kwqe_conn_offload2 offload_kwqe2;
3148        struct fcoe_kwqe_conn_offload3 offload_kwqe3;
3149        struct fcoe_kwqe_conn_offload4 offload_kwqe4;
3150};
3151
3152
3153struct ustorm_fcoe_mng_ctx {
3154#if defined(__BIG_ENDIAN)
3155        u8 mid_seq_proc_flag;
3156        u8 tce_in_cam_flag;
3157        u8 tce_on_ior_flag;
3158        u8 en_cached_tce_flag;
3159#elif defined(__LITTLE_ENDIAN)
3160        u8 en_cached_tce_flag;
3161        u8 tce_on_ior_flag;
3162        u8 tce_in_cam_flag;
3163        u8 mid_seq_proc_flag;
3164#endif
3165#if defined(__BIG_ENDIAN)
3166        u8 tce_cam_addr;
3167        u8 cached_conn_flag;
3168        u16 rsrv0;
3169#elif defined(__LITTLE_ENDIAN)
3170        u16 rsrv0;
3171        u8 cached_conn_flag;
3172        u8 tce_cam_addr;
3173#endif
3174#if defined(__BIG_ENDIAN)
3175        u16 dma_tce_ram_addr;
3176        u16 tce_ram_addr;
3177#elif defined(__LITTLE_ENDIAN)
3178        u16 tce_ram_addr;
3179        u16 dma_tce_ram_addr;
3180#endif
3181#if defined(__BIG_ENDIAN)
3182        u16 ox_id;
3183        u16 wr_done_seq;
3184#elif defined(__LITTLE_ENDIAN)
3185        u16 wr_done_seq;
3186        u16 ox_id;
3187#endif
3188        struct regpair task_addr;
3189};
3190
3191/*
3192 * Parameters initialized during offloaded according to FLOGI/PLOGI/PRLI and
3193 * used in FCoE context section
3194 */
3195struct ustorm_fcoe_params {
3196#if defined(__BIG_ENDIAN)
3197        u16 fcoe_conn_id;
3198        u16 flags;
3199#define USTORM_FCOE_PARAMS_B_MUL_N_PORT_IDS (0x1<<0)
3200#define USTORM_FCOE_PARAMS_B_MUL_N_PORT_IDS_SHIFT 0
3201#define USTORM_FCOE_PARAMS_B_E_D_TOV_RES (0x1<<1)
3202#define USTORM_FCOE_PARAMS_B_E_D_TOV_RES_SHIFT 1
3203#define USTORM_FCOE_PARAMS_B_CONT_INCR_SEQ_CNT (0x1<<2)
3204#define USTORM_FCOE_PARAMS_B_CONT_INCR_SEQ_CNT_SHIFT 2
3205#define USTORM_FCOE_PARAMS_B_CONF_REQ (0x1<<3)
3206#define USTORM_FCOE_PARAMS_B_CONF_REQ_SHIFT 3
3207#define USTORM_FCOE_PARAMS_B_REC_VALID (0x1<<4)
3208#define USTORM_FCOE_PARAMS_B_REC_VALID_SHIFT 4
3209#define USTORM_FCOE_PARAMS_B_CQ_TOGGLE_BIT (0x1<<5)
3210#define USTORM_FCOE_PARAMS_B_CQ_TOGGLE_BIT_SHIFT 5
3211#define USTORM_FCOE_PARAMS_B_XFRQ_TOGGLE_BIT (0x1<<6)
3212#define USTORM_FCOE_PARAMS_B_XFRQ_TOGGLE_BIT_SHIFT 6
3213#define USTORM_FCOE_PARAMS_RSRV0 (0x1FF<<7)
3214#define USTORM_FCOE_PARAMS_RSRV0_SHIFT 7
3215#elif defined(__LITTLE_ENDIAN)
3216        u16 flags;
3217#define USTORM_FCOE_PARAMS_B_MUL_N_PORT_IDS (0x1<<0)
3218#define USTORM_FCOE_PARAMS_B_MUL_N_PORT_IDS_SHIFT 0
3219#define USTORM_FCOE_PARAMS_B_E_D_TOV_RES (0x1<<1)
3220#define USTORM_FCOE_PARAMS_B_E_D_TOV_RES_SHIFT 1
3221#define USTORM_FCOE_PARAMS_B_CONT_INCR_SEQ_CNT (0x1<<2)
3222#define USTORM_FCOE_PARAMS_B_CONT_INCR_SEQ_CNT_SHIFT 2
3223#define USTORM_FCOE_PARAMS_B_CONF_REQ (0x1<<3)
3224#define USTORM_FCOE_PARAMS_B_CONF_REQ_SHIFT 3
3225#define USTORM_FCOE_PARAMS_B_REC_VALID (0x1<<4)
3226#define USTORM_FCOE_PARAMS_B_REC_VALID_SHIFT 4
3227#define USTORM_FCOE_PARAMS_B_CQ_TOGGLE_BIT (0x1<<5)
3228#define USTORM_FCOE_PARAMS_B_CQ_TOGGLE_BIT_SHIFT 5
3229#define USTORM_FCOE_PARAMS_B_XFRQ_TOGGLE_BIT (0x1<<6)
3230#define USTORM_FCOE_PARAMS_B_XFRQ_TOGGLE_BIT_SHIFT 6
3231#define USTORM_FCOE_PARAMS_RSRV0 (0x1FF<<7)
3232#define USTORM_FCOE_PARAMS_RSRV0_SHIFT 7
3233        u16 fcoe_conn_id;
3234#endif
3235#if defined(__BIG_ENDIAN)
3236        u8 hc_csdm_byte_en;
3237        u8 func_id;
3238        u8 port_id;
3239        u8 vnic_id;
3240#elif defined(__LITTLE_ENDIAN)
3241        u8 vnic_id;
3242        u8 port_id;
3243        u8 func_id;
3244        u8 hc_csdm_byte_en;
3245#endif
3246#if defined(__BIG_ENDIAN)
3247        u16 rx_total_conc_seqs;
3248        u16 rx_max_fc_pay_len;
3249#elif defined(__LITTLE_ENDIAN)
3250        u16 rx_max_fc_pay_len;
3251        u16 rx_total_conc_seqs;
3252#endif
3253#if defined(__BIG_ENDIAN)
3254        u8 task_pbe_idx_off;
3255        u8 task_in_page_log_size;
3256        u16 rx_max_conc_seqs;
3257#elif defined(__LITTLE_ENDIAN)
3258        u16 rx_max_conc_seqs;
3259        u8 task_in_page_log_size;
3260        u8 task_pbe_idx_off;
3261#endif
3262};
3263
3264/*
3265 * FCoE 16-bits index structure
3266 */
3267struct fcoe_idx16_fields {
3268        u16 fields;
3269#define FCOE_IDX16_FIELDS_IDX (0x7FFF<<0)
3270#define FCOE_IDX16_FIELDS_IDX_SHIFT 0
3271#define FCOE_IDX16_FIELDS_MSB (0x1<<15)
3272#define FCOE_IDX16_FIELDS_MSB_SHIFT 15
3273};
3274
3275/*
3276 * FCoE 16-bits index union
3277 */
3278union fcoe_idx16_field_union {
3279        struct fcoe_idx16_fields fields;
3280        u16 val;
3281};
3282
3283/*
3284 * Parameters required for placement according to SGL
3285 */
3286struct ustorm_fcoe_data_place_mng {
3287#if defined(__BIG_ENDIAN)
3288        u16 sge_off;
3289        u8 num_sges;
3290        u8 sge_idx;
3291#elif defined(__LITTLE_ENDIAN)
3292        u8 sge_idx;
3293        u8 num_sges;
3294        u16 sge_off;
3295#endif
3296};
3297
3298/*
3299 * Parameters required for placement according to SGL
3300 */
3301struct ustorm_fcoe_data_place {
3302        struct ustorm_fcoe_data_place_mng cached_mng;
3303        struct fcoe_bd_ctx cached_sge[2];
3304};
3305
3306/*
3307 * TX processing shall write and RX processing shall read from this section
3308 */
3309union fcoe_u_tce_tx_wr_rx_rd_union {
3310        struct fcoe_abts_info abts;
3311        struct fcoe_cleanup_info cleanup;
3312        struct fcoe_fw_tx_seq_ctx tx_seq_ctx;
3313        u32 opaque[2];
3314};
3315
3316/*
3317 * TX processing shall write and RX processing shall read from this section
3318 */
3319struct fcoe_u_tce_tx_wr_rx_rd {
3320        union fcoe_u_tce_tx_wr_rx_rd_union union_ctx;
3321        struct fcoe_tce_tx_wr_rx_rd_const const_ctx;
3322};
3323
3324struct ustorm_fcoe_tce {
3325        struct fcoe_u_tce_tx_wr_rx_rd txwr_rxrd;
3326        struct fcoe_tce_rx_wr_tx_rd rxwr_txrd;
3327        struct fcoe_tce_rx_only rxwr;
3328};
3329
3330struct ustorm_fcoe_cache_ctx {
3331        u32 rsrv0;
3332        struct ustorm_fcoe_data_place data_place;
3333        struct ustorm_fcoe_tce tce;
3334};
3335
3336/*
3337 * Ustorm FCoE Storm Context
3338 */
3339struct ustorm_fcoe_st_context {
3340        struct ustorm_fcoe_mng_ctx mng_ctx;
3341        struct ustorm_fcoe_params fcoe_params;
3342        struct regpair cq_base_addr;
3343        struct regpair rq_pbl_base;
3344        struct regpair rq_cur_page_addr;
3345        struct regpair confq_pbl_base_addr;
3346        struct regpair conn_db_base;
3347        struct regpair xfrq_base_addr;
3348        struct regpair lcq_base_addr;
3349#if defined(__BIG_ENDIAN)
3350        union fcoe_idx16_field_union rq_cons;
3351        union fcoe_idx16_field_union rq_prod;
3352#elif defined(__LITTLE_ENDIAN)
3353        union fcoe_idx16_field_union rq_prod;
3354        union fcoe_idx16_field_union rq_cons;
3355#endif
3356#if defined(__BIG_ENDIAN)
3357        u16 xfrq_prod;
3358        u16 cq_cons;
3359#elif defined(__LITTLE_ENDIAN)
3360        u16 cq_cons;
3361        u16 xfrq_prod;
3362#endif
3363#if defined(__BIG_ENDIAN)
3364        u16 lcq_cons;
3365        u16 hc_cram_address;
3366#elif defined(__LITTLE_ENDIAN)
3367        u16 hc_cram_address;
3368        u16 lcq_cons;
3369#endif
3370#if defined(__BIG_ENDIAN)
3371        u16 sq_xfrq_lcq_confq_size;
3372        u16 confq_prod;
3373#elif defined(__LITTLE_ENDIAN)
3374        u16 confq_prod;
3375        u16 sq_xfrq_lcq_confq_size;
3376#endif
3377#if defined(__BIG_ENDIAN)
3378        u8 hc_csdm_agg_int;
3379        u8 rsrv2;
3380        u8 available_rqes;
3381        u8 sp_q_flush_cnt;
3382#elif defined(__LITTLE_ENDIAN)
3383        u8 sp_q_flush_cnt;
3384        u8 available_rqes;
3385        u8 rsrv2;
3386        u8 hc_csdm_agg_int;
3387#endif
3388#if defined(__BIG_ENDIAN)
3389        u16 num_pend_tasks;
3390        u16 pbf_ack_ram_addr;
3391#elif defined(__LITTLE_ENDIAN)
3392        u16 pbf_ack_ram_addr;
3393        u16 num_pend_tasks;
3394#endif
3395        struct ustorm_fcoe_cache_ctx cache_ctx;
3396};
3397
3398/*
3399 * The FCoE non-aggregative context of Tstorm
3400 */
3401struct tstorm_fcoe_st_context {
3402        struct regpair reserved0;
3403        struct regpair reserved1;
3404};
3405
3406/*
3407 * Ethernet context section
3408 */
3409struct xstorm_fcoe_eth_context_section {
3410#if defined(__BIG_ENDIAN)
3411        u8 remote_addr_4;
3412        u8 remote_addr_5;
3413        u8 local_addr_0;
3414        u8 local_addr_1;
3415#elif defined(__LITTLE_ENDIAN)
3416        u8 local_addr_1;
3417        u8 local_addr_0;
3418        u8 remote_addr_5;
3419        u8 remote_addr_4;
3420#endif
3421#if defined(__BIG_ENDIAN)
3422        u8 remote_addr_0;
3423        u8 remote_addr_1;
3424        u8 remote_addr_2;
3425        u8 remote_addr_3;
3426#elif defined(__LITTLE_ENDIAN)
3427        u8 remote_addr_3;
3428        u8 remote_addr_2;
3429        u8 remote_addr_1;
3430        u8 remote_addr_0;
3431#endif
3432#if defined(__BIG_ENDIAN)
3433        u16 reserved_vlan_type;
3434        u16 params;
3435#define XSTORM_FCOE_ETH_CONTEXT_SECTION_VLAN_ID (0xFFF<<0)
3436#define XSTORM_FCOE_ETH_CONTEXT_SECTION_VLAN_ID_SHIFT 0
3437#define XSTORM_FCOE_ETH_CONTEXT_SECTION_CFI (0x1<<12)
3438#define XSTORM_FCOE_ETH_CONTEXT_SECTION_CFI_SHIFT 12
3439#define XSTORM_FCOE_ETH_CONTEXT_SECTION_PRIORITY (0x7<<13)
3440#define XSTORM_FCOE_ETH_CONTEXT_SECTION_PRIORITY_SHIFT 13
3441#elif defined(__LITTLE_ENDIAN)
3442        u16 params;
3443#define XSTORM_FCOE_ETH_CONTEXT_SECTION_VLAN_ID (0xFFF<<0)
3444#define XSTORM_FCOE_ETH_CONTEXT_SECTION_VLAN_ID_SHIFT 0
3445#define XSTORM_FCOE_ETH_CONTEXT_SECTION_CFI (0x1<<12)
3446#define XSTORM_FCOE_ETH_CONTEXT_SECTION_CFI_SHIFT 12
3447#define XSTORM_FCOE_ETH_CONTEXT_SECTION_PRIORITY (0x7<<13)
3448#define XSTORM_FCOE_ETH_CONTEXT_SECTION_PRIORITY_SHIFT 13
3449        u16 reserved_vlan_type;
3450#endif
3451#if defined(__BIG_ENDIAN)
3452        u8 local_addr_2;
3453        u8 local_addr_3;
3454        u8 local_addr_4;
3455        u8 local_addr_5;
3456#elif defined(__LITTLE_ENDIAN)
3457        u8 local_addr_5;
3458        u8 local_addr_4;
3459        u8 local_addr_3;
3460        u8 local_addr_2;
3461#endif
3462};
3463
3464/*
3465 * Flags used in FCoE context section - 1 byte
3466 */
3467struct xstorm_fcoe_context_flags {
3468        u8 flags;
3469#define XSTORM_FCOE_CONTEXT_FLAGS_B_PROC_Q (0x3<<0)
3470#define XSTORM_FCOE_CONTEXT_FLAGS_B_PROC_Q_SHIFT 0
3471#define XSTORM_FCOE_CONTEXT_FLAGS_B_MID_SEQ (0x1<<2)
3472#define XSTORM_FCOE_CONTEXT_FLAGS_B_MID_SEQ_SHIFT 2
3473#define XSTORM_FCOE_CONTEXT_FLAGS_B_BLOCK_SQ (0x1<<3)
3474#define XSTORM_FCOE_CONTEXT_FLAGS_B_BLOCK_SQ_SHIFT 3
3475#define XSTORM_FCOE_CONTEXT_FLAGS_B_REC_SUPPORT (0x1<<4)
3476#define XSTORM_FCOE_CONTEXT_FLAGS_B_REC_SUPPORT_SHIFT 4
3477#define XSTORM_FCOE_CONTEXT_FLAGS_B_SQ_TOGGLE (0x1<<5)
3478#define XSTORM_FCOE_CONTEXT_FLAGS_B_SQ_TOGGLE_SHIFT 5
3479#define XSTORM_FCOE_CONTEXT_FLAGS_B_XFRQ_TOGGLE (0x1<<6)
3480#define XSTORM_FCOE_CONTEXT_FLAGS_B_XFRQ_TOGGLE_SHIFT 6
3481#define XSTORM_FCOE_CONTEXT_FLAGS_B_VNTAG_VLAN (0x1<<7)
3482#define XSTORM_FCOE_CONTEXT_FLAGS_B_VNTAG_VLAN_SHIFT 7
3483};
3484
3485struct xstorm_fcoe_tce {
3486        struct fcoe_tce_tx_only txwr;
3487        struct fcoe_tce_tx_wr_rx_rd txwr_rxrd;
3488};
3489
3490/*
3491 * FCP_DATA parameters required for transmission
3492 */
3493struct xstorm_fcoe_fcp_data {
3494        u32 io_rem;
3495#if defined(__BIG_ENDIAN)
3496        u16 cached_sge_off;
3497        u8 cached_num_sges;
3498        u8 cached_sge_idx;
3499#elif defined(__LITTLE_ENDIAN)
3500        u8 cached_sge_idx;
3501        u8 cached_num_sges;
3502        u16 cached_sge_off;
3503#endif
3504        u32 buf_addr_hi_0;
3505        u32 buf_addr_lo_0;
3506#if defined(__BIG_ENDIAN)
3507        u16 num_of_pending_tasks;
3508        u16 buf_len_0;
3509#elif defined(__LITTLE_ENDIAN)
3510        u16 buf_len_0;
3511        u16 num_of_pending_tasks;
3512#endif
3513        u32 buf_addr_hi_1;
3514        u32 buf_addr_lo_1;
3515#if defined(__BIG_ENDIAN)
3516        u16 task_pbe_idx_off;
3517        u16 buf_len_1;
3518#elif defined(__LITTLE_ENDIAN)
3519        u16 buf_len_1;
3520        u16 task_pbe_idx_off;
3521#endif
3522        u32 buf_addr_hi_2;
3523        u32 buf_addr_lo_2;
3524#if defined(__BIG_ENDIAN)
3525        u16 ox_id;
3526        u16 buf_len_2;
3527#elif defined(__LITTLE_ENDIAN)
3528        u16 buf_len_2;
3529        u16 ox_id;
3530#endif
3531};
3532
3533/*
3534 * vlan configuration
3535 */
3536struct xstorm_fcoe_vlan_conf {
3537        u8 vlan_conf;
3538#define XSTORM_FCOE_VLAN_CONF_PRIORITY (0x7<<0)
3539#define XSTORM_FCOE_VLAN_CONF_PRIORITY_SHIFT 0
3540#define XSTORM_FCOE_VLAN_CONF_INNER_VLAN_FLAG (0x1<<3)
3541#define XSTORM_FCOE_VLAN_CONF_INNER_VLAN_FLAG_SHIFT 3
3542#define XSTORM_FCOE_VLAN_CONF_RESERVED (0xF<<4)
3543#define XSTORM_FCOE_VLAN_CONF_RESERVED_SHIFT 4
3544};
3545
3546/*
3547 * FCoE 16-bits vlan structure
3548 */
3549struct fcoe_vlan_fields {
3550        u16 fields;
3551#define FCOE_VLAN_FIELDS_VID (0xFFF<<0)
3552#define FCOE_VLAN_FIELDS_VID_SHIFT 0
3553#define FCOE_VLAN_FIELDS_CLI (0x1<<12)
3554#define FCOE_VLAN_FIELDS_CLI_SHIFT 12
3555#define FCOE_VLAN_FIELDS_PRI (0x7<<13)
3556#define FCOE_VLAN_FIELDS_PRI_SHIFT 13
3557};
3558
3559/*
3560 * FCoE 16-bits vlan union
3561 */
3562union fcoe_vlan_field_union {
3563        struct fcoe_vlan_fields fields;
3564        u16 val;
3565};
3566
3567/*
3568 * FCoE 16-bits vlan, vif union
3569 */
3570union fcoe_vlan_vif_field_union {
3571        union fcoe_vlan_field_union vlan;
3572        u16 vif;
3573};
3574
3575/*
3576 * FCoE context section
3577 */
3578struct xstorm_fcoe_context_section {
3579#if defined(__BIG_ENDIAN)
3580        u8 cs_ctl;
3581        u8 s_id[3];
3582#elif defined(__LITTLE_ENDIAN)
3583        u8 s_id[3];
3584        u8 cs_ctl;
3585#endif
3586#if defined(__BIG_ENDIAN)
3587        u8 rctl;
3588        u8 d_id[3];
3589#elif defined(__LITTLE_ENDIAN)
3590        u8 d_id[3];
3591        u8 rctl;
3592#endif
3593#if defined(__BIG_ENDIAN)
3594        u16 sq_xfrq_lcq_confq_size;
3595        u16 tx_max_fc_pay_len;
3596#elif defined(__LITTLE_ENDIAN)
3597        u16 tx_max_fc_pay_len;
3598        u16 sq_xfrq_lcq_confq_size;
3599#endif
3600        u32 lcq_prod;
3601#if defined(__BIG_ENDIAN)
3602        u8 port_id;
3603        u8 func_id;
3604        u8 seq_id;
3605        struct xstorm_fcoe_context_flags tx_flags;
3606#elif defined(__LITTLE_ENDIAN)
3607        struct xstorm_fcoe_context_flags tx_flags;
3608        u8 seq_id;
3609        u8 func_id;
3610        u8 port_id;
3611#endif
3612#if defined(__BIG_ENDIAN)
3613        u16 mtu;
3614        u8 func_mode;
3615        u8 vnic_id;
3616#elif defined(__LITTLE_ENDIAN)
3617        u8 vnic_id;
3618        u8 func_mode;
3619        u16 mtu;
3620#endif
3621        struct regpair confq_curr_page_addr;
3622        struct fcoe_cached_wqe cached_wqe[8];
3623        struct regpair lcq_base_addr;
3624        struct xstorm_fcoe_tce tce;
3625        struct xstorm_fcoe_fcp_data fcp_data;
3626#if defined(__BIG_ENDIAN)
3627        u8 tx_max_conc_seqs_c3;
3628        u8 vlan_flag;
3629        u8 dcb_val;
3630        u8 data_pb_cmd_size;
3631#elif defined(__LITTLE_ENDIAN)
3632        u8 data_pb_cmd_size;
3633        u8 dcb_val;
3634        u8 vlan_flag;
3635        u8 tx_max_conc_seqs_c3;
3636#endif
3637#if defined(__BIG_ENDIAN)
3638        u16 fcoe_tx_stat_params_ram_addr;
3639        u16 fcoe_tx_fc_seq_ram_addr;
3640#elif defined(__LITTLE_ENDIAN)
3641        u16 fcoe_tx_fc_seq_ram_addr;
3642        u16 fcoe_tx_stat_params_ram_addr;
3643#endif
3644#if defined(__BIG_ENDIAN)
3645        u8 fcp_cmd_line_credit;
3646        u8 eth_hdr_size;
3647        u16 pbf_addr;
3648#elif defined(__LITTLE_ENDIAN)
3649        u16 pbf_addr;
3650        u8 eth_hdr_size;
3651        u8 fcp_cmd_line_credit;
3652#endif
3653#if defined(__BIG_ENDIAN)
3654        union fcoe_vlan_vif_field_union multi_func_val;
3655        u8 page_log_size;
3656        struct xstorm_fcoe_vlan_conf orig_vlan_conf;
3657#elif defined(__LITTLE_ENDIAN)
3658        struct xstorm_fcoe_vlan_conf orig_vlan_conf;
3659        u8 page_log_size;
3660        union fcoe_vlan_vif_field_union multi_func_val;
3661#endif
3662#if defined(__BIG_ENDIAN)
3663        u16 fcp_cmd_frame_size;
3664        u16 pbf_addr_ff;
3665#elif defined(__LITTLE_ENDIAN)
3666        u16 pbf_addr_ff;
3667        u16 fcp_cmd_frame_size;
3668#endif
3669#if defined(__BIG_ENDIAN)
3670        u8 vlan_num;
3671        u8 cos;
3672        u8 cache_xfrq_cons;
3673        u8 cache_sq_cons;
3674#elif defined(__LITTLE_ENDIAN)
3675        u8 cache_sq_cons;
3676        u8 cache_xfrq_cons;
3677        u8 cos;
3678        u8 vlan_num;
3679#endif
3680        u32 verify_tx_seq;
3681};
3682
3683/*
3684 * Xstorm FCoE Storm Context
3685 */
3686struct xstorm_fcoe_st_context {
3687        struct xstorm_fcoe_eth_context_section eth;
3688        struct xstorm_fcoe_context_section fcoe;
3689};
3690
3691/*
3692 * Fcoe connection context
3693 */
3694struct fcoe_context {
3695        struct ustorm_fcoe_st_context ustorm_st_context;
3696        struct tstorm_fcoe_st_context tstorm_st_context;
3697        struct xstorm_fcoe_ag_context xstorm_ag_context;
3698        struct tstorm_fcoe_ag_context tstorm_ag_context;
3699        struct ustorm_fcoe_ag_context ustorm_ag_context;
3700        struct timers_block_context timers_context;
3701        struct xstorm_fcoe_st_context xstorm_st_context;
3702};
3703
3704/*
3705 * FCoE init params passed by driver to FW in FCoE init ramrod
3706 * $$KEEP_ENDIANNESS$$
3707 */
3708struct fcoe_init_ramrod_params {
3709        struct fcoe_kwqe_init1 init_kwqe1;
3710        struct fcoe_kwqe_init2 init_kwqe2;
3711        struct fcoe_kwqe_init3 init_kwqe3;
3712        struct regpair eq_pbl_base;
3713        __le32 eq_pbl_size;
3714        __le32 reserved2;
3715        __le16 eq_prod;
3716        __le16 sb_num;
3717        u8 sb_id;
3718        u8 reserved0;
3719        __le16 reserved1;
3720};
3721
3722/*
3723 * FCoE statistics params buffer passed by driver to FW in FCoE statistics
3724 * ramrod $$KEEP_ENDIANNESS$$
3725 */
3726struct fcoe_stat_ramrod_params {
3727        struct fcoe_kwqe_stat stat_kwqe;
3728};
3729
3730/*
3731 * CQ DB CQ producer and pending completion counter
3732 */
3733struct iscsi_cq_db_prod_pnd_cmpltn_cnt {
3734#if defined(__BIG_ENDIAN)
3735        u16 cntr;
3736        u16 prod;
3737#elif defined(__LITTLE_ENDIAN)
3738        u16 prod;
3739        u16 cntr;
3740#endif
3741};
3742
3743/*
3744 * CQ DB pending completion ITT array
3745 */
3746struct iscsi_cq_db_prod_pnd_cmpltn_cnt_arr {
3747        struct iscsi_cq_db_prod_pnd_cmpltn_cnt prod_pend_comp[8];
3748};
3749
3750/*
3751 * Cstorm CQ sequence to notify array, updated by driver
3752 */
3753struct iscsi_cq_db_sqn_2_notify_arr {
3754        u16 sqn[8];
3755};
3756
3757/*
3758 * Cstorm iSCSI Storm Context
3759 */
3760struct cstorm_iscsi_st_context {
3761        struct iscsi_cq_db_prod_pnd_cmpltn_cnt_arr cq_c_prod_pend_comp_ctr_arr;
3762        struct iscsi_cq_db_sqn_2_notify_arr cq_c_prod_sqn_arr;
3763        struct iscsi_cq_db_sqn_2_notify_arr cq_c_sqn_2_notify_arr;
3764        struct regpair hq_pbl_base;
3765        struct regpair hq_curr_pbe;
3766        struct regpair task_pbl_base;
3767        struct regpair cq_db_base;
3768#if defined(__BIG_ENDIAN)
3769        u16 hq_bd_itt;
3770        u16 iscsi_conn_id;
3771#elif defined(__LITTLE_ENDIAN)
3772        u16 iscsi_conn_id;
3773        u16 hq_bd_itt;
3774#endif
3775        u32 hq_bd_data_segment_len;
3776        u32 hq_bd_buffer_offset;
3777#if defined(__BIG_ENDIAN)
3778        u8 rsrv;
3779        u8 cq_proc_en_bit_map;
3780        u8 cq_pend_comp_itt_valid_bit_map;
3781        u8 hq_bd_opcode;
3782#elif defined(__LITTLE_ENDIAN)
3783        u8 hq_bd_opcode;
3784        u8 cq_pend_comp_itt_valid_bit_map;
3785        u8 cq_proc_en_bit_map;
3786        u8 rsrv;
3787#endif
3788        u32 hq_tcp_seq;
3789#if defined(__BIG_ENDIAN)
3790        u16 flags;
3791#define CSTORM_ISCSI_ST_CONTEXT_DATA_DIGEST_EN (0x1<<0)
3792#define CSTORM_ISCSI_ST_CONTEXT_DATA_DIGEST_EN_SHIFT 0
3793#define CSTORM_ISCSI_ST_CONTEXT_HDR_DIGEST_EN (0x1<<1)
3794#define CSTORM_ISCSI_ST_CONTEXT_HDR_DIGEST_EN_SHIFT 1
3795#define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_CTXT_VALID (0x1<<2)
3796#define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_CTXT_VALID_SHIFT 2
3797#define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_LCL_CMPLN_FLG (0x1<<3)
3798#define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_LCL_CMPLN_FLG_SHIFT 3
3799#define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_WRITE_TASK (0x1<<4)
3800#define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_WRITE_TASK_SHIFT 4
3801#define CSTORM_ISCSI_ST_CONTEXT_CTRL_FLAGS_RSRV (0x7FF<<5)
3802#define CSTORM_ISCSI_ST_CONTEXT_CTRL_FLAGS_RSRV_SHIFT 5
3803        u16 hq_cons;
3804#elif defined(__LITTLE_ENDIAN)
3805        u16 hq_cons;
3806        u16 flags;
3807#define CSTORM_ISCSI_ST_CONTEXT_DATA_DIGEST_EN (0x1<<0)
3808#define CSTORM_ISCSI_ST_CONTEXT_DATA_DIGEST_EN_SHIFT 0
3809#define CSTORM_ISCSI_ST_CONTEXT_HDR_DIGEST_EN (0x1<<1)
3810#define CSTORM_ISCSI_ST_CONTEXT_HDR_DIGEST_EN_SHIFT 1
3811#define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_CTXT_VALID (0x1<<2)
3812#define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_CTXT_VALID_SHIFT 2
3813#define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_LCL_CMPLN_FLG (0x1<<3)
3814#define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_LCL_CMPLN_FLG_SHIFT 3
3815#define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_WRITE_TASK (0x1<<4)
3816#define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_WRITE_TASK_SHIFT 4
3817#define CSTORM_ISCSI_ST_CONTEXT_CTRL_FLAGS_RSRV (0x7FF<<5)
3818#define CSTORM_ISCSI_ST_CONTEXT_CTRL_FLAGS_RSRV_SHIFT 5
3819#endif
3820        struct regpair rsrv1;
3821};
3822
3823
3824/*
3825 * SCSI read/write SQ WQE
3826 */
3827struct iscsi_cmd_pdu_hdr_little_endian {
3828#if defined(__BIG_ENDIAN)
3829        u8 opcode;
3830        u8 op_attr;
3831#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_ATTRIBUTES (0x7<<0)
3832#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_ATTRIBUTES_SHIFT 0
3833#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_RSRV1 (0x3<<3)
3834#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_RSRV1_SHIFT 3
3835#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_WRITE_FLAG (0x1<<5)
3836#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_WRITE_FLAG_SHIFT 5
3837#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_READ_FLAG (0x1<<6)
3838#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_READ_FLAG_SHIFT 6
3839#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_FINAL_FLAG (0x1<<7)
3840#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_FINAL_FLAG_SHIFT 7
3841        u16 rsrv0;
3842#elif defined(__LITTLE_ENDIAN)
3843        u16 rsrv0;
3844        u8 op_attr;
3845#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_ATTRIBUTES (0x7<<0)
3846#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_ATTRIBUTES_SHIFT 0
3847#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_RSRV1 (0x3<<3)
3848#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_RSRV1_SHIFT 3
3849#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_WRITE_FLAG (0x1<<5)
3850#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_WRITE_FLAG_SHIFT 5
3851#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_READ_FLAG (0x1<<6)
3852#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_READ_FLAG_SHIFT 6
3853#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_FINAL_FLAG (0x1<<7)
3854#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_FINAL_FLAG_SHIFT 7
3855        u8 opcode;
3856#endif
3857        u32 data_fields;
3858#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH (0xFFFFFF<<0)
3859#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH_SHIFT 0
3860#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH (0xFF<<24)
3861#define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH_SHIFT 24
3862        struct regpair lun;
3863        u32 itt;
3864        u32 expected_data_transfer_length;
3865        u32 cmd_sn;
3866        u32 exp_stat_sn;
3867        u32 scsi_command_block[4];
3868};
3869
3870
3871/*
3872 * Buffer per connection, used in Tstorm
3873 */
3874struct iscsi_conn_buf {
3875        struct regpair reserved[8];
3876};
3877
3878
3879/*
3880 * iSCSI context region, used only in iSCSI
3881 */
3882struct ustorm_iscsi_rq_db {
3883        struct regpair pbl_base;
3884        struct regpair curr_pbe;
3885};
3886
3887/*
3888 * iSCSI context region, used only in iSCSI
3889 */
3890struct ustorm_iscsi_r2tq_db {
3891        struct regpair pbl_base;
3892        struct regpair curr_pbe;
3893};
3894
3895/*
3896 * iSCSI context region, used only in iSCSI
3897 */
3898struct ustorm_iscsi_cq_db {
3899#if defined(__BIG_ENDIAN)
3900        u16 cq_sn;
3901        u16 prod;
3902#elif defined(__LITTLE_ENDIAN)
3903        u16 prod;
3904        u16 cq_sn;
3905#endif
3906        struct regpair curr_pbe;
3907};
3908
3909/*
3910 * iSCSI context region, used only in iSCSI
3911 */
3912struct rings_db {
3913        struct ustorm_iscsi_rq_db rq;
3914        struct ustorm_iscsi_r2tq_db r2tq;
3915        struct ustorm_iscsi_cq_db cq[8];
3916#if defined(__BIG_ENDIAN)
3917        u16 rq_prod;
3918        u16 r2tq_prod;
3919#elif defined(__LITTLE_ENDIAN)
3920        u16 r2tq_prod;
3921        u16 rq_prod;
3922#endif
3923        struct regpair cq_pbl_base;
3924};
3925
3926/*
3927 * iSCSI context region, used only in iSCSI
3928 */
3929struct ustorm_iscsi_placement_db {
3930        u32 sgl_base_lo;
3931        u32 sgl_base_hi;
3932        u32 local_sge_0_address_hi;
3933        u32 local_sge_0_address_lo;
3934#if defined(__BIG_ENDIAN)
3935        u16 curr_sge_offset;
3936        u16 local_sge_0_size;
3937#elif defined(__LITTLE_ENDIAN)
3938        u16 local_sge_0_size;
3939        u16 curr_sge_offset;
3940#endif
3941        u32 local_sge_1_address_hi;
3942        u32 local_sge_1_address_lo;
3943#if defined(__BIG_ENDIAN)
3944        u8 exp_padding_2b;
3945        u8 nal_len_3b;
3946        u16 local_sge_1_size;
3947#elif defined(__LITTLE_ENDIAN)
3948        u16 local_sge_1_size;
3949        u8 nal_len_3b;
3950        u8 exp_padding_2b;
3951#endif
3952#if defined(__BIG_ENDIAN)
3953        u8 sgl_size;
3954        u8 local_sge_index_2b;
3955        u16 reserved7;
3956#elif defined(__LITTLE_ENDIAN)
3957        u16 reserved7;
3958        u8 local_sge_index_2b;
3959        u8 sgl_size;
3960#endif
3961        u32 rem_pdu;
3962        u32 place_db_bitfield_1;
3963#define USTORM_ISCSI_PLACEMENT_DB_REM_PDU_PAYLOAD (0xFFFFFF<<0)
3964#define USTORM_ISCSI_PLACEMENT_DB_REM_PDU_PAYLOAD_SHIFT 0
3965#define USTORM_ISCSI_PLACEMENT_DB_CQ_ID (0xFF<<24)
3966#define USTORM_ISCSI_PLACEMENT_DB_CQ_ID_SHIFT 24
3967        u32 place_db_bitfield_2;
3968#define USTORM_ISCSI_PLACEMENT_DB_BYTES_2_TRUNCATE (0xFFFFFF<<0)
3969#define USTORM_ISCSI_PLACEMENT_DB_BYTES_2_TRUNCATE_SHIFT 0
3970#define USTORM_ISCSI_PLACEMENT_DB_HOST_SGE_INDEX (0xFF<<24)
3971#define USTORM_ISCSI_PLACEMENT_DB_HOST_SGE_INDEX_SHIFT 24
3972        u32 nal;
3973#define USTORM_ISCSI_PLACEMENT_DB_REM_SGE_SIZE (0xFFFFFF<<0)
3974#define USTORM_ISCSI_PLACEMENT_DB_REM_SGE_SIZE_SHIFT 0
3975#define USTORM_ISCSI_PLACEMENT_DB_EXP_DIGEST_3B (0xFF<<24)
3976#define USTORM_ISCSI_PLACEMENT_DB_EXP_DIGEST_3B_SHIFT 24
3977};
3978
3979/*
3980 * Ustorm iSCSI Storm Context
3981 */
3982struct ustorm_iscsi_st_context {
3983        u32 exp_stat_sn;
3984        u32 exp_data_sn;
3985        struct rings_db ring;
3986        struct regpair task_pbl_base;
3987        struct regpair tce_phy_addr;
3988        struct ustorm_iscsi_placement_db place_db;
3989        u32 reserved8;
3990        u32 rem_rcv_len;
3991#if defined(__BIG_ENDIAN)
3992        u16 hdr_itt;
3993        u16 iscsi_conn_id;
3994#elif defined(__LITTLE_ENDIAN)
3995        u16 iscsi_conn_id;
3996        u16 hdr_itt;
3997#endif
3998        u32 nal_bytes;
3999#if defined(__BIG_ENDIAN)
4000        u8 hdr_second_byte_union;
4001        u8 bitfield_0;
4002#define USTORM_ISCSI_ST_CONTEXT_BMIDDLEOFPDU (0x1<<0)
4003#define USTORM_ISCSI_ST_CONTEXT_BMIDDLEOFPDU_SHIFT 0
4004#define USTORM_ISCSI_ST_CONTEXT_BFENCECQE (0x1<<1)
4005#define USTORM_ISCSI_ST_CONTEXT_BFENCECQE_SHIFT 1
4006#define USTORM_ISCSI_ST_CONTEXT_BRESETCRC (0x1<<2)
4007#define USTORM_ISCSI_ST_CONTEXT_BRESETCRC_SHIFT 2
4008#define USTORM_ISCSI_ST_CONTEXT_RESERVED1 (0x1F<<3)
4009#define USTORM_ISCSI_ST_CONTEXT_RESERVED1_SHIFT 3
4010        u8 task_pdu_cache_index;
4011        u8 task_pbe_cache_index;
4012#elif defined(__LITTLE_ENDIAN)
4013        u8 task_pbe_cache_index;
4014        u8 task_pdu_cache_index;
4015        u8 bitfield_0;
4016#define USTORM_ISCSI_ST_CONTEXT_BMIDDLEOFPDU (0x1<<0)
4017#define USTORM_ISCSI_ST_CONTEXT_BMIDDLEOFPDU_SHIFT 0
4018#define USTORM_ISCSI_ST_CONTEXT_BFENCECQE (0x1<<1)
4019#define USTORM_ISCSI_ST_CONTEXT_BFENCECQE_SHIFT 1
4020#define USTORM_ISCSI_ST_CONTEXT_BRESETCRC (0x1<<2)
4021#define USTORM_ISCSI_ST_CONTEXT_BRESETCRC_SHIFT 2
4022#define USTORM_ISCSI_ST_CONTEXT_RESERVED1 (0x1F<<3)
4023#define USTORM_ISCSI_ST_CONTEXT_RESERVED1_SHIFT 3
4024        u8 hdr_second_byte_union;
4025#endif
4026#if defined(__BIG_ENDIAN)
4027        u16 reserved3;
4028        u8 reserved2;
4029        u8 acDecrement;
4030#elif defined(__LITTLE_ENDIAN)
4031        u8 acDecrement;
4032        u8 reserved2;
4033        u16 reserved3;
4034#endif
4035        u32 task_stat;
4036#if defined(__BIG_ENDIAN)
4037        u8 hdr_opcode;
4038        u8 num_cqs;
4039        u16 reserved5;
4040#elif defined(__LITTLE_ENDIAN)
4041        u16 reserved5;
4042        u8 num_cqs;
4043        u8 hdr_opcode;
4044#endif
4045        u32 negotiated_rx;
4046#define USTORM_ISCSI_ST_CONTEXT_MAX_RECV_PDU_LENGTH (0xFFFFFF<<0)
4047#define USTORM_ISCSI_ST_CONTEXT_MAX_RECV_PDU_LENGTH_SHIFT 0
4048#define USTORM_ISCSI_ST_CONTEXT_MAX_OUTSTANDING_R2TS (0xFF<<24)
4049#define USTORM_ISCSI_ST_CONTEXT_MAX_OUTSTANDING_R2TS_SHIFT 24
4050        u32 negotiated_rx_and_flags;
4051#define USTORM_ISCSI_ST_CONTEXT_MAX_BURST_LENGTH (0xFFFFFF<<0)
4052#define USTORM_ISCSI_ST_CONTEXT_MAX_BURST_LENGTH_SHIFT 0
4053#define USTORM_ISCSI_ST_CONTEXT_B_CQE_POSTED_OR_HEADER_CACHED (0x1<<24)
4054#define USTORM_ISCSI_ST_CONTEXT_B_CQE_POSTED_OR_HEADER_CACHED_SHIFT 24
4055#define USTORM_ISCSI_ST_CONTEXT_B_HDR_DIGEST_EN (0x1<<25)
4056#define USTORM_ISCSI_ST_CONTEXT_B_HDR_DIGEST_EN_SHIFT 25
4057#define USTORM_ISCSI_ST_CONTEXT_B_DATA_DIGEST_EN (0x1<<26)
4058#define USTORM_ISCSI_ST_CONTEXT_B_DATA_DIGEST_EN_SHIFT 26
4059#define USTORM_ISCSI_ST_CONTEXT_B_PROTOCOL_ERROR (0x1<<27)
4060#define USTORM_ISCSI_ST_CONTEXT_B_PROTOCOL_ERROR_SHIFT 27
4061#define USTORM_ISCSI_ST_CONTEXT_B_TASK_VALID (0x1<<28)
4062#define USTORM_ISCSI_ST_CONTEXT_B_TASK_VALID_SHIFT 28
4063#define USTORM_ISCSI_ST_CONTEXT_TASK_TYPE (0x3<<29)
4064#define USTORM_ISCSI_ST_CONTEXT_TASK_TYPE_SHIFT 29
4065#define USTORM_ISCSI_ST_CONTEXT_B_ALL_DATA_ACKED (0x1<<31)
4066#define USTORM_ISCSI_ST_CONTEXT_B_ALL_DATA_ACKED_SHIFT 31
4067};
4068
4069/*
4070 * TCP context region, shared in TOE, RDMA and ISCSI
4071 */
4072struct tstorm_tcp_st_context_section {
4073        u32 flags1;
4074#define TSTORM_TCP_ST_CONTEXT_SECTION_RTT_SRTT (0xFFFFFF<<0)
4075#define TSTORM_TCP_ST_CONTEXT_SECTION_RTT_SRTT_SHIFT 0
4076#define TSTORM_TCP_ST_CONTEXT_SECTION_PAWS_INVALID (0x1<<24)
4077#define TSTORM_TCP_ST_CONTEXT_SECTION_PAWS_INVALID_SHIFT 24
4078#define TSTORM_TCP_ST_CONTEXT_SECTION_TIMESTAMP_EXISTS (0x1<<25)
4079#define TSTORM_TCP_ST_CONTEXT_SECTION_TIMESTAMP_EXISTS_SHIFT 25
4080#define TSTORM_TCP_ST_CONTEXT_SECTION_RESERVED0 (0x1<<26)
4081#define TSTORM_TCP_ST_CONTEXT_SECTION_RESERVED0_SHIFT 26
4082#define TSTORM_TCP_ST_CONTEXT_SECTION_STOP_RX_PAYLOAD (0x1<<27)
4083#define TSTORM_TCP_ST_CONTEXT_SECTION_STOP_RX_PAYLOAD_SHIFT 27
4084#define TSTORM_TCP_ST_CONTEXT_SECTION_KA_ENABLED (0x1<<28)
4085#define TSTORM_TCP_ST_CONTEXT_SECTION_KA_ENABLED_SHIFT 28
4086#define TSTORM_TCP_ST_CONTEXT_SECTION_FIRST_RTO_ESTIMATE (0x1<<29)
4087#define TSTORM_TCP_ST_CONTEXT_SECTION_FIRST_RTO_ESTIMATE_SHIFT 29
4088#define TSTORM_TCP_ST_CONTEXT_SECTION_MAX_SEG_RETRANSMIT_EN (0x1<<30)
4089#define TSTORM_TCP_ST_CONTEXT_SECTION_MAX_SEG_RETRANSMIT_EN_SHIFT 30
4090#define TSTORM_TCP_ST_CONTEXT_SECTION_LAST_ISLE_HAS_FIN (0x1<<31)
4091#define TSTORM_TCP_ST_CONTEXT_SECTION_LAST_ISLE_HAS_FIN_SHIFT 31
4092        u32 flags2;
4093#define TSTORM_TCP_ST_CONTEXT_SECTION_RTT_VARIATION (0xFFFFFF<<0)
4094#define TSTORM_TCP_ST_CONTEXT_SECTION_RTT_VARIATION_SHIFT 0
4095#define TSTORM_TCP_ST_CONTEXT_SECTION_DA_EN (0x1<<24)
4096#define TSTORM_TCP_ST_CONTEXT_SECTION_DA_EN_SHIFT 24
4097#define TSTORM_TCP_ST_CONTEXT_SECTION_DA_COUNTER_EN (0x1<<25)
4098#define TSTORM_TCP_ST_CONTEXT_SECTION_DA_COUNTER_EN_SHIFT 25
4099#define __TSTORM_TCP_ST_CONTEXT_SECTION_KA_PROBE_SENT (0x1<<26)
4100#define __TSTORM_TCP_ST_CONTEXT_SECTION_KA_PROBE_SENT_SHIFT 26
4101#define __TSTORM_TCP_ST_CONTEXT_SECTION_PERSIST_PROBE_SENT (0x1<<27)
4102#define __TSTORM_TCP_ST_CONTEXT_SECTION_PERSIST_PROBE_SENT_SHIFT 27
4103#define TSTORM_TCP_ST_CONTEXT_SECTION_UPDATE_L2_STATSTICS (0x1<<28)
4104#define TSTORM_TCP_ST_CONTEXT_SECTION_UPDATE_L2_STATSTICS_SHIFT 28
4105#define TSTORM_TCP_ST_CONTEXT_SECTION_UPDATE_L4_STATSTICS (0x1<<29)
4106#define TSTORM_TCP_ST_CONTEXT_SECTION_UPDATE_L4_STATSTICS_SHIFT 29
4107#define __TSTORM_TCP_ST_CONTEXT_SECTION_IN_WINDOW_RST_ATTACK (0x1<<30)
4108#define __TSTORM_TCP_ST_CONTEXT_SECTION_IN_WINDOW_RST_ATTACK_SHIFT 30
4109#define __TSTORM_TCP_ST_CONTEXT_SECTION_IN_WINDOW_SYN_ATTACK (0x1<<31)
4110#define __TSTORM_TCP_ST_CONTEXT_SECTION_IN_WINDOW_SYN_ATTACK_SHIFT 31
4111#if defined(__BIG_ENDIAN)
4112        u16 mss;
4113        u8 tcp_sm_state;
4114        u8 rto_exp;
4115#elif defined(__LITTLE_ENDIAN)
4116        u8 rto_exp;
4117        u8 tcp_sm_state;
4118        u16 mss;
4119#endif
4120        u32 rcv_nxt;
4121        u32 timestamp_recent;
4122        u32 timestamp_recent_time;
4123        u32 cwnd;
4124        u32 ss_thresh;
4125        u32 cwnd_accum;
4126        u32 prev_seg_seq;
4127        u32 expected_rel_seq;
4128        u32 recover;
4129#if defined(__BIG_ENDIAN)
4130        u8 retransmit_count;
4131        u8 ka_max_probe_count;
4132        u8 persist_probe_count;
4133        u8 ka_probe_count;
4134#elif defined(__LITTLE_ENDIAN)
4135        u8 ka_probe_count;
4136        u8 persist_probe_count;
4137        u8 ka_max_probe_count;
4138        u8 retransmit_count;
4139#endif
4140#if defined(__BIG_ENDIAN)
4141        u8 statistics_counter_id;
4142        u8 ooo_support_mode;
4143        u8 snd_wnd_scale;
4144        u8 dup_ack_count;
4145#elif defined(__LITTLE_ENDIAN)
4146        u8 dup_ack_count;
4147        u8 snd_wnd_scale;
4148        u8 ooo_support_mode;
4149        u8 statistics_counter_id;
4150#endif
4151        u32 retransmit_start_time;
4152        u32 ka_timeout;
4153        u32 ka_interval;
4154        u32 isle_start_seq;
4155        u32 isle_end_seq;
4156#if defined(__BIG_ENDIAN)
4157        u16 second_isle_address;
4158        u16 recent_seg_wnd;
4159#elif defined(__LITTLE_ENDIAN)
4160        u16 recent_seg_wnd;
4161        u16 second_isle_address;
4162#endif
4163#if defined(__BIG_ENDIAN)
4164        u8 max_isles_ever_happened;
4165        u8 isles_number;
4166        u16 last_isle_address;
4167#elif defined(__LITTLE_ENDIAN)
4168        u16 last_isle_address;
4169        u8 isles_number;
4170        u8 max_isles_ever_happened;
4171#endif
4172        u32 max_rt_time;
4173#if defined(__BIG_ENDIAN)
4174        u16 lsb_mac_address;
4175        u16 vlan_id;
4176#elif defined(__LITTLE_ENDIAN)
4177        u16 vlan_id;
4178        u16 lsb_mac_address;
4179#endif
4180#if defined(__BIG_ENDIAN)
4181        u16 msb_mac_address;
4182        u16 mid_mac_address;
4183#elif defined(__LITTLE_ENDIAN)
4184        u16 mid_mac_address;
4185        u16 msb_mac_address;
4186#endif
4187        u32 rightmost_received_seq;
4188};
4189
4190/*
4191 * Termination variables
4192 */
4193struct iscsi_term_vars {
4194        u8 BitMap;
4195#define ISCSI_TERM_VARS_TCP_STATE (0xF<<0)
4196#define ISCSI_TERM_VARS_TCP_STATE_SHIFT 0
4197#define ISCSI_TERM_VARS_FIN_RECEIVED_SBIT (0x1<<4)
4198#define ISCSI_TERM_VARS_FIN_RECEIVED_SBIT_SHIFT 4
4199#define ISCSI_TERM_VARS_ACK_ON_FIN_RECEIVED_SBIT (0x1<<5)
4200#define ISCSI_TERM_VARS_ACK_ON_FIN_RECEIVED_SBIT_SHIFT 5
4201#define ISCSI_TERM_VARS_TERM_ON_CHIP (0x1<<6)
4202#define ISCSI_TERM_VARS_TERM_ON_CHIP_SHIFT 6
4203#define ISCSI_TERM_VARS_RSRV (0x1<<7)
4204#define ISCSI_TERM_VARS_RSRV_SHIFT 7
4205};
4206
4207/*
4208 * iSCSI context region, used only in iSCSI
4209 */
4210struct tstorm_iscsi_st_context_section {
4211        u32 nalPayload;
4212        u32 b2nh;
4213#if defined(__BIG_ENDIAN)
4214        u16 rq_cons;
4215        u8 flags;
4216#define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_HDR_DIGEST_EN (0x1<<0)
4217#define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_HDR_DIGEST_EN_SHIFT 0
4218#define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DATA_DIGEST_EN (0x1<<1)
4219#define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DATA_DIGEST_EN_SHIFT 1
4220#define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_PARTIAL_HEADER (0x1<<2)
4221#define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_PARTIAL_HEADER_SHIFT 2
4222#define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_FULL_FEATURE (0x1<<3)
4223#define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_FULL_FEATURE_SHIFT 3
4224#define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DROP_ALL_PDUS (0x1<<4)
4225#define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DROP_ALL_PDUS_SHIFT 4
4226#define TSTORM_ISCSI_ST_CONTEXT_SECTION_NALLEN (0x3<<5)
4227#define TSTORM_ISCSI_ST_CONTEXT_SECTION_NALLEN_SHIFT 5
4228#define TSTORM_ISCSI_ST_CONTEXT_SECTION_RSRV0 (0x1<<7)
4229#define TSTORM_ISCSI_ST_CONTEXT_SECTION_RSRV0_SHIFT 7
4230        u8 hdr_bytes_2_fetch;
4231#elif defined(__LITTLE_ENDIAN)
4232        u8 hdr_bytes_2_fetch;
4233        u8 flags;
4234#define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_HDR_DIGEST_EN (0x1<<0)
4235#define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_HDR_DIGEST_EN_SHIFT 0
4236#define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DATA_DIGEST_EN (0x1<<1)
4237#define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DATA_DIGEST_EN_SHIFT 1
4238#define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_PARTIAL_HEADER (0x1<<2)
4239#define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_PARTIAL_HEADER_SHIFT 2
4240#define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_FULL_FEATURE (0x1<<3)
4241#define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_FULL_FEATURE_SHIFT 3
4242#define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DROP_ALL_PDUS (0x1<<4)
4243#define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DROP_ALL_PDUS_SHIFT 4
4244#define TSTORM_ISCSI_ST_CONTEXT_SECTION_NALLEN (0x3<<5)
4245#define TSTORM_ISCSI_ST_CONTEXT_SECTION_NALLEN_SHIFT 5
4246#define TSTORM_ISCSI_ST_CONTEXT_SECTION_RSRV0 (0x1<<7)
4247#define TSTORM_ISCSI_ST_CONTEXT_SECTION_RSRV0_SHIFT 7
4248        u16 rq_cons;
4249#endif
4250        struct regpair rq_db_phy_addr;
4251#if defined(__BIG_ENDIAN)
4252        struct iscsi_term_vars term_vars;
4253        u8 rsrv1;
4254        u16 iscsi_conn_id;
4255#elif defined(__LITTLE_ENDIAN)
4256        u16 iscsi_conn_id;
4257        u8 rsrv1;
4258        struct iscsi_term_vars term_vars;
4259#endif
4260        u32 process_nxt;
4261};
4262
4263/*
4264 * The iSCSI non-aggregative context of Tstorm
4265 */
4266struct tstorm_iscsi_st_context {
4267        struct tstorm_tcp_st_context_section tcp;
4268        struct tstorm_iscsi_st_context_section iscsi;
4269};
4270
4271/*
4272 * Ethernet context section, shared in TOE, RDMA and ISCSI
4273 */
4274struct xstorm_eth_context_section {
4275#if defined(__BIG_ENDIAN)
4276        u8 remote_addr_4;
4277        u8 remote_addr_5;
4278        u8 local_addr_0;
4279        u8 local_addr_1;
4280#elif defined(__LITTLE_ENDIAN)
4281        u8 local_addr_1;
4282        u8 local_addr_0;
4283        u8 remote_addr_5;
4284        u8 remote_addr_4;
4285#endif
4286#if defined(__BIG_ENDIAN)
4287        u8 remote_addr_0;
4288        u8 remote_addr_1;
4289        u8 remote_addr_2;
4290        u8 remote_addr_3;
4291#elif defined(__LITTLE_ENDIAN)
4292        u8 remote_addr_3;
4293        u8 remote_addr_2;
4294        u8 remote_addr_1;
4295        u8 remote_addr_0;
4296#endif
4297#if defined(__BIG_ENDIAN)
4298        u16 reserved_vlan_type;
4299        u16 params;
4300#define XSTORM_ETH_CONTEXT_SECTION_VLAN_ID (0xFFF<<0)
4301#define XSTORM_ETH_CONTEXT_SECTION_VLAN_ID_SHIFT 0
4302#define XSTORM_ETH_CONTEXT_SECTION_CFI (0x1<<12)
4303#define XSTORM_ETH_CONTEXT_SECTION_CFI_SHIFT 12
4304#define XSTORM_ETH_CONTEXT_SECTION_PRIORITY (0x7<<13)
4305#define XSTORM_ETH_CONTEXT_SECTION_PRIORITY_SHIFT 13
4306#elif defined(__LITTLE_ENDIAN)
4307        u16 params;
4308#define XSTORM_ETH_CONTEXT_SECTION_VLAN_ID (0xFFF<<0)
4309#define XSTORM_ETH_CONTEXT_SECTION_VLAN_ID_SHIFT 0
4310#define XSTORM_ETH_CONTEXT_SECTION_CFI (0x1<<12)
4311#define XSTORM_ETH_CONTEXT_SECTION_CFI_SHIFT 12
4312#define XSTORM_ETH_CONTEXT_SECTION_PRIORITY (0x7<<13)
4313#define XSTORM_ETH_CONTEXT_SECTION_PRIORITY_SHIFT 13
4314        u16 reserved_vlan_type;
4315#endif
4316#if defined(__BIG_ENDIAN)
4317        u8 local_addr_2;
4318        u8 local_addr_3;
4319        u8 local_addr_4;
4320        u8 local_addr_5;
4321#elif defined(__LITTLE_ENDIAN)
4322        u8 local_addr_5;
4323        u8 local_addr_4;
4324        u8 local_addr_3;
4325        u8 local_addr_2;
4326#endif
4327};
4328
4329/*
4330 * IpV4 context section, shared in TOE, RDMA and ISCSI
4331 */
4332struct xstorm_ip_v4_context_section {
4333#if defined(__BIG_ENDIAN)
4334        u16 __pbf_hdr_cmd_rsvd_id;
4335        u16 __pbf_hdr_cmd_rsvd_flags_offset;
4336#elif defined(__LITTLE_ENDIAN)
4337        u16 __pbf_hdr_cmd_rsvd_flags_offset;
4338        u16 __pbf_hdr_cmd_rsvd_id;
4339#endif
4340#if defined(__BIG_ENDIAN)
4341        u8 __pbf_hdr_cmd_rsvd_ver_ihl;
4342        u8 tos;
4343        u16 __pbf_hdr_cmd_rsvd_length;
4344#elif defined(__LITTLE_ENDIAN)
4345        u16 __pbf_hdr_cmd_rsvd_length;
4346        u8 tos;
4347        u8 __pbf_hdr_cmd_rsvd_ver_ihl;
4348#endif
4349        u32 ip_local_addr;
4350#if defined(__BIG_ENDIAN)
4351        u8 ttl;
4352        u8 __pbf_hdr_cmd_rsvd_protocol;
4353        u16 __pbf_hdr_cmd_rsvd_csum;
4354#elif defined(__LITTLE_ENDIAN)
4355        u16 __pbf_hdr_cmd_rsvd_csum;
4356        u8 __pbf_hdr_cmd_rsvd_protocol;
4357        u8 ttl;
4358#endif
4359        u32 __pbf_hdr_cmd_rsvd_1;
4360        u32 ip_remote_addr;
4361};
4362
4363/*
4364 * context section, shared in TOE, RDMA and ISCSI
4365 */
4366struct xstorm_padded_ip_v4_context_section {
4367        struct xstorm_ip_v4_context_section ip_v4;
4368        u32 reserved1[4];
4369};
4370
4371/*
4372 * IpV6 context section, shared in TOE, RDMA and ISCSI
4373 */
4374struct xstorm_ip_v6_context_section {
4375#if defined(__BIG_ENDIAN)
4376        u16 pbf_hdr_cmd_rsvd_payload_len;
4377        u8 pbf_hdr_cmd_rsvd_nxt_hdr;
4378        u8 hop_limit;
4379#elif defined(__LITTLE_ENDIAN)
4380        u8 hop_limit;
4381        u8 pbf_hdr_cmd_rsvd_nxt_hdr;
4382        u16 pbf_hdr_cmd_rsvd_payload_len;
4383#endif
4384        u32 priority_flow_label;
4385#define XSTORM_IP_V6_CONTEXT_SECTION_FLOW_LABEL (0xFFFFF<<0)
4386#define XSTORM_IP_V6_CONTEXT_SECTION_FLOW_LABEL_SHIFT 0
4387#define XSTORM_IP_V6_CONTEXT_SECTION_TRAFFIC_CLASS (0xFF<<20)
4388#define XSTORM_IP_V6_CONTEXT_SECTION_TRAFFIC_CLASS_SHIFT 20
4389#define XSTORM_IP_V6_CONTEXT_SECTION_PBF_HDR_CMD_RSVD_VER (0xF<<28)
4390#define XSTORM_IP_V6_CONTEXT_SECTION_PBF_HDR_CMD_RSVD_VER_SHIFT 28
4391        u32 ip_local_addr_lo_hi;
4392        u32 ip_local_addr_lo_lo;
4393        u32 ip_local_addr_hi_hi;
4394        u32 ip_local_addr_hi_lo;
4395        u32 ip_remote_addr_lo_hi;
4396        u32 ip_remote_addr_lo_lo;
4397        u32 ip_remote_addr_hi_hi;
4398        u32 ip_remote_addr_hi_lo;
4399};
4400
4401union xstorm_ip_context_section_types {
4402        struct xstorm_padded_ip_v4_context_section padded_ip_v4;
4403        struct xstorm_ip_v6_context_section ip_v6;
4404};
4405
4406/*
4407 * TCP context section, shared in TOE, RDMA and ISCSI
4408 */
4409struct xstorm_tcp_context_section {
4410        u32 snd_max;
4411#if defined(__BIG_ENDIAN)
4412        u16 remote_port;
4413        u16 local_port;
4414#elif defined(__LITTLE_ENDIAN)
4415        u16 local_port;
4416        u16 remote_port;
4417#endif
4418#if defined(__BIG_ENDIAN)
4419        u8 original_nagle_1b;
4420        u8 ts_enabled;
4421        u16 tcp_params;
4422#define XSTORM_TCP_CONTEXT_SECTION_TOTAL_HEADER_SIZE (0xFF<<0)
4423#define XSTORM_TCP_CONTEXT_SECTION_TOTAL_HEADER_SIZE_SHIFT 0
4424#define __XSTORM_TCP_CONTEXT_SECTION_ECT_BIT (0x1<<8)
4425#define __XSTORM_TCP_CONTEXT_SECTION_ECT_BIT_SHIFT 8
4426#define __XSTORM_TCP_CONTEXT_SECTION_ECN_ENABLED (0x1<<9)
4427#define __XSTORM_TCP_CONTEXT_SECTION_ECN_ENABLED_SHIFT 9
4428#define XSTORM_TCP_CONTEXT_SECTION_SACK_ENABLED (0x1<<10)
4429#define XSTORM_TCP_CONTEXT_SECTION_SACK_ENABLED_SHIFT 10
4430#define XSTORM_TCP_CONTEXT_SECTION_SMALL_WIN_ADV (0x1<<11)
4431#define XSTORM_TCP_CONTEXT_SECTION_SMALL_WIN_ADV_SHIFT 11
4432#define XSTORM_TCP_CONTEXT_SECTION_FIN_SENT_FLAG (0x1<<12)
4433#define XSTORM_TCP_CONTEXT_SECTION_FIN_SENT_FLAG_SHIFT 12
4434#define XSTORM_TCP_CONTEXT_SECTION_WINDOW_SATURATED (0x1<<13)
4435#define XSTORM_TCP_CONTEXT_SECTION_WINDOW_SATURATED_SHIFT 13
4436#define XSTORM_TCP_CONTEXT_SECTION_SLOWPATH_QUEUES_FLUSH_COUNTER (0x3<<14)
4437#define XSTORM_TCP_CONTEXT_SECTION_SLOWPATH_QUEUES_FLUSH_COUNTER_SHIFT 14
4438#elif defined(__LITTLE_ENDIAN)
4439        u16 tcp_params;
4440#define XSTORM_TCP_CONTEXT_SECTION_TOTAL_HEADER_SIZE (0xFF<<0)
4441#define XSTORM_TCP_CONTEXT_SECTION_TOTAL_HEADER_SIZE_SHIFT 0
4442#define __XSTORM_TCP_CONTEXT_SECTION_ECT_BIT (0x1<<8)
4443#define __XSTORM_TCP_CONTEXT_SECTION_ECT_BIT_SHIFT 8
4444#define __XSTORM_TCP_CONTEXT_SECTION_ECN_ENABLED (0x1<<9)
4445#define __XSTORM_TCP_CONTEXT_SECTION_ECN_ENABLED_SHIFT 9
4446#define XSTORM_TCP_CONTEXT_SECTION_SACK_ENABLED (0x1<<10)
4447#define XSTORM_TCP_CONTEXT_SECTION_SACK_ENABLED_SHIFT 10
4448#define XSTORM_TCP_CONTEXT_SECTION_SMALL_WIN_ADV (0x1<<11)
4449#define XSTORM_TCP_CONTEXT_SECTION_SMALL_WIN_ADV_SHIFT 11
4450#define XSTORM_TCP_CONTEXT_SECTION_FIN_SENT_FLAG (0x1<<12)
4451#define XSTORM_TCP_CONTEXT_SECTION_FIN_SENT_FLAG_SHIFT 12
4452#define XSTORM_TCP_CONTEXT_SECTION_WINDOW_SATURATED (0x1<<13)
4453#define XSTORM_TCP_CONTEXT_SECTION_WINDOW_SATURATED_SHIFT 13
4454#define XSTORM_TCP_CONTEXT_SECTION_SLOWPATH_QUEUES_FLUSH_COUNTER (0x3<<14)
4455#define XSTORM_TCP_CONTEXT_SECTION_SLOWPATH_QUEUES_FLUSH_COUNTER_SHIFT 14
4456        u8 ts_enabled;
4457        u8 original_nagle_1b;
4458#endif
4459#if defined(__BIG_ENDIAN)
4460        u16 pseudo_csum;
4461        u16 window_scaling_factor;
4462#elif defined(__LITTLE_ENDIAN)
4463        u16 window_scaling_factor;
4464        u16 pseudo_csum;
4465#endif
4466#if defined(__BIG_ENDIAN)
4467        u16 reserved2;
4468        u8 statistics_counter_id;
4469        u8 statistics_params;
4470#define XSTORM_TCP_CONTEXT_SECTION_UPDATE_L2_STATSTICS (0x1<<0)
4471#define XSTORM_TCP_CONTEXT_SECTION_UPDATE_L2_STATSTICS_SHIFT 0
4472#define XSTORM_TCP_CONTEXT_SECTION_UPDATE_L4_STATSTICS (0x1<<1)
4473#define XSTORM_TCP_CONTEXT_SECTION_UPDATE_L4_STATSTICS_SHIFT 1
4474#define XSTORM_TCP_CONTEXT_SECTION_RESERVED (0x3F<<2)
4475#define XSTORM_TCP_CONTEXT_SECTION_RESERVED_SHIFT 2
4476#elif defined(__LITTLE_ENDIAN)
4477        u8 statistics_params;
4478#define XSTORM_TCP_CONTEXT_SECTION_UPDATE_L2_STATSTICS (0x1<<0)
4479#define XSTORM_TCP_CONTEXT_SECTION_UPDATE_L2_STATSTICS_SHIFT 0
4480#define XSTORM_TCP_CONTEXT_SECTION_UPDATE_L4_STATSTICS (0x1<<1)
4481#define XSTORM_TCP_CONTEXT_SECTION_UPDATE_L4_STATSTICS_SHIFT 1
4482#define XSTORM_TCP_CONTEXT_SECTION_RESERVED (0x3F<<2)
4483#define XSTORM_TCP_CONTEXT_SECTION_RESERVED_SHIFT 2
4484        u8 statistics_counter_id;
4485        u16 reserved2;
4486#endif
4487        u32 ts_time_diff;
4488        u32 __next_timer_expir;
4489};
4490
4491/*
4492 * Common context section, shared in TOE, RDMA and ISCSI
4493 */
4494struct xstorm_common_context_section {
4495        struct xstorm_eth_context_section ethernet;
4496        union xstorm_ip_context_section_types ip_union;
4497        struct xstorm_tcp_context_section tcp;
4498#if defined(__BIG_ENDIAN)
4499        u8 __dcb_val;
4500        u8 flags;
4501#define XSTORM_COMMON_CONTEXT_SECTION_PHYSQ_INITIALIZED (0x1<<0)
4502#define XSTORM_COMMON_CONTEXT_SECTION_PHYSQ_INITIALIZED_SHIFT 0
4503#define XSTORM_COMMON_CONTEXT_SECTION_PBF_PORT (0x7<<1)
4504#define XSTORM_COMMON_CONTEXT_SECTION_PBF_PORT_SHIFT 1
4505#define XSTORM_COMMON_CONTEXT_SECTION_VLAN_MODE (0x1<<4)
4506#define XSTORM_COMMON_CONTEXT_SECTION_VLAN_MODE_SHIFT 4
4507#define XSTORM_COMMON_CONTEXT_SECTION_ORIGINAL_PRIORITY (0x7<<5)
4508#define XSTORM_COMMON_CONTEXT_SECTION_ORIGINAL_PRIORITY_SHIFT 5
4509        u8 reserved;
4510        u8 ip_version_1b;
4511#elif defined(__LITTLE_ENDIAN)
4512        u8 ip_version_1b;
4513        u8 reserved;
4514        u8 flags;
4515#define XSTORM_COMMON_CONTEXT_SECTION_PHYSQ_INITIALIZED (0x1<<0)
4516#define XSTORM_COMMON_CONTEXT_SECTION_PHYSQ_INITIALIZED_SHIFT 0
4517#define XSTORM_COMMON_CONTEXT_SECTION_PBF_PORT (0x7<<1)
4518#define XSTORM_COMMON_CONTEXT_SECTION_PBF_PORT_SHIFT 1
4519#define XSTORM_COMMON_CONTEXT_SECTION_VLAN_MODE (0x1<<4)
4520#define XSTORM_COMMON_CONTEXT_SECTION_VLAN_MODE_SHIFT 4
4521#define XSTORM_COMMON_CONTEXT_SECTION_ORIGINAL_PRIORITY (0x7<<5)
4522#define XSTORM_COMMON_CONTEXT_SECTION_ORIGINAL_PRIORITY_SHIFT 5
4523        u8 __dcb_val;
4524#endif
4525};
4526
4527/*
4528 * Flags used in ISCSI context section
4529 */
4530struct xstorm_iscsi_context_flags {
4531        u8 flags;
4532#define XSTORM_ISCSI_CONTEXT_FLAGS_B_IMMEDIATE_DATA (0x1<<0)
4533#define XSTORM_ISCSI_CONTEXT_FLAGS_B_IMMEDIATE_DATA_SHIFT 0
4534#define XSTORM_ISCSI_CONTEXT_FLAGS_B_INITIAL_R2T (0x1<<1)
4535#define XSTORM_ISCSI_CONTEXT_FLAGS_B_INITIAL_R2T_SHIFT 1
4536#define XSTORM_ISCSI_CONTEXT_FLAGS_B_EN_HEADER_DIGEST (0x1<<2)
4537#define XSTORM_ISCSI_CONTEXT_FLAGS_B_EN_HEADER_DIGEST_SHIFT 2
4538#define XSTORM_ISCSI_CONTEXT_FLAGS_B_EN_DATA_DIGEST (0x1<<3)
4539#define XSTORM_ISCSI_CONTEXT_FLAGS_B_EN_DATA_DIGEST_SHIFT 3
4540#define XSTORM_ISCSI_CONTEXT_FLAGS_B_HQ_BD_WRITTEN (0x1<<4)
4541#define XSTORM_ISCSI_CONTEXT_FLAGS_B_HQ_BD_WRITTEN_SHIFT 4
4542#define XSTORM_ISCSI_CONTEXT_FLAGS_B_LAST_OP_SQ (0x1<<5)
4543#define XSTORM_ISCSI_CONTEXT_FLAGS_B_LAST_OP_SQ_SHIFT 5
4544#define XSTORM_ISCSI_CONTEXT_FLAGS_B_UPDATE_SND_NXT (0x1<<6)
4545#define XSTORM_ISCSI_CONTEXT_FLAGS_B_UPDATE_SND_NXT_SHIFT 6
4546#define XSTORM_ISCSI_CONTEXT_FLAGS_RESERVED4 (0x1<<7)
4547#define XSTORM_ISCSI_CONTEXT_FLAGS_RESERVED4_SHIFT 7
4548};
4549
4550struct iscsi_task_context_entry_x {
4551        u32 data_out_buffer_offset;
4552        u32 itt;
4553        u32 data_sn;
4554};
4555
4556struct iscsi_task_context_entry_xuc_x_write_only {
4557        u32 tx_r2t_sn;
4558};
4559
4560struct iscsi_task_context_entry_xuc_xu_write_both {
4561        u32 sgl_base_lo;
4562        u32 sgl_base_hi;
4563#if defined(__BIG_ENDIAN)
4564        u8 sgl_size;
4565        u8 sge_index;
4566        u16 sge_offset;
4567#elif defined(__LITTLE_ENDIAN)
4568        u16 sge_offset;
4569        u8 sge_index;
4570        u8 sgl_size;
4571#endif
4572};
4573
4574/*
4575 * iSCSI context section
4576 */
4577struct xstorm_iscsi_context_section {
4578        u32 first_burst_length;
4579        u32 max_send_pdu_length;
4580        struct regpair sq_pbl_base;
4581        struct regpair sq_curr_pbe;
4582        struct regpair hq_pbl_base;
4583        struct regpair hq_curr_pbe_base;
4584        struct regpair r2tq_pbl_base;
4585        struct regpair r2tq_curr_pbe_base;
4586        struct regpair task_pbl_base;
4587#if defined(__BIG_ENDIAN)
4588        u16 data_out_count;
4589        struct xstorm_iscsi_context_flags flags;
4590        u8 task_pbl_cache_idx;
4591#elif defined(__LITTLE_ENDIAN)
4592        u8 task_pbl_cache_idx;
4593        struct xstorm_iscsi_context_flags flags;
4594        u16 data_out_count;
4595#endif
4596        u32 seq_more_2_send;
4597        u32 pdu_more_2_send;
4598        struct iscsi_task_context_entry_x temp_tce_x;
4599        struct iscsi_task_context_entry_xuc_x_write_only temp_tce_x_wr;
4600        struct iscsi_task_context_entry_xuc_xu_write_both temp_tce_xu_wr;
4601        struct regpair lun;
4602        u32 exp_data_transfer_len_ttt;
4603        u32 pdu_data_2_rxmit;
4604        u32 rxmit_bytes_2_dr;
4605#if defined(__BIG_ENDIAN)
4606        u16 rxmit_sge_offset;
4607        u16 hq_rxmit_cons;
4608#elif defined(__LITTLE_ENDIAN)
4609        u16 hq_rxmit_cons;
4610        u16 rxmit_sge_offset;
4611#endif
4612#if defined(__BIG_ENDIAN)
4613        u16 r2tq_cons;
4614        u8 rxmit_flags;
4615#define XSTORM_ISCSI_CONTEXT_SECTION_B_NEW_HQ_BD (0x1<<0)
4616#define XSTORM_ISCSI_CONTEXT_SECTION_B_NEW_HQ_BD_SHIFT 0
4617#define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PDU_HDR (0x1<<1)
4618#define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PDU_HDR_SHIFT 1
4619#define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_END_PDU (0x1<<2)
4620#define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_END_PDU_SHIFT 2
4621#define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_DR (0x1<<3)
4622#define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_DR_SHIFT 3
4623#define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_START_DR (0x1<<4)
4624#define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_START_DR_SHIFT 4
4625#define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PADDING (0x3<<5)
4626#define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PADDING_SHIFT 5
4627#define XSTORM_ISCSI_CONTEXT_SECTION_B_ISCSI_CONT_FAST_RXMIT (0x1<<7)
4628#define XSTORM_ISCSI_CONTEXT_SECTION_B_ISCSI_CONT_FAST_RXMIT_SHIFT 7
4629        u8 rxmit_sge_idx;
4630#elif defined(__LITTLE_ENDIAN)
4631        u8 rxmit_sge_idx;
4632        u8 rxmit_flags;
4633#define XSTORM_ISCSI_CONTEXT_SECTION_B_NEW_HQ_BD (0x1<<0)
4634#define XSTORM_ISCSI_CONTEXT_SECTION_B_NEW_HQ_BD_SHIFT 0
4635#define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PDU_HDR (0x1<<1)
4636#define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PDU_HDR_SHIFT 1
4637#define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_END_PDU (0x1<<2)
4638#define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_END_PDU_SHIFT 2
4639#define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_DR (0x1<<3)
4640#define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_DR_SHIFT 3
4641#define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_START_DR (0x1<<4)
4642#define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_START_DR_SHIFT 4
4643#define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PADDING (0x3<<5)
4644#define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PADDING_SHIFT 5
4645#define XSTORM_ISCSI_CONTEXT_SECTION_B_ISCSI_CONT_FAST_RXMIT (0x1<<7)
4646#define XSTORM_ISCSI_CONTEXT_SECTION_B_ISCSI_CONT_FAST_RXMIT_SHIFT 7
4647        u16 r2tq_cons;
4648#endif
4649        u32 hq_rxmit_tcp_seq;
4650};
4651
4652/*
4653 * Xstorm iSCSI Storm Context
4654 */
4655struct xstorm_iscsi_st_context {
4656        struct xstorm_common_context_section common;
4657        struct xstorm_iscsi_context_section iscsi;
4658};
4659
4660/*
4661 * Iscsi connection context
4662 */
4663struct iscsi_context {
4664        struct ustorm_iscsi_st_context ustorm_st_context;
4665        struct tstorm_iscsi_st_context tstorm_st_context;
4666        struct xstorm_iscsi_ag_context xstorm_ag_context;
4667        struct tstorm_iscsi_ag_context tstorm_ag_context;
4668        struct cstorm_iscsi_ag_context cstorm_ag_context;
4669        struct ustorm_iscsi_ag_context ustorm_ag_context;
4670        struct timers_block_context timers_context;
4671        struct regpair upb_context;
4672        struct xstorm_iscsi_st_context xstorm_st_context;
4673        struct regpair xpb_context;
4674        struct cstorm_iscsi_st_context cstorm_st_context;
4675};
4676
4677
4678/*
4679 * PDU header of an iSCSI DATA-OUT
4680 */
4681struct iscsi_data_pdu_hdr_little_endian {
4682#if defined(__BIG_ENDIAN)
4683        u8 opcode;
4684        u8 op_attr;
4685#define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_RSRV1 (0x7F<<0)
4686#define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_RSRV1_SHIFT 0
4687#define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_FINAL_FLAG (0x1<<7)
4688#define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_FINAL_FLAG_SHIFT 7
4689        u16 rsrv0;
4690#elif defined(__LITTLE_ENDIAN)
4691        u16 rsrv0;
4692        u8 op_attr;
4693#define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_RSRV1 (0x7F<<0)
4694#define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_RSRV1_SHIFT 0
4695#define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_FINAL_FLAG (0x1<<7)
4696#define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_FINAL_FLAG_SHIFT 7
4697        u8 opcode;
4698#endif
4699        u32 data_fields;
4700#define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH (0xFFFFFF<<0)
4701#define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH_SHIFT 0
4702#define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH (0xFF<<24)
4703#define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH_SHIFT 24
4704        struct regpair lun;
4705        u32 itt;
4706        u32 ttt;
4707        u32 rsrv2;
4708        u32 exp_stat_sn;
4709        u32 rsrv3;
4710        u32 data_sn;
4711        u32 buffer_offset;
4712        u32 rsrv4;
4713};
4714
4715
4716/*
4717 * PDU header of an iSCSI login request
4718 */
4719struct iscsi_login_req_hdr_little_endian {
4720#if defined(__BIG_ENDIAN)
4721        u8 opcode;
4722        u8 op_attr;
4723#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_NSG (0x3<<0)
4724#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_NSG_SHIFT 0
4725#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_CSG (0x3<<2)
4726#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_CSG_SHIFT 2
4727#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_RSRV0 (0x3<<4)
4728#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_RSRV0_SHIFT 4
4729#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_CONTINUE_FLG (0x1<<6)
4730#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_CONTINUE_FLG_SHIFT 6
4731#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_TRANSIT (0x1<<7)
4732#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_TRANSIT_SHIFT 7
4733        u8 version_max;
4734        u8 version_min;
4735#elif defined(__LITTLE_ENDIAN)
4736        u8 version_min;
4737        u8 version_max;
4738        u8 op_attr;
4739#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_NSG (0x3<<0)
4740#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_NSG_SHIFT 0
4741#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_CSG (0x3<<2)
4742#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_CSG_SHIFT 2
4743#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_RSRV0 (0x3<<4)
4744#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_RSRV0_SHIFT 4
4745#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_CONTINUE_FLG (0x1<<6)
4746#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_CONTINUE_FLG_SHIFT 6
4747#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_TRANSIT (0x1<<7)
4748#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_TRANSIT_SHIFT 7
4749        u8 opcode;
4750#endif
4751        u32 data_fields;
4752#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH (0xFFFFFF<<0)
4753#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH_SHIFT 0
4754#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH (0xFF<<24)
4755#define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH_SHIFT 24
4756        u32 isid_lo;
4757#if defined(__BIG_ENDIAN)
4758        u16 isid_hi;
4759        u16 tsih;
4760#elif defined(__LITTLE_ENDIAN)
4761        u16 tsih;
4762        u16 isid_hi;
4763#endif
4764        u32 itt;
4765#if defined(__BIG_ENDIAN)
4766        u16 cid;
4767        u16 rsrv1;
4768#elif defined(__LITTLE_ENDIAN)
4769        u16 rsrv1;
4770        u16 cid;
4771#endif
4772        u32 cmd_sn;
4773        u32 exp_stat_sn;
4774        u32 rsrv2[4];
4775};
4776
4777/*
4778 * PDU header of an iSCSI logout request
4779 */
4780struct iscsi_logout_req_hdr_little_endian {
4781#if defined(__BIG_ENDIAN)
4782        u8 opcode;
4783        u8 op_attr;
4784#define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_REASON_CODE (0x7F<<0)
4785#define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_REASON_CODE_SHIFT 0
4786#define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_RSRV1_1 (0x1<<7)
4787#define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_RSRV1_1_SHIFT 7
4788        u16 rsrv0;
4789#elif defined(__LITTLE_ENDIAN)
4790        u16 rsrv0;
4791        u8 op_attr;
4792#define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_REASON_CODE (0x7F<<0)
4793#define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_REASON_CODE_SHIFT 0
4794#define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_RSRV1_1 (0x1<<7)
4795#define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_RSRV1_1_SHIFT 7
4796        u8 opcode;
4797#endif
4798        u32 data_fields;
4799#define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH (0xFFFFFF<<0)
4800#define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH_SHIFT 0
4801#define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH (0xFF<<24)
4802#define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH_SHIFT 24
4803        u32 rsrv2[2];
4804        u32 itt;
4805#if defined(__BIG_ENDIAN)
4806        u16 cid;
4807        u16 rsrv1;
4808#elif defined(__LITTLE_ENDIAN)
4809        u16 rsrv1;
4810        u16 cid;
4811#endif
4812        u32 cmd_sn;
4813        u32 exp_stat_sn;
4814        u32 rsrv3[4];
4815};
4816
4817/*
4818 * PDU header of an iSCSI TMF request
4819 */
4820struct iscsi_tmf_req_hdr_little_endian {
4821#if defined(__BIG_ENDIAN)
4822        u8 opcode;
4823        u8 op_attr;
4824#define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_FUNCTION (0x7F<<0)
4825#define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_FUNCTION_SHIFT 0
4826#define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_RSRV1_1 (0x1<<7)
4827#define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_RSRV1_1_SHIFT 7
4828        u16 rsrv0;
4829#elif defined(__LITTLE_ENDIAN)
4830        u16 rsrv0;
4831        u8 op_attr;
4832#define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_FUNCTION (0x7F<<0)
4833#define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_FUNCTION_SHIFT 0
4834#define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_RSRV1_1 (0x1<<7)
4835#define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_RSRV1_1_SHIFT 7
4836        u8 opcode;
4837#endif
4838        u32 data_fields;
4839#define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH (0xFFFFFF<<0)
4840#define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH_SHIFT 0
4841#define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH (0xFF<<24)
4842#define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH_SHIFT 24
4843        struct regpair lun;
4844        u32 itt;
4845        u32 referenced_task_tag;
4846        u32 cmd_sn;
4847        u32 exp_stat_sn;
4848        u32 ref_cmd_sn;
4849        u32 exp_data_sn;
4850        u32 rsrv2[2];
4851};
4852
4853/*
4854 * PDU header of an iSCSI Text request
4855 */
4856struct iscsi_text_req_hdr_little_endian {
4857#if defined(__BIG_ENDIAN)
4858        u8 opcode;
4859        u8 op_attr;
4860#define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_RSRV1 (0x3F<<0)
4861#define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_RSRV1_SHIFT 0
4862#define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_CONTINUE_FLG (0x1<<6)
4863#define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_CONTINUE_FLG_SHIFT 6
4864#define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_FINAL (0x1<<7)
4865#define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_FINAL_SHIFT 7
4866        u16 rsrv0;
4867#elif defined(__LITTLE_ENDIAN)
4868        u16 rsrv0;
4869        u8 op_attr;
4870#define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_RSRV1 (0x3F<<0)
4871#define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_RSRV1_SHIFT 0
4872#define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_CONTINUE_FLG (0x1<<6)
4873#define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_CONTINUE_FLG_SHIFT 6
4874#define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_FINAL (0x1<<7)
4875#define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_FINAL_SHIFT 7
4876        u8 opcode;
4877#endif
4878        u32 data_fields;
4879#define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH (0xFFFFFF<<0)
4880#define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH_SHIFT 0
4881#define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH (0xFF<<24)
4882#define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH_SHIFT 24
4883        struct regpair lun;
4884        u32 itt;
4885        u32 ttt;
4886        u32 cmd_sn;
4887        u32 exp_stat_sn;
4888        u32 rsrv3[4];
4889};
4890
4891/*
4892 * PDU header of an iSCSI Nop-Out
4893 */
4894struct iscsi_nop_out_hdr_little_endian {
4895#if defined(__BIG_ENDIAN)
4896        u8 opcode;
4897        u8 op_attr;
4898#define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_RSRV1 (0x7F<<0)
4899#define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_RSRV1_SHIFT 0
4900#define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_RSRV2_1 (0x1<<7)
4901#define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_RSRV2_1_SHIFT 7
4902        u16 rsrv0;
4903#elif defined(__LITTLE_ENDIAN)
4904        u16 rsrv0;
4905        u8 op_attr;
4906#define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_RSRV1 (0x7F<<0)
4907#define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_RSRV1_SHIFT 0
4908#define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_RSRV2_1 (0x1<<7)
4909#define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_RSRV2_1_SHIFT 7
4910        u8 opcode;
4911#endif
4912        u32 data_fields;
4913#define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH (0xFFFFFF<<0)
4914#define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH_SHIFT 0
4915#define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH (0xFF<<24)
4916#define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH_SHIFT 24
4917        struct regpair lun;
4918        u32 itt;
4919        u32 ttt;
4920        u32 cmd_sn;
4921        u32 exp_stat_sn;
4922        u32 rsrv3[4];
4923};
4924
4925/*
4926 * iscsi pdu headers in little endian form.
4927 */
4928union iscsi_pdu_headers_little_endian {
4929        u32 fullHeaderSize[12];
4930        struct iscsi_cmd_pdu_hdr_little_endian command_pdu_hdr;
4931        struct iscsi_data_pdu_hdr_little_endian data_out_pdu_hdr;
4932        struct iscsi_login_req_hdr_little_endian login_req_pdu_hdr;
4933        struct iscsi_logout_req_hdr_little_endian logout_req_pdu_hdr;
4934        struct iscsi_tmf_req_hdr_little_endian tmf_req_pdu_hdr;
4935        struct iscsi_text_req_hdr_little_endian text_req_pdu_hdr;
4936        struct iscsi_nop_out_hdr_little_endian nop_out_pdu_hdr;
4937};
4938
4939struct iscsi_hq_bd {
4940        union iscsi_pdu_headers_little_endian pdu_header;
4941#if defined(__BIG_ENDIAN)
4942        u16 reserved1;
4943        u16 lcl_cmp_flg;
4944#elif defined(__LITTLE_ENDIAN)
4945        u16 lcl_cmp_flg;
4946        u16 reserved1;
4947#endif
4948        u32 sgl_base_lo;
4949        u32 sgl_base_hi;
4950#if defined(__BIG_ENDIAN)
4951        u8 sgl_size;
4952        u8 sge_index;
4953        u16 sge_offset;
4954#elif defined(__LITTLE_ENDIAN)
4955        u16 sge_offset;
4956        u8 sge_index;
4957        u8 sgl_size;
4958#endif
4959};
4960
4961
4962/*
4963 * CQE data for L2 OOO connection $$KEEP_ENDIANNESS$$
4964 */
4965struct iscsi_l2_ooo_data {
4966        __le32 iscsi_cid;
4967        u8 drop_isle;
4968        u8 drop_size;
4969        u8 ooo_opcode;
4970        u8 ooo_isle;
4971        u8 reserved[8];
4972};
4973
4974
4975
4976
4977
4978
4979struct iscsi_task_context_entry_xuc_c_write_only {
4980        u32 total_data_acked;
4981};
4982
4983struct iscsi_task_context_r2t_table_entry {
4984        u32 ttt;
4985        u32 desired_data_len;
4986};
4987
4988struct iscsi_task_context_entry_xuc_u_write_only {
4989        u32 exp_r2t_sn;
4990        struct iscsi_task_context_r2t_table_entry r2t_table[4];
4991#if defined(__BIG_ENDIAN)
4992        u16 data_in_count;
4993        u8 cq_id;
4994        u8 valid_1b;
4995#elif defined(__LITTLE_ENDIAN)
4996        u8 valid_1b;
4997        u8 cq_id;
4998        u16 data_in_count;
4999#endif
5000};
5001
5002struct iscsi_task_context_entry_xuc {
5003        struct iscsi_task_context_entry_xuc_c_write_only write_c;
5004        u32 exp_data_transfer_len;
5005        struct iscsi_task_context_entry_xuc_x_write_only write_x;
5006        u32 lun_lo;
5007        struct iscsi_task_context_entry_xuc_xu_write_both write_xu;
5008        u32 lun_hi;
5009        struct iscsi_task_context_entry_xuc_u_write_only write_u;
5010};
5011
5012struct iscsi_task_context_entry_u {
5013        u32 exp_r2t_buff_offset;
5014        u32 rem_rcv_len;
5015        u32 exp_data_sn;
5016};
5017
5018struct iscsi_task_context_entry {
5019        struct iscsi_task_context_entry_x tce_x;
5020#if defined(__BIG_ENDIAN)
5021        u16 data_out_count;
5022        u16 rsrv0;
5023#elif defined(__LITTLE_ENDIAN)
5024        u16 rsrv0;
5025        u16 data_out_count;
5026#endif
5027        struct iscsi_task_context_entry_xuc tce_xuc;
5028        struct iscsi_task_context_entry_u tce_u;
5029        u32 rsrv1[7];
5030};
5031
5032
5033
5034
5035
5036
5037
5038
5039struct iscsi_task_context_entry_xuc_x_init_only {
5040        struct regpair lun;
5041        u32 exp_data_transfer_len;
5042};
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060/*
5061 * ipv6 structure
5062 */
5063struct ip_v6_addr {
5064        u32 ip_addr_lo_lo;
5065        u32 ip_addr_lo_hi;
5066        u32 ip_addr_hi_lo;
5067        u32 ip_addr_hi_hi;
5068};
5069
5070
5071
5072/*
5073 * l5cm- connection identification params
5074 */
5075struct l5cm_conn_addr_params {
5076        u32 pmtu;
5077#if defined(__BIG_ENDIAN)
5078        u8 remote_addr_3;
5079        u8 remote_addr_2;
5080        u8 remote_addr_1;
5081        u8 remote_addr_0;
5082#elif defined(__LITTLE_ENDIAN)
5083        u8 remote_addr_0;
5084        u8 remote_addr_1;
5085        u8 remote_addr_2;
5086        u8 remote_addr_3;
5087#endif
5088#if defined(__BIG_ENDIAN)
5089        u16 params;
5090#define L5CM_CONN_ADDR_PARAMS_IP_VERSION (0x1<<0)
5091#define L5CM_CONN_ADDR_PARAMS_IP_VERSION_SHIFT 0
5092#define L5CM_CONN_ADDR_PARAMS_RSRV (0x7FFF<<1)
5093#define L5CM_CONN_ADDR_PARAMS_RSRV_SHIFT 1
5094        u8 remote_addr_5;
5095        u8 remote_addr_4;
5096#elif defined(__LITTLE_ENDIAN)
5097        u8 remote_addr_4;
5098        u8 remote_addr_5;
5099        u16 params;
5100#define L5CM_CONN_ADDR_PARAMS_IP_VERSION (0x1<<0)
5101#define L5CM_CONN_ADDR_PARAMS_IP_VERSION_SHIFT 0
5102#define L5CM_CONN_ADDR_PARAMS_RSRV (0x7FFF<<1)
5103#define L5CM_CONN_ADDR_PARAMS_RSRV_SHIFT 1
5104#endif
5105        struct ip_v6_addr local_ip_addr;
5106        struct ip_v6_addr remote_ip_addr;
5107        u32 ipv6_flow_label_20b;
5108        u32 reserved1;
5109#if defined(__BIG_ENDIAN)
5110        u16 remote_tcp_port;
5111        u16 local_tcp_port;
5112#elif defined(__LITTLE_ENDIAN)
5113        u16 local_tcp_port;
5114        u16 remote_tcp_port;
5115#endif
5116};
5117
5118/*
5119 * l5cm-xstorm connection buffer
5120 */
5121struct l5cm_xstorm_conn_buffer {
5122#if defined(__BIG_ENDIAN)
5123        u16 rsrv1;
5124        u16 params;
5125#define L5CM_XSTORM_CONN_BUFFER_NAGLE_ENABLE (0x1<<0)
5126#define L5CM_XSTORM_CONN_BUFFER_NAGLE_ENABLE_SHIFT 0
5127#define L5CM_XSTORM_CONN_BUFFER_RSRV (0x7FFF<<1)
5128#define L5CM_XSTORM_CONN_BUFFER_RSRV_SHIFT 1
5129#elif defined(__LITTLE_ENDIAN)
5130        u16 params;
5131#define L5CM_XSTORM_CONN_BUFFER_NAGLE_ENABLE (0x1<<0)
5132#define L5CM_XSTORM_CONN_BUFFER_NAGLE_ENABLE_SHIFT 0
5133#define L5CM_XSTORM_CONN_BUFFER_RSRV (0x7FFF<<1)
5134#define L5CM_XSTORM_CONN_BUFFER_RSRV_SHIFT 1
5135        u16 rsrv1;
5136#endif
5137#if defined(__BIG_ENDIAN)
5138        u16 mss;
5139        u16 pseudo_header_checksum;
5140#elif defined(__LITTLE_ENDIAN)
5141        u16 pseudo_header_checksum;
5142        u16 mss;
5143#endif
5144        u32 rcv_buf;
5145        u32 rsrv2;
5146        struct regpair context_addr;
5147};
5148
5149/*
5150 * l5cm-tstorm connection buffer
5151 */
5152struct l5cm_tstorm_conn_buffer {
5153        u32 rsrv1[2];
5154#if defined(__BIG_ENDIAN)
5155        u16 params;
5156#define L5CM_TSTORM_CONN_BUFFER_DELAYED_ACK_ENABLE (0x1<<0)
5157#define L5CM_TSTORM_CONN_BUFFER_DELAYED_ACK_ENABLE_SHIFT 0
5158#define L5CM_TSTORM_CONN_BUFFER_RSRV (0x7FFF<<1)
5159#define L5CM_TSTORM_CONN_BUFFER_RSRV_SHIFT 1
5160        u8 ka_max_probe_count;
5161        u8 ka_enable;
5162#elif defined(__LITTLE_ENDIAN)
5163        u8 ka_enable;
5164        u8 ka_max_probe_count;
5165        u16 params;
5166#define L5CM_TSTORM_CONN_BUFFER_DELAYED_ACK_ENABLE (0x1<<0)
5167#define L5CM_TSTORM_CONN_BUFFER_DELAYED_ACK_ENABLE_SHIFT 0
5168#define L5CM_TSTORM_CONN_BUFFER_RSRV (0x7FFF<<1)
5169#define L5CM_TSTORM_CONN_BUFFER_RSRV_SHIFT 1
5170#endif
5171        u32 ka_timeout;
5172        u32 ka_interval;
5173        u32 max_rt_time;
5174};
5175
5176/*
5177 * l5cm connection buffer for active side
5178 */
5179struct l5cm_active_conn_buffer {
5180        struct l5cm_conn_addr_params conn_addr_buf;
5181        struct l5cm_xstorm_conn_buffer xstorm_conn_buffer;
5182        struct l5cm_tstorm_conn_buffer tstorm_conn_buffer;
5183};
5184
5185
5186
5187/*
5188 * The l5cm opaque buffer passed in add new connection ramrod passive side
5189 */
5190struct l5cm_hash_input_string {
5191        u32 __opaque1;
5192#if defined(__BIG_ENDIAN)
5193        u16 __opaque3;
5194        u16 __opaque2;
5195#elif defined(__LITTLE_ENDIAN)
5196        u16 __opaque2;
5197        u16 __opaque3;
5198#endif
5199        struct ip_v6_addr __opaque4;
5200        struct ip_v6_addr __opaque5;
5201        u32 __opaque6;
5202        u32 __opaque7[5];
5203};
5204
5205
5206/*
5207 * syn cookie component
5208 */
5209struct l5cm_syn_cookie_comp {
5210        u32 __opaque;
5211};
5212
5213/*
5214 * data related to listeners of a TCP port
5215 */
5216struct l5cm_port_listener_data {
5217        u8 params;
5218#define L5CM_PORT_LISTENER_DATA_ENABLE (0x1<<0)
5219#define L5CM_PORT_LISTENER_DATA_ENABLE_SHIFT 0
5220#define L5CM_PORT_LISTENER_DATA_IP_INDEX (0xF<<1)
5221#define L5CM_PORT_LISTENER_DATA_IP_INDEX_SHIFT 1
5222#define L5CM_PORT_LISTENER_DATA_NET_FILTER (0x1<<5)
5223#define L5CM_PORT_LISTENER_DATA_NET_FILTER_SHIFT 5
5224#define L5CM_PORT_LISTENER_DATA_DEFFERED_MODE (0x1<<6)
5225#define L5CM_PORT_LISTENER_DATA_DEFFERED_MODE_SHIFT 6
5226#define L5CM_PORT_LISTENER_DATA_MPA_MODE (0x1<<7)
5227#define L5CM_PORT_LISTENER_DATA_MPA_MODE_SHIFT 7
5228};
5229
5230/*
5231 * Opaque structure passed from U to X when final ack arrives
5232 */
5233struct l5cm_opaque_buf {
5234        u32 __opaque1;
5235        u32 __opaque2;
5236        u32 __opaque3;
5237        u32 __opaque4;
5238        struct l5cm_syn_cookie_comp __opaque5;
5239#if defined(__BIG_ENDIAN)
5240        u16 rsrv2;
5241        u8 rsrv;
5242        struct l5cm_port_listener_data __opaque6;
5243#elif defined(__LITTLE_ENDIAN)
5244        struct l5cm_port_listener_data __opaque6;
5245        u8 rsrv;
5246        u16 rsrv2;
5247#endif
5248};
5249
5250
5251/*
5252 * l5cm slow path element
5253 */
5254struct l5cm_packet_size {
5255        u32 size;
5256        u32 rsrv;
5257};
5258
5259
5260/*
5261 * The final-ack union structure in PCS entry after final ack arrived
5262 */
5263struct l5cm_pcse_ack {
5264        struct l5cm_xstorm_conn_buffer tx_socket_params;
5265        struct l5cm_opaque_buf opaque_buf;
5266        struct l5cm_tstorm_conn_buffer rx_socket_params;
5267};
5268
5269
5270/*
5271 * The syn union structure in PCS entry after syn arrived
5272 */
5273struct l5cm_pcse_syn {
5274        struct l5cm_opaque_buf opaque_buf;
5275        u32 rsrv[12];
5276};
5277
5278
5279/*
5280 * pcs entry data for passive connections
5281 */
5282struct l5cm_pcs_attributes {
5283#if defined(__BIG_ENDIAN)
5284        u16 pcs_id;
5285        u8 status;
5286        u8 flags;
5287#define L5CM_PCS_ATTRIBUTES_NET_FILTER (0x1<<0)
5288#define L5CM_PCS_ATTRIBUTES_NET_FILTER_SHIFT 0
5289#define L5CM_PCS_ATTRIBUTES_CALCULATE_HASH (0x1<<1)
5290#define L5CM_PCS_ATTRIBUTES_CALCULATE_HASH_SHIFT 1
5291#define L5CM_PCS_ATTRIBUTES_COMPARE_HASH_RESULT (0x1<<2)
5292#define L5CM_PCS_ATTRIBUTES_COMPARE_HASH_RESULT_SHIFT 2
5293#define L5CM_PCS_ATTRIBUTES_QUERY_ULP_ACCEPT (0x1<<3)
5294#define L5CM_PCS_ATTRIBUTES_QUERY_ULP_ACCEPT_SHIFT 3
5295#define L5CM_PCS_ATTRIBUTES_FIND_DEST_MAC (0x1<<4)
5296#define L5CM_PCS_ATTRIBUTES_FIND_DEST_MAC_SHIFT 4
5297#define L5CM_PCS_ATTRIBUTES_L4_OFFLOAD (0x1<<5)
5298#define L5CM_PCS_ATTRIBUTES_L4_OFFLOAD_SHIFT 5
5299#define L5CM_PCS_ATTRIBUTES_FORWARD_PACKET (0x1<<6)
5300#define L5CM_PCS_ATTRIBUTES_FORWARD_PACKET_SHIFT 6
5301#define L5CM_PCS_ATTRIBUTES_RSRV (0x1<<7)
5302#define L5CM_PCS_ATTRIBUTES_RSRV_SHIFT 7
5303#elif defined(__LITTLE_ENDIAN)
5304        u8 flags;
5305#define L5CM_PCS_ATTRIBUTES_NET_FILTER (0x1<<0)
5306#define L5CM_PCS_ATTRIBUTES_NET_FILTER_SHIFT 0
5307#define L5CM_PCS_ATTRIBUTES_CALCULATE_HASH (0x1<<1)
5308#define L5CM_PCS_ATTRIBUTES_CALCULATE_HASH_SHIFT 1
5309#define L5CM_PCS_ATTRIBUTES_COMPARE_HASH_RESULT (0x1<<2)
5310#define L5CM_PCS_ATTRIBUTES_COMPARE_HASH_RESULT_SHIFT 2
5311#define L5CM_PCS_ATTRIBUTES_QUERY_ULP_ACCEPT (0x1<<3)
5312#define L5CM_PCS_ATTRIBUTES_QUERY_ULP_ACCEPT_SHIFT 3
5313#define L5CM_PCS_ATTRIBUTES_FIND_DEST_MAC (0x1<<4)
5314#define L5CM_PCS_ATTRIBUTES_FIND_DEST_MAC_SHIFT 4
5315#define L5CM_PCS_ATTRIBUTES_L4_OFFLOAD (0x1<<5)
5316#define L5CM_PCS_ATTRIBUTES_L4_OFFLOAD_SHIFT 5
5317#define L5CM_PCS_ATTRIBUTES_FORWARD_PACKET (0x1<<6)
5318#define L5CM_PCS_ATTRIBUTES_FORWARD_PACKET_SHIFT 6
5319#define L5CM_PCS_ATTRIBUTES_RSRV (0x1<<7)
5320#define L5CM_PCS_ATTRIBUTES_RSRV_SHIFT 7
5321        u8 status;
5322        u16 pcs_id;
5323#endif
5324};
5325
5326
5327union l5cm_seg_params {
5328        struct l5cm_pcse_syn syn_seg_params;
5329        struct l5cm_pcse_ack ack_seg_params;
5330};
5331
5332/*
5333 * pcs entry data for passive connections
5334 */
5335struct l5cm_pcs_hdr {
5336        struct l5cm_hash_input_string hash_input_string;
5337        struct l5cm_conn_addr_params conn_addr_buf;
5338        u32 cid;
5339        u32 hash_result;
5340        union l5cm_seg_params seg_params;
5341        struct l5cm_pcs_attributes att;
5342#if defined(__BIG_ENDIAN)
5343        u16 rsrv;
5344        u16 rx_seg_size;
5345#elif defined(__LITTLE_ENDIAN)
5346        u16 rx_seg_size;
5347        u16 rsrv;
5348#endif
5349};
5350
5351/*
5352 * pcs entry for passive connections
5353 */
5354struct l5cm_pcs_entry {
5355        struct l5cm_pcs_hdr hdr;
5356        u8 rx_segment[1516];
5357};
5358
5359
5360
5361
5362/*
5363 * l5cm connection parameters
5364 */
5365union l5cm_reduce_param_union {
5366        u32 opaque1;
5367        u32 opaque2;
5368};
5369
5370/*
5371 * l5cm connection parameters
5372 */
5373struct l5cm_reduce_conn {
5374        union l5cm_reduce_param_union opaque1;
5375        u32 opaque2;
5376};
5377
5378/*
5379 * l5cm slow path element
5380 */
5381union l5cm_specific_data {
5382        u8 protocol_data[8];
5383        struct regpair phy_address;
5384        struct l5cm_packet_size packet_size;
5385        struct l5cm_reduce_conn reduced_conn;
5386};
5387
5388/*
5389 * l5 slow path element
5390 */
5391struct l5cm_spe {
5392        struct spe_hdr hdr;
5393        union l5cm_specific_data data;
5394};
5395
5396
5397
5398
5399/*
5400 * Termination variables
5401 */
5402struct l5cm_term_vars {
5403        u8 BitMap;
5404#define L5CM_TERM_VARS_TCP_STATE (0xF<<0)
5405#define L5CM_TERM_VARS_TCP_STATE_SHIFT 0
5406#define L5CM_TERM_VARS_FIN_RECEIVED_SBIT (0x1<<4)
5407#define L5CM_TERM_VARS_FIN_RECEIVED_SBIT_SHIFT 4
5408#define L5CM_TERM_VARS_ACK_ON_FIN_RECEIVED_SBIT (0x1<<5)
5409#define L5CM_TERM_VARS_ACK_ON_FIN_RECEIVED_SBIT_SHIFT 5
5410#define L5CM_TERM_VARS_TERM_ON_CHIP (0x1<<6)
5411#define L5CM_TERM_VARS_TERM_ON_CHIP_SHIFT 6
5412#define L5CM_TERM_VARS_RSRV (0x1<<7)
5413#define L5CM_TERM_VARS_RSRV_SHIFT 7
5414};
5415
5416
5417
5418
5419/*
5420 * Tstorm Tcp flags
5421 */
5422struct tstorm_l5cm_tcp_flags {
5423        u16 flags;
5424#define TSTORM_L5CM_TCP_FLAGS_VLAN_ID (0xFFF<<0)
5425#define TSTORM_L5CM_TCP_FLAGS_VLAN_ID_SHIFT 0
5426#define TSTORM_L5CM_TCP_FLAGS_RSRV0 (0x1<<12)
5427#define TSTORM_L5CM_TCP_FLAGS_RSRV0_SHIFT 12
5428#define TSTORM_L5CM_TCP_FLAGS_TS_ENABLED (0x1<<13)
5429#define TSTORM_L5CM_TCP_FLAGS_TS_ENABLED_SHIFT 13
5430#define TSTORM_L5CM_TCP_FLAGS_RSRV1 (0x3<<14)
5431#define TSTORM_L5CM_TCP_FLAGS_RSRV1_SHIFT 14
5432};
5433
5434
5435/*
5436 * Xstorm Tcp flags
5437 */
5438struct xstorm_l5cm_tcp_flags {
5439        u8 flags;
5440#define XSTORM_L5CM_TCP_FLAGS_ENC_ENABLED (0x1<<0)
5441#define XSTORM_L5CM_TCP_FLAGS_ENC_ENABLED_SHIFT 0
5442#define XSTORM_L5CM_TCP_FLAGS_TS_ENABLED (0x1<<1)
5443#define XSTORM_L5CM_TCP_FLAGS_TS_ENABLED_SHIFT 1
5444#define XSTORM_L5CM_TCP_FLAGS_WND_SCL_EN (0x1<<2)
5445#define XSTORM_L5CM_TCP_FLAGS_WND_SCL_EN_SHIFT 2
5446#define XSTORM_L5CM_TCP_FLAGS_RSRV (0x1F<<3)
5447#define XSTORM_L5CM_TCP_FLAGS_RSRV_SHIFT 3
5448};
5449
5450
5451
5452/*
5453 * Out-of-order states
5454 */
5455enum tcp_ooo_event {
5456        TCP_EVENT_ADD_PEN = 0,
5457        TCP_EVENT_ADD_NEW_ISLE = 1,
5458        TCP_EVENT_ADD_ISLE_RIGHT = 2,
5459        TCP_EVENT_ADD_ISLE_LEFT = 3,
5460        TCP_EVENT_JOIN = 4,
5461        TCP_EVENT_NOP = 5,
5462        MAX_TCP_OOO_EVENT
5463};
5464
5465
5466/*
5467 * OOO support modes
5468 */
5469enum tcp_tstorm_ooo {
5470        TCP_TSTORM_OOO_DROP_AND_PROC_ACK = 0,
5471        TCP_TSTORM_OOO_SEND_PURE_ACK = 1,
5472        TCP_TSTORM_OOO_SUPPORTED = 2,
5473        MAX_TCP_TSTORM_OOO
5474};
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484#endif /* __5710_HSI_CNIC_LE__ */
5485