On Wed, 2018-08-01 at 11:04 +0300, Avri Altman wrote: > +++ b/drivers/scsi/ufs/ufs_bsg.c > @@ -0,0 +1,127 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * SSCSI transport companion for UFS HBA
What is "SSCSI"? > diff --git a/drivers/scsi/ufs/ufs_bsg.h b/drivers/scsi/ufs/ufs_bsg.h > new file mode 100644 [ ... ] > +struct ufs_bsg_request { > + uint32_t msgcode; > + struct utp_upiu_header header; > + union { > + struct utp_upiu_query qr; > + struct utp_upiu_task_req tr; > + /* use utp_upiu_query to host the 4 dwards of uic command */ What are "dwards"? > + struct utp_upiu_query uc; > + } tsf; > + uint8_t data[0]; The offset of the data member will change if a member will be added to the union with a larger size than the existing members. That seems like an API design bug to me. > +} __packed; Would the data member offsets be the same without "__packed"? If so, __packed should be left out because it results in generation of suboptimal code on architectures that do not support unaligned multi-byte reads (e.g. IA-64). > +struct ufs_bsg_reply { > + /* > + * The completion result. Result exists in two forms: > + * if negative, it is an -Exxx system errno value. There will > + * be no further reply information supplied. > + * else, it's the 4-byte scsi error result, with driver, host, > + * msg and status fields. The per-msgcode reply structure > + * will contain valid data. > + */ > + uint32_t result; > + > + /* If there was reply_payload, how much was recevied ? */ ^^^^^^^^ Did you perhaps mean "received"? > + uint32_t reply_payload_rcv_len; > + > + struct utp_upiu_header header; > + union { > + struct utp_upiu_query qr; > + struct utp_upiu_task_rsp tr; > + struct utp_upiu_query uc; > + } tsf; > + uint8_t data[0]; > +}; > + > +struct ufs_bsg_raw_upiu { > + struct ufs_bsg_upiu request; > + struct ufs_bsg_upiu reply; > +}; Are any of the above data structures needed by user space software? Should these data structure definitions perhaps be moved to a header file under include/uapi? Thanks, Bart.