include/linux/rpmb.h
Source file repositories/reference/linux-study-clean/include/linux/rpmb.h
File Facts
- System
- Linux kernel
- Corpus path
include/linux/rpmb.h- Extension
.h- Size
- 5318 bytes
- Lines
- 168
- Domain
- Core OS
- Bucket
- Core Kernel Interface
- Inferred role
- Core OS: implementation source
- Status
- source implementation candidate
Why This File Exists
Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/device.hlinux/types.h
Detected Declarations
struct rpmb_descrstruct rpmb_devstruct rpmb_frameenum rpmb_typefunction rpmb_dev_putfunction rpmb_interface_registerfunction rpmb_interface_unregisterfunction rpmb_dev_unregisterfunction rpmb_route_frames
Annotated Snippet
struct rpmb_descr {
enum rpmb_type type;
int (*route_frames)(struct device *dev, u8 *req, unsigned int req_len,
u8 *resp, unsigned int resp_len);
u8 *dev_id;
size_t dev_id_len;
u16 reliable_wr_count;
u16 capacity;
};
/**
* struct rpmb_dev - device which can support RPMB partition
*
* @dev : device
* @id : device_id
* @list_node : linked list node
* @descr : RPMB description
*/
struct rpmb_dev {
struct device dev;
int id;
struct list_head list_node;
struct rpmb_descr descr;
};
#define to_rpmb_dev(x) container_of((x), struct rpmb_dev, dev)
/**
* struct rpmb_frame - RPMB frame structure for authenticated access
*
* @stuff : stuff bytes, a padding/reserved area of 196 bytes at the
* beginning of the RPMB frame. They don’t carry meaningful
* data but are required to make the frame exactly 512 bytes.
* @key_mac : The authentication key or the message authentication
* code (MAC) depending on the request/response type.
* The MAC will be delivered in the last (or the only)
* block of data.
* @data : Data to be written or read by signed access.
* @nonce : Random number generated by the host for the requests
* and copied to the response by the RPMB engine.
* @write_counter: Counter value for the total amount of the successful
* authenticated data write requests made by the host.
* @addr : Address of the data to be programmed to or read
* from the RPMB. Address is the serial number of
* the accessed block (half sector 256B).
* @block_count : Number of blocks (half sectors, 256B) requested to be
* read/programmed.
* @result : Includes information about the status of the write counter
* (valid, expired) and result of the access made to the RPMB.
* @req_resp : Defines the type of request and response to/from the memory.
*
* The stuff bytes and big-endian properties are modeled to fit to the spec.
*/
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;
};
#define RPMB_PROGRAM_KEY 0x1 /* Program RPMB Authentication Key */
#define RPMB_GET_WRITE_COUNTER 0x2 /* Read RPMB write counter */
#define RPMB_WRITE_DATA 0x3 /* Write data to RPMB partition */
#define RPMB_READ_DATA 0x4 /* Read data from RPMB partition */
#define RPMB_RESULT_READ 0x5 /* Read result request (Internal) */
#if IS_ENABLED(CONFIG_RPMB)
struct rpmb_dev *rpmb_dev_get(struct rpmb_dev *rdev);
void rpmb_dev_put(struct rpmb_dev *rdev);
struct rpmb_dev *rpmb_dev_find_device(const void *data,
const struct rpmb_dev *start,
int (*match)(struct device *dev,
const void *data));
int rpmb_interface_register(struct class_interface *intf);
void rpmb_interface_unregister(struct class_interface *intf);
struct rpmb_dev *rpmb_dev_register(struct device *dev,
struct rpmb_descr *descr);
int rpmb_dev_unregister(struct rpmb_dev *rdev);
int rpmb_route_frames(struct rpmb_dev *rdev, u8 *req,
unsigned int req_len, u8 *resp, unsigned int resp_len);
#else
static inline struct rpmb_dev *rpmb_dev_get(struct rpmb_dev *rdev)
{
Annotation
- Immediate include surface: `linux/device.h`, `linux/types.h`.
- Detected declarations: `struct rpmb_descr`, `struct rpmb_dev`, `struct rpmb_frame`, `enum rpmb_type`, `function rpmb_dev_put`, `function rpmb_interface_register`, `function rpmb_interface_unregister`, `function rpmb_dev_unregister`, `function rpmb_route_frames`.
- Atlas domain: Core OS / Core Kernel Interface.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.