⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ia64_timer.c

📁 网卡 BOOT ROM 的 64 住源程序。模块有:核心代码、H文件、网卡驱动程序、头代码文件。
💻 C
字号:
#include "etherboot.h"#include "timer.h"#include "sal.h"#include "pal.h"static inline unsigned long get_cycles(void){	unsigned long result;	__asm__ __volatile__(";;mov %0=ar.itc;;" : "=r"(result));	return result;}/* ------ Calibrate the TSC -------  * Time how long it takes to excute a loop that runs in known time. * And find the convertion needed to get to CLOCK_TICK_RATE */static unsigned long calibrate_cycles(void){	unsigned long platform_ticks_per_second, drift_info;	struct pal_freq_ratio itc_ratio;	long result;	result = sal_freq_base(SAL_FREQ_BASE_PLATFORM, &platform_ticks_per_second, &drift_info);	if (result != 0) {		printf("sal_freq_base failed: %lx\n",result);		exit(1);	} else {		result = pal_freq_ratios(0,0,&itc_ratio);		if (result != 0) {			printf("pal_freq_ratios failed: %lx\n", result);			exit(1);		}	}	/* Avoid division by zero */	if (itc_ratio.den == 0)		itc_ratio.den = 1;	return (platform_ticks_per_second *itc_ratio.num)/(itc_ratio.den*TICKS_PER_SEC);}static unsigned long clocks_per_tick;void setup_timers(void){	if (!clocks_per_tick) {		clocks_per_tick = calibrate_cycles();		/* Display the CPU Mhz to easily test if the calibration was bad */		printf("ITC %ld Mhz\n", (clocks_per_tick/1000 * TICKS_PER_SEC)/1000);	}}unsigned long currticks(void){	return get_cycles()/clocks_per_tick;}static unsigned long timer_timeout;static int __timer_running(void){	return get_cycles() < timer_timeout;}void udelay(unsigned int usecs){	unsigned long now;	now = get_cycles();	timer_timeout = now + usecs * ((clocks_per_tick * TICKS_PER_SEC)/(1000*1000));	while(__timer_running());}void ndelay(unsigned int nsecs){	unsigned long now;	now = get_cycles();	timer_timeout = now + nsecs * ((clocks_per_tick * TICKS_PER_SEC)/(1000*1000*1000));	while(__timer_running());}void load_timer2(unsigned int timer2_ticks){	unsigned long now;	unsigned long clocks;	now = get_cycles();	clocks = timer2_ticks * ((clocks_per_tick * TICKS_PER_SEC)/CLOCK_TICK_RATE);	timer_timeout = now + clocks;}int timer2_running(void){	return __timer_running();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -