static __init unsigned long get_m48t35_time(void) { unsigned int year, month, date, hour, min, sec; struct m48t35_rtc *rtc; nasid_t nid; nid = get_nasid(); rtc = (struct m48t35_rtc *)(KL_CONFIG_CH_CONS_INFO(nid)->memory_base + IOC3_BYTEBUS_DEV0); rtc->control |= M48T35_RTC_READ; sec = rtc->sec; min = rtc->min; hour = rtc->hour; date = rtc->date; month = rtc->month; year = rtc->year; rtc->control &= ~M48T35_RTC_READ; sec = BCD2BIN(sec); min = BCD2BIN(min); hour = BCD2BIN(hour); date = BCD2BIN(date); month = BCD2BIN(month); year = BCD2BIN(year); year += 1970; return mktime(year, month, date, hour, min, sec); }
static inline void ioc3_eth_init(void) { struct ioc3 *ioc3; nasid_t nid; nid = get_nasid(); ioc3 = (struct ioc3 *) KL_CONFIG_CH_CONS_INFO(nid)->memory_base; ioc3->eier = 0; }
static inline struct ioc3_uartregs *console_uart(void) { struct ioc3 *ioc3; nasid_t nasid; nasid = (master_nasid == INVALID_NASID) ? get_nasid() : master_nasid; ioc3 = (struct ioc3 *)KL_CONFIG_CH_CONS_INFO(nasid)->memory_base; return &ioc3->sregs.uarta; }
void prom_putchar(char c) { struct ioc3 *ioc3; struct ioc3_uartregs *uart; ioc3 = (struct ioc3 *)KL_CONFIG_CH_CONS_INFO(master_nasid)->memory_base; uart = &ioc3->sregs.uarta; while ((uart->iu_lsr & 0x20) == 0); uart->iu_thr = c; }
static int __init sgi_ip27_rtc_devinit(void) { struct resource res; memset(&res, 0, sizeof(res)); res.start = XPHYSADDR(KL_CONFIG_CH_CONS_INFO(master_nasid)->memory_base + IOC3_BYTEBUS_DEV0); res.end = res.start + 32767; res.flags = IORESOURCE_MEM; return IS_ERR(platform_device_register_simple("rtc-m48t35", -1, &res, 1)); }
nasid_t snia_get_master_baseio_nasid(void) { extern nasid_t master_baseio_nasid; extern char master_baseio_wid; if (master_baseio_nasid < 0) { master_baseio_nasid = ia64_sn_get_master_baseio_nasid(); if ( master_baseio_nasid >= 0 ) { master_baseio_wid = WIDGETID_GET(KL_CONFIG_CH_CONS_INFO(master_baseio_nasid)->memory_base); } } return master_baseio_nasid; }
static int set_rtc_mmss(unsigned long nowtime) { int retval = 0; int real_seconds, real_minutes, cmos_minutes; struct m48t35_rtc *rtc; nasid_t nid; rtc = (struct m48t35_rtc *) (KL_CONFIG_CH_CONS_INFO(master_nasid)->memory_base + IOC3_BYTEBUS_DEV0); spin_lock(&rtc_lock); rtc->control |= M48T35_RTC_READ; cmos_minutes = rtc->min; BCD_TO_BIN(cmos_minutes); rtc->control &= ~M48T35_RTC_READ; /* * 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 15 minutes */ real_seconds = nowtime % 60; real_minutes = nowtime / 60; if (((abs(real_minutes - cmos_minutes) + 15)/30) & 1) real_minutes += 30; /* correct for half hour time zone */ real_minutes %= 60; if (abs(real_minutes - cmos_minutes) < 30) { BIN_TO_BCD(real_seconds); BIN_TO_BCD(real_minutes); rtc->control |= M48T35_RTC_SET; rtc->sec = real_seconds; rtc->min = real_minutes; rtc->control &= ~M48T35_RTC_SET; } else { printk(KERN_WARNING "set_rtc_mmss: can't update from %d to %d\n", cmos_minutes, real_minutes); retval = -1; } spin_unlock(&rtc_lock); return retval; }
/* Extracted from the IOC3 meta driver. FIXME. */ static inline void ioc3_sio_init(void) { struct ioc3 *ioc3; nasid_t nid; long loops; nid = get_nasid(); ioc3 = (struct ioc3 *) KL_CONFIG_CH_CONS_INFO(nid)->memory_base; ioc3->sscr_a = 0; /* PIO mode for uarta. */ ioc3->sscr_b = 0; /* PIO mode for uartb. */ ioc3->sio_iec = ~0; ioc3->sio_ies = (SIO_IR_SA_INT | SIO_IR_SB_INT); loops=1000000; while(loops--); ioc3->sregs.uarta.iu_fcr = 0; ioc3->sregs.uartb.iu_fcr = 0; loops=1000000; while(loops--); }
static int __init rtc_init(void) { unsigned long flags; nasid_t nid; nid = get_nasid(); rtc = (struct m48t35_rtc *) KL_CONFIG_CH_CONS_INFO(nid)->memory_base + IOC3_BYTEBUS_DEV0; printk(KERN_INFO "Real Time Clock Driver v%s\n", RTC_VERSION); if (misc_register(&rtc_dev)) return -ENODEV; create_proc_read_entry ("rtc", 0, NULL, rtc_read_proc, NULL); save_flags(flags); cli(); restore_flags(flags); rtc_freq = 1024; return 0; }
static int __init rtc_init(void) { rtc = (struct m48t35_rtc *) (KL_CONFIG_CH_CONS_INFO(master_nasid)->memory_base + IOC3_BYTEBUS_DEV0); printk(KERN_INFO "Real Time Clock Driver v%s\n", RTC_VERSION); if (misc_register(&rtc_dev)) { printk(KERN_ERR "rtc: cannot register misc device.\n"); return -ENODEV; } if (!create_proc_read_entry("driver/rtc", 0, NULL, rtc_read_proc, NULL)) { printk(KERN_ERR "rtc: cannot create /proc/rtc.\n"); misc_deregister(&rtc_dev); return -ENOENT; } rtc_freq = 1024; return 0; }