EFI Real Time Clock driver
-------------------------------
    ԡS. Eranian <eranian@hpl.hp.com> March 2000
ܸܹ <hng@ps.ksky.ne.jp>
    ܽߤ <morimoto@xantia.citroen.org>
          Seiji Kaneko <se-kane@str.hitachi.co.jp>

I.   

ʸ IA-64 ץåȥե󶡤Ƥ efirtc.c ɥ饤
Фޤ

Υɥ饤ФŪϡEFI С 0.92 󶡤Ƥ륿ॵ
˥뤿ˡͥ뤪ӥ桼ץꥱ API
󶡤뤳ȤǤ

EFI ϻͤĤΥ󶡤OS ֡ȤȻȤ褦ˤʤޤ
Υɥ饤ФϡGetTime(), SetTime(), GetWakeupTime(), SetWakeupTime()
򥵥ݡȤޤ
ʲιǤϡΥȥɥ饤Ф߷פˤĤƽҤ٤ޤ

II.  ߷פη

顢ΰƤϻ掠ӥ˥ǤȤƤñʥɥ饤Ф
뤳ȤǤ CMOS åˡܿɤ뤿
ɬפǤ/sbin/hwclock Τ褦ʥץϥ֡Ȥδ֤˥ƥλ
ν򤹤뤿ᡢäåȤޤ

CMOS åѤ¸Υ桼٥륢ץꥱؤαƶ
¤ˤäΤǡȤƤ뽾 RTC ɥ饤
(driver/char/rtc.c) ˻ API λͤ򳫼뤳Ȥ˷ޤ
EFI ñʥӥ󶡤ʤΤǡ٤Ƥ ioctl() 
Ѳǽʤ櫓ǤϤޤ󡣤ˡΥɥ饤ФˤϤʤä
ioctl()  EFI 󶡵ǽΤɲäƤޤ

EFI Ѥ֤ɽˡϼ㴳ۤʤäƤꡢȤʤΰ㤤
θʤΤǤǯν񼰤ϻͷƤѤޤ (Epoch)  1998
ǯ 1  1 Ǥ̸ߴͳ顢ολɽɽˤϽ
ޤ󡣤ˡhwclock ˤȤ struct tm Ȥ褯
 (ʤ struct rtc_time) ѤޤѤͳΰĤϡ
ˡ桼ץꥱ˲αƶͿ뤳ȤʤEFI 򤵤
ȯŸ뤫ǤΤ褦˼ºݤμ OS ɽʬΥƤ
ȤϡޤȤѤäȤƤ⡢(
Ѳۼ) åѡɤ񤯤ȤǤޤ

ɥ饤ФĤΥ󥿡եĤϥǥХե
ioctl() Ȥߤ𤹤ΤǤ
⤦Ĥɤ߽ФΤߤ /proc ե륷ƥ𤹤ΤǤ

ߡ/proc/sys 󥿡ե󶡤Ƥޤ

 RTC  EFI ΥॵӥȤƱΥ󥿡եθ
ˡĤΥɥ饤Ф ** API ޤ include/linux/rtc.h
إåեޤ RTC ͭΤΤϤޤ
include/linux/mc146818rtc.h ˤޤ
 
III. 掠ӥ

ɥ饤ФΰʬϡEFI λ掠ӥ˥Ǥ褦ˤޤ
Ĥ ioctl()   RTC ȸߴޤ -

	CMOS åɤࡧ ioctl(d, RTC_RD_TIME, &rtc);

	CMOS å˽񤯡 ioctl(d, RTC_SET_TIME, &rtc);

rtc  rtc.h 줿ǡ¤ΤؤΥݥ󥿤ǡstruct tm ˤ
Ƥޤ

struct rtc_time {
        int tm_sec;
        int tm_min;
        int tm_hour;
        int tm_mday;
        int tm_mon;
        int tm_year;
        int tm_wday;
        int tm_yday;
        int tm_isdst;
};

ɥ饤ФEFI  time Ȥηδ֤ѴԤޤ

Ĥ ioctl()  hwclock Ǹڤ뤳ȤǤޤ

ɤ߽Ф˴ؤ -

# /sbin/hwclock --show
Mon Mar  6 15:32:32 2000  -0.910248 seconds

˴ؤ -

# /sbin/hwclock --systohc

Ԥˤϥ롼ȸ¤ɬפǤ

IV.  wakeup 顼ॵӥ 

EFI ϥޥ wakeup ٤ (ʤ reboot) ץह뤿
 API 󶡤ޤϡ RTC 󶡤륤󥿡Х륿ޤ
顼ȤϤְۤʤޤΤᡢΥӥ˥뤿
˺ޤǤ ioctl() ȤȤϤޤˡRTC Υ󥿡ե
ȤĤο ioctl() ƳƤޤ

ɲäĤο ioctl()  EFI ɥ饤ФФ -

        ߤΥ顼ξ֤ɤ
	ioctl(d, RTC_WKLAM_RD, &wkt)

        顼⤷Ͼ֤ѹ
	ioctl(d, RTC_WKALM_SET, &wkt)

֤뤿ˡwkt ¤Τ struct rtc_time Ĥɲä줿ե
ɤޤߤޤ
	
struct rtc_wkalrm {

        unsigned char enabled; /* =1 if alarm is enabled */
        unsigned char pending; /* =1 if alarm is pending  */

        struct rtc_time time;
} 

ΤȤ桼٥륢ץꥱǤεǽ򥵥ݡȤΤ
ޤ󡣤ơñˤĤ ioctl() ȤäơץȤ
Τ񤯤Ȥ񤷤Ǥ礦

顼ˤϥ롼ȸ¤ɬפǤ

V.   ʸ

EFI Τ˾ܤϡΥ֥Ȥ

http://developer.intel.com/technology/efi/
