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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? time.c

?? linux 內核源代碼
?? C
字號:
/* * 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 <linux/delay.h>#include <asm/atariints.h>void __initatari_sched_init(irq_handler_t timer_routine){    /* 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 ) {	if (in_atomic() || irqs_disabled())	    mdelay(1);	else	    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: */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美老年两性高潮| 狠狠色丁香久久婷婷综合_中| 国产米奇在线777精品观看| 日韩视频一区二区三区在线播放| 国产黄人亚洲片| 亚洲男人都懂的| 日韩美女视频在线| 一本一道综合狠狠老| 婷婷久久综合九色综合绿巨人 | 不卡在线视频中文字幕| 洋洋av久久久久久久一区| 9191成人精品久久| fc2成人免费人成在线观看播放| 亚洲国产欧美在线人成| 国产农村妇女毛片精品久久麻豆| 欧美在线视频不卡| 成人a级免费电影| 99re这里都是精品| 国产高清久久久久| 成人免费精品视频| 国产精品一区二区久久不卡| 午夜欧美一区二区三区在线播放| 男女男精品视频| 一区二区三区中文在线| 午夜精品福利一区二区三区av| 日韩电影免费在线| 亚洲成av人片在线| 亚洲卡通欧美制服中文| 国产精品高潮呻吟| 中文字幕高清不卡| 久久精品网站免费观看| 精品污污网站免费看| av在线这里只有精品| 欧美日韩综合在线免费观看| 久久综合色8888| 欧美精品一区二区高清在线观看| 欧美四级电影网| 欧洲一区二区三区在线| 日韩精品一区二区三区蜜臀 | 色香色香欲天天天影视综合网| 欧美日韩免费观看一区三区| 日韩欧美成人激情| 综合久久一区二区三区| 亚洲国产精品高清| 偷拍亚洲欧洲综合| 91小宝寻花一区二区三区| 成人动漫在线一区| 日韩欧美一区二区在线视频| 国产精品白丝在线| 国产一区二区在线观看免费| 欧洲视频一区二区| 国产日本一区二区| 日本欧美大码aⅴ在线播放| www.激情成人| 久久精品一区二区三区不卡牛牛| 亚洲国产日韩在线一区模特| 成人妖精视频yjsp地址| 欧美mv日韩mv亚洲| 久久久综合精品| 中文字幕一区二区三中文字幕| 成人免费在线播放视频| 国产又黄又大久久| 精品剧情v国产在线观看在线| 亚洲成年人影院| 91国产福利在线| 欧美一级理论性理论a| 亚洲国产wwwccc36天堂| 不卡av免费在线观看| 久久精品亚洲麻豆av一区二区| 麻豆精品在线观看| 成人动漫一区二区三区| 欧美韩日一区二区三区| 韩国成人在线视频| 26uuu欧美| 国产一区日韩二区欧美三区| 欧美一级在线观看| 亚洲国产高清不卡| www.亚洲激情.com| 中文字幕国产一区| 91天堂素人约啪| 亚洲精品欧美激情| 欧美在线免费播放| 亚洲成av人影院在线观看网| 欧美日韩精品欧美日韩精品一综合| 欧美草草影院在线视频| 久久成人免费电影| 欧美色精品天天在线观看视频| 亚洲黄色av一区| 欧美日韩综合一区| 日韩国产在线一| 成人av电影免费在线播放| 国产精品国产三级国产专播品爱网| 99国产精品久久久久久久久久| 亚洲自拍都市欧美小说| aaa欧美日韩| 亚洲国产一区二区三区| 欧美一级二级三级蜜桃| 国产自产视频一区二区三区| 国产精品免费网站在线观看| 热久久久久久久| 精品国产三级电影在线观看| 成人一道本在线| 亚洲国产精品一区二区久久恐怖片| 欧美美女视频在线观看| 国产麻豆视频精品| 亚洲激情欧美激情| 欧美一级艳片视频免费观看| 国产精品1024久久| 亚洲自拍偷拍av| 久久日一线二线三线suv| 色婷婷综合在线| 极品少妇xxxx精品少妇偷拍 | 韩国精品久久久| 一区在线观看免费| 欧美三级中文字幕| 国产suv精品一区二区三区| 久久蜜桃av一区精品变态类天堂 | 亚洲gay无套男同| 欧美va亚洲va在线观看蝴蝶网| 一本色道**综合亚洲精品蜜桃冫| 青青草国产成人av片免费| 日韩理论片在线| 日韩欧美在线影院| 色香色香欲天天天影视综合网| 国精产品一区一区三区mba桃花| 亚洲国产精品久久久男人的天堂 | 欧美大片在线观看一区二区| 97成人超碰视| 国产精品资源在线观看| 亚洲va天堂va国产va久| 国产精品久久久久三级| 精品久久久久久亚洲综合网 | 欧美激情一区二区在线| 在线不卡的av| 欧美性生活一区| 91美女片黄在线| 成人黄色777网| 高清成人免费视频| 韩国视频一区二区| 日韩电影一二三区| 视频一区欧美精品| 亚洲午夜久久久久久久久电影网| 国产精品久久久久婷婷| 日本一区二区三区国色天香| 337p日本欧洲亚洲大胆精品 | 一本久久a久久精品亚洲| 国产传媒日韩欧美成人| 国产综合色精品一区二区三区| 婷婷综合五月天| 日本色综合中文字幕| 蜜桃视频第一区免费观看| 日韩av一级片| 日韩电影免费一区| 麻豆视频一区二区| 久久91精品国产91久久小草| 久久99久国产精品黄毛片色诱| 老司机午夜精品| 狠狠色丁香婷综合久久| 国产成人免费视频网站高清观看视频 | 一本色道综合亚洲| 色欧美片视频在线观看 | 爽好久久久欧美精品| 午夜精品久久久久久久99樱桃| 日本系列欧美系列| 青娱乐精品在线视频| 老司机免费视频一区二区| 久久机这里只有精品| 国产激情91久久精品导航| 99re这里都是精品| 欧美日韩免费视频| www国产精品av| 国产精品免费免费| 一区二区三区加勒比av| 视频在线在亚洲| 久久99热国产| 成人美女视频在线看| 欧美三级电影在线观看| 欧美一区二区三区不卡| 久久久久国产精品麻豆ai换脸| 亚洲视频一二三| 午夜精品福利一区二区蜜股av| 久久99日本精品| 91麻豆国产自产在线观看| 欧美精品久久99久久在免费线| 久久影音资源网| 亚洲综合色区另类av| 国产在线精品国自产拍免费| 日本韩国视频一区二区| 欧美一级欧美一级在线播放| 国产日产欧美精品一区二区三区| 亚洲黄色av一区| 国产成人一级电影| 欧美日韩免费观看一区三区| 欧美国产精品一区| 日韩国产高清在线| 91丨porny丨国产入口| 日韩一区二区在线看| 一区二区三区免费在线观看| 国产成人亚洲综合a∨猫咪| 欧美精品777|