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

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

?? time.c

?? h內核
?? 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 <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 ) {        current->state = TASK_INTERRUPTIBLE;        schedule_timeout(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一区二区三区免费野_久草精品视频
日本伊人色综合网| 美国十次综合导航| 一区二区成人在线视频| 日韩成人一区二区| 国产·精品毛片| 欧美写真视频网站| 精品盗摄一区二区三区| 亚洲色图20p| 狠狠色综合日日| 欧美久久婷婷综合色| 国产午夜精品一区二区三区视频| 亚洲精品精品亚洲| 久久99久久精品欧美| 91香蕉视频在线| www国产成人免费观看视频 深夜成人网| 欧美激情中文字幕| 精品制服美女丁香| 欧美三级在线看| 亚洲精选视频免费看| 丁香桃色午夜亚洲一区二区三区| 欧美老年两性高潮| 亚洲精品国产一区二区精华液| 国产精品一级黄| 国产精品婷婷午夜在线观看| 国产揄拍国内精品对白| 日本亚洲一区二区| 日韩电影在线观看电影| 日韩一级二级三级| 成人黄色在线网站| 一区二区三区四区乱视频| 欧美主播一区二区三区| 亚洲免费观看高清完整| 成人免费av在线| 亚洲欧美在线另类| 91美女在线视频| 中文字幕中文字幕在线一区 | 国产成人a级片| 久久综合久色欧美综合狠狠| 精品亚洲成a人在线观看| 欧美zozozo| 99在线精品视频| 亚洲黄一区二区三区| 欧美日韩精品欧美日韩精品| 视频在线观看一区| 久久天天做天天爱综合色| 国产精品亚洲视频| 中文字幕亚洲区| 欧美妇女性影城| 成人黄色小视频在线观看| 亚洲欧美日韩国产另类专区| 91黄色免费网站| 日本网站在线观看一区二区三区 | 欧美视频日韩视频| 一区二区三区中文字幕精品精品| 色网综合在线观看| 日产国产欧美视频一区精品| 欧美一区二区三区思思人| 国产一区二区毛片| 亚洲精品视频在线看| 欧美精品日日鲁夜夜添| 成人爱爱电影网址| 青娱乐精品在线视频| 中文字幕不卡在线播放| 一本在线高清不卡dvd| 黄一区二区三区| 亚洲一区二区三区自拍| 久久综合久久鬼色中文字| 91麻豆产精品久久久久久| 毛片一区二区三区| 一卡二卡欧美日韩| 日韩毛片视频在线看| 中文字幕精品一区| 久久久久久一二三区| 国产欧美精品一区aⅴ影院| 国产农村妇女精品| 亚洲欧美综合网| 午夜不卡av在线| 国模冰冰炮一区二区| 国产精品资源网| 91丨porny丨中文| 欧美精品久久天天躁| 欧美亚洲国产一区在线观看网站| 色婷婷久久久久swag精品| 91丨九色丨国产丨porny| 色哟哟国产精品| 欧美裸体bbwbbwbbw| 欧美一区二区三区喷汁尤物| 日韩久久精品一区| 国产亚洲短视频| 一区二区三区中文字幕电影| 蜜臀av性久久久久蜜臀aⅴ四虎| 免费亚洲电影在线| 成人小视频免费观看| 欧美视频一区二区在线观看| 精品免费日韩av| 成人免费在线视频| 久久激情五月婷婷| 在线亚洲人成电影网站色www| 欧美一三区三区四区免费在线看 | 亚洲在线免费播放| 国内外成人在线| 欧美日韩午夜在线| 日本一区二区高清| 日韩激情中文字幕| 99精品黄色片免费大全| 日韩亚洲欧美一区| 亚洲精品久久7777| 国产大片一区二区| 欧美精品在线观看一区二区| 亚洲国产成人一区二区三区| 琪琪一区二区三区| 欧美午夜精品一区二区蜜桃 | 国产成人在线色| 精品国产麻豆免费人成网站| 亚洲尤物在线视频观看| 成人精品视频一区二区三区尤物| 精品成人一区二区三区四区| 日本怡春院一区二区| 欧美猛男男办公室激情| 亚洲一二三四区| 91久久精品国产91性色tv| 欧美国产综合一区二区| av成人免费在线观看| 国产精品成人午夜| 91美女片黄在线观看91美女| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 日韩三级免费观看| 久久不见久久见免费视频1 | 日韩av一区二| 欧美一区二区啪啪| 久久精品国产77777蜜臀| 欧美xingq一区二区| 国产精品一区二区无线| 亚洲日本青草视频在线怡红院| 色噜噜狠狠色综合中国| 日韩电影免费一区| 国产网站一区二区| 91久久精品网| 久久99久久久久| 国产精品日日摸夜夜摸av| 色婷婷av一区二区三区之一色屋| 亚洲一区av在线| 国产亚洲一区二区三区四区| 91在线码无精品| 日精品一区二区| 国产精品三级av| 欧美电影免费观看高清完整版 | 精品电影一区二区| 欧美三级一区二区| 国产精一区二区三区| 亚洲地区一二三色| 欧美电影免费观看高清完整版在线| 丰满亚洲少妇av| 亚洲成人动漫精品| 中文无字幕一区二区三区| 欧美日韩精品福利| 91浏览器打开| 91在线小视频| av中文字幕在线不卡| 久久99最新地址| 丝袜美腿亚洲综合| 亚洲高清免费一级二级三级| 亚洲国产精品成人久久综合一区| 在线播放视频一区| 在线视频综合导航| 欧美午夜电影网| 色婷婷久久久久swag精品| 成人中文字幕合集| 国产精品系列在线观看| 麻豆国产一区二区| 秋霞成人午夜伦在线观看| 亚洲午夜在线观看视频在线| 亚洲综合成人在线视频| ...xxx性欧美| 亚洲视频免费在线| 亚洲男人天堂av| 一区二区久久久| 日韩av一区二区在线影视| 国产在线精品视频| www.成人在线| 欧美日韩免费观看一区二区三区| 欧美日韩一区高清| 日韩三级免费观看| 国产精品青草综合久久久久99| 亚洲精品视频免费看| 视频在线观看一区二区三区| 久久99精品国产.久久久久| 国产精品小仙女| 欧美日韩aaaaaa| 亚洲人成在线播放网站岛国| 水野朝阳av一区二区三区| 国产成人免费xxxxxxxx| 欧美日韩一区高清| 国产精品美女一区二区在线观看| 亚洲精选视频免费看| 国产一区二区美女诱惑| 欧美在线观看视频一区二区三区| 国产丝袜欧美中文另类| 肉色丝袜一区二区| 色乱码一区二区三区88|