Files
QEMU-S5L8950X/hw/ufs/ufs-sysbus.c
T
Yaya48 cf256aa081 Import QEMU upstream snapshot d2e570c
Upstream: https://gitlab.com/qemu-project/qemu.git

Upstream-Commit: d2e570cc0f97b936902a5b1b86b73c0f5998b475
2026-08-31 02:15:30 +02:00

81 lines
2.2 KiB
C

/*
* QEMU Universal Flash Storage (UFS) sysbus controller
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "qemu/osdep.h"
#include "hw/core/qdev-properties.h"
#include "ufs-sysbus.h"
#include "migration/vmstate.h"
#include "system/address-spaces.h"
static void ufs_sysbus_realize(DeviceState *dev, Error **errp)
{
SysbusUfsState *s = SYSBUS_UFS(dev);
if (!ufs_realize(&s->ufs, dev, &address_space_memory, errp)) {
return;
}
sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->ufs.iomem);
}
static void ufs_sysbus_unrealize(DeviceState *dev)
{
SysbusUfsState *s = SYSBUS_UFS(dev);
ufs_unrealize(&s->ufs);
}
static void ufs_sysbus_init(Object *obj)
{
SysbusUfsState *s = SYSBUS_UFS(obj);
sysbus_init_irq(SYS_BUS_DEVICE(obj), &s->ufs.irq);
}
static const Property ufs_sysbus_props[] = {
DEFINE_PROP_STRING("serial", SysbusUfsState, ufs.params.serial),
DEFINE_PROP_UINT8("nutrs", SysbusUfsState, ufs.params.nutrs, 32),
DEFINE_PROP_UINT8("nutmrs", SysbusUfsState, ufs.params.nutmrs, 8),
DEFINE_PROP_BOOL("mcq", SysbusUfsState, ufs.params.mcq, false),
DEFINE_PROP_UINT8("mcq-maxq", SysbusUfsState, ufs.params.mcq_maxq, 2),
DEFINE_PROP_UINT32("wb-max-size", SysbusUfsState, ufs.params.wb_max_size,
0x400),
DEFINE_PROP_UINT32("wb-min-size", SysbusUfsState, ufs.params.wb_min_size,
0x100),
};
static const VMStateDescription ufs_sysbus_vmstate = {
.name = TYPE_SYSBUS_UFS,
.unmigratable = 1,
};
static void ufs_sysbus_class_init(ObjectClass *oc, const void *data)
{
DeviceClass *dc = DEVICE_CLASS(oc);
dc->realize = ufs_sysbus_realize;
dc->unrealize = ufs_sysbus_unrealize;
dc->vmsd = &ufs_sysbus_vmstate;
dc->desc = "Universal Flash Storage";
device_class_set_props(dc, ufs_sysbus_props);
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
}
static const TypeInfo ufs_sysbus_info = {
.name = TYPE_SYSBUS_UFS,
.parent = TYPE_SYS_BUS_DEVICE,
.instance_size = sizeof(SysbusUfsState),
.instance_init = ufs_sysbus_init,
.class_init = ufs_sysbus_class_init,
};
static void ufs_sysbus_register_types(void)
{
type_register_static(&ufs_sysbus_info);
}
type_init(ufs_sysbus_register_types)