xref: /openbmc/qemu/include/hw/misc/xlnx-cfi-if.h (revision 5a8559e2)
1*5a8559e2SFrancisco Iglesias /*
2*5a8559e2SFrancisco Iglesias  * Xilinx CFI interface
3*5a8559e2SFrancisco Iglesias  *
4*5a8559e2SFrancisco Iglesias  * Copyright (C) 2023, Advanced Micro Devices, Inc.
5*5a8559e2SFrancisco Iglesias  *
6*5a8559e2SFrancisco Iglesias  * Written by Francisco Iglesias <francisco.iglesias@amd.com>
7*5a8559e2SFrancisco Iglesias  *
8*5a8559e2SFrancisco Iglesias  * SPDX-License-Identifier: GPL-2.0-or-later
9*5a8559e2SFrancisco Iglesias  */
10*5a8559e2SFrancisco Iglesias #ifndef XLNX_CFI_IF_H
11*5a8559e2SFrancisco Iglesias #define XLNX_CFI_IF_H 1
12*5a8559e2SFrancisco Iglesias 
13*5a8559e2SFrancisco Iglesias #include "qemu/help-texts.h"
14*5a8559e2SFrancisco Iglesias #include "hw/hw.h"
15*5a8559e2SFrancisco Iglesias #include "qom/object.h"
16*5a8559e2SFrancisco Iglesias 
17*5a8559e2SFrancisco Iglesias #define TYPE_XLNX_CFI_IF "xlnx-cfi-if"
18*5a8559e2SFrancisco Iglesias typedef struct XlnxCfiIfClass XlnxCfiIfClass;
19*5a8559e2SFrancisco Iglesias DECLARE_CLASS_CHECKERS(XlnxCfiIfClass, XLNX_CFI_IF, TYPE_XLNX_CFI_IF)
20*5a8559e2SFrancisco Iglesias 
21*5a8559e2SFrancisco Iglesias #define XLNX_CFI_IF(obj) \
22*5a8559e2SFrancisco Iglesias      INTERFACE_CHECK(XlnxCfiIf, (obj), TYPE_XLNX_CFI_IF)
23*5a8559e2SFrancisco Iglesias 
24*5a8559e2SFrancisco Iglesias typedef enum {
25*5a8559e2SFrancisco Iglesias     PACKET_TYPE_CFU = 0x52,
26*5a8559e2SFrancisco Iglesias     PACKET_TYPE_CFRAME = 0xA1,
27*5a8559e2SFrancisco Iglesias } xlnx_cfi_packet_type;
28*5a8559e2SFrancisco Iglesias 
29*5a8559e2SFrancisco Iglesias typedef enum {
30*5a8559e2SFrancisco Iglesias     CFRAME_FAR = 1,
31*5a8559e2SFrancisco Iglesias     CFRAME_SFR = 2,
32*5a8559e2SFrancisco Iglesias     CFRAME_FDRI = 4,
33*5a8559e2SFrancisco Iglesias     CFRAME_CMD = 6,
34*5a8559e2SFrancisco Iglesias } xlnx_cfi_reg_addr;
35*5a8559e2SFrancisco Iglesias 
36*5a8559e2SFrancisco Iglesias typedef struct XlnxCfiPacket {
37*5a8559e2SFrancisco Iglesias     uint8_t reg_addr;
38*5a8559e2SFrancisco Iglesias     uint32_t data[4];
39*5a8559e2SFrancisco Iglesias } XlnxCfiPacket;
40*5a8559e2SFrancisco Iglesias 
41*5a8559e2SFrancisco Iglesias typedef struct XlnxCfiIf {
42*5a8559e2SFrancisco Iglesias     Object Parent;
43*5a8559e2SFrancisco Iglesias } XlnxCfiIf;
44*5a8559e2SFrancisco Iglesias 
45*5a8559e2SFrancisco Iglesias typedef struct XlnxCfiIfClass {
46*5a8559e2SFrancisco Iglesias     InterfaceClass parent;
47*5a8559e2SFrancisco Iglesias 
48*5a8559e2SFrancisco Iglesias     void (*cfi_transfer_packet)(XlnxCfiIf *cfi_if, XlnxCfiPacket *pkt);
49*5a8559e2SFrancisco Iglesias } XlnxCfiIfClass;
50*5a8559e2SFrancisco Iglesias 
51*5a8559e2SFrancisco Iglesias /**
52*5a8559e2SFrancisco Iglesias  * Transfer a XlnxCfiPacket.
53*5a8559e2SFrancisco Iglesias  *
54*5a8559e2SFrancisco Iglesias  * @cfi_if: the object implementing this interface
55*5a8559e2SFrancisco Iglesias  * @XlnxCfiPacket: a pointer to the XlnxCfiPacket to transfer
56*5a8559e2SFrancisco Iglesias  */
57*5a8559e2SFrancisco Iglesias void xlnx_cfi_transfer_packet(XlnxCfiIf *cfi_if, XlnxCfiPacket *pkt);
58*5a8559e2SFrancisco Iglesias 
59*5a8559e2SFrancisco Iglesias #endif /* XLNX_CFI_IF_H */
60