ssi.h 1.5 KB
Newer Older
P
Paul Brook 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/* QEMU Synchronous Serial Interface support.  */

/* In principle SSI is a point-point interface.  As such the qemu
   implementation has a single slave device on a "bus".
   However it is fairly common for boards to have multiple slaves
   connected to a single master, and select devices with an external
   chip select.  This is implemented in qemu by having an explicit mux device.
   It is assumed that master and slave are both using the same transfer width.
   */

#ifndef QEMU_SSI_H
#define QEMU_SSI_H

#include "qdev.h"

typedef struct SSISlave SSISlave;

18 19 20 21 22 23 24 25
#define TYPE_SSI_SLAVE "ssi-slave"
#define SSI_SLAVE(obj) \
     OBJECT_CHECK(SSISlave, (obj), TYPE_SSI_SLAVE)
#define SSI_SLAVE_CLASS(klass) \
     OBJECT_CLASS_CHECK(SSISlaveClass, (klass), TYPE_SSI_SLAVE)
#define SSI_SLAVE_GET_CLASS(obj) \
     OBJECT_GET_CLASS(SSISlaveClass, (obj), TYPE_SSI_SLAVE)

P
Paul Brook 已提交
26
/* Slave devices.  */
27 28 29
typedef struct SSISlaveClass {
    DeviceClass parent_class;

30
    int (*init)(SSISlave *dev);
P
Paul Brook 已提交
31
    uint32_t (*transfer)(SSISlave *dev, uint32_t val);
32
} SSISlaveClass;
P
Paul Brook 已提交
33 34 35 36 37 38 39 40

struct SSISlave {
    DeviceState qdev;
};

#define SSI_SLAVE_FROM_QDEV(dev) DO_UPCAST(SSISlave, qdev, dev)
#define FROM_SSI_SLAVE(type, dev) DO_UPCAST(type, ssidev, dev)

41
void ssi_register_slave(DeviceInfo *info);
P
Paul Brook 已提交
42 43 44 45

DeviceState *ssi_create_slave(SSIBus *bus, const char *name);

/* Master interface.  */
P
Paul Brook 已提交
46
SSIBus *ssi_create_bus(DeviceState *parent, const char *name);
P
Paul Brook 已提交
47 48 49

uint32_t ssi_transfer(SSIBus *bus, uint32_t val);

P
Paul Brook 已提交
50 51 52
/* max111x.c */
void max111x_set_input(DeviceState *dev, int line, uint8_t value);

P
Paul Brook 已提交
53
#endif