亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? time.c

?? LINUX 2.6.17.4的源碼
?? C
字號(hào):
/* * linux/arch/m68k/atari/time.c * * Atari time and real time clock stuff * * Assembled of parts of former atari/config.c 97-12-18 by Roman Hodek * * This file is subject to the terms and conditions of the GNU General Public * License.  See the file COPYING in the main directory of this archive * for more details. */#include <linux/types.h>#include <linux/mc146818rtc.h>#include <linux/interrupt.h>#include <linux/init.h>#include <linux/rtc.h>#include <linux/bcd.h>#include <asm/atariints.h>void __initatari_sched_init(irqreturn_t (*timer_routine)(int, void *, struct pt_regs *)){    /* set Timer C data Register */    mfp.tim_dt_c = INT_TICKS;    /* start timer C, div = 1:100 */    mfp.tim_ct_cd = (mfp.tim_ct_cd & 15) | 0x60;    /* install interrupt service routine for MFP Timer C */    request_irq(IRQ_MFP_TIMC, timer_routine, IRQ_TYPE_SLOW,                "timer", timer_routine);}/* ++andreas: gettimeoffset fixed to check for pending interrupt */#define TICK_SIZE 10000/* This is always executed with interrupts disabled.  */unsigned long atari_gettimeoffset (void){  unsigned long ticks, offset = 0;  /* read MFP timer C current value */  ticks = mfp.tim_dt_c;  /* The probability of underflow is less than 2% */  if (ticks > INT_TICKS - INT_TICKS / 50)    /* Check for pending timer interrupt */    if (mfp.int_pn_b & (1 << 5))      offset = TICK_SIZE;  ticks = INT_TICKS - ticks;  ticks = ticks * 10000L / INT_TICKS;  return ticks + offset;}static void mste_read(struct MSTE_RTC *val){#define COPY(v) val->v=(mste_rtc.v & 0xf)	do {		COPY(sec_ones) ; COPY(sec_tens) ; COPY(min_ones) ;		COPY(min_tens) ; COPY(hr_ones) ; COPY(hr_tens) ;		COPY(weekday) ; COPY(day_ones) ; COPY(day_tens) ;		COPY(mon_ones) ; COPY(mon_tens) ; COPY(year_ones) ;		COPY(year_tens) ;	/* prevent from reading the clock while it changed */	} while (val->sec_ones != (mste_rtc.sec_ones & 0xf));#undef COPY}static void mste_write(struct MSTE_RTC *val){#define COPY(v) mste_rtc.v=val->v	do {		COPY(sec_ones) ; COPY(sec_tens) ; COPY(min_ones) ;		COPY(min_tens) ; COPY(hr_ones) ; COPY(hr_tens) ;		COPY(weekday) ; COPY(day_ones) ; COPY(day_tens) ;		COPY(mon_ones) ; COPY(mon_tens) ; COPY(year_ones) ;		COPY(year_tens) ;	/* prevent from writing the clock while it changed */	} while (val->sec_ones != (mste_rtc.sec_ones & 0xf));#undef COPY}#define	RTC_READ(reg)				\    ({	unsigned char	__val;			\		(void) atari_writeb(reg,&tt_rtc.regsel);	\		__val = tt_rtc.data;		\		__val;				\	})#define	RTC_WRITE(reg,val)			\    do {					\		atari_writeb(reg,&tt_rtc.regsel);	\		tt_rtc.data = (val);		\	} while(0)#define HWCLK_POLL_INTERVAL	5int atari_mste_hwclk( int op, struct rtc_time *t ){    int hour, year;    int hr24=0;    struct MSTE_RTC val;    mste_rtc.mode=(mste_rtc.mode | 1);    hr24=mste_rtc.mon_tens & 1;    mste_rtc.mode=(mste_rtc.mode & ~1);    if (op) {        /* write: prepare values */        val.sec_ones = t->tm_sec % 10;        val.sec_tens = t->tm_sec / 10;        val.min_ones = t->tm_min % 10;        val.min_tens = t->tm_min / 10;        hour = t->tm_hour;        if (!hr24) {	    if (hour > 11)		hour += 20 - 12;	    if (hour == 0 || hour == 20)		hour += 12;        }        val.hr_ones = hour % 10;        val.hr_tens = hour / 10;        val.day_ones = t->tm_mday % 10;        val.day_tens = t->tm_mday / 10;        val.mon_ones = (t->tm_mon+1) % 10;        val.mon_tens = (t->tm_mon+1) / 10;        year = t->tm_year - 80;        val.year_ones = year % 10;        val.year_tens = year / 10;        val.weekday = t->tm_wday;        mste_write(&val);        mste_rtc.mode=(mste_rtc.mode | 1);        val.year_ones = (year % 4);	/* leap year register */        mste_rtc.mode=(mste_rtc.mode & ~1);    }    else {        mste_read(&val);        t->tm_sec = val.sec_ones + val.sec_tens * 10;        t->tm_min = val.min_ones + val.min_tens * 10;        hour = val.hr_ones + val.hr_tens * 10;	if (!hr24) {	    if (hour == 12 || hour == 12 + 20)		hour -= 12;	    if (hour >= 20)                hour += 12 - 20;        }	t->tm_hour = hour;	t->tm_mday = val.day_ones + val.day_tens * 10;        t->tm_mon  = val.mon_ones + val.mon_tens * 10 - 1;        t->tm_year = val.year_ones + val.year_tens * 10 + 80;        t->tm_wday = val.weekday;    }    return 0;}int atari_tt_hwclk( int op, struct rtc_time *t ){    int sec=0, min=0, hour=0, day=0, mon=0, year=0, wday=0;    unsigned long	flags;    unsigned char	ctrl;    int pm = 0;    ctrl = RTC_READ(RTC_CONTROL); /* control registers are                                   * independent from the UIP */    if (op) {        /* write: prepare values */        sec  = t->tm_sec;        min  = t->tm_min;        hour = t->tm_hour;        day  = t->tm_mday;        mon  = t->tm_mon + 1;        year = t->tm_year - atari_rtc_year_offset;        wday = t->tm_wday + (t->tm_wday >= 0);        if (!(ctrl & RTC_24H)) {	    if (hour > 11) {		pm = 0x80;		if (hour != 12)		    hour -= 12;	    }	    else if (hour == 0)		hour = 12;        }        if (!(ctrl & RTC_DM_BINARY)) {            BIN_TO_BCD(sec);            BIN_TO_BCD(min);            BIN_TO_BCD(hour);            BIN_TO_BCD(day);            BIN_TO_BCD(mon);            BIN_TO_BCD(year);            if (wday >= 0) BIN_TO_BCD(wday);        }    }    /* Reading/writing the clock registers is a bit critical due to     * the regular update cycle of the RTC. While an update is in     * progress, registers 0..9 shouldn't be touched.     * The problem is solved like that: If an update is currently in     * progress (the UIP bit is set), the process sleeps for a while     * (50ms). This really should be enough, since the update cycle     * normally needs 2 ms.     * If the UIP bit reads as 0, we have at least 244 usecs until the     * update starts. This should be enough... But to be sure,     * additionally the RTC_SET bit is set to prevent an update cycle.     */    while( RTC_READ(RTC_FREQ_SELECT) & RTC_UIP )        schedule_timeout_interruptible(HWCLK_POLL_INTERVAL);    local_irq_save(flags);    RTC_WRITE( RTC_CONTROL, ctrl | RTC_SET );    if (!op) {        sec  = RTC_READ( RTC_SECONDS );        min  = RTC_READ( RTC_MINUTES );        hour = RTC_READ( RTC_HOURS );        day  = RTC_READ( RTC_DAY_OF_MONTH );        mon  = RTC_READ( RTC_MONTH );        year = RTC_READ( RTC_YEAR );        wday = RTC_READ( RTC_DAY_OF_WEEK );    }    else {        RTC_WRITE( RTC_SECONDS, sec );        RTC_WRITE( RTC_MINUTES, min );        RTC_WRITE( RTC_HOURS, hour + pm);        RTC_WRITE( RTC_DAY_OF_MONTH, day );        RTC_WRITE( RTC_MONTH, mon );        RTC_WRITE( RTC_YEAR, year );        if (wday >= 0) RTC_WRITE( RTC_DAY_OF_WEEK, wday );    }    RTC_WRITE( RTC_CONTROL, ctrl & ~RTC_SET );    local_irq_restore(flags);    if (!op) {        /* read: adjust values */        if (hour & 0x80) {	    hour &= ~0x80;	    pm = 1;	}	if (!(ctrl & RTC_DM_BINARY)) {            BCD_TO_BIN(sec);            BCD_TO_BIN(min);            BCD_TO_BIN(hour);            BCD_TO_BIN(day);            BCD_TO_BIN(mon);            BCD_TO_BIN(year);            BCD_TO_BIN(wday);        }        if (!(ctrl & RTC_24H)) {	    if (!pm && hour == 12)		hour = 0;	    else if (pm && hour != 12)		hour += 12;        }        t->tm_sec  = sec;        t->tm_min  = min;        t->tm_hour = hour;        t->tm_mday = day;        t->tm_mon  = mon - 1;        t->tm_year = year + atari_rtc_year_offset;        t->tm_wday = wday - 1;    }    return( 0 );}int atari_mste_set_clock_mmss (unsigned long nowtime){    short real_seconds = nowtime % 60, real_minutes = (nowtime / 60) % 60;    struct MSTE_RTC val;    unsigned char rtc_minutes;    mste_read(&val);    rtc_minutes= val.min_ones + val.min_tens * 10;    if ((rtc_minutes < real_minutes         ? real_minutes - rtc_minutes         : rtc_minutes - real_minutes) < 30)    {        val.sec_ones = real_seconds % 10;        val.sec_tens = real_seconds / 10;        val.min_ones = real_minutes % 10;        val.min_tens = real_minutes / 10;        mste_write(&val);    }    else        return -1;    return 0;}int atari_tt_set_clock_mmss (unsigned long nowtime){    int retval = 0;    short real_seconds = nowtime % 60, real_minutes = (nowtime / 60) % 60;    unsigned char save_control, save_freq_select, rtc_minutes;    save_control = RTC_READ (RTC_CONTROL); /* tell the clock it's being set */    RTC_WRITE (RTC_CONTROL, save_control | RTC_SET);    save_freq_select = RTC_READ (RTC_FREQ_SELECT); /* stop and reset prescaler */    RTC_WRITE (RTC_FREQ_SELECT, save_freq_select | RTC_DIV_RESET2);    rtc_minutes = RTC_READ (RTC_MINUTES);    if (!(save_control & RTC_DM_BINARY))        BCD_TO_BIN (rtc_minutes);    /* Since we're only adjusting minutes and seconds, don't interfere       with hour overflow.  This avoids messing with unknown time zones       but requires your RTC not to be off by more than 30 minutes.  */    if ((rtc_minutes < real_minutes         ? real_minutes - rtc_minutes         : rtc_minutes - real_minutes) < 30)        {            if (!(save_control & RTC_DM_BINARY))                {                    BIN_TO_BCD (real_seconds);                    BIN_TO_BCD (real_minutes);                }            RTC_WRITE (RTC_SECONDS, real_seconds);            RTC_WRITE (RTC_MINUTES, real_minutes);        }    else        retval = -1;    RTC_WRITE (RTC_FREQ_SELECT, save_freq_select);    RTC_WRITE (RTC_CONTROL, save_control);    return retval;}/* * Local variables: *  c-indent-level: 4 *  tab-width: 8 * End: */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩免费看的电影| 亚洲免费在线观看| 中文字幕中文字幕一区| 午夜欧美视频在线观看| 国产真实乱子伦精品视频| 色婷婷精品久久二区二区蜜臀av| 777a∨成人精品桃花网| 亚洲欧美怡红院| 久久国产精品色婷婷| 欧美三级视频在线| 亚洲欧洲日本在线| 国产高清无密码一区二区三区| 91豆麻精品91久久久久久| 亚洲国产高清在线| 国产在线精品免费av| 欧美老肥妇做.爰bbww视频| 一区视频在线播放| 亚洲欧洲综合另类在线| 欧美一级欧美三级在线观看| 国产日产欧产精品推荐色| 亚洲欧美色一区| 狠狠v欧美v日韩v亚洲ⅴ| 欧美嫩在线观看| 亚洲精品高清视频在线观看| 99国产麻豆精品| 国产欧美精品一区| 国产精品系列在线观看| 精品嫩草影院久久| 国内精品第一页| 26uuu亚洲综合色欧美| 九九国产精品视频| www日韩大片| 国产精品一区二区免费不卡| 久久久一区二区| 成人国产电影网| 国产精品嫩草99a| 成人免费毛片高清视频| 亚洲国产精品99久久久久久久久| 成熟亚洲日本毛茸茸凸凹| 国产女人aaa级久久久级| 成人免费视频caoporn| 亚洲欧洲在线观看av| 色婷婷综合久色| 一区二区成人在线视频| 欧美日韩国产在线观看| 男女男精品视频网| 久久网站最新地址| 成人av免费在线| 一区二区三区不卡视频| 在线观看免费成人| 另类成人小视频在线| 久久中文娱乐网| av午夜精品一区二区三区| 亚洲图片激情小说| 欧美男人的天堂一二区| 久久精品免费观看| 国产精品日日摸夜夜摸av| 色av成人天堂桃色av| 日韩精品视频网站| 中文字幕不卡三区| 欧美影视一区二区三区| 日本不卡1234视频| 国产精品久久久一本精品 | 9191成人精品久久| 久久av资源站| 亚洲视频狠狠干| 欧美挠脚心视频网站| 国产精品一区二区91| 亚洲欧美另类小说视频| 日韩色在线观看| 在线观看一区二区视频| 国产毛片精品视频| 亚洲午夜羞羞片| 2023国产精品| 欧美日韩在线播| 成人激情小说乱人伦| 视频一区在线播放| 国产精品久久久久一区| 7777精品伊人久久久大香线蕉的| 成年人国产精品| 精品亚洲porn| 亚洲成人自拍网| 中文字幕在线观看一区二区| 欧美一级黄色录像| 欧美性视频一区二区三区| 国产在线不卡一区| 日本成人在线电影网| 亚洲综合色噜噜狠狠| 欧美激情一区二区| 欧美成人免费网站| 欧美福利一区二区| 欧美中文字幕不卡| 色婷婷综合久久久中文一区二区| 国产一区二区三区最好精华液| 亚洲成人www| 亚洲日本青草视频在线怡红院| 26uuu精品一区二区在线观看| 欧美日韩精品一二三区| 日本伦理一区二区| 成人高清视频在线观看| 高清成人免费视频| 国产mv日韩mv欧美| 国产成人免费视频网站高清观看视频 | 亚洲精品老司机| 国产日本欧美一区二区| 26uuu久久综合| 久久综合色8888| 精品国产一区二区三区久久影院 | 黄页视频在线91| 日韩电影网1区2区| 日本aⅴ免费视频一区二区三区| 亚洲成人自拍网| 日韩精品视频网站| 日韩精品1区2区3区| 日韩电影在线看| 奇米色777欧美一区二区| 天天免费综合色| 日韩制服丝袜av| 蜜臀av性久久久久蜜臀aⅴ四虎| 午夜不卡av在线| 日韩av网站免费在线| 日韩中文字幕不卡| 久久精品国产99久久6| 免费三级欧美电影| 狂野欧美性猛交blacked| 国产在线播放一区二区三区| 国产不卡视频一区二区三区| 99国产精品久久久久久久久久 | 91精品国产综合久久国产大片| 欧美日韩一级二级三级| 欧美高清视频不卡网| 欧美电影免费观看高清完整版| 日韩美女一区二区三区| 国产亚洲精品资源在线26u| 国产精品久久久久久久第一福利 | 丝袜国产日韩另类美女| 日本亚洲欧美天堂免费| 国产乱人伦精品一区二区在线观看| 国产乱码字幕精品高清av | 欧美刺激脚交jootjob| 国产午夜精品福利| 亚洲欧美日韩久久精品| 婷婷综合久久一区二区三区| 国产一区二区在线影院| 成+人+亚洲+综合天堂| 欧美精品v国产精品v日韩精品| 亚洲精品在线三区| 亚洲免费观看高清在线观看| 日韩av在线发布| 成人黄色777网| 日韩一区二区三区在线观看| 亚洲国产综合91精品麻豆| 久久精品国产99国产精品| 波多野结衣中文一区| 欧美日韩视频在线第一区| 久久精品无码一区二区三区| 亚洲综合色自拍一区| 国产综合久久久久影院| 欧美日韩精品福利| 国产精品私人自拍| 免费视频一区二区| 欧美亚洲动漫精品| 国产精品素人视频| 韩日精品视频一区| 欧美精选一区二区| 国产精品久久久久久久久果冻传媒 | 日韩视频在线永久播放| 一色桃子久久精品亚洲| 精品一区二区三区视频在线观看| 色综合一个色综合| 国产天堂亚洲国产碰碰| 免费观看久久久4p| 欧美日韩欧美一区二区| 国产精品久久久久aaaa樱花| 久久精品国产第一区二区三区| 色先锋aa成人| 日韩美女啊v在线免费观看| 六月婷婷色综合| 制服丝袜在线91| 亚洲一级二级在线| 97久久精品人人爽人人爽蜜臀| 国产亚洲视频系列| 国产一区二区三区电影在线观看| 久久久久亚洲蜜桃| 蜜桃精品视频在线观看| 6080亚洲精品一区二区| 亚洲一区二区三区四区五区黄| 99精品视频在线观看| 日韩欧美的一区| 亚洲午夜精品在线| 国产精品国产成人国产三级 | 亚洲精品一卡二卡| 成人av在线资源| 国产欧美一区二区在线观看| 久久99精品视频| 精品噜噜噜噜久久久久久久久试看| 日韩高清在线一区| 91精品国产欧美一区二区| 亚洲成人你懂的| 欧美群妇大交群的观看方式|