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

📄 pmac_setup.c

📁 讲述linux的初始化过程
💻 C
📖 第 1 页 / 共 2 页
字号:
		if (((sysctrl_regs[2] >> 24) & 0xf) >= 3) {			if (sysctrl_regs[4] & 0x10)				sysctrl_regs[4] |= 0x04000020;			else				sysctrl_regs[4] |= 0x04000000;			if(has_l2cache)				printk(KERN_INFO "Level 2 cache enabled\n");		}	}}extern char *bootpath;extern char *bootdevice;void *boot_host;int boot_target;int boot_part;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	}#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 __init find_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 __init find_boot_device(void){#ifdef CONFIG_SCSI	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 */__pmacvoid note_bootable_part(kdev_t dev, int part, int goodness){	static int found_boot = 0;	char *p;	/* Do nothing if the root has been set already. */	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;	}}voidpmac_restart(char *cmd){#ifdef CONFIG_ADB_CUDA	struct adb_request req;#endif /* CONFIG_ADB_CUDA */	pmac_nvram_update();		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:	}}voidpmac_power_off(void){#ifdef CONFIG_ADB_CUDA	struct adb_request req;#endif /* CONFIG_ADB_CUDA */	pmac_nvram_update();		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:	}}voidpmac_halt(void){   pmac_power_off();}#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE)/* * IDE stuff. */voidpmac_ide_insw(ide_ioreg_t port, void *buf, int ns){	_insw_ns((unsigned short *)(port+_IO_BASE), buf, ns);}voidpmac_ide_outsw(ide_ioreg_t port, void *buf, int ns){	_outsw_ns((unsigned short *)(port+_IO_BASE), buf, ns);}intpmac_ide_default_irq(ide_ioreg_t base){        return 0;}#if defined(CONFIG_BLK_DEV_IDE) && defined(CONFIG_BLK_DEV_IDE_PMAC)extern ide_ioreg_t pmac_ide_get_base(int index);#endifide_ioreg_tpmac_ide_default_io_base(int index){#if defined(CONFIG_BLK_DEV_IDE) && defined(CONFIG_BLK_DEV_IDE_PMAC)        return pmac_ide_get_base(index);#else	return 0;#endif}intpmac_ide_check_region(ide_ioreg_t from, unsigned int extent){        return 0;}voidpmac_ide_request_region(ide_ioreg_t from,			unsigned int extent,			const char *name){}voidpmac_ide_release_region(ide_ioreg_t from,			unsigned int extent){}/* Convert the shorts/longs in hd_driveid from little to big endian; * chars are endian independant, of course, but strings need to be flipped. * (Despite what it says in drivers/block/ide.h, they come up as little * endian...) * * Changes to linux/hdreg.h may require changes here. */voidpmac_ide_fix_driveid(struct hd_driveid *id){        ppc_generic_ide_fix_driveid(id);}#if defined(CONFIG_BLK_DEV_IDE) && defined(CONFIG_BLK_DEV_IDE_PMAC)/* This is declared in drivers/block/ide-pmac.c */void pmac_ide_init_hwif_ports (hw_regs_t *hw, ide_ioreg_t data_port, ide_ioreg_t ctrl_port, int *irq);#else/* * This registers the standard ports for this architecture with the IDE * driver. */void pmac_ide_init_hwif_ports(hw_regs_t *hw, ide_ioreg_t data_port, ide_ioreg_t ctrl_port, int *irq){}#endif#endifvoid __initpmac_init(unsigned long r3, unsigned long r4, unsigned long r5,	  unsigned long r6, unsigned long r7){	pmac_setup_pci_ptrs();	/* 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.setup_residual = NULL;	ppc_md.get_cpuinfo    = pmac_get_cpuinfo;	ppc_md.irq_cannonicalize = NULL;	ppc_md.init_IRQ       = pmac_pic_init;	ppc_md.get_irq        = pmac_get_irq;	ppc_md.init           = pmac_init2;	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.pci_dev_io_base          = pmac_pci_dev_io_base;	ppc_md.pci_dev_mem_base         = pmac_pci_dev_mem_base;	ppc_md.pci_dev_root_bridge      = pmac_pci_dev_root_bridge;#ifdef CONFIG_VT#ifdef CONFIG_INPUT_ADBHID	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;#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 */#if defined(CONFIG_BLK_DEV_IDE) && defined(CONFIG_BLK_DEV_IDE_PMAC)        ppc_ide_md.insw = pmac_ide_insw;        ppc_ide_md.outsw = pmac_ide_outsw;        ppc_ide_md.default_irq = pmac_ide_default_irq;        ppc_ide_md.default_io_base = pmac_ide_default_io_base;        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;        ppc_ide_md.fix_driveid = pmac_ide_fix_driveid;        ppc_ide_md.ide_init_hwif = pmac_ide_init_hwif_ports;        ppc_ide_md.io_base = _IO_BASE;	/* actually too early for this :-( */#endif#ifdef CONFIG_BOOTX_TEXT	ppc_md.progress = pmac_progress;#endif	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;voidpmac_progress(char *s, unsigned short hex){	if (disp_bi == 0)		return;	prom_drawstring(s);	prom_drawchar('\n');}#endif CONFIG_BOOTX_TEXT

⌨️ 快捷键说明

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