xref: /openbmc/qemu/include/hw/misc/max78000_aes.h (revision 0edc2afe0c8197bbcb98f948c609fb74c9b1ffd5)
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