void cm3_udelay_calibrate(void) { struct cm3_systick * systick = CM3_SYSTICK; uint32_t ticks1ms; uint32_t load; uint32_t ctrl; load = systick->load; ctrl = systick->ctrl; systick->load = 0xffffff; systick->ctrl = SYSTICK_CTRL_ENABLE; ticks1ms = cm3_systick_load_1ms << 8; udelay_calibrate(ticks1ms, cm3_get_ticks); systick->load = load; systick->ctrl = ctrl; }
void cm3_udelay_calibrate(void) { struct cm3_systick * systick = CM3_SYSTICK; uint32_t ticks1ms; uint32_t rvr; uint32_t csr; cm3_cpsid_i(); rvr = systick->rvr; csr = systick->csr; systick->rvr = 0x00ffffff; systick->csr = SYSTICK_CSR_ENABLE; ticks1ms = cm3_systick_load_1ms << 8; udelay_calibrate(ticks1ms, cm3_get_ticks); systick->rvr = rvr; systick->csr = csr; cm3_cpsie_i(); }
int ftape_init(void) { int n; int order; TRACE_FUN(5, "ftape_init"); #ifdef MODULE printk(KERN_INFO "ftape-2.08 960314\n" KERN_INFO " (c) 1993-1995 Bas Laarhoven ([email protected])\n" KERN_INFO " (c) 1995-1996 Kai Harrekilde-Petersen ([email protected])\n" KERN_INFO " QIC-117 driver for QIC-40/80/3010/3020 tape drives\n" KERN_INFO " Compiled for kernel version %s" #ifdef MODVERSIONS " with versioned symbols" #endif "\n", kernel_version); #else /* !MODULE */ /* print a short no-nonsense boot message */ printk("ftape-2.08 960314 for Linux 1.3.70\n"); #endif /* MODULE */ TRACE(3, "installing QIC-117 ftape driver..."); if (register_chrdev(QIC117_TAPE_MAJOR, "ft", &ftape_cdev)) { TRACE(1, "register_chrdev failed"); TRACE_EXIT; return -EIO; } TRACEx1(3, "ftape_init @ 0x%p", ftape_init); /* * Allocate the DMA buffers. They are deallocated at cleanup() time. */ order = __get_order(BUFF_SIZE); for (n = 0; n < NR_BUFFERS; n++) { tape_buffer[n] = (byte *) dmaalloc(order); if (!tape_buffer[n]) { TRACE(1, "dmaalloc() failed"); for (n = 0; n < NR_BUFFERS; n++) { if (tape_buffer[n]) { dmafree(tape_buffer[n], order); tape_buffer[n] = NULL; } } current->blocked = old_sigmask; /* restore mask */ if (unregister_chrdev(QIC117_TAPE_MAJOR, "ft") != 0) { TRACE(3, "unregister_chrdev failed"); } TRACE_EXIT; return -ENOMEM; } else { TRACEx2(3, "dma-buffer #%d @ %p", n, tape_buffer[n]); } } busy_flag = 0; ftape_unit = -1; ftape_failure = 1; /* inhibit any operation but open */ udelay_calibrate(); /* must be before fdc_wait_calibrate ! */ fdc_wait_calibrate(); TRACE_EXIT; #ifdef MODULE register_symtab(0); /* remove global ftape symbols */ #endif return 0; }