xref: /openbmc/qemu/include/hw/misc/xlnx-cfi-if.h (revision ff6d8490e33acf44ed8afd549e203a42d6f813b5)
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 "qom/object.h"
15*5a8559e2SFrancisco Iglesias 
16*5a8559e2SFrancisco Iglesias #define TYPE_XLNX_CFI_IF "xlnx-cfi-if"
17*5a8559e2SFrancisco Iglesias typedef struct XlnxCfiIfClass XlnxCfiIfClass;
18*5a8559e2SFrancisco Iglesias DECLARE_CLASS_CHECKERS(XlnxCfiIfClass, XLNX_CFI_IF, TYPE_XLNX_CFI_IF)
19*5a8559e2SFrancisco Iglesias 
20*5a8559e2SFrancisco Iglesias #define XLNX_CFI_IF(obj) \
21*5a8559e2SFrancisco Iglesias      INTERFACE_CHECK(XlnxCfiIf, (obj), TYPE_XLNX_CFI_IF)
22*5a8559e2SFrancisco Iglesias 
23*5a8559e2SFrancisco Iglesias typedef enum {
24*5a8559e2SFrancisco Iglesias     PACKET_TYPE_CFU = 0x52,
25*5a8559e2SFrancisco Iglesias     PACKET_TYPE_CFRAME = 0xA1,
26*5a8559e2SFrancisco Iglesias } xlnx_cfi_packet_type;
27*5a8559e2SFrancisco Iglesias 
28*5a8559e2SFrancisco Iglesias typedef enum {
29*5a8559e2SFrancisco Iglesias     CFRAME_FAR = 1,
30*5a8559e2SFrancisco Iglesias     CFRAME_SFR = 2,
31*5a8559e2SFrancisco Iglesias     CFRAME_FDRI = 4,
32*5a8559e2SFrancisco Iglesias     CFRAME_CMD = 6,
33*5a8559e2SFrancisco Iglesias } xlnx_cfi_reg_addr;
34*5a8559e2SFrancisco Iglesias 
35*5a8559e2SFrancisco Iglesias typedef struct XlnxCfiPacket {
36*5a8559e2SFrancisco Iglesias     uint8_t reg_addr;
37*5a8559e2SFrancisco Iglesias     uint32_t data[4];
38*5a8559e2SFrancisco Iglesias } XlnxCfiPacket;
39*5a8559e2SFrancisco Iglesias 
40*5a8559e2SFrancisco Iglesias typedef struct XlnxCfiIf {
41*5a8559e2SFrancisco Iglesias     Object Parent;
42*5a8559e2SFrancisco Iglesias } XlnxCfiIf;
43*5a8559e2SFrancisco Iglesias 
44*5a8559e2SFrancisco Iglesias typedef struct XlnxCfiIfClass {
45*5a8559e2SFrancisco Iglesias     InterfaceClass parent;
46*5a8559e2SFrancisco Iglesias 
47*5a8559e2SFrancisco Iglesias     void (*cfi_transfer_packet)(XlnxCfiIf *cfi_if, XlnxCfiPacket *pkt);
48*5a8559e2SFrancisco Iglesias } XlnxCfiIfClass;
49*5a8559e2SFrancisco Iglesias 
50*5a8559e2SFrancisco Iglesias /**
51*5a8559e2SFrancisco Iglesias  * Transfer a XlnxCfiPacket.
52*5a8559e2SFrancisco Iglesias  *
53*5a8559e2SFrancisco Iglesias  * @cfi_if: the object implementing this interface
54*5a8559e2SFrancisco Iglesias  * @XlnxCfiPacket: a pointer to the XlnxCfiPacket to transfer
55*5a8559e2SFrancisco Iglesias  */
56*5a8559e2SFrancisco Iglesias void xlnx_cfi_transfer_packet(XlnxCfiIf *cfi_if, XlnxCfiPacket *pkt);
57*5a8559e2SFrancisco Iglesias 
58*5a8559e2SFrancisco Iglesias #endif /* XLNX_CFI_IF_H */
59