1*33dfff7eSJackson Donaldson /* 2*33dfff7eSJackson Donaldson * MAX78000 AES 3*33dfff7eSJackson Donaldson * 4*33dfff7eSJackson Donaldson * Copyright (c) 2025 Jackson Donaldson <jcksn@duck.com> 5*33dfff7eSJackson Donaldson * 6*33dfff7eSJackson Donaldson * SPDX-License-Identifier: GPL-2.0-or-later 7*33dfff7eSJackson Donaldson */ 8*33dfff7eSJackson Donaldson #ifndef HW_MAX78000_AES_H 9*33dfff7eSJackson Donaldson #define HW_MAX78000_AES_H 10*33dfff7eSJackson Donaldson 11*33dfff7eSJackson Donaldson #include "hw/sysbus.h" 12*33dfff7eSJackson Donaldson #include "crypto/aes.h" 13*33dfff7eSJackson Donaldson #include "qom/object.h" 14*33dfff7eSJackson Donaldson 15*33dfff7eSJackson Donaldson #define TYPE_MAX78000_AES "max78000-aes" 16*33dfff7eSJackson Donaldson OBJECT_DECLARE_SIMPLE_TYPE(Max78000AesState, MAX78000_AES) 17*33dfff7eSJackson Donaldson 18*33dfff7eSJackson Donaldson #define CTRL 0 19*33dfff7eSJackson Donaldson #define STATUS 4 20*33dfff7eSJackson Donaldson #define INTFL 8 21*33dfff7eSJackson Donaldson #define INTEN 0xc 22*33dfff7eSJackson Donaldson #define FIFO 0x10 23*33dfff7eSJackson Donaldson 24*33dfff7eSJackson Donaldson #define KEY_BASE 0x400 25*33dfff7eSJackson Donaldson #define KEY_END 0x420 26*33dfff7eSJackson Donaldson 27*33dfff7eSJackson Donaldson /* CTRL */ 28*33dfff7eSJackson Donaldson #define TYPE (1 << 9 | 1 << 8) 29*33dfff7eSJackson Donaldson #define KEY_SIZE (1 << 7 | 1 << 6) 30*33dfff7eSJackson Donaldson #define OUTPUT_FLUSH (1 << 5) 31*33dfff7eSJackson Donaldson #define INPUT_FLUSH (1 << 4) 32*33dfff7eSJackson Donaldson #define START (1 << 3) 33*33dfff7eSJackson Donaldson 34*33dfff7eSJackson Donaldson #define AES_EN (1 << 0) 35*33dfff7eSJackson Donaldson 36*33dfff7eSJackson Donaldson /* STATUS */ 37*33dfff7eSJackson Donaldson #define OUTPUT_FULL (1 << 4) 38*33dfff7eSJackson Donaldson #define OUTPUT_EMPTY (1 << 3) 39*33dfff7eSJackson Donaldson #define INPUT_FULL (1 << 2) 40*33dfff7eSJackson Donaldson #define INPUT_EMPTY (1 << 1) 41*33dfff7eSJackson Donaldson #define BUSY (1 << 0) 42*33dfff7eSJackson Donaldson 43*33dfff7eSJackson Donaldson /* INTFL*/ 44*33dfff7eSJackson Donaldson #define DONE (1 << 0) 45*33dfff7eSJackson Donaldson 46*33dfff7eSJackson Donaldson struct Max78000AesState { 47*33dfff7eSJackson Donaldson SysBusDevice parent_obj; 48*33dfff7eSJackson Donaldson 49*33dfff7eSJackson Donaldson MemoryRegion mmio; 50*33dfff7eSJackson Donaldson 51*33dfff7eSJackson Donaldson uint32_t ctrl; 52*33dfff7eSJackson Donaldson uint32_t status; 53*33dfff7eSJackson Donaldson uint32_t intfl; 54*33dfff7eSJackson Donaldson uint32_t inten; 55*33dfff7eSJackson Donaldson uint32_t data_index; 56*33dfff7eSJackson Donaldson uint8_t data[16]; 57*33dfff7eSJackson Donaldson 58*33dfff7eSJackson Donaldson uint8_t key[32]; 59*33dfff7eSJackson Donaldson AES_KEY internal_key; 60*33dfff7eSJackson Donaldson 61*33dfff7eSJackson Donaldson uint32_t result_index; 62*33dfff7eSJackson Donaldson uint8_t result[16]; 63*33dfff7eSJackson Donaldson 64*33dfff7eSJackson Donaldson 65*33dfff7eSJackson Donaldson qemu_irq irq; 66*33dfff7eSJackson Donaldson }; 67*33dfff7eSJackson Donaldson 68*33dfff7eSJackson Donaldson #endif 69