コード例 #1
0
static bool
xencons_resume(device_t dev, const pmf_qual_t *qual) {

    int evtch = -1;

    if (xendomain_is_dom0()) {
        /* dom0 console resume is required only during first start-up */
        if (cold) {
            evtch = bind_virq_to_evtch(VIRQ_CONSOLE);
            event_set_handler(evtch, xencons_intr,
                              xencons_console_device, IPL_TTY, "xencons");
        }
    } else {
        evtch = xen_start_info.console_evtchn;
        event_set_handler(evtch, xencons_handler,
                          xencons_console_device, IPL_TTY, "xencons");
    }

    if (evtch != -1) {
        aprint_verbose_dev(dev, "using event channel %d\n", evtch);
        hypervisor_enable_event(evtch);
    }

    return true;
}
コード例 #2
0
ファイル: xbd.c プロジェクト: MarginC/kame
static void
init_interface(void)
{
	block_io_op_t op; 

	reset_interface();

	if (blk_ring == NULL) {
		op.cmd = BLOCK_IO_OP_RING_ADDRESS;
		(void)HYPERVISOR_block_io_op(&op);

		blk_ring = (blk_ring_t *)uvm_km_valloc_align(kernel_map,
		    PAGE_SIZE, PAGE_SIZE);
		pmap_kenter_ma((vaddr_t)blk_ring, op.u.ring_mfn << PAGE_SHIFT,
		    VM_PROT_READ|VM_PROT_WRITE);
		DPRINTF(XBDB_SETUP, ("init_interface: "
		    "ring va %p and wired to %p\n",
		    blk_ring, (void *)(op.u.ring_mfn << PAGE_SHIFT)));

		blk_ring->req_prod = blk_ring->resp_prod =
			resp_cons = req_prod = last_req_prod = 0;

		event_set_handler(_EVENT_BLKDEV, &xbd_response_handler,
		    NULL, IPL_BIO);
		hypervisor_enable_event(_EVENT_BLKDEV);
	}

	__insn_barrier();
	state = STATE_ACTIVE;
}
コード例 #3
0
ファイル: xbd.c プロジェクト: MarginC/kame
static void
enable_update_events(struct device *self)
{

	kthread_create(xbd_update_create_kthread, self);
	event_set_handler(_EVENT_VBD_UPD, &xbd_update_handler, self, IPL_BIO);
	hypervisor_enable_event(_EVENT_VBD_UPD);
}
コード例 #4
0
ファイル: clock.c プロジェクト: MarginC/kame
void
xen_initclocks()
{

	get_time_values_from_xen();
	processed_system_time = shadow_system_time;
	
	event_set_handler(_EVENT_TIMER, (int (*)(void *))xen_timer_handler,
	    NULL, IPL_CLOCK);
	hypervisor_enable_event(_EVENT_TIMER);
}
コード例 #5
0
ファイル: xenbus_comms.c プロジェクト: ryo/netbsd-src
/* Set up interrupt handler of store event channel. */
int
xb_init_comms(device_t dev)
{
	int evtchn;

	evtchn = xen_start_info.store_evtchn;

	event_set_handler(evtchn, wake_waiting, NULL, IPL_TTY, "xenbus");
	hypervisor_enable_event(evtchn);
	aprint_verbose_dev(dev, "using event channel %d\n", evtchn);

	return 0;
}
コード例 #6
0
ファイル: xenbus_comms.c プロジェクト: avsm/openbsd-xen-sys
/* Set up interrupt handler off store event channel. */
int
xb_init_comms(struct device *dev)
{
	int err;

	if (xenbus_irq)
		event_remove_handler(xenbus_irq, wake_waiting, NULL);

	err = event_set_handler(xen_start_info.store_evtchn, wake_waiting,
	    NULL, IPL_TTY, "xenbus");
	if (err) {
		printf("XENBUS request irq failed %i\n", err);
		return err;
	}
	xenbus_irq = xen_start_info.store_evtchn;
	printf("%s: using event channel %d\n", dev->dv_xname, xenbus_irq);
	hypervisor_enable_event(xenbus_irq);
	return 0;
}