aboutsummaryrefslogtreecommitdiffstats
path: root/include/scsi/scsi_tcq.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/scsi/scsi_tcq.h')
-rw-r--r--include/scsi/scsi_tcq.h25
1 files changed, 23 insertions, 2 deletions
diff --git a/include/scsi/scsi_tcq.h b/include/scsi/scsi_tcq.h
index d04d05adfa9b..cf4c219c0b5c 100644
--- a/include/scsi/scsi_tcq.h
+++ b/include/scsi/scsi_tcq.h
@@ -6,7 +6,6 @@
6#include <scsi/scsi_device.h> 6#include <scsi/scsi_device.h>
7#include <scsi/scsi_host.h> 7#include <scsi/scsi_host.h>
8 8
9
10#define MSG_SIMPLE_TAG 0x20 9#define MSG_SIMPLE_TAG 0x20
11#define MSG_HEAD_TAG 0x21 10#define MSG_HEAD_TAG 0x21
12#define MSG_ORDERED_TAG 0x22 11#define MSG_ORDERED_TAG 0x22
@@ -14,6 +13,7 @@
14#define SCSI_NO_TAG (-1) /* identify no tag in use */ 13#define SCSI_NO_TAG (-1) /* identify no tag in use */
15 14
16 15
16#ifdef CONFIG_BLOCK
17 17
18/** 18/**
19 * scsi_get_tag_type - get the type of tag the device supports 19 * scsi_get_tag_type - get the type of tag the device supports
@@ -100,7 +100,7 @@ static inline int scsi_populate_tag_msg(struct scsi_cmnd *cmd, char *msg)
100 struct scsi_device *sdev = cmd->device; 100 struct scsi_device *sdev = cmd->device;
101 101
102 if (blk_rq_tagged(req)) { 102 if (blk_rq_tagged(req)) {
103 if (sdev->ordered_tags && req->flags & REQ_HARDBARRIER) 103 if (sdev->ordered_tags && req->cmd_flags & REQ_HARDBARRIER)
104 *msg++ = MSG_ORDERED_TAG; 104 *msg++ = MSG_ORDERED_TAG;
105 else 105 else
106 *msg++ = MSG_SIMPLE_TAG; 106 *msg++ = MSG_SIMPLE_TAG;
@@ -144,4 +144,25 @@ static inline int scsi_init_shared_tag_map(struct Scsi_Host *shost, int depth)
144 return shost->bqt ? 0 : -ENOMEM; 144 return shost->bqt ? 0 : -ENOMEM;
145} 145}
146 146
147/**
148 * scsi_host_find_tag - find the tagged command by host
149 * @shost: pointer to scsi_host
150 * @tag: tag of the scsi_cmnd
151 *
152 * Notes:
153 * Only works with tags allocated by the generic blk layer.
154 **/
155static inline struct scsi_cmnd *scsi_host_find_tag(struct Scsi_Host *shost,
156 int tag)
157{
158 struct request *req;
159
160 if (tag != SCSI_NO_TAG) {
161 req = blk_map_queue_find_tag(shost->bqt, tag);
162 return req ? (struct scsi_cmnd *)req->special : NULL;
163 }
164 return NULL;
165}
166
167#endif /* CONFIG_BLOCK */
147#endif /* _SCSI_SCSI_TCQ_H */ 168#endif /* _SCSI_SCSI_TCQ_H */