drivers/crypto/atmel-i2c.h

Source file repositories/reference/linux-study-clean/drivers/crypto/atmel-i2c.h

File Facts

System
Linux kernel
Corpus path
drivers/crypto/atmel-i2c.h
Extension
.h
Size
6199 bytes
Lines
193
Domain
Driver Families
Bucket
drivers/crypto
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct atmel_i2c_cmd {
	u8 word_addr;
	u8 count;
	u8 opcode;
	u8 param1;
	__le16 param2;
	u8 data[MAX_RSP_SIZE];
	u8 msecs;
	u16 rxsize;
} __packed;

/* Status/Error codes */
#define STATUS_SIZE			0x04
#define STATUS_NOERR			0x00
#define STATUS_WAKE_SUCCESSFUL		0x11

/* Definitions for eeprom organization */
#define CONFIGURATION_ZONE		0
#define OTP_ZONE			1

/* Definitions for eeprom zone sizes */
#define OTP_ZONE_SIZE			64

/* Definitions for Indexes common to all commands */
#define RSP_DATA_IDX			1 /* buffer index of data in response */
#define DATA_SLOT_2			2 /* used for ECDH private key */

/* Definitions for the device lock state */
#define DEVICE_LOCK_ADDR		0x15
#define LOCK_VALUE_IDX			(RSP_DATA_IDX + 2)
#define LOCK_CONFIG_IDX			(RSP_DATA_IDX + 3)

/*
 * Wake High delay to data communication (microseconds). SDA should be stable
 * high for this entire duration.
 */
#define TWHI_MIN			1500
#define TWHI_MAX			1550

/* Wake Low duration */
#define TWLO_USEC			60

/* Command execution time (milliseconds) */
#define MAX_EXEC_TIME_ECDH		58
#define MAX_EXEC_TIME_GENKEY		115
#define MAX_EXEC_TIME_READ		1
#define MAX_EXEC_TIME_RANDOM		50

/* Command opcode */
#define OPCODE_ECDH			0x43
#define OPCODE_GENKEY			0x40
#define OPCODE_READ			0x02
#define OPCODE_RANDOM			0x1b

/* Definitions for the READ Command */
#define READ_COUNT			7

/* Definitions for the RANDOM Command */
#define RANDOM_COUNT			7

/* Definitions for the GenKey Command */
#define GENKEY_COUNT			7
#define GENKEY_MODE_PRIVATE		0x04

/* Definitions for the ECDH Command */
#define ECDH_COUNT			71
#define ECDH_PREFIX_MODE		0x00

/* Used for binding tfm objects to i2c clients. */
struct atmel_ecc_driver_data {
	struct list_head i2c_client_list;
	spinlock_t i2c_list_lock;
} ____cacheline_aligned;

/**
 * atmel_i2c_client_priv - i2c_client private data
 * @client              : pointer to i2c client device
 * @i2c_client_list_node: part of i2c_client_list
 * @lock                : lock for sending i2c commands
 * @wake_token          : wake token array of zeros
 * @wake_token_sz       : size in bytes of the wake_token
 * @tfm_count           : number of active crypto transformations on i2c client
 * @hwrng               : hold the hardware generated rng
 *
 * Reads and writes from/to the i2c client are sequential. The first byte
 * transmitted to the device is treated as the byte size. Any attempt to send
 * more than this number of bytes will cause the device to not ACK those bytes.
 * After the host writes a single command byte to the input buffer, reads are
 * prohibited until after the device completes command execution. Use a mutex
 * when sending i2c commands.

Annotation

Implementation Notes