drivers/crypto/nx/nx-aes-cbc.c

Source file repositories/reference/linux-study-clean/drivers/crypto/nx/nx-aes-cbc.c

File Facts

System
Linux kernel
Corpus path
drivers/crypto/nx/nx-aes-cbc.c
Extension
.c
Size
3308 bytes
Lines
130
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

if (!nx_ctx->op.inlen || !nx_ctx->op.outlen) {
			rc = -EINVAL;
			goto out;
		}

		rc = nx_hcall_sync(nx_ctx, &nx_ctx->op,
				   req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP);
		if (rc)
			goto out;

		memcpy(req->iv, csbcpb->cpb.aes_cbc.cv, AES_BLOCK_SIZE);
		atomic_inc(&(nx_ctx->stats->aes_ops));
		atomic64_add(be32_to_cpu(csbcpb->csb.processed_byte_count),
			     &(nx_ctx->stats->aes_bytes));

		processed += to_process;
	} while (processed < req->cryptlen);
out:
	spin_unlock_irqrestore(&nx_ctx->lock, irq_flags);
	return rc;
}

static int cbc_aes_nx_encrypt(struct skcipher_request *req)
{
	return cbc_aes_nx_crypt(req, 1);
}

static int cbc_aes_nx_decrypt(struct skcipher_request *req)
{
	return cbc_aes_nx_crypt(req, 0);
}

struct skcipher_alg nx_cbc_aes_alg = {
	.base.cra_name		= "cbc(aes)",
	.base.cra_driver_name	= "cbc-aes-nx",
	.base.cra_priority	= 300,
	.base.cra_blocksize	= AES_BLOCK_SIZE,
	.base.cra_ctxsize	= sizeof(struct nx_crypto_ctx),
	.base.cra_alignmask	= 0xf,
	.base.cra_module	= THIS_MODULE,
	.init			= nx_crypto_ctx_aes_cbc_init,
	.exit			= nx_crypto_ctx_skcipher_exit,
	.min_keysize		= AES_MIN_KEY_SIZE,
	.max_keysize		= AES_MAX_KEY_SIZE,
	.ivsize			= AES_BLOCK_SIZE,
	.setkey			= cbc_aes_nx_set_key,
	.encrypt		= cbc_aes_nx_encrypt,
	.decrypt		= cbc_aes_nx_decrypt,
};

Annotation

Implementation Notes