mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-11 03:24:58 -06:00

Several source comments still refer to docs with the old .txt extension that were previously converted to reStructuredText. Update these references to use the correct .rst extensions to maintain accurate in-tree documentation pointers. No functional changes. Related commits:50f8174c5c
(Jul 2021): docs/specs/acpi_nvdimm: Convert to rSTf054eb1c92
(Jul 2021): docs/specs/acpi_pci_hotplug: Convert to rST912fb3678b
(Sep 2023): docs/specs/vmgenid: Convert to rSTbb1cff6ee0
(Sep 2023): docs/specs/ivshmem-spec: Convert to rST55ff468f78
(Jan 2022): docs: Rename ppc-spapr-hotplug.txt to .rst Signed-off-by: Sean Wei <me@sean.taipei> Message-ID: <20250616.qemu.relocated.05@sean.taipei> Reviewed-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Harsh Prateek Bora <harshpb@linux.ibm.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
86 lines
1.9 KiB
C
86 lines
1.9 KiB
C
/*
|
|
* Inter-VM Shared Memory Flat Device
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
* Copyright (c) 2023 Linaro Ltd.
|
|
* Authors:
|
|
* Gustavo Romero
|
|
*
|
|
*/
|
|
|
|
#ifndef IVSHMEM_FLAT_H
|
|
#define IVSHMEM_FLAT_H
|
|
|
|
#include "qemu/queue.h"
|
|
#include "qemu/event_notifier.h"
|
|
#include "chardev/char-fe.h"
|
|
#include "system/memory.h"
|
|
#include "qom/object.h"
|
|
#include "hw/sysbus.h"
|
|
|
|
#define IVSHMEM_MAX_VECTOR_NUM 64
|
|
|
|
/*
|
|
* QEMU interface:
|
|
* + QOM property "chardev" is the character device id of the ivshmem server
|
|
* socket
|
|
* + QOM property "shmem-size" sets the size of the RAM region shared between
|
|
* the device and the ivshmem server
|
|
* + sysbus MMIO region 0: device I/O mapped registers
|
|
* + sysbus MMIO region 1: shared memory with ivshmem server
|
|
* + sysbus IRQ 0: single output interrupt
|
|
*/
|
|
|
|
#define TYPE_IVSHMEM_FLAT "ivshmem-flat"
|
|
typedef struct IvshmemFTState IvshmemFTState;
|
|
|
|
DECLARE_INSTANCE_CHECKER(IvshmemFTState, IVSHMEM_FLAT, TYPE_IVSHMEM_FLAT)
|
|
|
|
/* Ivshmem registers. See docs/specs/ivshmem-spec.rst for details. */
|
|
enum ivshmem_registers {
|
|
INTMASK = 0,
|
|
INTSTATUS = 4,
|
|
IVPOSITION = 8,
|
|
DOORBELL = 12,
|
|
};
|
|
|
|
typedef struct VectorInfo {
|
|
EventNotifier event_notifier;
|
|
uint16_t id;
|
|
} VectorInfo;
|
|
|
|
typedef struct IvshmemPeer {
|
|
QTAILQ_ENTRY(IvshmemPeer) next;
|
|
VectorInfo vector[IVSHMEM_MAX_VECTOR_NUM];
|
|
int vector_counter;
|
|
uint16_t id;
|
|
} IvshmemPeer;
|
|
|
|
struct IvshmemFTState {
|
|
SysBusDevice parent_obj;
|
|
|
|
uint64_t msg_buf;
|
|
int msg_buffered_bytes;
|
|
|
|
QTAILQ_HEAD(, IvshmemPeer) peer;
|
|
IvshmemPeer own;
|
|
|
|
CharBackend server_chr;
|
|
|
|
/* IRQ */
|
|
qemu_irq irq;
|
|
|
|
/* I/O registers */
|
|
MemoryRegion iomem;
|
|
uint32_t intmask;
|
|
uint32_t intstatus;
|
|
uint32_t ivposition;
|
|
uint32_t doorbell;
|
|
|
|
/* Shared memory */
|
|
MemoryRegion shmem;
|
|
int shmem_fd;
|
|
uint32_t shmem_size;
|
|
};
|
|
|
|
#endif /* IVSHMEM_FLAT_H */
|