Esempio n. 1
0
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));
}
Esempio n. 2
0
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;
}