scsi: ufs: Simplify response header parsing

Make the code that parses UTP transfer request headers easier to read by
using u8 instead of __be32 where appropriate.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Link: https://lore.kernel.org/r/20230727194457.3152309-13-bvanassche@acm.org
Reviewed-by: Avri Altman <avri.altman@wdc.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Bart Van Assche
2023-07-27 12:41:24 -07:00
committed by Martin K. Petersen
parent 67a2a89738
commit 617bfaa8dd
3 changed files with 115 additions and 108 deletions
+49 -3
View File
@@ -8,6 +8,7 @@
#ifndef SCSI_BSG_UFS_H
#define SCSI_BSG_UFS_H
#include <asm/byteorder.h>
#include <linux/types.h>
/*
* This file intended to be included by both kernel and user space
@@ -40,11 +41,56 @@ enum ufs_rpmb_op_type {
* @dword_0: UPIU header DW-0
* @dword_1: UPIU header DW-1
* @dword_2: UPIU header DW-2
*
* @transaction_code: Type of request or response. See also enum
* upiu_request_transaction and enum upiu_response_transaction.
* @flags: UPIU flags. The meaning of individual flags depends on the
* transaction code.
* @lun: Logical unit number.
* @task_tag: Task tag.
* @iid: Initiator ID.
* @command_set_type: 0 for SCSI command set; 1 for UFS specific.
* @tm_function: Task management function in case of a task management request
* UPIU.
* @query_function: Query function in case of a query request UPIU.
* @response: 0 for success; 1 for failure.
* @status: SCSI status if this is the header of a response to a SCSI command.
* @ehs_length: EHS length in units of 32 bytes.
* @device_information:
* @data_segment_length: data segment length.
*/
struct utp_upiu_header {
__be32 dword_0;
__be32 dword_1;
__be32 dword_2;
union {
struct {
__be32 dword_0;
__be32 dword_1;
__be32 dword_2;
};
struct {
__u8 transaction_code;
__u8 flags;
__u8 lun;
__u8 task_tag;
#if defined(__BIG_ENDIAN)
__u8 iid: 4;
__u8 command_set_type: 4;
#elif defined(__LITTLE_ENDIAN)
__u8 command_set_type: 4;
__u8 iid: 4;
#else
#error
#endif
union {
__u8 tm_function;
__u8 query_function;
};
__u8 response;
__u8 status;
__u8 ehs_length;
__u8 device_information;
__be16 data_segment_length;
};
};
};
/**