aboutsummaryrefslogtreecommitdiffstats
path: root/include/scsi/fc_frame.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/scsi/fc_frame.h')
-rw-r--r--include/scsi/fc_frame.h45
1 files changed, 44 insertions, 1 deletions
diff --git a/include/scsi/fc_frame.h b/include/scsi/fc_frame.h
index 29dd97d5b53a..4ad02041b667 100644
--- a/include/scsi/fc_frame.h
+++ b/include/scsi/fc_frame.h
@@ -30,6 +30,23 @@
30 30
31#include <linux/if_ether.h> 31#include <linux/if_ether.h>
32 32
33/* some helpful macros */
34
35#define ntohll(x) be64_to_cpu(x)
36#define htonll(x) cpu_to_be64(x)
37
38static inline u32 ntoh24(const u8 *p)
39{
40 return (p[0] << 16) | (p[1] << 8) | p[2];
41}
42
43static inline void hton24(u8 *p, u32 v)
44{
45 p[0] = (v >> 16) & 0xff;
46 p[1] = (v >> 8) & 0xff;
47 p[2] = v & 0xff;
48}
49
33/* 50/*
34 * The fc_frame interface is used to pass frame data between functions. 51 * The fc_frame interface is used to pass frame data between functions.
35 * The frame includes the data buffer, length, and SOF / EOF delimiter types. 52 * The frame includes the data buffer, length, and SOF / EOF delimiter types.
@@ -139,13 +156,39 @@ static inline int fc_frame_is_linear(struct fc_frame *fp)
139 156
140/* 157/*
141 * Get frame header from message in fc_frame structure. 158 * Get frame header from message in fc_frame structure.
159 * This version doesn't do a length check.
160 */
161static inline
162struct fc_frame_header *__fc_frame_header_get(const struct fc_frame *fp)
163{
164 return (struct fc_frame_header *)fr_hdr(fp);
165}
166
167/*
168 * Get frame header from message in fc_frame structure.
142 * This hides a cast and provides a place to add some checking. 169 * This hides a cast and provides a place to add some checking.
143 */ 170 */
144static inline 171static inline
145struct fc_frame_header *fc_frame_header_get(const struct fc_frame *fp) 172struct fc_frame_header *fc_frame_header_get(const struct fc_frame *fp)
146{ 173{
147 WARN_ON(fr_len(fp) < sizeof(struct fc_frame_header)); 174 WARN_ON(fr_len(fp) < sizeof(struct fc_frame_header));
148 return (struct fc_frame_header *) fr_hdr(fp); 175 return __fc_frame_header_get(fp);
176}
177
178/*
179 * Get source FC_ID (S_ID) from frame header in message.
180 */
181static inline u32 fc_frame_sid(const struct fc_frame *fp)
182{
183 return ntoh24(__fc_frame_header_get(fp)->fh_s_id);
184}
185
186/*
187 * Get destination FC_ID (D_ID) from frame header in message.
188 */
189static inline u32 fc_frame_did(const struct fc_frame *fp)
190{
191 return ntoh24(__fc_frame_header_get(fp)->fh_d_id);
149} 192}
150 193
151/* 194/*