1 /* 2 * ASPEED Hash and Crypto Engine 3 * 4 * Copyright (c) 2024 Seagate Technology LLC and/or its Affiliates 5 * Copyright (C) 2021 IBM Corp. 6 * 7 * SPDX-License-Identifier: GPL-2.0-or-later 8 */ 9 10 #ifndef ASPEED_HACE_H 11 #define ASPEED_HACE_H 12 13 #include "hw/sysbus.h" 14 #include "crypto/hash.h" 15 16 #define TYPE_ASPEED_HACE "aspeed.hace" 17 #define TYPE_ASPEED_AST2400_HACE TYPE_ASPEED_HACE "-ast2400" 18 #define TYPE_ASPEED_AST2500_HACE TYPE_ASPEED_HACE "-ast2500" 19 #define TYPE_ASPEED_AST2600_HACE TYPE_ASPEED_HACE "-ast2600" 20 #define TYPE_ASPEED_AST1030_HACE TYPE_ASPEED_HACE "-ast1030" 21 #define TYPE_ASPEED_AST2700_HACE TYPE_ASPEED_HACE "-ast2700" 22 23 OBJECT_DECLARE_TYPE(AspeedHACEState, AspeedHACEClass, ASPEED_HACE) 24 25 #define ASPEED_HACE_NR_REGS (0x64 >> 2) 26 #define ASPEED_HACE_MAX_SG 256 /* max number of entries */ 27 28 struct AspeedHACEState { 29 SysBusDevice parent; 30 31 MemoryRegion iomem; 32 qemu_irq irq; 33 34 struct iovec iov_cache[ASPEED_HACE_MAX_SG]; 35 uint32_t regs[ASPEED_HACE_NR_REGS]; 36 uint32_t total_req_len; 37 uint32_t iov_count; 38 39 MemoryRegion *dram_mr; 40 AddressSpace dram_as; 41 42 QCryptoHash *hash_ctx; 43 }; 44 45 46 struct AspeedHACEClass { 47 SysBusDeviceClass parent_class; 48 49 uint32_t src_mask; 50 uint32_t dest_mask; 51 uint32_t key_mask; 52 uint32_t hash_mask; 53 bool raise_crypt_interrupt_workaround; 54 }; 55 56 #endif /* ASPEED_HACE_H */ 57