| 1 |
|
| 2 | |
| 3 | * Copyright(c) 2007 Intel Corporation. All rights reserved.
|
| 4 | *
|
| 5 | * Maintained at www.Open-FCoE.org
|
| 6 |
|
| 7 |
|
| 8 | #ifndef _FC_FC2_H_
|
| 9 | #define _FC_FC2_H_
|
| 10 |
|
| 11 | |
| 12 | * Fibre Channel Exchanges and Sequences.
|
| 13 |
|
| 14 | #ifndef PACKED
|
| 15 | #define PACKED __attribute__ ((__packed__))
|
| 16 | #endif
|
| 17 |
|
| 18 |
|
| 19 | |
| 20 | * Sequence Status Block.
|
| 21 | * This format is set by the FC-FS standard and is sent over the wire.
|
| 22 | * Note that the fields aren't all naturally aligned.
|
| 23 |
|
| 24 | struct fc_ssb {
|
| 25 | __u8 ssb_seq_id;
|
| 26 | __u8 _ssb_resvd;
|
| 27 | __be16 ssb_low_seq_cnt;
|
| 28 |
|
| 29 | __be16 ssb_high_seq_cnt;
|
| 30 | __be16 ssb_s_stat;
|
| 31 |
|
| 32 | __be16 ssb_err_seq_cnt;
|
| 33 | __u8 ssb_fh_cs_ctl;
|
| 34 | __be16 ssb_fh_ox_id;
|
| 35 | __be16 ssb_rx_id;
|
| 36 | __u8 _ssb_resvd2[2];
|
| 37 | } PACKED;
|
| 38 |
|
| 39 | |
| 40 | * The SSB should be 17 bytes. Since it's layout is somewhat strange,
|
| 41 | * we define the size here so that code can ASSERT that the size comes out
|
| 42 | * correct.
|
| 43 |
|
| 44 | #define FC_SSB_SIZE 17
|
| 45 |
|
| 46 | |
| 47 | * ssb_s_stat - flags from FC-FS-2 T11/1619-D Rev 0.90.
|
| 48 |
|
| 49 | #define SSB_ST_RESP (1 << 15)
|
| 50 | #define SSB_ST_ACTIVE (1 << 14)
|
| 51 | #define SSB_ST_ABNORMAL (1 << 12)
|
| 52 |
|
| 53 | #define SSB_ST_REQ_MASK (3 << 10)
|
| 54 | #define SSB_ST_REQ_CONT (0 << 10)
|
| 55 | #define SSB_ST_REQ_ABORT (1 << 10)
|
| 56 | #define SSB_ST_REQ_STOP (2 << 10)
|
| 57 | #define SSB_ST_REQ_RETRANS (3 << 10)
|
| 58 |
|
| 59 | #define SSB_ST_ABTS (1 << 9)
|
| 60 | #define SSB_ST_RETRANS (1 << 8)
|
| 61 | #define SSB_ST_TIMEOUT (1 << 7)
|
| 62 | #define SSB_ST_P_RJT (1 << 6)
|
| 63 |
|
| 64 | #define SSB_ST_CLASS_BIT 4
|
| 65 | #define SSB_ST_CLASS_MASK 3
|
| 66 | #define SSB_ST_ACK (1 << 3)
|
| 67 |
|
| 68 | |
| 69 | * Exchange Status Block.
|
| 70 | * This format is set by the FC-FS standard and is sent over the wire.
|
| 71 | * Note that the fields aren't all naturally aligned.
|
| 72 |
|
| 73 | struct fc_esb {
|
| 74 | __u8 esb_cs_ctl;
|
| 75 | __be16 esb_ox_id;
|
| 76 | __be16 esb_rx_id;
|
| 77 | __be32 esb_orig_fid;
|
| 78 | __be32 esb_resp_fid;
|
| 79 | __be32 esb_e_stat;
|
| 80 | __u8 _esb_resvd[4];
|
| 81 | __u8 esb_service_params[112];
|
| 82 | __u8 esb_seq_status[8];
|
| 83 | } __attribute__((packed));
|
| 84 |
|
| 85 | |
| 86 | * Define expected size for ASSERTs.
|
| 87 | * See comments on FC_SSB_SIZE.
|
| 88 |
|
| 89 | #define FC_ESB_SIZE (1 + 5*4 + 112 + 8)
|
| 90 |
|
| 91 | |
| 92 | * esb_e_stat - flags from FC-FS-2 T11/1619-D Rev 0.90.
|
| 93 |
|
| 94 | #define ESB_ST_RESP (1 << 31)
|
| 95 | #define ESB_ST_SEQ_INIT (1 << 30)
|
| 96 | #define ESB_ST_COMPLETE (1 << 29)
|
| 97 | #define ESB_ST_ABNORMAL (1 << 28)
|
| 98 | #define ESB_ST_REC_QUAL (1 << 26)
|
| 99 |
|
| 100 | #define ESB_ST_ERRP_BIT 24
|
| 101 | #define ESB_ST_ERRP_MASK (3 << 24)
|
| 102 | #define ESB_ST_ERRP_MULT (0 << 24)
|
| 103 | #define ESB_ST_ERRP_SING (1 << 24)
|
| 104 | #define ESB_ST_ERRP_INF (2 << 24)
|
| 105 | #define ESB_ST_ERRP_IMM (3 << 24)
|
| 106 |
|
| 107 | #define ESB_ST_OX_ID_INVL (1 << 23)
|
| 108 | #define ESB_ST_RX_ID_INVL (1 << 22)
|
| 109 | #define ESB_ST_PRI_INUSE (1 << 21)
|
| 110 |
|
| 111 | #endif
|