int fw_cfg_add_i32(fw_cfg_state_t*s, u16 key, u32 value) { u32 *copy; copy = vmm_zalloc(sizeof(value)); *copy = vmm_cpu_to_le32(value); return fw_cfg_add_bytes(s, key, copy, sizeof(value)); }
static int virtio_mmio_config_write(struct virtio_mmio_dev *m, physical_addr_t offset, void *src, u32 src_len) { int rc = VMM_OK; u32 val = vmm_cpu_to_le32(*(u32 *)(src)); switch (offset) { case VIRTIO_MMIO_HOST_FEATURES_SEL: case VIRTIO_MMIO_GUEST_FEATURES_SEL: case VIRTIO_MMIO_QUEUE_SEL: case VIRTIO_MMIO_STATUS: *(u32 *)(((void *)&m->config) + offset) = val; break; case VIRTIO_MMIO_GUEST_FEATURES: if (m->config.guest_features_sel == 0) { m->dev.emu->set_guest_features(&m->dev, val); } break; case VIRTIO_MMIO_GUEST_PAGE_SIZE: m->config.guest_page_size = val; break; case VIRTIO_MMIO_QUEUE_NUM: m->config.queue_num = val; m->dev.emu->set_size_vq(&m->dev, m->config.queue_sel, m->config.queue_num); break; case VIRTIO_MMIO_QUEUE_ALIGN: m->config.queue_align = val; break; case VIRTIO_MMIO_QUEUE_PFN: m->dev.emu->init_vq(&m->dev, m->config.queue_sel, m->config.guest_page_size, m->config.queue_align, val); break; case VIRTIO_MMIO_QUEUE_NOTIFY: m->dev.emu->notify_vq(&m->dev, val); break; case VIRTIO_MMIO_INTERRUPT_ACK: m->config.interrupt_state &= ~val; vmm_devemu_emulate_irq(m->guest, m->irq, 0); break; default: break; }; return rc; }