FILE
dthev2-common.h
File preview with syntax highlighting.
linux-6.19.14/drivers/crypto/ti/dthev2-common.h
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * K3 DTHE V2 crypto accelerator driver 4 * 5 * Copyright (C) Texas Instruments 2025 - https://www.ti.com 6 * Author: T Pratham <t-pratham@ti.com> 7 */ 8 9#ifndef __TI_DTHEV2_H__ 10#define __TI_DTHEV2_H__ 11 12#include <crypto/aead.h> 13#include <crypto/aes.h> 14#include <crypto/algapi.h> 15#include <crypto/engine.h> 16#include <crypto/hash.h> 17#include <crypto/internal/aead.h> 18#include <crypto/internal/hash.h> 19#include <crypto/internal/skcipher.h> 20 21#include <linux/delay.h> 22#include <linux/dmaengine.h> 23#include <linux/dmapool.h> 24#include <linux/dma-mapping.h> 25#include <linux/io.h> 26#include <linux/scatterlist.h> 27 28#define DTHE_REG_SIZE 4 29#define DTHE_DMA_TIMEOUT_MS 2000 30/* 31 * Size of largest possible key (of all algorithms) to be stored in dthe_tfm_ctx 32 * This is currently the keysize of XTS-AES-256 which is 512 bits (64 bytes) 33 */ 34#define DTHE_MAX_KEYSIZE (AES_MAX_KEY_SIZE * 2) 35 36enum dthe_aes_mode { 37 DTHE_AES_ECB = 0, 38 DTHE_AES_CBC, 39 DTHE_AES_XTS, 40}; 41 42/* Driver specific struct definitions */ 43 44/** 45 * struct dthe_data - DTHE_V2 driver instance data 46 * @dev: Device pointer 47 * @regs: Base address of the register space 48 * @list: list node for dev 49 * @engine: Crypto engine instance 50 * @dma_aes_rx: AES Rx DMA Channel 51 * @dma_aes_tx: AES Tx DMA Channel 52 * @dma_sha_tx: SHA Tx DMA Channel 53 */ 54struct dthe_data { 55 struct device *dev; 56 void __iomem *regs; 57 struct list_head list; 58 struct crypto_engine *engine; 59 60 struct dma_chan *dma_aes_rx; 61 struct dma_chan *dma_aes_tx; 62 63 struct dma_chan *dma_sha_tx; 64}; 65 66/** 67 * struct dthe_list - device data list head 68 * @dev_list: linked list head 69 * @lock: Spinlock protecting accesses to the list 70 */ 71struct dthe_list { 72 struct list_head dev_list; 73 spinlock_t lock; 74}; 75 76/** 77 * struct dthe_tfm_ctx - Transform ctx struct containing ctx for all sub-components of DTHE V2 78 * @dev_data: Device data struct pointer 79 * @keylen: AES key length 80 * @key: AES key 81 * @aes_mode: AES mode 82 * @skcipher_fb: Fallback crypto skcipher handle for AES-XTS mode 83 */ 84struct dthe_tfm_ctx { 85 struct dthe_data *dev_data; 86 unsigned int keylen; 87 u32 key[DTHE_MAX_KEYSIZE / sizeof(u32)]; 88 enum dthe_aes_mode aes_mode; 89 struct crypto_sync_skcipher *skcipher_fb; 90}; 91 92/** 93 * struct dthe_aes_req_ctx - AES engine req ctx struct 94 * @enc: flag indicating encryption or decryption operation 95 * @aes_compl: Completion variable for use in manual completion in case of DMA callback failure 96 */ 97struct dthe_aes_req_ctx { 98 int enc; 99 struct completion aes_compl; 100}; 101 102/* Struct definitions end */ 103 104struct dthe_data *dthe_get_dev(struct dthe_tfm_ctx *ctx); 105 106int dthe_register_aes_algs(void); 107void dthe_unregister_aes_algs(void); 108 109#endif
~/
Read-only file preview.