+struct rpmb_frame {
u8 stuff[196];
u8 key_mac[32];
u8 data[256];
u8 nonce[16];
__be32 write_counter;
__be16 addr;
__be16 block_count;
__be16 result;
__be16 req_resp;
+} __packed;
I haven't looked at the NVME or the UFS spec in detail. Although, I assume the above frame makes sense for those types of interfaces/protocols too?
The rpmb implementation in ufs, has drifted apart from eMMC. E.g. in UFS4.0: - the frame is different - see struct ufs_arpmb_meta in include/uapi/scsi/scsi_bsg_ufs.h, - Additional extended header was added, - the frame size is no longer 512Bytes (256Bytes meta info + 256Bytes data) but 4k, - there are 9 rpmb operations instead of 7, - The atomicity requirement of the command sequence was waved, And probably more differences that I forgot. This is why it is better to designated this as an eMMC-only implementation?
Thanks, Avri