root / hw / ssi.c @ 90d37239
History | View | Annotate | Download (1021 Bytes)
1 |
/*
|
---|---|
2 |
* QEMU Synchronous Serial Interface support
|
3 |
*
|
4 |
* Copyright (c) 2009 CodeSourcery.
|
5 |
* Written by Paul Brook
|
6 |
*
|
7 |
* This code is licenced under the GNU GPL v2.
|
8 |
*/
|
9 |
|
10 |
#include "ssi.h" |
11 |
|
12 |
struct SSIBus {
|
13 |
SSISlave *slave; |
14 |
}; |
15 |
|
16 |
static void ssi_slave_init(DeviceState *dev, void *opaque) |
17 |
{ |
18 |
SSISlaveInfo *info = opaque; |
19 |
SSISlave *s = SSI_SLAVE_FROM_QDEV(dev); |
20 |
SSIBus *bus = qdev_get_bus(dev); |
21 |
|
22 |
bus->slave = s; |
23 |
s->info = info; |
24 |
info->init(s); |
25 |
} |
26 |
|
27 |
void ssi_register_slave(const char *name, int size, SSISlaveInfo *info) |
28 |
{ |
29 |
assert(size >= sizeof(SSISlave));
|
30 |
qdev_register(name, size, ssi_slave_init, info); |
31 |
} |
32 |
|
33 |
DeviceState *ssi_create_slave(SSIBus *bus, const char *name) |
34 |
{ |
35 |
DeviceState *dev; |
36 |
dev = qdev_create(bus, name); |
37 |
qdev_init(dev); |
38 |
return dev;
|
39 |
} |
40 |
|
41 |
SSIBus *ssi_create_bus(void)
|
42 |
{ |
43 |
return qemu_mallocz(sizeof(SSIBus)); |
44 |
} |
45 |
|
46 |
uint32_t ssi_transfer(SSIBus *bus, uint32_t val) |
47 |
{ |
48 |
if (!bus->slave) {
|
49 |
return 0; |
50 |
} |
51 |
return bus->slave->info->transfer(bus->slave, val);
|
52 |
} |