void circle_f::install_timer(TimerTask *cm) { _cm = cm; set_timer_func(); set_timer_para(); }
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; }