18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#ifndef _SCSI_SCSI_REQUEST_H
38c2ecf20Sopenharmony_ci#define _SCSI_SCSI_REQUEST_H
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci#include <linux/blk-mq.h>
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_ci#define BLK_MAX_CDB	16
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_cistruct scsi_request {
108c2ecf20Sopenharmony_ci	unsigned char	__cmd[BLK_MAX_CDB];
118c2ecf20Sopenharmony_ci	unsigned char	*cmd;
128c2ecf20Sopenharmony_ci	unsigned short	cmd_len;
138c2ecf20Sopenharmony_ci	int		result;
148c2ecf20Sopenharmony_ci	unsigned int	sense_len;
158c2ecf20Sopenharmony_ci	unsigned int	resid_len;	/* residual count */
168c2ecf20Sopenharmony_ci	int		retries;
178c2ecf20Sopenharmony_ci	void		*sense;
188c2ecf20Sopenharmony_ci};
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_cistatic inline struct scsi_request *scsi_req(struct request *rq)
218c2ecf20Sopenharmony_ci{
228c2ecf20Sopenharmony_ci	return blk_mq_rq_to_pdu(rq);
238c2ecf20Sopenharmony_ci}
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_cistatic inline void scsi_req_free_cmd(struct scsi_request *req)
268c2ecf20Sopenharmony_ci{
278c2ecf20Sopenharmony_ci	if (req->cmd != req->__cmd)
288c2ecf20Sopenharmony_ci		kfree(req->cmd);
298c2ecf20Sopenharmony_ci}
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_civoid scsi_req_init(struct scsi_request *req);
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ci#endif /* _SCSI_SCSI_REQUEST_H */
34