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

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

?? time.c

?? 廣州斯道2410普及版II的源代碼
?? 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 <asm/rtc.h>void __initatari_sched_init(void (*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) writeb(reg,&tt_rtc.regsel);	\		__val = tt_rtc.data;		\		__val;				\	})#define	RTC_WRITE(reg,val)			\    do {					\		writeb(reg,&tt_rtc.regsel);	\		tt_rtc.data = (val);		\	} while(0)void atari_mste_gettod (int *yearp, int *monp, int *dayp,			int *hourp, int *minp, int *secp){    int hr24=0, hour;    struct MSTE_RTC val;    mste_rtc.mode=(mste_rtc.mode | 1);    hr24=mste_rtc.mon_tens & 1;    mste_rtc.mode=(mste_rtc.mode & ~1);    mste_read(&val);    *secp = val.sec_ones + val.sec_tens * 10;    *minp = 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;    }    *hourp = hour;    *dayp = val.day_ones + val.day_tens * 10;    *monp = val.mon_ones + val.mon_tens * 10;    *yearp = val.year_ones + val.year_tens * 10 + 80;	}  void atari_tt_gettod (int *yearp, int *monp, int *dayp,		      int *hourp, int *minp, int *secp){    unsigned char	ctrl;    int hour, pm;    while (!(RTC_READ(RTC_FREQ_SELECT) & RTC_UIP)) ;    while (RTC_READ(RTC_FREQ_SELECT) & RTC_UIP) ;    *secp  = RTC_READ(RTC_SECONDS);    *minp  = RTC_READ(RTC_MINUTES);    hour = RTC_READ(RTC_HOURS);    *dayp  = RTC_READ(RTC_DAY_OF_MONTH);    *monp  = RTC_READ(RTC_MONTH);    *yearp = RTC_READ(RTC_YEAR);    pm = hour & 0x80;    hour &= ~0x80;    ctrl = RTC_READ(RTC_CONTROL);     if (!(ctrl & RTC_DM_BINARY)) {        BCD_TO_BIN(*secp);        BCD_TO_BIN(*minp);        BCD_TO_BIN(hour);        BCD_TO_BIN(*dayp);        BCD_TO_BIN(*monp);        BCD_TO_BIN(*yearp);    }    if (!(ctrl & RTC_24H)) {	if (!pm && hour == 12)	    hour = 0;	else if (pm && hour != 12)            hour += 12;    }    *hourp = hour;    /* Adjust values (let the setup valid) */    *yearp += atari_rtc_year_offset;}#define HWCLK_POLL_INTERVAL	5int atari_mste_hwclk( int op, struct hwclk_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->sec % 10;        val.sec_tens = t->sec / 10;        val.min_ones = t->min % 10;        val.min_tens = t->min / 10;        hour = t->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->day % 10;        val.day_tens = t->day / 10;        val.mon_ones = (t->mon+1) % 10;        val.mon_tens = (t->mon+1) / 10;        year = t->year - 80;        val.year_ones = year % 10;        val.year_tens = year / 10;        val.weekday = t->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->sec = val.sec_ones + val.sec_tens * 10;        t->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->hour = hour;	t->day = val.day_ones + val.day_tens * 10;        t->mon = val.mon_ones + val.mon_tens * 10 - 1;        t->year = val.year_ones + val.year_tens * 10 + 80;        t->wday = val.weekday;    }    return 0;}int atari_tt_hwclk( int op, struct hwclk_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->sec;        min  = t->min;        hour = t->hour;        day  = t->day;        mon  = t->mon + 1;        year = t->year - atari_rtc_year_offset;        wday = t->wday + (t->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 ) {        current->state = TASK_INTERRUPTIBLE;        schedule_timeout(HWCLK_POLL_INTERVAL);    }    save_flags(flags);    cli();    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 );    restore_flags(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->sec  = sec;        t->min  = min;        t->hour = hour;        t->day  = day;        t->mon  = mon - 1;        t->year = year + atari_rtc_year_offset;        t->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一区二区三区免费野_久草精品视频
91在线观看高清| 欧美国产精品中文字幕| 亚洲一二三区在线观看| 91丨porny丨中文| 亚洲欧美在线另类| 欧美日韩在线播放三区四区| 日韩经典中文字幕一区| 日韩精品综合一本久道在线视频| 美洲天堂一区二卡三卡四卡视频| 精品国产91乱码一区二区三区| 国产在线视视频有精品| 国产亚洲精品超碰| 91香蕉国产在线观看软件| 欧美男同性恋视频网站| 一级做a爱片久久| 欧美日韩精品欧美日韩精品一| 日韩成人精品在线观看| 久久精品视频在线免费观看| 91一区二区三区在线观看| 洋洋av久久久久久久一区| 欧美不卡视频一区| 粉嫩av一区二区三区在线播放| 亚洲综合色丁香婷婷六月图片| 欧美一区二区三区男人的天堂| 国产成人精品免费在线| 尤物在线观看一区| 精品久久久久久久一区二区蜜臀| heyzo一本久久综合| 偷拍一区二区三区四区| 中文字幕av一区二区三区| 欧美色爱综合网| 粉嫩欧美一区二区三区高清影视| 亚洲图片欧美色图| 欧美国产综合一区二区| 3751色影院一区二区三区| 成人精品一区二区三区中文字幕| 欧美一级欧美三级在线观看| 久久久亚洲精品一区二区三区| 国产亚洲精品免费| 午夜精品一区二区三区免费视频| 亚洲精品一区二区三区福利| 99re在线精品| 国产精品性做久久久久久| 亚洲在线视频网站| 国产精品美女久久久久高潮| 欧美一卡在线观看| 日本精品一级二级| 国产a视频精品免费观看| 日韩成人一级片| 亚洲精品美腿丝袜| 国产精品嫩草99a| 欧美大黄免费观看| 性做久久久久久免费观看| 色哟哟国产精品| 成人一区二区视频| 精品无人码麻豆乱码1区2区| 亚洲一区二区三区四区在线免费观看| 国产精品视频九色porn| 精品国产凹凸成av人网站| 在线综合视频播放| 欧美体内she精高潮| 色婷婷综合久久久久中文一区二区| 国产精品一卡二卡在线观看| 麻豆国产精品视频| 奇米四色…亚洲| 青青草国产成人av片免费| 午夜亚洲国产au精品一区二区| 一级精品视频在线观看宜春院| 国产精品全国免费观看高清| 国产欧美日韩亚州综合| 国产日韩视频一区二区三区| 精品欧美黑人一区二区三区| 精品久久人人做人人爽| 精品国产三级a在线观看| 日韩欧美亚洲一区二区| 日韩一区二区三区三四区视频在线观看| 欧美性感一区二区三区| 欧美视频精品在线| 欧美最猛黑人xxxxx猛交| 欧美午夜影院一区| 欧美日韩高清在线| 欧美另类高清zo欧美| 777午夜精品免费视频| 91精品欧美福利在线观看| 7777精品久久久大香线蕉| 日韩三级高清在线| 欧美大片顶级少妇| 国产亚洲va综合人人澡精品| 久久久99久久| 国产精品国产三级国产普通话三级 | 国产精品久久久久久久久搜平片| 久久蜜桃av一区精品变态类天堂 | 欧美一二三四区在线| 欧美日韩第一区日日骚| 日韩精品资源二区在线| 久久精品亚洲国产奇米99| 国产精品日韩精品欧美在线| 中文成人综合网| 樱桃国产成人精品视频| 人人狠狠综合久久亚洲| 国产麻豆精品久久一二三| 成人性生交大片免费看在线播放 | 国产电影精品久久禁18| 99综合电影在线视频| 欧美怡红院视频| 日韩欧美国产精品| 国产精品视频在线看| 亚洲精品国产无天堂网2021| 美女国产一区二区| 国产成人在线网站| 91成人在线观看喷潮| 欧美mv日韩mv国产网站app| 国产精品女同互慰在线看| 亚洲午夜精品在线| 国产又粗又猛又爽又黄91精品| 成人av网站大全| 91精品国产综合久久精品麻豆| 亚洲国产精品二十页| 丝袜脚交一区二区| 懂色中文一区二区在线播放| 欧美视频在线一区| 中文一区二区在线观看| 亚洲成人资源网| www.亚洲人| 欧美一区二区三区喷汁尤物| 亚洲男人都懂的| 精品影视av免费| 欧美自拍偷拍午夜视频| 国产日韩欧美精品在线| 亚洲一区在线免费观看| 国产成人综合亚洲网站| 欧美久久久一区| 日韩伦理av电影| 狠狠狠色丁香婷婷综合久久五月| 欧美三级一区二区| 国产精品丝袜一区| 国产一区二区在线视频| 欧美欧美欧美欧美| 亚洲女女做受ⅹxx高潮| 国产福利精品导航| 日韩欧美中文一区| 伊人婷婷欧美激情| av午夜精品一区二区三区| 久久综合久久综合九色| 日韩高清不卡一区二区| 色诱亚洲精品久久久久久| 国产欧美日韩综合精品一区二区| 免费观看成人av| 欧美日韩国产乱码电影| 亚洲精品一卡二卡| 91尤物视频在线观看| 亚洲国产高清aⅴ视频| 狠狠色2019综合网| 精品国精品自拍自在线| 免费成人在线视频观看| 欧美日韩美少妇| 亚洲自拍另类综合| 色综合久久88色综合天天6| 亚洲欧美在线观看| 亚洲一区中文在线| 精品视频免费在线| 亚洲一区二区三区在线看| 99久免费精品视频在线观看| 国产精品系列在线| 成+人+亚洲+综合天堂| 中文字幕在线视频一区| 成人福利视频网站| 中文字幕在线一区免费| 99久久99久久免费精品蜜臀| 中文字幕色av一区二区三区| 成av人片一区二区| 亚洲欧美一区二区久久 | 国产乱码精品一品二品| 久久久另类综合| 成人一区二区三区在线观看| 中文字幕av资源一区| 99视频精品免费视频| 亚洲日本免费电影| 色婷婷综合久久久中文一区二区| 一区二区三区日韩| 欧美年轻男男videosbes| 美日韩一区二区| 久久综合久久综合亚洲| 成人v精品蜜桃久久一区| 一本大道久久a久久综合| 欧美图区在线视频| 91福利视频网站| 7777精品久久久大香线蕉| 日韩一级大片在线观看| 久久欧美一区二区| 欧美精品在线视频| 国产日韩v精品一区二区| 亚洲色图视频网站| 亚洲图片有声小说| 亚洲一区av在线| 国产乱码精品一区二区三区五月婷| 精品99一区二区三区| 国内精品伊人久久久久av影院| 国产欧美一区二区三区在线看蜜臀| 99久久婷婷国产|