~jderose/ubuntu/raring/qemu/vde-again

« back to all changes in this revision

Viewing changes to hw/i2c.c

  • Committer: Bazaar Package Importer
  • Author(s): Aurelien Jarno, Aurelien Jarno
  • Date: 2009-03-22 10:13:17 UTC
  • mfrom: (1.2.1 upstream) (6.1.1 sid)
  • Revision ID: james.westby@ubuntu.com-20090322101317-iigjtnu5qil35dtb
Tags: 0.10.1-1
[ Aurelien Jarno ]
* New upstream stable release:
  - patches/80_stable-branch.patch: remove.
* debian/control: 
  - Remove depends on proll.
  - Move depends on device-tree-compiler to build-depends.
  - Bump Standards-Version to 3.8.1 (no changes).
* patches/82_qemu-img_decimal.patch: new patch from upstream to make
  qemu-img accept sizes with decimal values (closes: bug#501400).

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
{
15
15
    i2c_slave *current_dev;
16
16
    i2c_slave *dev;
 
17
    int saved_address;
17
18
};
18
19
 
 
20
static void i2c_bus_save(QEMUFile *f, void *opaque)
 
21
{
 
22
    i2c_bus *bus = (i2c_bus *)opaque;
 
23
 
 
24
    qemu_put_byte(f, bus->current_dev ? bus->current_dev->address : -1);
 
25
}
 
26
 
 
27
static int i2c_bus_load(QEMUFile *f, void *opaque, int version_id)
 
28
{
 
29
    i2c_bus *bus = (i2c_bus *)opaque;
 
30
 
 
31
    if (version_id != 1)
 
32
        return -EINVAL;
 
33
 
 
34
    /* The bus is loaded before attached devices, so load and save the
 
35
       current device id.  Devices will check themselves as loaded.  */
 
36
    bus->saved_address = (int8_t) qemu_get_byte(f);
 
37
    bus->current_dev = NULL;
 
38
 
 
39
    return 0;
 
40
}
 
41
 
19
42
/* Create a new I2C bus.  */
20
43
i2c_bus *i2c_init_bus(void)
21
44
{
22
45
    i2c_bus *bus;
23
46
 
24
47
    bus = (i2c_bus *)qemu_mallocz(sizeof(i2c_bus));
 
48
    register_savevm("i2c_bus", -1, 1, i2c_bus_save, i2c_bus_load, bus);
25
49
    return bus;
26
50
}
27
51
 
37
61
    dev->address = address;
38
62
    dev->next = bus->dev;
39
63
    bus->dev = dev;
 
64
    dev->bus = bus;
40
65
 
41
66
    return dev;
42
67
}
115
140
    dev->event(dev, I2C_NACK);
116
141
}
117
142
 
118
 
void i2c_bus_save(QEMUFile *f, i2c_bus *bus)
119
 
{
120
 
    qemu_put_byte(f, bus->current_dev ? bus->current_dev->address : 0x00);
121
 
}
122
 
 
123
 
void i2c_bus_load(QEMUFile *f, i2c_bus *bus)
124
 
{
125
 
    i2c_slave *dev;
126
 
    uint8_t address = qemu_get_byte(f);
127
 
 
128
 
    if (address) {
129
 
        for (dev = bus->dev; dev; dev = dev->next)
130
 
            if (dev->address == address) {
131
 
                bus->current_dev = dev;
132
 
                return;
133
 
            }
134
 
 
135
 
        fprintf(stderr, "%s: I2C slave with address %02x disappeared\n",
136
 
                __FUNCTION__, address);
137
 
    }
138
 
}
139
 
 
140
143
void i2c_slave_save(QEMUFile *f, i2c_slave *dev)
141
144
{
142
145
    qemu_put_byte(f, dev->address);
145
148
void i2c_slave_load(QEMUFile *f, i2c_slave *dev)
146
149
{
147
150
    dev->address = qemu_get_byte(f);
 
151
    if (dev->bus->saved_address == dev->address)
 
152
        dev->bus->current_dev = dev;
148
153
}