@@ -61,6 +61,50 @@ struct rpmb_dev {
6161
6262#define to_rpmb_dev (x ) container_of((x), struct rpmb_dev, dev)
6363
64+ /**
65+ * struct rpmb_frame - RPMB frame structure for authenticated access
66+ *
67+ * @stuff : stuff bytes, a padding/reserved area of 196 bytes at the
68+ * beginning of the RPMB frame. They don’t carry meaningful
69+ * data but are required to make the frame exactly 512 bytes.
70+ * @key_mac : The authentication key or the message authentication
71+ * code (MAC) depending on the request/response type.
72+ * The MAC will be delivered in the last (or the only)
73+ * block of data.
74+ * @data : Data to be written or read by signed access.
75+ * @nonce : Random number generated by the host for the requests
76+ * and copied to the response by the RPMB engine.
77+ * @write_counter: Counter value for the total amount of the successful
78+ * authenticated data write requests made by the host.
79+ * @addr : Address of the data to be programmed to or read
80+ * from the RPMB. Address is the serial number of
81+ * the accessed block (half sector 256B).
82+ * @block_count : Number of blocks (half sectors, 256B) requested to be
83+ * read/programmed.
84+ * @result : Includes information about the status of the write counter
85+ * (valid, expired) and result of the access made to the RPMB.
86+ * @req_resp : Defines the type of request and response to/from the memory.
87+ *
88+ * The stuff bytes and big-endian properties are modeled to fit to the spec.
89+ */
90+ struct rpmb_frame {
91+ u8 stuff [196 ];
92+ u8 key_mac [32 ];
93+ u8 data [256 ];
94+ u8 nonce [16 ];
95+ __be32 write_counter ;
96+ __be16 addr ;
97+ __be16 block_count ;
98+ __be16 result ;
99+ __be16 req_resp ;
100+ };
101+
102+ #define RPMB_PROGRAM_KEY 0x1 /* Program RPMB Authentication Key */
103+ #define RPMB_GET_WRITE_COUNTER 0x2 /* Read RPMB write counter */
104+ #define RPMB_WRITE_DATA 0x3 /* Write data to RPMB partition */
105+ #define RPMB_READ_DATA 0x4 /* Read data from RPMB partition */
106+ #define RPMB_RESULT_READ 0x5 /* Read result request (Internal) */
107+
64108#if IS_ENABLED (CONFIG_RPMB )
65109struct rpmb_dev * rpmb_dev_get (struct rpmb_dev * rdev );
66110void rpmb_dev_put (struct rpmb_dev * rdev );
0 commit comments