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

📄 pmac_setup.c

📁 内核linux2.4.20,可跟rtlinux3.2打补丁 组成实时linux系统,编译内核
💻 C
📖 第 1 页 / 共 2 页
字号:
int boot_part;extern kdev_t boot_dev;void __initpmac_init2(void){#ifdef CONFIG_ADB_PMU	via_pmu_start();#endif#ifdef CONFIG_ADB_CUDA	via_cuda_start();#endif#ifdef CONFIG_PMAC_PBOOK	media_bay_init();#endif	pmac_feature_late_init();}#ifdef CONFIG_SCSIvoid __initnote_scsi_host(struct device_node *node, void *host){	int l;	char *p;	l = strlen(node->full_name);	if (bootpath != NULL && bootdevice != NULL	    && strncmp(node->full_name, bootdevice, l) == 0	    && (bootdevice[l] == '/' || bootdevice[l] == 0)) {		boot_host = host;		/*		 * There's a bug in OF 1.0.5.  (Why am I not surprised.)		 * If you pass a path like scsi/sd@1:0 to canon, it returns		 * something like /bandit@F2000000/gc@10/53c94@10000/sd@0,0		 * That is, the scsi target number doesn't get preserved.		 * So we pick the target number out of bootpath and use that.		 */		p = strstr(bootpath, "/sd@");		if (p != NULL) {			p += 4;			boot_target = simple_strtoul(p, NULL, 10);			p = strchr(p, ':');			if (p != NULL)				boot_part = simple_strtoul(p + 1, NULL, 10);		}	}}#endif#if defined(CONFIG_BLK_DEV_IDE) && defined(CONFIG_BLK_DEV_IDE_PMAC)kdev_t __initfind_ide_boot(void){	char *p;	int n;	kdev_t __init pmac_find_ide_boot(char *bootdevice, int n);	if (bootdevice == NULL)		return 0;	p = strrchr(bootdevice, '/');	if (p == NULL)		return 0;	n = p - bootdevice;	return pmac_find_ide_boot(bootdevice, n);}#endif /* CONFIG_BLK_DEV_IDE && CONFIG_BLK_DEV_IDE_PMAC */void __initfind_boot_device(void){#if defined(CONFIG_SCSI) && defined(CONFIG_BLK_DEV_SD)	if (boot_host != NULL) {		boot_dev = sd_find_target(boot_host, boot_target);		if (boot_dev != 0)			return;	}#endif#if defined(CONFIG_BLK_DEV_IDE) && defined(CONFIG_BLK_DEV_IDE_PMAC)	boot_dev = find_ide_boot();#endif}/* can't be __init - can be called whenever a disk is first accessed */void __pmacnote_bootable_part(kdev_t dev, int part, int goodness){	static int found_boot = 0;	char *p;	/* Do nothing if the root has been mounted already. */	if (init_task.fs->rootmnt != NULL)		return;	if ((goodness <= current_root_goodness) &&	    (ROOT_DEV != to_kdev_t(DEFAULT_ROOT_DEVICE)))		return;	p = strstr(saved_command_line, "root=");	if (p != NULL && (p == saved_command_line || p[-1] == ' '))		return;	if (!found_boot) {		find_boot_device();		found_boot = 1;	}	if (boot_dev == 0 || dev == boot_dev) {		ROOT_DEV = MKDEV(MAJOR(dev), MINOR(dev) + part);		boot_dev = NODEV;		current_root_goodness = goodness;	}}void __pmacpmac_restart(char *cmd){#ifdef CONFIG_ADB_CUDA	struct adb_request req;#endif /* CONFIG_ADB_CUDA */#ifdef CONFIG_NVRAM	pmac_nvram_update();#endif		switch (sys_ctrler) {#ifdef CONFIG_ADB_CUDA	case SYS_CTRLER_CUDA:		cuda_request(&req, NULL, 2, CUDA_PACKET,			     CUDA_RESET_SYSTEM);		for (;;)			cuda_poll();		break;#endif /* CONFIG_ADB_CUDA */#ifdef CONFIG_ADB_PMU			case SYS_CTRLER_PMU:		pmu_restart();		break;#endif /* CONFIG_ADB_PMU */			default: ;	}}void __pmacpmac_power_off(void){#ifdef CONFIG_ADB_CUDA	struct adb_request req;#endif /* CONFIG_ADB_CUDA */#ifdef CONFIG_NVRAM	pmac_nvram_update();#endif		switch (sys_ctrler) {#ifdef CONFIG_ADB_CUDA	case SYS_CTRLER_CUDA:		cuda_request(&req, NULL, 2, CUDA_PACKET,			     CUDA_POWERDOWN);		for (;;)			cuda_poll();		break;#endif /* CONFIG_ADB_CUDA */#ifdef CONFIG_ADB_PMU	case SYS_CTRLER_PMU:		pmu_shutdown();		break;#endif /* CONFIG_ADB_PMU */	default: ;	}}void __pmacpmac_halt(void){   pmac_power_off();}#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE)/* * IDE stuff. */static int __pmacpmac_ide_check_region(ide_ioreg_t from, unsigned int extent){#ifdef CONFIG_BLK_DEV_IDE_PMAC	if (pmac_ide_check_base(from) >= 0)		return 0;#endif	return check_region(from, extent);}static void __pmacpmac_ide_request_region(ide_ioreg_t from,			unsigned int extent,			const char *name){#ifdef CONFIG_BLK_DEV_IDE_PMAC	if (pmac_ide_check_base(from) >= 0)		return;#endif	request_region(from, extent, name);}static void __pmacpmac_ide_release_region(ide_ioreg_t from,			unsigned int extent){#ifdef CONFIG_BLK_DEV_IDE_PMAC	if (pmac_ide_check_base(from) >= 0)		return;#endif	release_region(from, extent);}#ifndef CONFIG_BLK_DEV_IDE_PMAC/* * This is only used if we have a PCI IDE controller, not * for the IDE controller in the ohare/paddington/heathrow/keylargo. */static void __pmacpmac_ide_pci_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 /* CONFIG_BLK_DEV_IDE_PMAC */#endif /* defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE) *//* * Read in a property describing some pieces of memory. */static void __initget_mem_prop(char *name, struct mem_pieces *mp){	struct reg_property *rp;	int i, s;	unsigned int *ip;	int nac = prom_n_addr_cells(memory_node);	int nsc = prom_n_size_cells(memory_node);	ip = (unsigned int *) get_property(memory_node, name, &s);	if (ip == NULL) {		printk(KERN_ERR "error: couldn't get %s property on /memory\n",		       name);		abort();	}	s /= (nsc + nac) * 4;	rp = mp->regions;	for (i = 0; i < s; ++i, ip += nac+nsc) {		if (nac >= 2 && ip[nac-2] != 0)			continue;		rp->address = ip[nac-1];		if (nsc >= 2 && ip[nac+nsc-2] != 0)			rp->size = ~0U;		else			rp->size = ip[nac+nsc-1];		++rp;	}	mp->n_regions = rp - mp->regions;	/* Make sure the pieces are sorted. */	mem_pieces_sort(mp);	mem_pieces_coalesce(mp);}/* * On systems with Open Firmware, collect information about * physical RAM and which pieces are already in use. * At this point, we have (at least) the first 8MB mapped with a BAT. * Our text, data, bss use something over 1MB, starting at 0. * Open Firmware may be using 1MB at the 4MB point. */unsigned long __initpmac_find_end_of_memory(void){	unsigned long a, total;	struct mem_pieces phys_mem;	memory_node = find_devices("memory");	if (memory_node == NULL) {		printk(KERN_ERR "can't find memory node\n");		abort();	}	/*	 * Find out where physical memory is, and check that it	 * starts at 0 and is contiguous.  It seems that RAM is	 * always physically contiguous on Power Macintoshes.	 *	 * Supporting discontiguous physical memory isn't hard,	 * it just makes the virtual <-> physical mapping functions	 * more complicated (or else you end up wasting space	 * in mem_map).	 */	get_mem_prop("reg", &phys_mem);	if (phys_mem.n_regions == 0)		panic("No RAM??");	a = phys_mem.regions[0].address;	if (a != 0)		panic("RAM doesn't start at physical address 0");	total = phys_mem.regions[0].size;	if (phys_mem.n_regions > 1) {		printk("RAM starting at 0x%x is not contiguous\n",		       phys_mem.regions[1].address);		printk("Using RAM from 0 to 0x%lx\n", total-1);	}	return total;}void __initselect_adb_keyboard(void){#ifdef CONFIG_VT#ifdef CONFIG_INPUT	ppc_md.kbd_init_hw       = mac_hid_init_hw;	ppc_md.kbd_translate     = mac_hid_kbd_translate;	ppc_md.kbd_unexpected_up = mac_hid_kbd_unexpected_up;	ppc_md.kbd_setkeycode    = 0;	ppc_md.kbd_getkeycode    = 0;	ppc_md.kbd_leds		 = 0;#ifdef CONFIG_MAGIC_SYSRQ#ifdef CONFIG_MAC_ADBKEYCODES	if (!keyboard_sends_linux_keycodes) {		ppc_md.ppc_kbd_sysrq_xlate = mac_hid_kbd_sysrq_xlate;		SYSRQ_KEY = 0x69;	} else#endif /* CONFIG_MAC_ADBKEYCODES */	{		ppc_md.ppc_kbd_sysrq_xlate = pckbd_sysrq_xlate;		SYSRQ_KEY = 0x54;	}#endif /* CONFIG_MAGIC_SYSRQ */#elif defined(CONFIG_ADB_KEYBOARD)	ppc_md.kbd_setkeycode       = mackbd_setkeycode;	ppc_md.kbd_getkeycode       = mackbd_getkeycode;	ppc_md.kbd_translate        = mackbd_translate;	ppc_md.kbd_unexpected_up    = mackbd_unexpected_up;	ppc_md.kbd_leds             = mackbd_leds;	ppc_md.kbd_init_hw          = mackbd_init_hw;#ifdef CONFIG_MAGIC_SYSRQ	ppc_md.ppc_kbd_sysrq_xlate  = mackbd_sysrq_xlate;	SYSRQ_KEY = 0x69;#endif /* CONFIG_MAGIC_SYSRQ */#endif /* CONFIG_INPUT_ADBHID/CONFIG_ADB_KEYBOARD */#endif /* CONFIG_VT */}void __initpmac_init(unsigned long r3, unsigned long r4, unsigned long r5,	  unsigned long r6, unsigned long r7){	/* isa_io_base gets set in pmac_find_bridges */	isa_mem_base = PMAC_ISA_MEM_BASE;	pci_dram_offset = PMAC_PCI_DRAM_OFFSET;	ISA_DMA_THRESHOLD = ~0L;	DMA_MODE_READ = 1;	DMA_MODE_WRITE = 2;	ppc_md.setup_arch     = pmac_setup_arch;	ppc_md.show_cpuinfo   = pmac_show_cpuinfo;	ppc_md.show_percpuinfo = of_show_percpuinfo;	ppc_md.irq_cannonicalize = NULL;	ppc_md.init_IRQ       = pmac_pic_init;	ppc_md.get_irq        = pmac_get_irq; /* Changed later on ... */	ppc_md.init           = pmac_init2;		ppc_md.pcibios_fixup  = pmac_pcibios_fixup;	ppc_md.pcibios_enable_device_hook = pmac_pci_enable_device_hook;	ppc_md.pcibios_after_init = pmac_pcibios_after_init;	ppc_md.restart        = pmac_restart;	ppc_md.power_off      = pmac_power_off;	ppc_md.halt           = pmac_halt;	ppc_md.time_init      = pmac_time_init;	ppc_md.set_rtc_time   = pmac_set_rtc_time;	ppc_md.get_rtc_time   = pmac_get_rtc_time;	ppc_md.calibrate_decr = pmac_calibrate_decr;	ppc_md.find_end_of_memory = pmac_find_end_of_memory;	ppc_md.feature_call   = pmac_do_feature_call;	select_adb_keyboard();#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE)        ppc_ide_md.ide_check_region	= pmac_ide_check_region;        ppc_ide_md.ide_request_region	= pmac_ide_request_region;        ppc_ide_md.ide_release_region	= pmac_ide_release_region;#ifdef CONFIG_BLK_DEV_IDE_PMAC        ppc_ide_md.ide_init_hwif	= pmac_ide_init_hwif_ports;        ppc_ide_md.default_io_base	= pmac_ide_get_base;#else /* CONFIG_BLK_DEV_IDE_PMAC */        ppc_ide_md.ide_init_hwif	= pmac_ide_pci_init_hwif_ports;#endif /* CONFIG_BLK_DEV_IDE_PMAC */#endif /* defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE) */#ifdef CONFIG_BOOTX_TEXT	ppc_md.progress = pmac_progress;#endif /* CONFIG_BOOTX_TEXT */	if (ppc_md.progress) ppc_md.progress("pmac_init(): exit", 0);	}#ifdef CONFIG_BOOTX_TEXTextern void drawchar(char c);extern void drawstring(const char *c);extern boot_infos_t *disp_bi;void __initpmac_progress(char *s, unsigned short hex){	if (disp_bi == 0)		return;	btext_drawstring(s);	btext_drawchar('\n');}#endif /* CONFIG_BOOTX_TEXT */

⌨️ 快捷键说明

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