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

📄 chrp_setup.c

📁 内核linux2.4.20,可跟rtlinux3.2打补丁 组成实时linux系统,编译内核
💻 C
📖 第 1 页 / 共 2 页
字号:
chrp_restart(char *cmd){	printk("RTAS system-reboot returned %d\n",	       call_rtas("system-reboot", 0, 1, NULL));	for (;;);}void __chrpchrp_power_off(void){	/* allow power on only with power button press */	printk("RTAS power-off returned %d\n",	       call_rtas("power-off", 2, 1, NULL,0xffffffff,0xffffffff));	for (;;);}void __chrpchrp_halt(void){	chrp_power_off();}u_int __chrpchrp_irq_cannonicalize(u_int irq){	if (irq == 2)		return 9;	return irq;}void __init chrp_init_IRQ(void){	struct device_node *np;	int i;	unsigned int *addrp;	unsigned char* chrp_int_ack_special = 0;	unsigned char init_senses[NR_IRQS - NUM_8259_INTERRUPTS];	int nmi_irq = -1;#if defined(CONFIG_VT) && defined(CONFIG_ADB_KEYBOARD) && defined(XMON)		struct device_node *kbd;#endif	if (!(np = find_devices("pci"))	    || !(addrp = (unsigned int *)		 get_property(np, "8259-interrupt-acknowledge", NULL)))		printk("Cannot find pci to get ack address\n");	else		chrp_int_ack_special = (unsigned char *)			ioremap(addrp[prom_n_addr_cells(np)-1], 1);	/* hydra still sets OpenPIC_InitSenses to a static set of values */	if (OpenPIC_InitSenses == NULL) {		prom_get_irq_senses(init_senses, NUM_8259_INTERRUPTS, NR_IRQS);		OpenPIC_InitSenses = init_senses;		OpenPIC_NumInitSenses = NR_IRQS - NUM_8259_INTERRUPTS;	}	openpic_init(1, NUM_8259_INTERRUPTS, chrp_int_ack_special, nmi_irq);	for ( i = 0 ; i < NUM_8259_INTERRUPTS  ; i++ )		irq_desc[i].handler = &i8259_pic;	i8259_init(NULL);#if defined(CONFIG_VT) && defined(CONFIG_ADB_KEYBOARD) && defined(XMON)	/* see if there is a keyboard in the device tree	   with a parent of type "adb" */	for (kbd = find_devices("keyboard"); kbd; kbd = kbd->next)		if (kbd->parent && kbd->parent->type		    && strcmp(kbd->parent->type, "adb") == 0)			break;	if (kbd)		request_irq( HYDRA_INT_ADB_NMI, xmon_irq, 0, "XMON break", 0);#endif}void __initchrp_init2(void){#ifdef CONFIG_NVRAM  	pmac_nvram_init();#endif	request_region(0x20,0x20,"pic1");	request_region(0xa0,0x20,"pic2");	request_region(0x00,0x20,"dma1");	request_region(0x40,0x20,"timer");	request_region(0x80,0x10,"dma page reg");	request_region(0xc0,0x20,"dma2");	if (ppc_md.progress)		ppc_md.progress("  Have fun!    ", 0x7777);#if defined(CONFIG_VT) && (defined(CONFIG_ADB_KEYBOARD) || defined(CONFIG_INPUT))	/* see if there is a keyboard in the device tree	   with a parent of type "adb" */	{		struct device_node *kbd;		for (kbd = find_devices("keyboard"); kbd; kbd = kbd->next) {			if (kbd->parent && kbd->parent->type			    && strcmp(kbd->parent->type, "adb") == 0) {				select_adb_keyboard();				break;			}		}	}#endif /* CONFIG_VT && (CONFIG_ADB_KEYBOARD || CONFIG_INPUT) */}#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE)/* * IDE stuff. */static int __chrpchrp_ide_check_region(ide_ioreg_t from, unsigned int extent){        return check_region(from, extent);}static void __chrpchrp_ide_request_region(ide_ioreg_t from,			unsigned int extent,			const char *name){        request_region(from, extent, name);}static void __chrpchrp_ide_release_region(ide_ioreg_t from,			unsigned int extent){        release_region(from, extent);}static void __chrpchrp_ide_init_hwif_ports(hw_regs_t *hw, ide_ioreg_t data_port, ide_ioreg_t ctrl_port, int *irq){	ide_ioreg_t reg = data_port;	int i;	for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) {		hw->io_ports[i] = reg;		reg += 1;	}	hw->io_ports[IDE_CONTROL_OFFSET] = ctrl_port;}#endif/* * One of the main thing these mappings are needed for is so that * xmon can get to the serial port early on.  We probably should * handle the machines with the mpc106 as well as the python (F50) * and the GG2 (longtrail).  Actually we should look in the device * tree and do the right thing. */static void __initchrp_map_io(void){	char *name;	/*	 * The code below tends to get removed, please don't take it out.	 * The F50 needs this mapping and it you take it out I'll track you	 * down and slap your hands.  If it causes problems please email me.	 *  -- Cort <cort@fsmlabs.com>	 */	name = get_property(find_path_device("/"), "name", NULL);	if (name && strncmp(name, "IBM-70", 6) == 0	    && strstr(name, "-F50")) {		io_block_mapping(0x80000000, 0x80000000, 0x10000000, _PAGE_IO);		io_block_mapping(0x90000000, 0x90000000, 0x10000000, _PAGE_IO);		return;	} else {		io_block_mapping(0xf8000000, 0xf8000000, 0x04000000, _PAGE_IO);	}}void __initchrp_init(unsigned long r3, unsigned long r4, unsigned long r5,	  unsigned long r6, unsigned long r7){#ifdef CONFIG_BLK_DEV_INITRD	/* take care of initrd if we have one */	if ( r6 )	{		initrd_start = r6 + KERNELBASE;		initrd_end = r6 + r7 + KERNELBASE;	}#endif /* CONFIG_BLK_DEV_INITRD */	ISA_DMA_THRESHOLD = ~0L;	DMA_MODE_READ = 0x44;	DMA_MODE_WRITE = 0x48;	isa_io_base = CHRP_ISA_IO_BASE;		/* default value */	ppc_md.setup_arch     = chrp_setup_arch;	ppc_md.show_percpuinfo = of_show_percpuinfo;	ppc_md.show_cpuinfo   = chrp_show_cpuinfo;	ppc_md.irq_cannonicalize = chrp_irq_cannonicalize;#ifndef CONFIG_POWER4	ppc_md.init_IRQ       = chrp_init_IRQ;	ppc_md.get_irq        = openpic_get_irq;#else	ppc_md.init_IRQ	      = xics_init_IRQ;	ppc_md.get_irq	      = xics_get_irq;#endif /* CONFIG_POWER4 */	ppc_md.init           = chrp_init2;	ppc_md.restart        = chrp_restart;	ppc_md.power_off      = chrp_power_off;	ppc_md.halt           = chrp_halt;	ppc_md.time_init      = chrp_time_init;	ppc_md.set_rtc_time   = chrp_set_rtc_time;	ppc_md.get_rtc_time   = chrp_get_rtc_time;	ppc_md.calibrate_decr = chrp_calibrate_decr;	ppc_md.find_end_of_memory = pmac_find_end_of_memory;	ppc_md.setup_io_mappings = chrp_map_io;#ifdef CONFIG_VT	/* these are adjusted in chrp_init2 if we have an ADB keyboard */	ppc_md.kbd_setkeycode    = pckbd_setkeycode;	ppc_md.kbd_getkeycode    = pckbd_getkeycode;	ppc_md.kbd_translate     = pckbd_translate;	ppc_md.kbd_unexpected_up = pckbd_unexpected_up;	ppc_md.kbd_leds          = pckbd_leds;	ppc_md.kbd_init_hw       = pckbd_init_hw;#ifdef CONFIG_MAGIC_SYSRQ	ppc_md.ppc_kbd_sysrq_xlate	 = pckbd_sysrq_xlate;	SYSRQ_KEY = 0x54;#endif /* CONFIG_MAGIC_SYSRQ */#endif /* CONFIG_VT */	if (rtas_data) {		struct device_node *rtas;		unsigned int *p;		rtas = find_devices("rtas");		if (rtas != NULL) {			if (get_property(rtas, "display-character", NULL)) {				ppc_md.progress = rtas_display_progress;				p = (unsigned int *) get_property				       (rtas, "ibm,display-line-length", NULL);				if (p)					max_width = *p;			} else if (get_property(rtas, "set-indicator", NULL))				ppc_md.progress = rtas_indicator_progress;		}	}#ifdef CONFIG_BOOTX_TEXT	if (ppc_md.progress == NULL && boot_text_mapped)		ppc_md.progress = btext_progress;#endif#ifdef CONFIG_SMP#ifndef CONFIG_POWER4	ppc_md.smp_ops = &chrp_smp_ops;#else	ppc_md.smp_ops = &xics_smp_ops;#endif /* CONFIG_POWER4 */#endif /* CONFIG_SMP */#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE)        ppc_ide_md.ide_check_region = chrp_ide_check_region;        ppc_ide_md.ide_request_region = chrp_ide_request_region;        ppc_ide_md.ide_release_region = chrp_ide_release_region;        ppc_ide_md.ide_init_hwif = chrp_ide_init_hwif_ports;#endif	/*	 * Print the banner, then scroll down so boot progress	 * can be printed.  -- Cort 	 */	if ( ppc_md.progress ) ppc_md.progress("Linux/PPC "UTS_RELEASE"\n", 0x0);}void __chrprtas_display_progress(char *s, unsigned short hex){	int width;	char *os = s;	if ( call_rtas( "display-character", 1, 1, NULL, '\r' ) )		return;	width = max_width;	while ( *os )	{		if ( (*os == '\n') || (*os == '\r') )			width = max_width;		else			width--;		call_rtas( "display-character", 1, 1, NULL, *os++ );		/* if we overwrite the screen length */		if ( width == 0 )			while ( (*os != 0) && (*os != '\n') && (*os != '\r') )				os++;	}	/*while ( width-- > 0 )*/	call_rtas( "display-character", 1, 1, NULL, ' ' );}void __chrprtas_indicator_progress(char *s, unsigned short hex){	call_rtas("set-indicator", 3, 1, NULL, 6, 0, hex);}#ifdef CONFIG_BOOTX_TEXTvoidbtext_progress(char *s, unsigned short hex){	prom_print(s);	prom_print("\n");}#endif /* CONFIG_BOOTX_TEXT */

⌨️ 快捷键说明

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