xref: /qemu/include/hw/misc/xlnx-cfi-if.h (revision 5a8559e2)
15a8559e2SFrancisco Iglesias /*
25a8559e2SFrancisco Iglesias  * Xilinx CFI interface
35a8559e2SFrancisco Iglesias  *
45a8559e2SFrancisco Iglesias  * Copyright (C) 2023, Advanced Micro Devices, Inc.
55a8559e2SFrancisco Iglesias  *
65a8559e2SFrancisco Iglesias  * Written by Francisco Iglesias <francisco.iglesias@amd.com>
75a8559e2SFrancisco Iglesias  *
85a8559e2SFrancisco Iglesias  * SPDX-License-Identifier: GPL-2.0-or-later
95a8559e2SFrancisco Iglesias  */
105a8559e2SFrancisco Iglesias #ifndef XLNX_CFI_IF_H
115a8559e2SFrancisco Iglesias #define XLNX_CFI_IF_H 1
125a8559e2SFrancisco Iglesias 
135a8559e2SFrancisco Iglesias #include "qemu/help-texts.h"
145a8559e2SFrancisco Iglesias #include "hw/hw.h"
155a8559e2SFrancisco Iglesias #include "qom/object.h"
165a8559e2SFrancisco Iglesias 
175a8559e2SFrancisco Iglesias #define TYPE_XLNX_CFI_IF "xlnx-cfi-if"
185a8559e2SFrancisco Iglesias typedef struct XlnxCfiIfClass XlnxCfiIfClass;
195a8559e2SFrancisco Iglesias DECLARE_CLASS_CHECKERS(XlnxCfiIfClass, XLNX_CFI_IF, TYPE_XLNX_CFI_IF)
205a8559e2SFrancisco Iglesias 
215a8559e2SFrancisco Iglesias #define XLNX_CFI_IF(obj) \
225a8559e2SFrancisco Iglesias      INTERFACE_CHECK(XlnxCfiIf, (obj), TYPE_XLNX_CFI_IF)
235a8559e2SFrancisco Iglesias 
245a8559e2SFrancisco Iglesias typedef enum {
255a8559e2SFrancisco Iglesias     PACKET_TYPE_CFU = 0x52,
265a8559e2SFrancisco Iglesias     PACKET_TYPE_CFRAME = 0xA1,
275a8559e2SFrancisco Iglesias } xlnx_cfi_packet_type;
285a8559e2SFrancisco Iglesias 
295a8559e2SFrancisco Iglesias typedef enum {
305a8559e2SFrancisco Iglesias     CFRAME_FAR = 1,
315a8559e2SFrancisco Iglesias     CFRAME_SFR = 2,
325a8559e2SFrancisco Iglesias     CFRAME_FDRI = 4,
335a8559e2SFrancisco Iglesias     CFRAME_CMD = 6,
345a8559e2SFrancisco Iglesias } xlnx_cfi_reg_addr;
355a8559e2SFrancisco Iglesias 
365a8559e2SFrancisco Iglesias typedef struct XlnxCfiPacket {
375a8559e2SFrancisco Iglesias     uint8_t reg_addr;
385a8559e2SFrancisco Iglesias     uint32_t data[4];
395a8559e2SFrancisco Iglesias } XlnxCfiPacket;
405a8559e2SFrancisco Iglesias 
415a8559e2SFrancisco Iglesias typedef struct XlnxCfiIf {
425a8559e2SFrancisco Iglesias     Object Parent;
435a8559e2SFrancisco Iglesias } XlnxCfiIf;
445a8559e2SFrancisco Iglesias 
455a8559e2SFrancisco Iglesias typedef struct XlnxCfiIfClass {
465a8559e2SFrancisco Iglesias     InterfaceClass parent;
475a8559e2SFrancisco Iglesias 
485a8559e2SFrancisco Iglesias     void (*cfi_transfer_packet)(XlnxCfiIf *cfi_if, XlnxCfiPacket *pkt);
495a8559e2SFrancisco Iglesias } XlnxCfiIfClass;
505a8559e2SFrancisco Iglesias 
515a8559e2SFrancisco Iglesias /**
525a8559e2SFrancisco Iglesias  * Transfer a XlnxCfiPacket.
535a8559e2SFrancisco Iglesias  *
545a8559e2SFrancisco Iglesias  * @cfi_if: the object implementing this interface
555a8559e2SFrancisco Iglesias  * @XlnxCfiPacket: a pointer to the XlnxCfiPacket to transfer
565a8559e2SFrancisco Iglesias  */
575a8559e2SFrancisco Iglesias void xlnx_cfi_transfer_packet(XlnxCfiIf *cfi_if, XlnxCfiPacket *pkt);
585a8559e2SFrancisco Iglesias 
595a8559e2SFrancisco Iglesias #endif /* XLNX_CFI_IF_H */
60