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

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

?? time.c

?? 移植到2410開發板上的源代碼
?? 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一区二区三区免费野_久草精品视频
极品少妇一区二区| 欧美在线制服丝袜| 国内精品久久久久影院薰衣草| 五月综合激情网| 国产精品99精品久久免费| 精品一区二区成人精品| 麻豆精品视频在线观看| 久久国产精品99久久人人澡| 久久精品72免费观看| 久久精品国产免费| 国产一区二三区| 国产大片一区二区| www.亚洲国产| 欧洲人成人精品| 欧美日韩大陆在线| 精品噜噜噜噜久久久久久久久试看 | 日韩一区二区三区视频| 91精品久久久久久久91蜜桃| 欧美成人高清电影在线| 国产欧美一区二区三区鸳鸯浴 | 国产一区二区看久久| 岛国一区二区三区| 色综合视频在线观看| 欧美亚洲综合一区| 日韩欧美另类在线| 欧美激情一区二区在线| 亚洲区小说区图片区qvod| 亚洲成av人在线观看| 卡一卡二国产精品| www.欧美色图| 欧美日韩电影在线播放| 337p粉嫩大胆噜噜噜噜噜91av| 欧美极品另类videosde| 一级精品视频在线观看宜春院 | 色综合久久久久综合| 欧美日韩一区二区三区在线看| 欧美一区二区视频网站| 国产欧美一区二区精品秋霞影院 | 亚洲美女屁股眼交| 免费三级欧美电影| 99综合电影在线视频| 欧美日韩视频专区在线播放| 精品福利二区三区| 亚洲蜜桃精久久久久久久| 老司机精品视频导航| 99国产一区二区三精品乱码| 7777精品伊人久久久大香线蕉的 | 精品国产乱子伦一区| 中文字幕一区二区三区不卡| 日本最新不卡在线| 不卡一区二区三区四区| 日韩一级免费观看| 亚洲欧美综合网| 久久狠狠亚洲综合| 色综合天天综合网天天看片| 日韩免费在线观看| 亚洲精品国产无天堂网2021 | 在线观看日韩毛片| 欧美成人福利视频| 亚洲午夜久久久久久久久久久| 国产一区二区三区精品视频| 欧美日韩高清在线| 国产精品久久久久久福利一牛影视 | 精品国产免费久久| 亚洲国产视频a| 成人免费福利片| 精品国产三级电影在线观看| 亚洲国产cao| 9色porny自拍视频一区二区| 久久综合99re88久久爱| 天天综合网天天综合色| 91在线视频免费91| 国产清纯在线一区二区www| 日本亚洲电影天堂| 欧美午夜不卡在线观看免费| 亚洲欧美日韩中文播放 | 91高清视频在线| 国产精品久久久久影院老司| 韩国成人在线视频| 在线播放/欧美激情| 亚洲国产一区二区在线播放| 国产99久久久国产精品潘金网站| 欧美一区二区三区喷汁尤物| 亚洲成人激情综合网| 色综合久久久久久久久久久| 国产午夜精品一区二区| 极品少妇xxxx精品少妇| 91精品国产色综合久久| 香蕉av福利精品导航| 欧洲精品中文字幕| 亚洲精品视频免费看| 一本色道久久综合狠狠躁的推荐| 国产精品电影一区二区三区| 欧美精品九九99久久| 亚洲国产va精品久久久不卡综合| 99久久精品国产一区二区三区 | 一区二区三区成人| av电影在线观看完整版一区二区| 欧美高清在线一区| 成人av网址在线| 国产精品久久国产精麻豆99网站| 成人免费av网站| 中文字幕av免费专区久久| 国产成人日日夜夜| 国产视频一区在线观看| 国产91色综合久久免费分享| 欧美激情综合网| 成人精品视频网站| 亚洲欧美电影一区二区| 色综合久久久久综合| 亚洲在线视频一区| 欧美日韩激情一区二区| 日韩电影在线观看电影| 日韩欧美黄色影院| 狠狠色狠狠色综合日日91app| 26uuu亚洲| 丁香六月久久综合狠狠色| 中文字幕亚洲综合久久菠萝蜜| 91美女福利视频| 亚洲777理论| 日韩欧美一级二级| 国产v综合v亚洲欧| 伊人色综合久久天天人手人婷| 欧美色图免费看| 男女激情视频一区| 国产色产综合色产在线视频| 99亚偷拍自图区亚洲| 亚洲一区二区三区小说| 日韩一区二区电影网| 国产传媒久久文化传媒| 一区二区三区四区精品在线视频| 欧美另类一区二区三区| 国产中文一区二区三区| 国产精品国产三级国产aⅴ原创 | 亚洲激情av在线| 欧美福利视频导航| 国产精华液一区二区三区| 有码一区二区三区| 欧美不卡在线视频| 91丨九色丨蝌蚪富婆spa| 五月婷婷色综合| 久久久久高清精品| 日本久久一区二区| 久久不见久久见免费视频1| 日本一区二区视频在线| 欧美卡1卡2卡| 粉嫩aⅴ一区二区三区四区| 偷拍与自拍一区| 国产精品情趣视频| 91.com在线观看| 99精品欧美一区二区三区小说 | 国产精品一区二区三区四区| 亚洲精品网站在线观看| 精品福利一二区| 欧美性生活久久| 国产精品 日产精品 欧美精品| 亚洲影视在线观看| 国产午夜亚洲精品不卡| 欧美精品久久99| 日韩一区二区三区视频在线观看| 99久久久国产精品免费蜜臀| 麻豆国产欧美日韩综合精品二区 | 久久国产精品无码网站| 一区二区三区在线不卡| 国产女主播在线一区二区| 3d动漫精品啪啪| 99精品视频一区二区三区| 国产在线不卡视频| 日韩高清一区二区| 一区二区三区欧美日韩| 中文在线资源观看网站视频免费不卡| 91精品久久久久久蜜臀| 色乱码一区二区三区88| 成人精品一区二区三区四区| 麻豆久久一区二区| 亚洲国产精品自拍| 日韩美女视频一区二区| 国产午夜精品一区二区| 精品日韩一区二区三区| 欧美日韩免费一区二区三区视频 | 久久综合久久综合亚洲| 制服丝袜亚洲播放| 在线观看免费视频综合| av一二三不卡影片| 国产白丝精品91爽爽久久| 看国产成人h片视频| 青青草国产成人av片免费| 亚洲图片欧美综合| 亚洲宅男天堂在线观看无病毒| 亚洲欧洲三级电影| 国产精品久久久久久久久免费丝袜| 欧美精品一区二| 久久综合九色综合97婷婷| 精品国产sm最大网站| 日韩午夜小视频| 日韩午夜精品电影| 日韩免费在线观看| 精品蜜桃在线看| 久久久久久久久伊人| 2024国产精品视频|