/* * MAX78000 AES * * Copyright (c) 2025 Jackson Donaldson * * SPDX-License-Identifier: GPL-2.0-or-later */ #ifndef HW_MAX78000_AES_H #define HW_MAX78000_AES_H #include "hw/sysbus.h" #include "crypto/aes.h" #include "qom/object.h" #define TYPE_MAX78000_AES "max78000-aes" OBJECT_DECLARE_SIMPLE_TYPE(Max78000AesState, MAX78000_AES) #define CTRL 0 #define STATUS 4 #define INTFL 8 #define INTEN 0xc #define FIFO 0x10 #define KEY_BASE 0x400 #define KEY_END 0x420 /* CTRL */ #define TYPE (1 << 9 | 1 << 8) #define KEY_SIZE (1 << 7 | 1 << 6) #define OUTPUT_FLUSH (1 << 5) #define INPUT_FLUSH (1 << 4) #define START (1 << 3) #define AES_EN (1 << 0) /* STATUS */ #define OUTPUT_FULL (1 << 4) #define OUTPUT_EMPTY (1 << 3) #define INPUT_FULL (1 << 2) #define INPUT_EMPTY (1 << 1) #define BUSY (1 << 0) /* INTFL*/ #define DONE (1 << 0) struct Max78000AesState { SysBusDevice parent_obj; MemoryRegion mmio; uint32_t ctrl; uint32_t status; uint32_t intfl; uint32_t inten; uint32_t data_index; uint8_t data[16]; uint8_t key[32]; AES_KEY internal_key; uint32_t result_index; uint8_t result[16]; qemu_irq irq; }; #endif