diff options
Diffstat (limited to 'include/scsi')
-rw-r--r-- | include/scsi/Kbuild | 1 | ||||
-rw-r--r-- | include/scsi/fc/fc_fcp.h | 1 | ||||
-rw-r--r-- | include/scsi/fc_encode.h | 18 | ||||
-rw-r--r-- | include/scsi/libfc.h | 29 | ||||
-rw-r--r-- | include/scsi/libfcoe.h | 10 | ||||
-rw-r--r-- | include/scsi/scsi.h | 3 | ||||
-rw-r--r-- | include/scsi/scsi_transport_fc.h | 2 |
7 files changed, 29 insertions, 35 deletions
diff --git a/include/scsi/Kbuild b/include/scsi/Kbuild index b3a0ee6b2f1c..f2b94918994d 100644 --- a/include/scsi/Kbuild +++ b/include/scsi/Kbuild | |||
@@ -1,4 +1,3 @@ | |||
1 | header-y += scsi.h | ||
2 | header-y += scsi_netlink.h | 1 | header-y += scsi_netlink.h |
3 | header-y += scsi_netlink_fc.h | 2 | header-y += scsi_netlink_fc.h |
4 | header-y += scsi_bsg_fc.h | 3 | header-y += scsi_bsg_fc.h |
diff --git a/include/scsi/fc/fc_fcp.h b/include/scsi/fc/fc_fcp.h index 747e2c7d88d6..8e9b222251c2 100644 --- a/include/scsi/fc/fc_fcp.h +++ b/include/scsi/fc/fc_fcp.h | |||
@@ -76,6 +76,7 @@ struct fcp_cmnd32 { | |||
76 | #define FCP_PTA_HEADQ 1 /* head of queue task attribute */ | 76 | #define FCP_PTA_HEADQ 1 /* head of queue task attribute */ |
77 | #define FCP_PTA_ORDERED 2 /* ordered task attribute */ | 77 | #define FCP_PTA_ORDERED 2 /* ordered task attribute */ |
78 | #define FCP_PTA_ACA 4 /* auto. contigent allegiance */ | 78 | #define FCP_PTA_ACA 4 /* auto. contigent allegiance */ |
79 | #define FCP_PTA_MASK 7 /* mask for task attribute field */ | ||
79 | #define FCP_PRI_SHIFT 3 /* priority field starts in bit 3 */ | 80 | #define FCP_PRI_SHIFT 3 /* priority field starts in bit 3 */ |
80 | #define FCP_PRI_RESVD_MASK 0x80 /* reserved bits in priority field */ | 81 | #define FCP_PRI_RESVD_MASK 0x80 /* reserved bits in priority field */ |
81 | 82 | ||
diff --git a/include/scsi/fc_encode.h b/include/scsi/fc_encode.h index 8eb0a0fc0a71..9b4867c9c2d2 100644 --- a/include/scsi/fc_encode.h +++ b/include/scsi/fc_encode.h | |||
@@ -74,7 +74,7 @@ static inline void fc_adisc_fill(struct fc_lport *lport, struct fc_frame *fp) | |||
74 | adisc->adisc_cmd = ELS_ADISC; | 74 | adisc->adisc_cmd = ELS_ADISC; |
75 | put_unaligned_be64(lport->wwpn, &adisc->adisc_wwpn); | 75 | put_unaligned_be64(lport->wwpn, &adisc->adisc_wwpn); |
76 | put_unaligned_be64(lport->wwnn, &adisc->adisc_wwnn); | 76 | put_unaligned_be64(lport->wwnn, &adisc->adisc_wwnn); |
77 | hton24(adisc->adisc_port_id, fc_host_port_id(lport->host)); | 77 | hton24(adisc->adisc_port_id, lport->port_id); |
78 | } | 78 | } |
79 | 79 | ||
80 | /** | 80 | /** |
@@ -127,15 +127,13 @@ static inline int fc_ct_fill(struct fc_lport *lport, | |||
127 | 127 | ||
128 | case FC_NS_RFT_ID: | 128 | case FC_NS_RFT_ID: |
129 | ct = fc_ct_hdr_fill(fp, op, sizeof(struct fc_ns_rft)); | 129 | ct = fc_ct_hdr_fill(fp, op, sizeof(struct fc_ns_rft)); |
130 | hton24(ct->payload.rft.fid.fp_fid, | 130 | hton24(ct->payload.rft.fid.fp_fid, lport->port_id); |
131 | fc_host_port_id(lport->host)); | ||
132 | ct->payload.rft.fts = lport->fcts; | 131 | ct->payload.rft.fts = lport->fcts; |
133 | break; | 132 | break; |
134 | 133 | ||
135 | case FC_NS_RFF_ID: | 134 | case FC_NS_RFF_ID: |
136 | ct = fc_ct_hdr_fill(fp, op, sizeof(struct fc_ns_rff_id)); | 135 | ct = fc_ct_hdr_fill(fp, op, sizeof(struct fc_ns_rff_id)); |
137 | hton24(ct->payload.rff.fr_fid.fp_fid, | 136 | hton24(ct->payload.rff.fr_fid.fp_fid, lport->port_id); |
138 | fc_host_port_id(lport->host)); | ||
139 | ct->payload.rff.fr_type = FC_TYPE_FCP; | 137 | ct->payload.rff.fr_type = FC_TYPE_FCP; |
140 | if (lport->service_params & FCP_SPPF_INIT_FCN) | 138 | if (lport->service_params & FCP_SPPF_INIT_FCN) |
141 | ct->payload.rff.fr_feat = FCP_FEAT_INIT; | 139 | ct->payload.rff.fr_feat = FCP_FEAT_INIT; |
@@ -145,16 +143,14 @@ static inline int fc_ct_fill(struct fc_lport *lport, | |||
145 | 143 | ||
146 | case FC_NS_RNN_ID: | 144 | case FC_NS_RNN_ID: |
147 | ct = fc_ct_hdr_fill(fp, op, sizeof(struct fc_ns_rn_id)); | 145 | ct = fc_ct_hdr_fill(fp, op, sizeof(struct fc_ns_rn_id)); |
148 | hton24(ct->payload.rn.fr_fid.fp_fid, | 146 | hton24(ct->payload.rn.fr_fid.fp_fid, lport->port_id); |
149 | fc_host_port_id(lport->host)); | ||
150 | put_unaligned_be64(lport->wwnn, &ct->payload.rn.fr_wwn); | 147 | put_unaligned_be64(lport->wwnn, &ct->payload.rn.fr_wwn); |
151 | break; | 148 | break; |
152 | 149 | ||
153 | case FC_NS_RSPN_ID: | 150 | case FC_NS_RSPN_ID: |
154 | len = strnlen(fc_host_symbolic_name(lport->host), 255); | 151 | len = strnlen(fc_host_symbolic_name(lport->host), 255); |
155 | ct = fc_ct_hdr_fill(fp, op, sizeof(struct fc_ns_rspn) + len); | 152 | ct = fc_ct_hdr_fill(fp, op, sizeof(struct fc_ns_rspn) + len); |
156 | hton24(ct->payload.spn.fr_fid.fp_fid, | 153 | hton24(ct->payload.spn.fr_fid.fp_fid, lport->port_id); |
157 | fc_host_port_id(lport->host)); | ||
158 | strncpy(ct->payload.spn.fr_name, | 154 | strncpy(ct->payload.spn.fr_name, |
159 | fc_host_symbolic_name(lport->host), len); | 155 | fc_host_symbolic_name(lport->host), len); |
160 | ct->payload.spn.fr_name_len = len; | 156 | ct->payload.spn.fr_name_len = len; |
@@ -268,7 +264,7 @@ static inline void fc_logo_fill(struct fc_lport *lport, struct fc_frame *fp) | |||
268 | logo = fc_frame_payload_get(fp, sizeof(*logo)); | 264 | logo = fc_frame_payload_get(fp, sizeof(*logo)); |
269 | memset(logo, 0, sizeof(*logo)); | 265 | memset(logo, 0, sizeof(*logo)); |
270 | logo->fl_cmd = ELS_LOGO; | 266 | logo->fl_cmd = ELS_LOGO; |
271 | hton24(logo->fl_n_port_id, fc_host_port_id(lport->host)); | 267 | hton24(logo->fl_n_port_id, lport->port_id); |
272 | logo->fl_n_port_wwn = htonll(lport->wwpn); | 268 | logo->fl_n_port_wwn = htonll(lport->wwpn); |
273 | } | 269 | } |
274 | 270 | ||
@@ -295,7 +291,7 @@ static inline void fc_rec_fill(struct fc_lport *lport, struct fc_frame *fp) | |||
295 | rec = fc_frame_payload_get(fp, sizeof(*rec)); | 291 | rec = fc_frame_payload_get(fp, sizeof(*rec)); |
296 | memset(rec, 0, sizeof(*rec)); | 292 | memset(rec, 0, sizeof(*rec)); |
297 | rec->rec_cmd = ELS_REC; | 293 | rec->rec_cmd = ELS_REC; |
298 | hton24(rec->rec_s_id, fc_host_port_id(lport->host)); | 294 | hton24(rec->rec_s_id, lport->port_id); |
299 | rec->rec_ox_id = htons(ep->oxid); | 295 | rec->rec_ox_id = htons(ep->oxid); |
300 | rec->rec_rx_id = htons(ep->rxid); | 296 | rec->rec_rx_id = htons(ep->rxid); |
301 | } | 297 | } |
diff --git a/include/scsi/libfc.h b/include/scsi/libfc.h index 4b912eee33e5..7495c0ba67ee 100644 --- a/include/scsi/libfc.h +++ b/include/scsi/libfc.h | |||
@@ -47,13 +47,18 @@ | |||
47 | #define ntohll(x) be64_to_cpu(x) | 47 | #define ntohll(x) be64_to_cpu(x) |
48 | #define htonll(x) cpu_to_be64(x) | 48 | #define htonll(x) cpu_to_be64(x) |
49 | 49 | ||
50 | #define ntoh24(p) (((p)[0] << 16) | ((p)[1] << 8) | ((p)[2])) | ||
51 | 50 | ||
52 | #define hton24(p, v) do { \ | 51 | static inline u32 ntoh24(const u8 *p) |
53 | p[0] = (((v) >> 16) & 0xFF); \ | 52 | { |
54 | p[1] = (((v) >> 8) & 0xFF); \ | 53 | return (p[0] << 16) | (p[1] << 8) | p[2]; |
55 | p[2] = ((v) & 0xFF); \ | 54 | } |
56 | } while (0) | 55 | |
56 | static inline void hton24(u8 *p, u32 v) | ||
57 | { | ||
58 | p[0] = (v >> 16) & 0xff; | ||
59 | p[1] = (v >> 8) & 0xff; | ||
60 | p[2] = v & 0xff; | ||
61 | } | ||
57 | 62 | ||
58 | /** | 63 | /** |
59 | * enum fc_lport_state - Local port states | 64 | * enum fc_lport_state - Local port states |
@@ -775,6 +780,7 @@ struct fc_disc { | |||
775 | * @dev_stats: FCoE device stats (TODO: libfc should not be | 780 | * @dev_stats: FCoE device stats (TODO: libfc should not be |
776 | * FCoE aware) | 781 | * FCoE aware) |
777 | * @retry_count: Number of retries in the current state | 782 | * @retry_count: Number of retries in the current state |
783 | * @port_id: FC Port ID | ||
778 | * @wwpn: World Wide Port Name | 784 | * @wwpn: World Wide Port Name |
779 | * @wwnn: World Wide Node Name | 785 | * @wwnn: World Wide Node Name |
780 | * @service_params: Common service parameters | 786 | * @service_params: Common service parameters |
@@ -821,6 +827,7 @@ struct fc_lport { | |||
821 | u8 retry_count; | 827 | u8 retry_count; |
822 | 828 | ||
823 | /* Fabric information */ | 829 | /* Fabric information */ |
830 | u32 port_id; | ||
824 | u64 wwpn; | 831 | u64 wwpn; |
825 | u64 wwnn; | 832 | u64 wwnn; |
826 | unsigned int service_params; | 833 | unsigned int service_params; |
@@ -918,15 +925,6 @@ static inline void fc_lport_free_stats(struct fc_lport *lport) | |||
918 | } | 925 | } |
919 | 926 | ||
920 | /** | 927 | /** |
921 | * fc_lport_get_stats() - Get a local port's statistics | ||
922 | * @lport: The local port whose statistics are to be retreived | ||
923 | */ | ||
924 | static inline struct fcoe_dev_stats *fc_lport_get_stats(struct fc_lport *lport) | ||
925 | { | ||
926 | return per_cpu_ptr(lport->dev_stats, smp_processor_id()); | ||
927 | } | ||
928 | |||
929 | /** | ||
930 | * lport_priv() - Return the private data from a local port | 928 | * lport_priv() - Return the private data from a local port |
931 | * @lport: The local port whose private data is to be retreived | 929 | * @lport: The local port whose private data is to be retreived |
932 | */ | 930 | */ |
@@ -1053,7 +1051,6 @@ void fc_exch_mgr_reset(struct fc_lport *, u32 s_id, u32 d_id); | |||
1053 | * Functions for fc_functions_template | 1051 | * Functions for fc_functions_template |
1054 | */ | 1052 | */ |
1055 | void fc_get_host_speed(struct Scsi_Host *); | 1053 | void fc_get_host_speed(struct Scsi_Host *); |
1056 | void fc_get_host_port_type(struct Scsi_Host *); | ||
1057 | void fc_get_host_port_state(struct Scsi_Host *); | 1054 | void fc_get_host_port_state(struct Scsi_Host *); |
1058 | void fc_set_rport_loss_tmo(struct fc_rport *, u32 timeout); | 1055 | void fc_set_rport_loss_tmo(struct fc_rport *, u32 timeout); |
1059 | struct fc_host_statistics *fc_get_host_stats(struct Scsi_Host *); | 1056 | struct fc_host_statistics *fc_get_host_stats(struct Scsi_Host *); |
diff --git a/include/scsi/libfcoe.h b/include/scsi/libfcoe.h index c603f4a7e7fc..ec13f51531f8 100644 --- a/include/scsi/libfcoe.h +++ b/include/scsi/libfcoe.h | |||
@@ -29,6 +29,8 @@ | |||
29 | #include <scsi/fc/fc_fcoe.h> | 29 | #include <scsi/fc/fc_fcoe.h> |
30 | #include <scsi/libfc.h> | 30 | #include <scsi/libfc.h> |
31 | 31 | ||
32 | #define FCOE_MAX_CMD_LEN 16 /* Supported CDB length */ | ||
33 | |||
32 | /* | 34 | /* |
33 | * FIP tunable parameters. | 35 | * FIP tunable parameters. |
34 | */ | 36 | */ |
@@ -65,14 +67,12 @@ enum fip_state { | |||
65 | * @port_ka_time: time of next port keep-alive. | 67 | * @port_ka_time: time of next port keep-alive. |
66 | * @ctlr_ka_time: time of next controller keep-alive. | 68 | * @ctlr_ka_time: time of next controller keep-alive. |
67 | * @timer: timer struct used for all delayed events. | 69 | * @timer: timer struct used for all delayed events. |
68 | * @link_work: &work_struct for doing FCF selection. | 70 | * @timer_work: &work_struct for doing keep-alives and resets. |
69 | * @recv_work: &work_struct for receiving FIP frames. | 71 | * @recv_work: &work_struct for receiving FIP frames. |
70 | * @fip_recv_list: list of received FIP frames. | 72 | * @fip_recv_list: list of received FIP frames. |
71 | * @user_mfs: configured maximum FC frame size, including FC header. | 73 | * @user_mfs: configured maximum FC frame size, including FC header. |
72 | * @flogi_oxid: exchange ID of most recent fabric login. | 74 | * @flogi_oxid: exchange ID of most recent fabric login. |
73 | * @flogi_count: number of FLOGI attempts in AUTO mode. | 75 | * @flogi_count: number of FLOGI attempts in AUTO mode. |
74 | * @link: current link status for libfc. | ||
75 | * @last_link: last link state reported to libfc. | ||
76 | * @map_dest: use the FC_MAP mode for destination MAC addresses. | 76 | * @map_dest: use the FC_MAP mode for destination MAC addresses. |
77 | * @spma: supports SPMA server-provided MACs mode | 77 | * @spma: supports SPMA server-provided MACs mode |
78 | * @send_ctlr_ka: need to send controller keep alive | 78 | * @send_ctlr_ka: need to send controller keep alive |
@@ -100,14 +100,12 @@ struct fcoe_ctlr { | |||
100 | unsigned long port_ka_time; | 100 | unsigned long port_ka_time; |
101 | unsigned long ctlr_ka_time; | 101 | unsigned long ctlr_ka_time; |
102 | struct timer_list timer; | 102 | struct timer_list timer; |
103 | struct work_struct link_work; | 103 | struct work_struct timer_work; |
104 | struct work_struct recv_work; | 104 | struct work_struct recv_work; |
105 | struct sk_buff_head fip_recv_list; | 105 | struct sk_buff_head fip_recv_list; |
106 | u16 user_mfs; | 106 | u16 user_mfs; |
107 | u16 flogi_oxid; | 107 | u16 flogi_oxid; |
108 | u8 flogi_count; | 108 | u8 flogi_count; |
109 | u8 link; | ||
110 | u8 last_link; | ||
111 | u8 reset_req; | 109 | u8 reset_req; |
112 | u8 map_dest; | 110 | u8 map_dest; |
113 | u8 spma; | 111 | u8 spma; |
diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h index 8b4deca996ad..9ae5c613131b 100644 --- a/include/scsi/scsi.h +++ b/include/scsi/scsi.h | |||
@@ -114,6 +114,7 @@ struct scsi_cmnd; | |||
114 | #define READ_12 0xa8 | 114 | #define READ_12 0xa8 |
115 | #define WRITE_12 0xaa | 115 | #define WRITE_12 0xaa |
116 | #define WRITE_VERIFY_12 0xae | 116 | #define WRITE_VERIFY_12 0xae |
117 | #define VERIFY_12 0xaf | ||
117 | #define SEARCH_HIGH_12 0xb0 | 118 | #define SEARCH_HIGH_12 0xb0 |
118 | #define SEARCH_EQUAL_12 0xb1 | 119 | #define SEARCH_EQUAL_12 0xb1 |
119 | #define SEARCH_LOW_12 0xb2 | 120 | #define SEARCH_LOW_12 0xb2 |
@@ -134,6 +135,7 @@ struct scsi_cmnd; | |||
134 | #define MO_SET_TARGET_PGS 0x0a | 135 | #define MO_SET_TARGET_PGS 0x0a |
135 | /* values for variable length command */ | 136 | /* values for variable length command */ |
136 | #define READ_32 0x09 | 137 | #define READ_32 0x09 |
138 | #define VERIFY_32 0x0a | ||
137 | #define WRITE_32 0x0b | 139 | #define WRITE_32 0x0b |
138 | #define WRITE_SAME_32 0x0d | 140 | #define WRITE_SAME_32 0x0d |
139 | 141 | ||
@@ -423,6 +425,7 @@ static inline int scsi_is_wlun(unsigned int lun) | |||
423 | #define ADD_TO_MLQUEUE 0x2006 | 425 | #define ADD_TO_MLQUEUE 0x2006 |
424 | #define TIMEOUT_ERROR 0x2007 | 426 | #define TIMEOUT_ERROR 0x2007 |
425 | #define SCSI_RETURN_NOT_HANDLED 0x2008 | 427 | #define SCSI_RETURN_NOT_HANDLED 0x2008 |
428 | #define FAST_IO_FAIL 0x2009 | ||
426 | 429 | ||
427 | /* | 430 | /* |
428 | * Midlevel queue return values. | 431 | * Midlevel queue return values. |
diff --git a/include/scsi/scsi_transport_fc.h b/include/scsi/scsi_transport_fc.h index 8e86a94faf06..87d81b3ce564 100644 --- a/include/scsi/scsi_transport_fc.h +++ b/include/scsi/scsi_transport_fc.h | |||
@@ -807,6 +807,6 @@ void fc_host_post_vendor_event(struct Scsi_Host *shost, u32 event_number, | |||
807 | struct fc_vport *fc_vport_create(struct Scsi_Host *shost, int channel, | 807 | struct fc_vport *fc_vport_create(struct Scsi_Host *shost, int channel, |
808 | struct fc_vport_identifiers *); | 808 | struct fc_vport_identifiers *); |
809 | int fc_vport_terminate(struct fc_vport *vport); | 809 | int fc_vport_terminate(struct fc_vport *vport); |
810 | void fc_block_scsi_eh(struct scsi_cmnd *cmnd); | 810 | int fc_block_scsi_eh(struct scsi_cmnd *cmnd); |
811 | 811 | ||
812 | #endif /* SCSI_TRANSPORT_FC_H */ | 812 | #endif /* SCSI_TRANSPORT_FC_H */ |