Revision 3efc10e1 hw/ssi/xilinx_spi.c
b/hw/ssi/xilinx_spi.c | ||
---|---|---|
73 | 73 |
|
74 | 74 |
#define FIFO_CAPACITY 256 |
75 | 75 |
|
76 |
#define TYPE_XILINX_SPI "xlnx.xps-spi" |
|
77 |
#define XILINX_SPI(obj) OBJECT_CHECK(XilinxSPI, (obj), TYPE_XILINX_SPI) |
|
78 |
|
|
76 | 79 |
typedef struct XilinxSPI { |
77 |
SysBusDevice busdev; |
|
80 |
SysBusDevice parent_obj; |
|
81 |
|
|
78 | 82 |
MemoryRegion mmio; |
79 | 83 |
|
80 | 84 |
qemu_irq irq; |
... | ... | |
109 | 113 |
|
110 | 114 |
static void xlx_spi_update_cs(XilinxSPI *s) |
111 | 115 |
{ |
112 |
int i; |
|
116 |
int i;
|
|
113 | 117 |
|
114 | 118 |
for (i = 0; i < s->num_cs; ++i) { |
115 | 119 |
qemu_set_irq(s->cs_lines[i], !(~s->regs[R_SPISSR] & 1 << i)); |
... | ... | |
154 | 158 |
|
155 | 159 |
static void xlx_spi_reset(DeviceState *d) |
156 | 160 |
{ |
157 |
xlx_spi_do_reset(DO_UPCAST(XilinxSPI, busdev.qdev, d));
|
|
161 |
xlx_spi_do_reset(XILINX_SPI(d));
|
|
158 | 162 |
} |
159 | 163 |
|
160 | 164 |
static inline int spi_master_enabled(XilinxSPI *s) |
... | ... | |
314 | 318 |
} |
315 | 319 |
}; |
316 | 320 |
|
317 |
static int xilinx_spi_init(SysBusDevice *dev)
|
|
321 |
static int xilinx_spi_init(SysBusDevice *sbd)
|
|
318 | 322 |
{ |
323 |
DeviceState *dev = DEVICE(sbd); |
|
324 |
XilinxSPI *s = XILINX_SPI(dev); |
|
319 | 325 |
int i; |
320 |
XilinxSPI *s = FROM_SYSBUS(typeof(*s), dev); |
|
321 | 326 |
|
322 | 327 |
DB_PRINT("\n"); |
323 | 328 |
|
324 |
s->spi = ssi_create_bus(&dev->qdev, "spi");
|
|
329 |
s->spi = ssi_create_bus(dev, "spi"); |
|
325 | 330 |
|
326 |
sysbus_init_irq(dev, &s->irq);
|
|
331 |
sysbus_init_irq(sbd, &s->irq);
|
|
327 | 332 |
s->cs_lines = g_new(qemu_irq, s->num_cs); |
328 |
ssi_auto_connect_slaves(DEVICE(s), s->cs_lines, s->spi);
|
|
333 |
ssi_auto_connect_slaves(dev, s->cs_lines, s->spi);
|
|
329 | 334 |
for (i = 0; i < s->num_cs; ++i) { |
330 |
sysbus_init_irq(dev, &s->cs_lines[i]);
|
|
335 |
sysbus_init_irq(sbd, &s->cs_lines[i]);
|
|
331 | 336 |
} |
332 | 337 |
|
333 | 338 |
memory_region_init_io(&s->mmio, OBJECT(s), &spi_ops, s, |
334 | 339 |
"xilinx-spi", R_MAX * 4); |
335 |
sysbus_init_mmio(dev, &s->mmio);
|
|
340 |
sysbus_init_mmio(sbd, &s->mmio);
|
|
336 | 341 |
|
337 | 342 |
s->irqline = -1; |
338 | 343 |
|
... | ... | |
372 | 377 |
} |
373 | 378 |
|
374 | 379 |
static const TypeInfo xilinx_spi_info = { |
375 |
.name = "xlnx.xps-spi",
|
|
380 |
.name = TYPE_XILINX_SPI,
|
|
376 | 381 |
.parent = TYPE_SYS_BUS_DEVICE, |
377 | 382 |
.instance_size = sizeof(XilinxSPI), |
378 | 383 |
.class_init = xilinx_spi_class_init, |
Also available in: Unified diff