⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setup.c

📁 linux-2.4.29操作系统的源码
💻 C
字号:
/* *  arch/mips/pmc-sierra/yosemite/setup.c * *  Copyright (C) 2003 PMC-Sierra Inc. *  Author: Manish Lachwani (lachwani@pmc-sierra.com) * *  This program is free software; you can redistribute  it and/or modify it *  under  the terms of  the GNU General  Public License as published by the *  Free Software Foundation;  either version 2 of the  License, or (at your *  option) any later version. * *  THIS  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN *  NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT, *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * *  You should have received a copy of the  GNU General Public License along *  with this program; if not, write  to the Free Software Foundation, Inc., *  675 Mass Ave, Cambridge, MA 02139, USA. */#include <linux/init.h>#include <linux/kernel.h>#include <linux/types.h>#include <linux/mc146818rtc.h>#include <linux/mm.h>#include <linux/swap.h>#include <linux/ioport.h>#include <linux/sched.h>#include <linux/interrupt.h>#include <linux/pci.h>#include <linux/timex.h>#include <linux/vmalloc.h>#include <asm/time.h>#include <asm/bootinfo.h>#include <asm/page.h>#include <asm/bootinfo.h>#include <asm/io.h>#include <asm/irq.h>#include <asm/processor.h>#include <asm/ptrace.h>#include <asm/reboot.h>#include <linux/bootmem.h>#include <linux/blk.h>#include "setup.h"unsigned long cpu_clock;unsigned long yosemite_base;void __init bus_error_init(void) { 	/* Do nothing */ }unsigned long m48t37y_get_time(void){	unsigned char	*rtc_base = YOSEMITE_RTC_BASE;	unsigned int	year, month, day, hour, min, sec;	/* Stop the update to the time */	rtc_base[0x7ff8] = 0x40;	year = CONV_BCD_TO_BIN(rtc_base[0x7fff]);	year += CONV_BCD_TO_BIN(rtc_base[0x7fff1]) * 100;	month = CONV_BCD_TO_BIN(rtc_base[0x7ffe]);	day = CONV_BCD_TO_BIN(rtc_base[0x7ffd]);	hour = CONV_BCD_TO_BIN(rtc_base[0x7ffb]);	min = CONV_BCD_TO_BIN(rtc_base[0x7ffa]);	sec = CONV_BCD_TO_BIN(rtc_base[0x7ff9]);	/* Start the update to the time again */	rtc_base[0x7ff8] = 0x00;	return mktime(year, month, day, hour, min, sec);}int m48t37y_set_time(unsigned long sec){	unsigned char   *rtc_base = YOSEMITE_RTC_BASE;        unsigned int    year, month, day, hour, min, sec;        struct rtc_time tm;        /* convert to a more useful format -- note months count from 0 */        to_tm(sec, &tm);        tm.tm_mon += 1;        /* enable writing */        rtc_base[0x7ff8] = 0x80;        /* year */        rtc_base[0x7fff] = CONV_BIN_TO_BCD(tm.tm_year % 100);        rtc_base[0x7ff1] = CONV_BIN_TO_BCD(tm.tm_year / 100);        /* month */        rtc_base[0x7ffe] = CONV_BIN_TO_BCD(tm.tm_mon);        /* day */        rtc_base[0x7ffd] = CONV_BIN_TO_BCD(tm.tm_mday);        /* hour/min/sec */        rtc_base[0x7ffb] = CONV_BIN_TO_BCD(tm.tm_hour);        rtc_base[0x7ffa] = CONV_BIN_TO_BCD(tm.tm_min);        rtc_base[0x7ff9] = CONV_BIN_TO_BCD(tm.tm_sec);        /* day of week -- not really used, but let's keep it up-to-date */        rtc_base[0x7ffc] = CONV_BIN_TO_BCD(tm.tm_wday + 1);        /* disable writing */        rtc_base[0x7ff8] = 0x00;        return 0;}void yosemite_timer_setup(struct irqaction *irq){	setup_irq(6, irq);}void yosemite_time_init(void){	mips_counter_frequency = cpu_clock / 2;	board_timer_setup = yosemite_timer_setup;	rtc_get_time = m48t37y_get_time;	rtc_set_time = m48t37y_set_time;}void __init pmc_yosemite_setup(void){	unsigned long	val = 0;	printk("PMC-Sierra Yosemite Board Setup  \n");	board_time_init = yosemite_time_init;	/* Add memory regions */	add_memory_region(0x00000000, 0x10000000, BOOT_MEM_RAM);	add_memory_region(0x10000000, 0x10000000, BOOT_MEM_RAM);	/* Setup the HT controller */	val = *(volatile u_int32_t *)(HYPERTRANSPORT_CONFIG_REG);	val |= HYPERTRANSPORT_ENABLE;        *(volatile u_int32_t *)(HYPERTRANSPORT_CONFIG_REG) = val;        /* Set the BAR. Shifted mode */        *(volatile u_int32_t *)(HYPERTRANSPORT_BAR0_REG) = HYPERTRANSPORT_BAR0_ADDR;        *(volatile u_int32_t *)(HYPERTRANSPORT_SIZE0_REG) = HYPERTRANSPORT_SIZE0;}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -