|  | /* 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; | 
|  |  | 
|  | /* Slave devices.  */ | 
|  | typedef struct { | 
|  | DeviceInfo qdev; | 
|  | int (*init)(SSISlave *dev); | 
|  | uint32_t (*transfer)(SSISlave *dev, uint32_t val); | 
|  | } SSISlaveInfo; | 
|  |  | 
|  | struct SSISlave { | 
|  | DeviceState qdev; | 
|  | SSISlaveInfo *info; | 
|  | }; | 
|  |  | 
|  | #define SSI_SLAVE_FROM_QDEV(dev) DO_UPCAST(SSISlave, qdev, dev) | 
|  | #define FROM_SSI_SLAVE(type, dev) DO_UPCAST(type, ssidev, dev) | 
|  |  | 
|  | void ssi_register_slave(SSISlaveInfo *info); | 
|  |  | 
|  | DeviceState *ssi_create_slave(SSIBus *bus, const char *name); | 
|  |  | 
|  | /* Master interface.  */ | 
|  | SSIBus *ssi_create_bus(DeviceState *parent, const char *name); | 
|  |  | 
|  | uint32_t ssi_transfer(SSIBus *bus, uint32_t val); | 
|  |  | 
|  | /* max111x.c */ | 
|  | void max111x_set_input(DeviceState *dev, int line, uint8_t value); | 
|  |  | 
|  | #endif |