72cf2d4f0e
Problem: Our file sys-queue.h is a copy of the BSD file, but there are some additions and it's not entirely compatible. Because of that, there have been conflicts with system headers on BSD systems. Some hacks have been introduced in the commits15cc923584
,f40d753718
,96555a96d7
and3990d09adf
but the fixes were fragile. Solution: Avoid the conflict entirely by renaming the functions and the file. Revert the previous hacks. Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
71 lines
1.5 KiB
C
71 lines
1.5 KiB
C
/*
|
|
* QEMU Synchronous Serial Interface support
|
|
*
|
|
* Copyright (c) 2009 CodeSourcery.
|
|
* Written by Paul Brook
|
|
*
|
|
* This code is licenced under the GNU GPL v2.
|
|
*/
|
|
|
|
#include "ssi.h"
|
|
|
|
struct SSIBus {
|
|
BusState qbus;
|
|
};
|
|
|
|
static struct BusInfo ssi_bus_info = {
|
|
.name = "SSI",
|
|
.size = sizeof(SSIBus),
|
|
};
|
|
|
|
static int ssi_slave_init(DeviceState *dev, DeviceInfo *base_info)
|
|
{
|
|
SSISlaveInfo *info = container_of(base_info, SSISlaveInfo, qdev);
|
|
SSISlave *s = SSI_SLAVE_FROM_QDEV(dev);
|
|
SSIBus *bus;
|
|
|
|
bus = FROM_QBUS(SSIBus, qdev_get_parent_bus(dev));
|
|
if (QLIST_FIRST(&bus->qbus.children) != dev
|
|
|| QLIST_NEXT(dev, sibling) != NULL) {
|
|
hw_error("Too many devices on SSI bus");
|
|
}
|
|
|
|
s->info = info;
|
|
return info->init(s);
|
|
}
|
|
|
|
void ssi_register_slave(SSISlaveInfo *info)
|
|
{
|
|
assert(info->qdev.size >= sizeof(SSISlave));
|
|
info->qdev.init = ssi_slave_init;
|
|
info->qdev.bus_info = &ssi_bus_info;
|
|
qdev_register(&info->qdev);
|
|
}
|
|
|
|
DeviceState *ssi_create_slave(SSIBus *bus, const char *name)
|
|
{
|
|
DeviceState *dev;
|
|
dev = qdev_create(&bus->qbus, name);
|
|
qdev_init(dev);
|
|
return dev;
|
|
}
|
|
|
|
SSIBus *ssi_create_bus(DeviceState *parent, const char *name)
|
|
{
|
|
BusState *bus;
|
|
bus = qbus_create(&ssi_bus_info, parent, name);
|
|
return FROM_QBUS(SSIBus, bus);
|
|
}
|
|
|
|
uint32_t ssi_transfer(SSIBus *bus, uint32_t val)
|
|
{
|
|
DeviceState *dev;
|
|
SSISlave *slave;
|
|
dev = QLIST_FIRST(&bus->qbus.children);
|
|
if (!dev) {
|
|
return 0;
|
|
}
|
|
slave = SSI_SLAVE_FROM_QDEV(dev);
|
|
return slave->info->transfer(slave, val);
|
|
}
|