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