mirror of
https://github.com/AetherDroid/android_kernel_samsung_on5xelte.git
synced 2025-09-08 17:18:05 -04:00
Fixed MTP to work with TWRP
This commit is contained in:
commit
f6dfaef42e
50820 changed files with 20846062 additions and 0 deletions
0
include/scsi/fc/Kbuild
Normal file
0
include/scsi/fc/Kbuild
Normal file
138
include/scsi/fc/fc_encaps.h
Normal file
138
include/scsi/fc/fc_encaps.h
Normal file
|
@ -0,0 +1,138 @@
|
|||
/*
|
||||
* Copyright(c) 2007 Intel Corporation. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Maintained at www.Open-FCoE.org
|
||||
*/
|
||||
#ifndef _FC_ENCAPS_H_
|
||||
#define _FC_ENCAPS_H_
|
||||
|
||||
/*
|
||||
* Protocol definitions from RFC 3643 - Fibre Channel Frame Encapsulation.
|
||||
*
|
||||
* Note: The frame length field is the number of 32-bit words in
|
||||
* the encapsulation including the fcip_encaps_header, CRC and EOF words.
|
||||
* The minimum frame length value in bytes is (32 + 24 + 4 + 4) * 4 = 64.
|
||||
* The maximum frame length value in bytes is (32 + 24 + 2112 + 4 + 4) = 2172.
|
||||
*/
|
||||
#define FC_ENCAPS_MIN_FRAME_LEN 64 /* min frame len (bytes) (see above) */
|
||||
#define FC_ENCAPS_MAX_FRAME_LEN (FC_ENCAPS_MIN_FRAME_LEN + FC_MAX_PAYLOAD)
|
||||
|
||||
#define FC_ENCAPS_VER 1 /* current version number */
|
||||
|
||||
struct fc_encaps_hdr {
|
||||
__u8 fc_proto; /* protocol number */
|
||||
__u8 fc_ver; /* version of encapsulation */
|
||||
__u8 fc_proto_n; /* ones complement of protocol */
|
||||
__u8 fc_ver_n; /* ones complement of version */
|
||||
|
||||
unsigned char fc_proto_data[8]; /* protocol specific data */
|
||||
|
||||
__be16 fc_len_flags; /* 10-bit length/4 w/ 6 flag bits */
|
||||
__be16 fc_len_flags_n; /* ones complement of length / flags */
|
||||
|
||||
/*
|
||||
* Offset 0x10
|
||||
*/
|
||||
__be32 fc_time[2]; /* time stamp: seconds and fraction */
|
||||
__be32 fc_crc; /* CRC */
|
||||
__be32 fc_sof; /* start of frame (see FC_SOF below) */
|
||||
|
||||
/* 0x20 - FC frame content followed by EOF word */
|
||||
};
|
||||
|
||||
#define FCIP_ENCAPS_HDR_LEN 0x20 /* expected length for asserts */
|
||||
|
||||
/*
|
||||
* Macro's for making redundant copies of EOF and SOF.
|
||||
*/
|
||||
#define FC_XY(x, y) ((((x) & 0xff) << 8) | ((y) & 0xff))
|
||||
#define FC_XYXY(x, y) ((FCIP_XY(x, y) << 16) | FCIP_XY(x, y))
|
||||
#define FC_XYNN(x, y) (FCIP_XYXY(x, y) ^ 0xffff)
|
||||
|
||||
#define FC_SOF_ENCODE(n) FC_XYNN(n, n)
|
||||
#define FC_EOF_ENCODE(n) FC_XYNN(n, n)
|
||||
|
||||
/*
|
||||
* SOF / EOF bytes.
|
||||
*/
|
||||
enum fc_sof {
|
||||
FC_SOF_F = 0x28, /* fabric */
|
||||
FC_SOF_I4 = 0x29, /* initiate class 4 */
|
||||
FC_SOF_I2 = 0x2d, /* initiate class 2 */
|
||||
FC_SOF_I3 = 0x2e, /* initiate class 3 */
|
||||
FC_SOF_N4 = 0x31, /* normal class 4 */
|
||||
FC_SOF_N2 = 0x35, /* normal class 2 */
|
||||
FC_SOF_N3 = 0x36, /* normal class 3 */
|
||||
FC_SOF_C4 = 0x39, /* activate class 4 */
|
||||
} __attribute__((packed));
|
||||
|
||||
enum fc_eof {
|
||||
FC_EOF_N = 0x41, /* normal (not last frame of seq) */
|
||||
FC_EOF_T = 0x42, /* terminate (last frame of sequence) */
|
||||
FC_EOF_RT = 0x44,
|
||||
FC_EOF_DT = 0x46, /* disconnect-terminate class-1 */
|
||||
FC_EOF_NI = 0x49, /* normal-invalid */
|
||||
FC_EOF_DTI = 0x4e, /* disconnect-terminate-invalid */
|
||||
FC_EOF_RTI = 0x4f,
|
||||
FC_EOF_A = 0x50, /* abort */
|
||||
} __attribute__((packed));
|
||||
|
||||
#define FC_SOF_CLASS_MASK 0x06 /* mask for class of service in SOF */
|
||||
|
||||
/*
|
||||
* Define classes in terms of the SOF code (initial).
|
||||
*/
|
||||
enum fc_class {
|
||||
FC_CLASS_NONE = 0, /* software value indicating no class */
|
||||
FC_CLASS_2 = FC_SOF_I2,
|
||||
FC_CLASS_3 = FC_SOF_I3,
|
||||
FC_CLASS_4 = FC_SOF_I4,
|
||||
FC_CLASS_F = FC_SOF_F,
|
||||
};
|
||||
|
||||
/*
|
||||
* Determine whether SOF code indicates the need for a BLS ACK.
|
||||
*/
|
||||
static inline int fc_sof_needs_ack(enum fc_sof sof)
|
||||
{
|
||||
return (~sof) & 0x02; /* true for class 1, 2, 4, 6, or F */
|
||||
}
|
||||
|
||||
/*
|
||||
* Given an fc_class, return the normal (non-initial) SOF value.
|
||||
*/
|
||||
static inline enum fc_sof fc_sof_normal(enum fc_class class)
|
||||
{
|
||||
return class + FC_SOF_N3 - FC_SOF_I3; /* diff is always 8 */
|
||||
}
|
||||
|
||||
/*
|
||||
* Compute class from SOF value.
|
||||
*/
|
||||
static inline enum fc_class fc_sof_class(enum fc_sof sof)
|
||||
{
|
||||
return (sof & 0x7) | FC_SOF_F;
|
||||
}
|
||||
|
||||
/*
|
||||
* Determine whether SOF is for the initial frame of a sequence.
|
||||
*/
|
||||
static inline int fc_sof_is_init(enum fc_sof sof)
|
||||
{
|
||||
return sof < 0x30;
|
||||
}
|
||||
|
||||
#endif /* _FC_ENCAPS_H_ */
|
123
include/scsi/fc/fc_fc2.h
Normal file
123
include/scsi/fc/fc_fc2.h
Normal file
|
@ -0,0 +1,123 @@
|
|||
/*
|
||||
* Copyright(c) 2007 Intel Corporation. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Maintained at www.Open-FCoE.org
|
||||
*/
|
||||
|
||||
#ifndef _FC_FC2_H_
|
||||
#define _FC_FC2_H_
|
||||
|
||||
/*
|
||||
* Fibre Channel Exchanges and Sequences.
|
||||
*/
|
||||
#ifndef PACKED
|
||||
#define PACKED __attribute__ ((__packed__))
|
||||
#endif /* PACKED */
|
||||
|
||||
|
||||
/*
|
||||
* Sequence Status Block.
|
||||
* This format is set by the FC-FS standard and is sent over the wire.
|
||||
* Note that the fields aren't all naturally aligned.
|
||||
*/
|
||||
struct fc_ssb {
|
||||
__u8 ssb_seq_id; /* sequence ID */
|
||||
__u8 _ssb_resvd;
|
||||
__be16 ssb_low_seq_cnt; /* lowest SEQ_CNT */
|
||||
|
||||
__be16 ssb_high_seq_cnt; /* highest SEQ_CNT */
|
||||
__be16 ssb_s_stat; /* sequence status flags */
|
||||
|
||||
__be16 ssb_err_seq_cnt; /* error SEQ_CNT */
|
||||
__u8 ssb_fh_cs_ctl; /* frame header CS_CTL */
|
||||
__be16 ssb_fh_ox_id; /* frame header OX_ID */
|
||||
__be16 ssb_rx_id; /* responder's exchange ID */
|
||||
__u8 _ssb_resvd2[2];
|
||||
} PACKED;
|
||||
|
||||
/*
|
||||
* The SSB should be 17 bytes. Since it's layout is somewhat strange,
|
||||
* we define the size here so that code can ASSERT that the size comes out
|
||||
* correct.
|
||||
*/
|
||||
#define FC_SSB_SIZE 17 /* length of fc_ssb for assert */
|
||||
|
||||
/*
|
||||
* ssb_s_stat - flags from FC-FS-2 T11/1619-D Rev 0.90.
|
||||
*/
|
||||
#define SSB_ST_RESP (1 << 15) /* sequence responder */
|
||||
#define SSB_ST_ACTIVE (1 << 14) /* sequence is active */
|
||||
#define SSB_ST_ABNORMAL (1 << 12) /* abnormal ending condition */
|
||||
|
||||
#define SSB_ST_REQ_MASK (3 << 10) /* ACK, abort sequence condition */
|
||||
#define SSB_ST_REQ_CONT (0 << 10)
|
||||
#define SSB_ST_REQ_ABORT (1 << 10)
|
||||
#define SSB_ST_REQ_STOP (2 << 10)
|
||||
#define SSB_ST_REQ_RETRANS (3 << 10)
|
||||
|
||||
#define SSB_ST_ABTS (1 << 9) /* ABTS protocol completed */
|
||||
#define SSB_ST_RETRANS (1 << 8) /* retransmission completed */
|
||||
#define SSB_ST_TIMEOUT (1 << 7) /* sequence timed out by recipient */
|
||||
#define SSB_ST_P_RJT (1 << 6) /* P_RJT transmitted */
|
||||
|
||||
#define SSB_ST_CLASS_BIT 4 /* class of service field LSB */
|
||||
#define SSB_ST_CLASS_MASK 3 /* class of service mask */
|
||||
#define SSB_ST_ACK (1 << 3) /* ACK (EOFt or EOFdt) transmitted */
|
||||
|
||||
/*
|
||||
* Exchange Status Block.
|
||||
* This format is set by the FC-FS standard and is sent over the wire.
|
||||
* Note that the fields aren't all naturally aligned.
|
||||
*/
|
||||
struct fc_esb {
|
||||
__u8 esb_cs_ctl; /* CS_CTL for frame header */
|
||||
__be16 esb_ox_id; /* originator exchange ID */
|
||||
__be16 esb_rx_id; /* responder exchange ID */
|
||||
__be32 esb_orig_fid; /* fabric ID of originator */
|
||||
__be32 esb_resp_fid; /* fabric ID of responder */
|
||||
__be32 esb_e_stat; /* status */
|
||||
__u8 _esb_resvd[4];
|
||||
__u8 esb_service_params[112]; /* TBD */
|
||||
__u8 esb_seq_status[8]; /* sequence statuses, 8 bytes each */
|
||||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
* Define expected size for ASSERTs.
|
||||
* See comments on FC_SSB_SIZE.
|
||||
*/
|
||||
#define FC_ESB_SIZE (1 + 5*4 + 112 + 8) /* expected size */
|
||||
|
||||
/*
|
||||
* esb_e_stat - flags from FC-FS-2 T11/1619-D Rev 0.90.
|
||||
*/
|
||||
#define ESB_ST_RESP (1 << 31) /* responder to exchange */
|
||||
#define ESB_ST_SEQ_INIT (1 << 30) /* port holds sequence initiative */
|
||||
#define ESB_ST_COMPLETE (1 << 29) /* exchange is complete */
|
||||
#define ESB_ST_ABNORMAL (1 << 28) /* abnormal ending condition */
|
||||
#define ESB_ST_REC_QUAL (1 << 26) /* recovery qualifier active */
|
||||
|
||||
#define ESB_ST_ERRP_BIT 24 /* LSB for error policy */
|
||||
#define ESB_ST_ERRP_MASK (3 << 24) /* mask for error policy */
|
||||
#define ESB_ST_ERRP_MULT (0 << 24) /* abort, discard multiple sequences */
|
||||
#define ESB_ST_ERRP_SING (1 << 24) /* abort, discard single sequence */
|
||||
#define ESB_ST_ERRP_INF (2 << 24) /* process with infinite buffers */
|
||||
#define ESB_ST_ERRP_IMM (3 << 24) /* discard mult. with immed. retran. */
|
||||
|
||||
#define ESB_ST_OX_ID_INVL (1 << 23) /* originator XID invalid */
|
||||
#define ESB_ST_RX_ID_INVL (1 << 22) /* responder XID invalid */
|
||||
#define ESB_ST_PRI_INUSE (1 << 21) /* priority / preemption in use */
|
||||
|
||||
#endif /* _FC_FC2_H_ */
|
108
include/scsi/fc/fc_fcoe.h
Normal file
108
include/scsi/fc/fc_fcoe.h
Normal file
|
@ -0,0 +1,108 @@
|
|||
/*
|
||||
* Copyright(c) 2007 Intel Corporation. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Maintained at www.Open-FCoE.org
|
||||
*/
|
||||
|
||||
#ifndef _FC_FCOE_H_
|
||||
#define _FC_FCOE_H_
|
||||
|
||||
/*
|
||||
* FCoE - Fibre Channel over Ethernet.
|
||||
* See T11 FC-BB-5 Rev 2.00 (09-056v5.pdf)
|
||||
*/
|
||||
|
||||
/*
|
||||
* Default FC_FCOE_OUI / FC-MAP value.
|
||||
*/
|
||||
#define FC_FCOE_OUI 0x0efc00 /* upper 24 bits of FCOE MAC */
|
||||
|
||||
/*
|
||||
* Fabric Login (FLOGI) MAC for non-FIP use. Non-FIP use is deprecated.
|
||||
*/
|
||||
#define FC_FCOE_FLOGI_MAC { 0x0e, 0xfc, 0x00, 0xff, 0xff, 0xfe }
|
||||
|
||||
#define FC_FCOE_VER 0 /* version */
|
||||
|
||||
/*
|
||||
* Ethernet Addresses based on FC S_ID and D_ID.
|
||||
* Generated by FC_FCOE_OUI | S_ID/D_ID
|
||||
*/
|
||||
#define FC_FCOE_ENCAPS_ID(n) (((u64) FC_FCOE_OUI << 24) | (n))
|
||||
#define FC_FCOE_DECAPS_ID(n) ((n) >> 24)
|
||||
|
||||
/*
|
||||
* FCoE frame header - 14 bytes
|
||||
* This follows the VLAN header, which includes the ethertype.
|
||||
*/
|
||||
struct fcoe_hdr {
|
||||
__u8 fcoe_ver; /* version field - upper 4 bits */
|
||||
__u8 fcoe_resvd[12]; /* reserved - send zero and ignore */
|
||||
__u8 fcoe_sof; /* start of frame per RFC 3643 */
|
||||
};
|
||||
|
||||
#define FC_FCOE_DECAPS_VER(hp) ((hp)->fcoe_ver >> 4)
|
||||
#define FC_FCOE_ENCAPS_VER(hp, ver) ((hp)->fcoe_ver = (ver) << 4)
|
||||
|
||||
/*
|
||||
* FCoE CRC & EOF - 8 bytes.
|
||||
*/
|
||||
struct fcoe_crc_eof {
|
||||
__le32 fcoe_crc32; /* CRC for FC packet */
|
||||
__u8 fcoe_eof; /* EOF from RFC 3643 */
|
||||
__u8 fcoe_resvd[3]; /* reserved - send zero and ignore */
|
||||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
* Minimum FCoE + FC header length
|
||||
* 14 bytes FCoE header + 24 byte FC header = 38 bytes
|
||||
*/
|
||||
#define FCOE_HEADER_LEN 38
|
||||
|
||||
/*
|
||||
* Minimum FCoE frame size
|
||||
* 14 bytes FCoE header + 24 byte FC header + 8 byte FCoE trailer = 46 bytes
|
||||
*/
|
||||
#define FCOE_MIN_FRAME 46
|
||||
|
||||
/*
|
||||
* FCoE Link Error Status Block: T11 FC-BB-5 Rev2.0, Clause 7.10.
|
||||
*/
|
||||
struct fcoe_fc_els_lesb {
|
||||
__be32 lesb_link_fail; /* link failure count */
|
||||
__be32 lesb_vlink_fail; /* virtual link failure count */
|
||||
__be32 lesb_miss_fka; /* missing FIP keep-alive count */
|
||||
__be32 lesb_symb_err; /* symbol error during carrier count */
|
||||
__be32 lesb_err_block; /* errored block count */
|
||||
__be32 lesb_fcs_error; /* frame check sequence error count */
|
||||
};
|
||||
|
||||
/*
|
||||
* fc_fcoe_set_mac - Store OUI + DID into MAC address field.
|
||||
* @mac: mac address to be set
|
||||
* @did: fc dest id to use
|
||||
*/
|
||||
static inline void fc_fcoe_set_mac(u8 *mac, u8 *did)
|
||||
{
|
||||
mac[0] = (u8) (FC_FCOE_OUI >> 16);
|
||||
mac[1] = (u8) (FC_FCOE_OUI >> 8);
|
||||
mac[2] = (u8) FC_FCOE_OUI;
|
||||
mac[3] = did[0];
|
||||
mac[4] = did[1];
|
||||
mac[5] = did[2];
|
||||
}
|
||||
|
||||
#endif /* _FC_FCOE_H_ */
|
216
include/scsi/fc/fc_fcp.h
Normal file
216
include/scsi/fc/fc_fcp.h
Normal file
|
@ -0,0 +1,216 @@
|
|||
/*
|
||||
* Copyright(c) 2007 Intel Corporation. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Maintained at www.Open-FCoE.org
|
||||
*/
|
||||
|
||||
#ifndef _FC_FCP_H_
|
||||
#define _FC_FCP_H_
|
||||
|
||||
#include <scsi/scsi.h>
|
||||
|
||||
/*
|
||||
* Fibre Channel Protocol for SCSI.
|
||||
* From T10 FCP-3, T10 project 1560-D Rev 4, Sept. 13, 2005.
|
||||
*/
|
||||
|
||||
/*
|
||||
* fc/fs.h defines FC_TYPE_FCP.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Service parameter page parameters (word 3 bits) for Process Login.
|
||||
*/
|
||||
#define FCP_SPPF_TASK_RETRY_ID 0x0200 /* task retry ID requested */
|
||||
#define FCP_SPPF_RETRY 0x0100 /* retry supported */
|
||||
#define FCP_SPPF_CONF_COMPL 0x0080 /* confirmed completion allowed */
|
||||
#define FCP_SPPF_OVLY_ALLOW 0x0040 /* data overlay allowed */
|
||||
#define FCP_SPPF_INIT_FCN 0x0020 /* initiator function */
|
||||
#define FCP_SPPF_TARG_FCN 0x0010 /* target function */
|
||||
#define FCP_SPPF_RD_XRDY_DIS 0x0002 /* disable XFER_RDY for reads */
|
||||
#define FCP_SPPF_WR_XRDY_DIS 0x0001 /* disable XFER_RDY for writes */
|
||||
|
||||
/*
|
||||
* FCP_CMND IU Payload.
|
||||
*/
|
||||
struct fcp_cmnd {
|
||||
struct scsi_lun fc_lun; /* logical unit number */
|
||||
__u8 fc_cmdref; /* command reference number */
|
||||
__u8 fc_pri_ta; /* priority and task attribute */
|
||||
__u8 fc_tm_flags; /* task management flags */
|
||||
__u8 fc_flags; /* additional len & flags */
|
||||
__u8 fc_cdb[16]; /* base CDB */
|
||||
__be32 fc_dl; /* data length (must follow fc_cdb) */
|
||||
};
|
||||
|
||||
#define FCP_CMND_LEN 32 /* expected length of structure */
|
||||
|
||||
struct fcp_cmnd32 {
|
||||
struct scsi_lun fc_lun; /* logical unit number */
|
||||
__u8 fc_cmdref; /* command reference number */
|
||||
__u8 fc_pri_ta; /* priority and task attribute */
|
||||
__u8 fc_tm_flags; /* task management flags */
|
||||
__u8 fc_flags; /* additional len & flags */
|
||||
__u8 fc_cdb[32]; /* base CDB */
|
||||
__be32 fc_dl; /* data length (must follow fc_cdb) */
|
||||
};
|
||||
|
||||
#define FCP_CMND32_LEN 48 /* expected length of structure */
|
||||
#define FCP_CMND32_ADD_LEN (16 / 4) /* Additional cdb length */
|
||||
|
||||
/*
|
||||
* fc_pri_ta.
|
||||
*/
|
||||
#define FCP_PTA_SIMPLE 0 /* simple task attribute */
|
||||
#define FCP_PTA_HEADQ 1 /* head of queue task attribute */
|
||||
#define FCP_PTA_ORDERED 2 /* ordered task attribute */
|
||||
#define FCP_PTA_ACA 4 /* auto. contingent allegiance */
|
||||
#define FCP_PTA_MASK 7 /* mask for task attribute field */
|
||||
#define FCP_PRI_SHIFT 3 /* priority field starts in bit 3 */
|
||||
#define FCP_PRI_RESVD_MASK 0x80 /* reserved bits in priority field */
|
||||
|
||||
/*
|
||||
* fc_tm_flags - task management flags field.
|
||||
*/
|
||||
#define FCP_TMF_CLR_ACA 0x40 /* clear ACA condition */
|
||||
#define FCP_TMF_TGT_RESET 0x20 /* target reset task management,
|
||||
deprecated as of FCP-3 */
|
||||
#define FCP_TMF_LUN_RESET 0x10 /* logical unit reset task management */
|
||||
#define FCP_TMF_CLR_TASK_SET 0x04 /* clear task set */
|
||||
#define FCP_TMF_ABT_TASK_SET 0x02 /* abort task set */
|
||||
|
||||
/*
|
||||
* fc_flags.
|
||||
* Bits 7:2 are the additional FCP_CDB length / 4.
|
||||
*/
|
||||
#define FCP_CFL_LEN_MASK 0xfc /* mask for additional length */
|
||||
#define FCP_CFL_LEN_SHIFT 2 /* shift bits for additional length */
|
||||
#define FCP_CFL_RDDATA 0x02 /* read data */
|
||||
#define FCP_CFL_WRDATA 0x01 /* write data */
|
||||
|
||||
/*
|
||||
* FCP_TXRDY IU - transfer ready payload.
|
||||
*/
|
||||
struct fcp_txrdy {
|
||||
__be32 ft_data_ro; /* data relative offset */
|
||||
__be32 ft_burst_len; /* burst length */
|
||||
__u8 _ft_resvd[4]; /* reserved */
|
||||
};
|
||||
|
||||
#define FCP_TXRDY_LEN 12 /* expected length of structure */
|
||||
|
||||
/*
|
||||
* FCP_RESP IU - response payload.
|
||||
*
|
||||
* The response payload comes in three parts: the flags/status, the
|
||||
* sense/response lengths and the sense data/response info section.
|
||||
*
|
||||
* From FCP3r04, note 6 of section 9.5.13:
|
||||
*
|
||||
* Some early implementations presented the FCP_RSP IU without the FCP_RESID,
|
||||
* FCP_SNS_LEN, and FCP_RSP_LEN fields if the FCP_RESID_UNDER, FCP_RESID_OVER,
|
||||
* FCP_SNS_LEN_VALID, and FCP_RSP_LEN_VALID bits were all set to zero. This
|
||||
* non-standard behavior should be tolerated.
|
||||
*
|
||||
* All response frames will always contain the fcp_resp template. Some
|
||||
* will also include the fcp_resp_len template.
|
||||
*
|
||||
* From Table 23, the FCP_RSP_INFO can either be 4 bytes or 8 bytes, both
|
||||
* are valid length.
|
||||
*/
|
||||
struct fcp_resp {
|
||||
__u8 _fr_resvd[8]; /* reserved */
|
||||
__be16 fr_retry_delay; /* retry delay timer */
|
||||
__u8 fr_flags; /* flags */
|
||||
__u8 fr_status; /* SCSI status code */
|
||||
};
|
||||
|
||||
#define FCP_RESP_LEN 12 /* expected length of structure */
|
||||
|
||||
struct fcp_resp_ext {
|
||||
__be32 fr_resid; /* Residual value */
|
||||
__be32 fr_sns_len; /* SCSI Sense length */
|
||||
__be32 fr_rsp_len; /* Response Info length */
|
||||
|
||||
/*
|
||||
* Optionally followed by RSP info and/or SNS info and/or
|
||||
* bidirectional read residual length, if any.
|
||||
*/
|
||||
};
|
||||
|
||||
#define FCP_RESP_EXT_LEN 12 /* expected length of the structure */
|
||||
|
||||
struct fcp_resp_rsp_info {
|
||||
__u8 _fr_resvd[3]; /* reserved */
|
||||
__u8 rsp_code; /* Response Info Code */
|
||||
__u8 _fr_resvd2[4]; /* reserved */
|
||||
};
|
||||
|
||||
#define FCP_RESP_RSP_INFO_LEN4 4 /* without reserved field */
|
||||
#define FCP_RESP_RSP_INFO_LEN8 8 /* with reserved field */
|
||||
|
||||
struct fcp_resp_with_ext {
|
||||
struct fcp_resp resp;
|
||||
struct fcp_resp_ext ext;
|
||||
};
|
||||
|
||||
#define FCP_RESP_WITH_EXT (FCP_RESP_LEN + FCP_RESP_EXT_LEN)
|
||||
|
||||
/*
|
||||
* fr_flags.
|
||||
*/
|
||||
#define FCP_BIDI_RSP 0x80 /* bidirectional read response */
|
||||
#define FCP_BIDI_READ_UNDER 0x40 /* bidir. read less than requested */
|
||||
#define FCP_BIDI_READ_OVER 0x20 /* DL insufficient for full transfer */
|
||||
#define FCP_CONF_REQ 0x10 /* confirmation requested */
|
||||
#define FCP_RESID_UNDER 0x08 /* transfer shorter than expected */
|
||||
#define FCP_RESID_OVER 0x04 /* DL insufficient for full transfer */
|
||||
#define FCP_SNS_LEN_VAL 0x02 /* SNS_LEN field is valid */
|
||||
#define FCP_RSP_LEN_VAL 0x01 /* RSP_LEN field is valid */
|
||||
|
||||
/*
|
||||
* rsp_codes
|
||||
*/
|
||||
enum fcp_resp_rsp_codes {
|
||||
FCP_TMF_CMPL = 0,
|
||||
FCP_DATA_LEN_INVALID = 1,
|
||||
FCP_CMND_FIELDS_INVALID = 2,
|
||||
FCP_DATA_PARAM_MISMATCH = 3,
|
||||
FCP_TMF_REJECTED = 4,
|
||||
FCP_TMF_FAILED = 5,
|
||||
FCP_TMF_INVALID_LUN = 9,
|
||||
};
|
||||
|
||||
/*
|
||||
* FCP SRR Link Service request - Sequence Retransmission Request.
|
||||
*/
|
||||
struct fcp_srr {
|
||||
__u8 srr_op; /* opcode ELS_SRR */
|
||||
__u8 srr_resvd[3]; /* opcode / reserved - must be zero */
|
||||
__be16 srr_ox_id; /* OX_ID of failed command */
|
||||
__be16 srr_rx_id; /* RX_ID of failed command */
|
||||
__be32 srr_rel_off; /* relative offset */
|
||||
__u8 srr_r_ctl; /* r_ctl for the information unit */
|
||||
__u8 srr_resvd2[3]; /* reserved */
|
||||
};
|
||||
|
||||
/*
|
||||
* Feature bits in name server FC-4 Features object.
|
||||
*/
|
||||
#define FCP_FEAT_TARG (1 << 0) /* target function supported */
|
||||
#define FCP_FEAT_INIT (1 << 1) /* initiator function supported */
|
||||
|
||||
#endif /* _FC_FCP_H_ */
|
280
include/scsi/fc/fc_fip.h
Normal file
280
include/scsi/fc/fc_fip.h
Normal file
|
@ -0,0 +1,280 @@
|
|||
/*
|
||||
* Copyright 2008 Cisco Systems, Inc. All rights reserved.
|
||||
*
|
||||
* This program is free software; you may redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
#ifndef _FC_FIP_H_
|
||||
#define _FC_FIP_H_
|
||||
|
||||
#include <scsi/fc/fc_ns.h>
|
||||
|
||||
/*
|
||||
* This version is based on:
|
||||
* http://www.t11.org/ftp/t11/pub/fc/bb-5/08-543v1.pdf
|
||||
* and T11 FC-BB-6 10-019v4.pdf (June 2010 VN2VN proposal)
|
||||
*/
|
||||
|
||||
#define FIP_DEF_PRI 128 /* default selection priority */
|
||||
#define FIP_DEF_FC_MAP 0x0efc00 /* default FCoE MAP (MAC OUI) value */
|
||||
#define FIP_DEF_FKA 8000 /* default FCF keep-alive/advert period (mS) */
|
||||
#define FIP_VN_KA_PERIOD 90000 /* required VN_port keep-alive period (mS) */
|
||||
#define FIP_FCF_FUZZ 100 /* random time added by FCF (mS) */
|
||||
|
||||
/*
|
||||
* VN2VN proposed-standard values.
|
||||
*/
|
||||
#define FIP_VN_FC_MAP 0x0efd00 /* MAC OUI for VN2VN use */
|
||||
#define FIP_VN_PROBE_WAIT 100 /* interval between VN2VN probes (ms) */
|
||||
#define FIP_VN_ANN_WAIT 400 /* interval between VN2VN announcements (ms) */
|
||||
#define FIP_VN_RLIM_INT 10000 /* interval between probes when rate limited */
|
||||
#define FIP_VN_RLIM_COUNT 10 /* number of probes before rate limiting */
|
||||
#define FIP_VN_BEACON_INT 8000 /* interval between VN2VN beacons */
|
||||
#define FIP_VN_BEACON_FUZZ 100 /* random time to add to beacon period (ms) */
|
||||
|
||||
/*
|
||||
* Multicast MAC addresses. T11-adopted.
|
||||
*/
|
||||
#define FIP_ALL_FCOE_MACS ((__u8[6]) { 1, 0x10, 0x18, 1, 0, 0 })
|
||||
#define FIP_ALL_ENODE_MACS ((__u8[6]) { 1, 0x10, 0x18, 1, 0, 1 })
|
||||
#define FIP_ALL_FCF_MACS ((__u8[6]) { 1, 0x10, 0x18, 1, 0, 2 })
|
||||
#define FIP_ALL_VN2VN_MACS ((__u8[6]) { 1, 0x10, 0x18, 1, 0, 4 })
|
||||
#define FIP_ALL_P2P_MACS ((__u8[6]) { 1, 0x10, 0x18, 1, 0, 5 })
|
||||
|
||||
#define FIP_VER 1 /* version for fip_header */
|
||||
|
||||
struct fip_header {
|
||||
__u8 fip_ver; /* upper 4 bits are the version */
|
||||
__u8 fip_resv1; /* reserved */
|
||||
__be16 fip_op; /* operation code */
|
||||
__u8 fip_resv2; /* reserved */
|
||||
__u8 fip_subcode; /* lower 4 bits are sub-code */
|
||||
__be16 fip_dl_len; /* length of descriptors in words */
|
||||
__be16 fip_flags; /* header flags */
|
||||
} __attribute__((packed));
|
||||
|
||||
#define FIP_VER_SHIFT 4
|
||||
#define FIP_VER_ENCAPS(v) ((v) << FIP_VER_SHIFT)
|
||||
#define FIP_VER_DECAPS(v) ((v) >> FIP_VER_SHIFT)
|
||||
#define FIP_BPW 4 /* bytes per word for lengths */
|
||||
|
||||
/*
|
||||
* fip_op.
|
||||
*/
|
||||
enum fip_opcode {
|
||||
FIP_OP_DISC = 1, /* discovery, advertisement, etc. */
|
||||
FIP_OP_LS = 2, /* Link Service request or reply */
|
||||
FIP_OP_CTRL = 3, /* Keep Alive / Link Reset */
|
||||
FIP_OP_VLAN = 4, /* VLAN discovery */
|
||||
FIP_OP_VN2VN = 5, /* VN2VN operation */
|
||||
FIP_OP_VENDOR_MIN = 0xfff8, /* min vendor-specific opcode */
|
||||
FIP_OP_VENDOR_MAX = 0xfffe, /* max vendor-specific opcode */
|
||||
};
|
||||
|
||||
/*
|
||||
* Subcodes for FIP_OP_DISC.
|
||||
*/
|
||||
enum fip_disc_subcode {
|
||||
FIP_SC_SOL = 1, /* solicitation */
|
||||
FIP_SC_ADV = 2, /* advertisement */
|
||||
};
|
||||
|
||||
/*
|
||||
* Subcodes for FIP_OP_LS.
|
||||
*/
|
||||
enum fip_trans_subcode {
|
||||
FIP_SC_REQ = 1, /* request */
|
||||
FIP_SC_REP = 2, /* reply */
|
||||
};
|
||||
|
||||
/*
|
||||
* Subcodes for FIP_OP_RESET.
|
||||
*/
|
||||
enum fip_reset_subcode {
|
||||
FIP_SC_KEEP_ALIVE = 1, /* keep-alive from VN_Port */
|
||||
FIP_SC_CLR_VLINK = 2, /* clear virtual link from VF_Port */
|
||||
};
|
||||
|
||||
/*
|
||||
* Subcodes for FIP_OP_VLAN.
|
||||
*/
|
||||
enum fip_vlan_subcode {
|
||||
FIP_SC_VL_REQ = 1, /* request */
|
||||
FIP_SC_VL_REP = 2, /* reply */
|
||||
};
|
||||
|
||||
/*
|
||||
* Subcodes for FIP_OP_VN2VN.
|
||||
*/
|
||||
enum fip_vn2vn_subcode {
|
||||
FIP_SC_VN_PROBE_REQ = 1, /* probe request */
|
||||
FIP_SC_VN_PROBE_REP = 2, /* probe reply */
|
||||
FIP_SC_VN_CLAIM_NOTIFY = 3, /* claim notification */
|
||||
FIP_SC_VN_CLAIM_REP = 4, /* claim response */
|
||||
FIP_SC_VN_BEACON = 5, /* beacon */
|
||||
};
|
||||
|
||||
/*
|
||||
* flags in header fip_flags.
|
||||
*/
|
||||
enum fip_flag {
|
||||
FIP_FL_FPMA = 0x8000, /* supports FPMA fabric-provided MACs */
|
||||
FIP_FL_SPMA = 0x4000, /* supports SPMA server-provided MACs */
|
||||
FIP_FL_REC_OR_P2P = 0x0008, /* configured addr or point-to-point */
|
||||
FIP_FL_AVAIL = 0x0004, /* available for FLOGI/ELP */
|
||||
FIP_FL_SOL = 0x0002, /* this is a solicited message */
|
||||
FIP_FL_FPORT = 0x0001, /* sent from an F port */
|
||||
};
|
||||
|
||||
/*
|
||||
* Common descriptor header format.
|
||||
*/
|
||||
struct fip_desc {
|
||||
__u8 fip_dtype; /* type - see below */
|
||||
__u8 fip_dlen; /* length - in 32-bit words */
|
||||
};
|
||||
|
||||
enum fip_desc_type {
|
||||
FIP_DT_PRI = 1, /* priority for forwarder selection */
|
||||
FIP_DT_MAC = 2, /* MAC address */
|
||||
FIP_DT_MAP_OUI = 3, /* FC-MAP OUI */
|
||||
FIP_DT_NAME = 4, /* switch name or node name */
|
||||
FIP_DT_FAB = 5, /* fabric descriptor */
|
||||
FIP_DT_FCOE_SIZE = 6, /* max FCoE frame size */
|
||||
FIP_DT_FLOGI = 7, /* FLOGI request or response */
|
||||
FIP_DT_FDISC = 8, /* FDISC request or response */
|
||||
FIP_DT_LOGO = 9, /* LOGO request or response */
|
||||
FIP_DT_ELP = 10, /* ELP request or response */
|
||||
FIP_DT_VN_ID = 11, /* VN_Node Identifier */
|
||||
FIP_DT_FKA = 12, /* advertisement keep-alive period */
|
||||
FIP_DT_VENDOR = 13, /* vendor ID */
|
||||
FIP_DT_VLAN = 14, /* vlan number */
|
||||
FIP_DT_FC4F = 15, /* FC-4 features */
|
||||
FIP_DT_LIMIT, /* max defined desc_type + 1 */
|
||||
FIP_DT_VENDOR_BASE = 128, /* first vendor-specific desc_type */
|
||||
};
|
||||
|
||||
/*
|
||||
* FIP_DT_PRI - priority descriptor.
|
||||
*/
|
||||
struct fip_pri_desc {
|
||||
struct fip_desc fd_desc;
|
||||
__u8 fd_resvd;
|
||||
__u8 fd_pri; /* FCF priority: higher is better */
|
||||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
* FIP_DT_MAC - MAC address descriptor.
|
||||
*/
|
||||
struct fip_mac_desc {
|
||||
struct fip_desc fd_desc;
|
||||
__u8 fd_mac[ETH_ALEN];
|
||||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
* FIP_DT_MAP - descriptor.
|
||||
*/
|
||||
struct fip_map_desc {
|
||||
struct fip_desc fd_desc;
|
||||
__u8 fd_resvd[3];
|
||||
__u8 fd_map[3];
|
||||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
* FIP_DT_NAME descriptor.
|
||||
*/
|
||||
struct fip_wwn_desc {
|
||||
struct fip_desc fd_desc;
|
||||
__u8 fd_resvd[2];
|
||||
__be64 fd_wwn; /* 64-bit WWN, unaligned */
|
||||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
* FIP_DT_FAB descriptor.
|
||||
*/
|
||||
struct fip_fab_desc {
|
||||
struct fip_desc fd_desc;
|
||||
__be16 fd_vfid; /* virtual fabric ID */
|
||||
__u8 fd_resvd;
|
||||
__u8 fd_map[3]; /* FC-MAP value */
|
||||
__be64 fd_wwn; /* fabric name, unaligned */
|
||||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
* FIP_DT_FCOE_SIZE descriptor.
|
||||
*/
|
||||
struct fip_size_desc {
|
||||
struct fip_desc fd_desc;
|
||||
__be16 fd_size;
|
||||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
* Descriptor that encapsulates an ELS or ILS frame.
|
||||
* The encapsulated frame immediately follows this header, without
|
||||
* SOF, EOF, or CRC.
|
||||
*/
|
||||
struct fip_encaps {
|
||||
struct fip_desc fd_desc;
|
||||
__u8 fd_resvd[2];
|
||||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
* FIP_DT_VN_ID - VN_Node Identifier descriptor.
|
||||
*/
|
||||
struct fip_vn_desc {
|
||||
struct fip_desc fd_desc;
|
||||
__u8 fd_mac[ETH_ALEN];
|
||||
__u8 fd_resvd;
|
||||
__u8 fd_fc_id[3];
|
||||
__be64 fd_wwpn; /* port name, unaligned */
|
||||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
* FIP_DT_FKA - Advertisement keep-alive period.
|
||||
*/
|
||||
struct fip_fka_desc {
|
||||
struct fip_desc fd_desc;
|
||||
__u8 fd_resvd;
|
||||
__u8 fd_flags; /* bit0 is fka disable flag */
|
||||
__be32 fd_fka_period; /* adv./keep-alive period in mS */
|
||||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
* flags for fip_fka_desc.fd_flags
|
||||
*/
|
||||
enum fip_fka_flags {
|
||||
FIP_FKA_ADV_D = 0x01, /* no need for FKA from ENode */
|
||||
};
|
||||
|
||||
/* FIP_DT_FKA flags */
|
||||
|
||||
/*
|
||||
* FIP_DT_FC4F - FC-4 features.
|
||||
*/
|
||||
struct fip_fc4_feat {
|
||||
struct fip_desc fd_desc;
|
||||
__u8 fd_resvd[2];
|
||||
struct fc_ns_fts fd_fts;
|
||||
struct fc_ns_ff fd_ff;
|
||||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
* FIP_DT_VENDOR descriptor.
|
||||
*/
|
||||
struct fip_vendor_desc {
|
||||
struct fip_desc fd_desc;
|
||||
__u8 fd_resvd[2];
|
||||
__u8 fd_vendor_id[8];
|
||||
} __attribute__((packed));
|
||||
|
||||
#endif /* _FC_FIP_H_ */
|
213
include/scsi/fc/fc_ms.h
Normal file
213
include/scsi/fc/fc_ms.h
Normal file
|
@ -0,0 +1,213 @@
|
|||
/* * Copyright(c) 2011 Intel Corporation. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Maintained at www.Open-FCoE.org
|
||||
*/
|
||||
|
||||
#ifndef _FC_MS_H_
|
||||
#define _FC_MS_H_
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/*
|
||||
* Fibre Channel Services - Management Service (MS)
|
||||
* From T11.org FC-GS-4 Rev 7.91 February 4, 2004
|
||||
*/
|
||||
|
||||
/*
|
||||
* Fabric Device Management Interface
|
||||
*/
|
||||
|
||||
/*
|
||||
* Common-transport sub-type for FDMI
|
||||
*/
|
||||
#define FC_FDMI_SUBTYPE 0x10 /* fs_ct_hdr.ct_fs_subtype */
|
||||
|
||||
/*
|
||||
* Management server FDMI Requests.
|
||||
*/
|
||||
enum fc_fdmi_req {
|
||||
FC_FDMI_GRHL = 0x0100, /* Get Registered HBA List */
|
||||
FC_FDMI_GHAT = 0x0101, /* Get HBA Attributes */
|
||||
FC_FDMI_GRPL = 0x0102, /* Get Registered Port List */
|
||||
FC_FDMI_GPAT = 0x0110, /* Get Port Attributes */
|
||||
FC_FDMI_RHBA = 0x0200, /* Register HBA */
|
||||
FC_FDMI_RHAT = 0x0201, /* Register HBA Attributes */
|
||||
FC_FDMI_RPRT = 0x0210, /* Register Port */
|
||||
FC_FDMI_RPA = 0x0211, /* Register Port Attributes */
|
||||
FC_FDMI_DHBA = 0x0300, /* Deregister HBA */
|
||||
FC_FDMI_DHAT = 0x0301, /* Deregister HBA Attributes */
|
||||
FC_FDMI_DPRT = 0x0310, /* Deregister Port */
|
||||
FC_FDMI_DPA = 0x0311, /* Deregister Port Attributes */
|
||||
};
|
||||
|
||||
/*
|
||||
* HBA Attribute Entry Type
|
||||
*/
|
||||
enum fc_fdmi_hba_attr_type {
|
||||
FC_FDMI_HBA_ATTR_NODENAME = 0x0001,
|
||||
FC_FDMI_HBA_ATTR_MANUFACTURER = 0x0002,
|
||||
FC_FDMI_HBA_ATTR_SERIALNUMBER = 0x0003,
|
||||
FC_FDMI_HBA_ATTR_MODEL = 0x0004,
|
||||
FC_FDMI_HBA_ATTR_MODELDESCRIPTION = 0x0005,
|
||||
FC_FDMI_HBA_ATTR_HARDWAREVERSION = 0x0006,
|
||||
FC_FDMI_HBA_ATTR_DRIVERVERSION = 0x0007,
|
||||
FC_FDMI_HBA_ATTR_OPTIONROMVERSION = 0x0008,
|
||||
FC_FDMI_HBA_ATTR_FIRMWAREVERSION = 0x0009,
|
||||
FC_FDMI_HBA_ATTR_OSNAMEVERSION = 0x000A,
|
||||
FC_FDMI_HBA_ATTR_MAXCTPAYLOAD = 0x000B,
|
||||
};
|
||||
|
||||
/*
|
||||
* HBA Attribute Length
|
||||
*/
|
||||
#define FC_FDMI_HBA_ATTR_NODENAME_LEN 8
|
||||
#define FC_FDMI_HBA_ATTR_MANUFACTURER_LEN 64
|
||||
#define FC_FDMI_HBA_ATTR_SERIALNUMBER_LEN 64
|
||||
#define FC_FDMI_HBA_ATTR_MODEL_LEN 256
|
||||
#define FC_FDMI_HBA_ATTR_MODELDESCR_LEN 256
|
||||
#define FC_FDMI_HBA_ATTR_HARDWAREVERSION_LEN 256
|
||||
#define FC_FDMI_HBA_ATTR_DRIVERVERSION_LEN 256
|
||||
#define FC_FDMI_HBA_ATTR_OPTIONROMVERSION_LEN 256
|
||||
#define FC_FDMI_HBA_ATTR_FIRMWAREVERSION_LEN 256
|
||||
#define FC_FDMI_HBA_ATTR_OSNAMEVERSION_LEN 256
|
||||
#define FC_FDMI_HBA_ATTR_MAXCTPAYLOAD_LEN 4
|
||||
|
||||
/*
|
||||
* Port Attribute Type
|
||||
*/
|
||||
enum fc_fdmi_port_attr_type {
|
||||
FC_FDMI_PORT_ATTR_FC4TYPES = 0x0001,
|
||||
FC_FDMI_PORT_ATTR_SUPPORTEDSPEED = 0x0002,
|
||||
FC_FDMI_PORT_ATTR_CURRENTPORTSPEED = 0x0003,
|
||||
FC_FDMI_PORT_ATTR_MAXFRAMESIZE = 0x0004,
|
||||
FC_FDMI_PORT_ATTR_OSDEVICENAME = 0x0005,
|
||||
FC_FDMI_PORT_ATTR_HOSTNAME = 0x0006,
|
||||
};
|
||||
|
||||
/*
|
||||
* Port Attribute Length
|
||||
*/
|
||||
#define FC_FDMI_PORT_ATTR_FC4TYPES_LEN 32
|
||||
#define FC_FDMI_PORT_ATTR_SUPPORTEDSPEED_LEN 4
|
||||
#define FC_FDMI_PORT_ATTR_CURRENTPORTSPEED_LEN 4
|
||||
#define FC_FDMI_PORT_ATTR_MAXFRAMESIZE_LEN 4
|
||||
#define FC_FDMI_PORT_ATTR_OSDEVICENAME_LEN 256
|
||||
#define FC_FDMI_PORT_ATTR_HOSTNAME_LEN 256
|
||||
|
||||
/*
|
||||
* HBA Attribute ID
|
||||
*/
|
||||
struct fc_fdmi_hba_identifier {
|
||||
__be64 id;
|
||||
};
|
||||
|
||||
/*
|
||||
* Port Name
|
||||
*/
|
||||
struct fc_fdmi_port_name {
|
||||
__be64 portname;
|
||||
};
|
||||
|
||||
/*
|
||||
* Attribute Entry Block for HBA/Port Attributes
|
||||
*/
|
||||
#define FC_FDMI_ATTR_ENTRY_HEADER_LEN 4
|
||||
struct fc_fdmi_attr_entry {
|
||||
__be16 type;
|
||||
__be16 len;
|
||||
__u8 value[1];
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/*
|
||||
* Common for HBA/Port Attributes
|
||||
*/
|
||||
struct fs_fdmi_attrs {
|
||||
__be32 numattrs;
|
||||
struct fc_fdmi_attr_entry attr[1];
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/*
|
||||
* Registered Port List
|
||||
*/
|
||||
struct fc_fdmi_rpl {
|
||||
__be32 numport;
|
||||
struct fc_fdmi_port_name port[1];
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/*
|
||||
* Register HBA (RHBA)
|
||||
*/
|
||||
struct fc_fdmi_rhba {
|
||||
struct fc_fdmi_hba_identifier hbaid;
|
||||
struct fc_fdmi_rpl port;
|
||||
struct fs_fdmi_attrs hba_attrs;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/*
|
||||
* Register HBA Attributes (RHAT)
|
||||
*/
|
||||
struct fc_fdmi_rhat {
|
||||
struct fc_fdmi_hba_identifier hbaid;
|
||||
struct fs_fdmi_attrs hba_attrs;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/*
|
||||
* Register Port (RPRT)
|
||||
*/
|
||||
struct fc_fdmi_rprt {
|
||||
struct fc_fdmi_hba_identifier hbaid;
|
||||
struct fc_fdmi_port_name port;
|
||||
struct fs_fdmi_attrs hba_attrs;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/*
|
||||
* Register Port Attributes (RPA)
|
||||
*/
|
||||
struct fc_fdmi_rpa {
|
||||
struct fc_fdmi_port_name port;
|
||||
struct fs_fdmi_attrs hba_attrs;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/*
|
||||
* Deregister Port (DPRT)
|
||||
*/
|
||||
struct fc_fdmi_dprt {
|
||||
struct fc_fdmi_port_name port;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/*
|
||||
* Deregister Port Attributes (DPA)
|
||||
*/
|
||||
struct fc_fdmi_dpa {
|
||||
struct fc_fdmi_port_name port;
|
||||
struct fs_fdmi_attrs hba_attrs;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/*
|
||||
* Deregister HBA Attributes (DHAT)
|
||||
*/
|
||||
struct fc_fdmi_dhat {
|
||||
struct fc_fdmi_hba_identifier hbaid;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/*
|
||||
* Deregister HBA (DHBA)
|
||||
*/
|
||||
struct fc_fdmi_dhba {
|
||||
struct fc_fdmi_hba_identifier hbaid;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
#endif /* _FC_MS_H_ */
|
Loading…
Add table
Add a link
Reference in a new issue