コード例 #1
0
ファイル: circle_f.cpp プロジェクト: chendong2012/cells
void circle_f::install_timer(TimerTask *cm)
{
	_cm = cm;
	set_timer_func();
	set_timer_para();
}
コード例 #2
0
ファイル: floppy.c プロジェクト: spevans/vmm386
bool floppy_init(void)
{
	int drive_cnt = 0;
	int i;

	kprintf("fd: init\n");

	init_list(&fd_reqs);

	/* get the IRQ and DMA hardware and a DMA buffer */
	if(!kernel->alloc_irq(FLOPPY_IRQ, fd_int_handler, "fd")) {
		kprintf("fd: couldnt get IRQ %d\n", FLOPPY_IRQ);
		return FALSE;
	}
	if(reset_fdc() == FALSE) {
		kprintf("fd: reset_fdc failed\n");
		kernel->dealloc_irq(FLOPPY_IRQ);
		return FALSE;
	}
	if(!kernel->alloc_dmachan(FLOPPY_DMA, "fd")) {
		kprintf("fd: couldn't get DMA channel %d\n", FLOPPY_DMA);
		kernel->dealloc_irq(FLOPPY_IRQ);
		return FALSE;
	}
	if((track_buf = (char *)kernel->alloc_pages_64(TRACKBUF_PAGES)) == NULL) {
		kprintf("fd: couldn't allocate DMA buffer\n");
		kernel->dealloc_irq(FLOPPY_IRQ);
		kernel->dealloc_dmachan(FLOPPY_DMA);
		return FALSE;
	}
	DB(("DMA BUFFER: track_buf: %08p\n", track_buf));
	for(i = 0; i < (TRACKBUF_PAGES * 4096); i++)
		track_buf[i] = i%256;

	/* Start our three-second timer... */
	int_timer_flag = TRUE;
	set_timer_func(&timer, FD_TIMEINT, timer_intr, NULL);
	kernel->add_timer(&timer);

	/* What drives have we got? */
	for(i = 0; i < 2; i++) {
		if(kernel->cookie->floppy_types[i]) {
			/* now fill in the device structure */
			fd_devs[i].name = (i == 0) ? "fd0" : "fd1";
			fd_devs[i].drvno = i;
			fd_devs[i].drive_p = &main_drive_params[kernel->cookie->floppy_types[i]];
			fd_devs[i].disk_p = &main_disk_params[fd_devs[i].drive_p->native_format];
			fd_devs[i].total_blocks = fd_devs[i].disk_p->blocks;

			fdc_recal(&fd_devs[i]);

			kprintf("fd%d: %s ", i, fd_devs[i].drive_p->name);
			drive_cnt++;
#if 0
			floppy_add_dev(&fd_devs[i]);
#endif
		}
	}
	if(!drive_cnt) {
		kprintf("fd: No drives found...\n");
		kernel->dealloc_irq(FLOPPY_IRQ);
		kernel->dealloc_dmachan(FLOPPY_DMA);
		kernel->free_pages((page *)track_buf, TRACKBUF_PAGES);
		int_timer_flag = FALSE;
		return FALSE;
	}
			 
	kprintf("fd: init okay\n");
	return TRUE;
}