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

📄 pmac_feature.c

📁 这个linux源代码是很全面的~基本完整了~使用c编译的~由于时间问题我没有亲自测试~但就算用来做参考资料也是非常好的
💻 C
📖 第 1 页 / 共 5 页
字号:
	save_fcr[2] = MACIO_IN32(KEYLARGO_FCR2);	save_fcr[3] = MACIO_IN32(KEYLARGO_FCR3);	save_fcr[4] = MACIO_IN32(KEYLARGO_FCR4);	/* Save state & config of DBDMA channels */	dbdma_save(macio, save_dbdma);		/*	 * Turn off as much as we can	 */	if (macio->type == macio_pangea)		pangea_shutdown(macio, 0);	else if (macio->type == macio_keylargo)		keylargo_shutdown(macio, 0);		/* 	 * Put the host bridge to sleep	 */	save_unin_clock_ctl = UN_IN(UNI_N_CLOCK_CNTL);	UN_OUT(UNI_N_CLOCK_CNTL, save_unin_clock_ctl &		~(UNI_N_CLOCK_CNTL_GMAC|UNI_N_CLOCK_CNTL_FW/*|UNI_N_CLOCK_CNTL_PCI*/));	udelay(100);	UN_OUT(UNI_N_HWINIT_STATE, UNI_N_HWINIT_STATE_SLEEPING);	UN_OUT(UNI_N_POWER_MGT, UNI_N_POWER_MGT_SLEEP);	/*	 * FIXME: A bit of black magic with OpenPIC (don't ask me why)	 */	if (pmac_mb.model_id == PMAC_TYPE_SAWTOOTH) {		MACIO_BIS(0x506e0, 0x00400000);		MACIO_BIS(0x506e0, 0x80000000);	}	return 0;}static int __pmaccore99_wake_up(void){	struct macio_chip* macio;	int i;	macio = &macio_chips[0];	if (macio->type != macio_keylargo && macio->type != macio_pangea)		return -ENODEV;	/*	 * Wakeup the host bridge	 */	UN_OUT(UNI_N_POWER_MGT, UNI_N_POWER_MGT_NORMAL);	udelay(10);	UN_OUT(UNI_N_HWINIT_STATE, UNI_N_HWINIT_STATE_RUNNING);	udelay(10);		/*	 * Restore KeyLargo	 */	 	MACIO_OUT32(KEYLARGO_MBCR, save_mbcr);	(void)MACIO_IN32(KEYLARGO_MBCR); udelay(10);	MACIO_OUT32(KEYLARGO_FCR0, save_fcr[0]);	(void)MACIO_IN32(KEYLARGO_FCR0); udelay(10);	MACIO_OUT32(KEYLARGO_FCR1, save_fcr[1]);	(void)MACIO_IN32(KEYLARGO_FCR1); udelay(10);	MACIO_OUT32(KEYLARGO_FCR2, save_fcr[2]);	(void)MACIO_IN32(KEYLARGO_FCR2); udelay(10);	MACIO_OUT32(KEYLARGO_FCR3, save_fcr[3]);	(void)MACIO_IN32(KEYLARGO_FCR3); udelay(10);	MACIO_OUT32(KEYLARGO_FCR4, save_fcr[4]);	(void)MACIO_IN32(KEYLARGO_FCR4); udelay(10);	dbdma_restore(macio, save_dbdma);	MACIO_OUT32(KEYLARGO_GPIO_LEVELS0, save_gpio_levels[0]);	MACIO_OUT32(KEYLARGO_GPIO_LEVELS1, save_gpio_levels[1]);	for (i=0; i<KEYLARGO_GPIO_EXTINT_CNT; i++)		MACIO_OUT8(KEYLARGO_GPIO_EXTINT_0+i, save_gpio_extint[i]);	for (i=0; i<KEYLARGO_GPIO_CNT; i++)		MACIO_OUT8(KEYLARGO_GPIO_0+i, save_gpio_normal[i]);	/* FIXME more black magic with OpenPIC ... */	if (pmac_mb.model_id == PMAC_TYPE_SAWTOOTH) {		MACIO_BIC(0x506e0, 0x00400000);		MACIO_BIC(0x506e0, 0x80000000);	}	UN_OUT(UNI_N_CLOCK_CNTL, save_unin_clock_ctl);	udelay(100);	return 0;}static int __pmaccore99_sleep_state(struct device_node* node, int param, int value){	/* Param == 1 means to enter the "fake sleep" mode that is	 * used for CPU speed switch	 */	if (param == 1) {		if (value == 1) {			UN_OUT(UNI_N_HWINIT_STATE, UNI_N_HWINIT_STATE_SLEEPING);			UN_OUT(UNI_N_POWER_MGT, UNI_N_POWER_MGT_IDLE2);		} else {			UN_OUT(UNI_N_POWER_MGT, UNI_N_POWER_MGT_NORMAL);			udelay(10);			UN_OUT(UNI_N_HWINIT_STATE, UNI_N_HWINIT_STATE_RUNNING);			udelay(10);		}		return 0;	}	if ((pmac_mb.board_flags & PMAC_MB_CAN_SLEEP) == 0)		return -EPERM;	if (value == 1)		return core99_sleep();	else if (value == 0)		return core99_wake_up();	return 0;}static int __pmacpangea_modem_enable(struct device_node* node, int param, int value){	struct macio_chip*	macio;	u8			gpio;	unsigned long		flags;		/* Hack for internal USB modem */	if (node == NULL) {			if (macio_chips[0].type != macio_pangea)			return -ENODEV;		node = macio_chips[0].of_node;	}	macio = macio_find(node, 0);	if (!macio)		return -ENODEV;	gpio = MACIO_IN8(KL_GPIO_MODEM_RESET);	gpio |= KEYLARGO_GPIO_OUTPUT_ENABLE;	gpio &= ~KEYLARGO_GPIO_OUTOUT_DATA;		if (!value) {		LOCK(flags);		MACIO_OUT8(KL_GPIO_MODEM_RESET, gpio);		UNLOCK(flags);		(void)MACIO_IN8(KL_GPIO_MODEM_RESET);		mdelay(250);	}    	LOCK(flags);	if (value) {		MACIO_OUT8(KL_GPIO_MODEM_POWER,			KEYLARGO_GPIO_OUTPUT_ENABLE);    		UNLOCK(flags);	    	(void)MACIO_IN32(KEYLARGO_FCR2);		mdelay(250);	} else {		MACIO_OUT8(KL_GPIO_MODEM_POWER,			KEYLARGO_GPIO_OUTPUT_ENABLE | KEYLARGO_GPIO_OUTOUT_DATA);    		UNLOCK(flags);	}	if (value) {		LOCK(flags);		MACIO_OUT8(KL_GPIO_MODEM_RESET, gpio | KEYLARGO_GPIO_OUTOUT_DATA);		(void)MACIO_IN8(KL_GPIO_MODEM_RESET);	    	UNLOCK(flags); mdelay(250); LOCK(flags);		MACIO_OUT8(KL_GPIO_MODEM_RESET, gpio);		(void)MACIO_IN8(KL_GPIO_MODEM_RESET);	    	UNLOCK(flags); mdelay(250); LOCK(flags);		MACIO_OUT8(KL_GPIO_MODEM_RESET, gpio | KEYLARGO_GPIO_OUTOUT_DATA);		(void)MACIO_IN8(KL_GPIO_MODEM_RESET);	    	UNLOCK(flags); mdelay(250);	}	return 0;}static int __pmacgeneric_get_mb_info(struct device_node* node, int param, int value){	switch(param) {		case PMAC_MB_INFO_MODEL:			return pmac_mb.model_id;		case PMAC_MB_INFO_FLAGS:			return pmac_mb.board_flags;		case PMAC_MB_INFO_NAME:				/* hack hack hack... but should work */			*((const char **)value) = pmac_mb.model_name;			break;	}	return 0;}/*  * Table definitions */ /* Used on any machine */static struct feature_table_entry any_features[]  __pmacdata = {	{ PMAC_FTR_GET_MB_INFO,		generic_get_mb_info },	{ 0, NULL }};/* OHare based motherboards. Currently, we only use these on the * 2400,3400 and 3500 series powerbooks. Some older desktops seem * to have issues with turning on/off those asic cells */static struct feature_table_entry ohare_features[]  __pmacdata = {	{ PMAC_FTR_SCC_ENABLE,		ohare_htw_scc_enable },	{ PMAC_FTR_SWIM3_ENABLE,	ohare_floppy_enable },	{ PMAC_FTR_MESH_ENABLE,		ohare_mesh_enable },	{ PMAC_FTR_IDE_ENABLE,		ohare_ide_enable},	{ PMAC_FTR_IDE_RESET,		ohare_ide_reset},	{ PMAC_FTR_SLEEP_STATE,		ohare_sleep_state },	{ 0, NULL }};/* Heathrow desktop machines (Beige G3). * Separated as some features couldn't be properly tested * and the serial port control bits appear to confuse it. */static struct feature_table_entry heathrow_desktop_features[]  __pmacdata = {	{ PMAC_FTR_SWIM3_ENABLE,	heathrow_floppy_enable },	{ PMAC_FTR_MESH_ENABLE,		heathrow_mesh_enable },	{ PMAC_FTR_IDE_ENABLE,		heathrow_ide_enable },	{ PMAC_FTR_IDE_RESET,		heathrow_ide_reset },	{ PMAC_FTR_BMAC_ENABLE,		heathrow_bmac_enable },	{ 0, NULL }};/* Heathrow based laptop, that is the Wallstreet and mainstreet * powerbooks. */static struct feature_table_entry heathrow_laptop_features[]  __pmacdata = {	{ PMAC_FTR_SCC_ENABLE,		ohare_htw_scc_enable },	{ PMAC_FTR_MODEM_ENABLE,	heathrow_modem_enable },	{ PMAC_FTR_SWIM3_ENABLE,	heathrow_floppy_enable },	{ PMAC_FTR_MESH_ENABLE,		heathrow_mesh_enable },	{ PMAC_FTR_IDE_ENABLE,		heathrow_ide_enable },	{ PMAC_FTR_IDE_RESET,		heathrow_ide_reset },	{ PMAC_FTR_BMAC_ENABLE,		heathrow_bmac_enable },	{ PMAC_FTR_SOUND_CHIP_ENABLE,	heathrow_sound_enable },	{ PMAC_FTR_SLEEP_STATE,		heathrow_sleep_state },	{ 0, NULL }};/* Paddington based machines * The lombard (101) powerbook, first iMac models, B&W G3 and Yikes G4. */static struct feature_table_entry paddington_features[]  __pmacdata = {	{ PMAC_FTR_SCC_ENABLE,		ohare_htw_scc_enable },	{ PMAC_FTR_MODEM_ENABLE,	heathrow_modem_enable },	{ PMAC_FTR_SWIM3_ENABLE,	heathrow_floppy_enable },	{ PMAC_FTR_MESH_ENABLE,		heathrow_mesh_enable },	{ PMAC_FTR_IDE_ENABLE,		heathrow_ide_enable },	{ PMAC_FTR_IDE_RESET,		heathrow_ide_reset },	{ PMAC_FTR_BMAC_ENABLE,		heathrow_bmac_enable },	{ PMAC_FTR_SOUND_CHIP_ENABLE,	heathrow_sound_enable },	{ PMAC_FTR_SLEEP_STATE,		heathrow_sleep_state },	{ 0, NULL }};/* Core99 & MacRISC 2 machines (all machines released since the * iBook (included), that is all AGP machines, except pangea * chipset. The pangea chipset is the "combo" UniNorth/KeyLargo * used on iBook2 & iMac "flow power". */static struct feature_table_entry core99_features[]  __pmacdata = {	{ PMAC_FTR_SCC_ENABLE,		core99_scc_enable },	{ PMAC_FTR_MODEM_ENABLE,	core99_modem_enable },	{ PMAC_FTR_IDE_ENABLE,		core99_ide_enable },	{ PMAC_FTR_IDE_RESET,		core99_ide_reset },	{ PMAC_FTR_GMAC_ENABLE,		core99_gmac_enable },	{ PMAC_FTR_GMAC_PHY_RESET,	core99_gmac_phy_reset },	{ PMAC_FTR_SOUND_CHIP_ENABLE,	core99_sound_chip_enable },	{ PMAC_FTR_AIRPORT_ENABLE,	core99_airport_enable },	{ PMAC_FTR_USB_ENABLE,		core99_usb_enable },	{ PMAC_FTR_1394_ENABLE,		core99_firewire_enable },	{ PMAC_FTR_1394_CABLE_POWER,	core99_firewire_cable_power },	{ PMAC_FTR_SLEEP_STATE,		core99_sleep_state },#ifdef CONFIG_SMP	{ PMAC_FTR_RESET_CPU,		core99_reset_cpu },#endif /* CONFIG_SMP */	{ PMAC_FTR_READ_GPIO,		core99_read_gpio },	{ PMAC_FTR_WRITE_GPIO,		core99_write_gpio },	{ 0, NULL }};/* RackMac */static struct feature_table_entry rackmac_features[]  __pmacdata = {	{ PMAC_FTR_SCC_ENABLE,		core99_scc_enable },	{ PMAC_FTR_IDE_ENABLE,		core99_ide_enable },	{ PMAC_FTR_IDE_RESET,		core99_ide_reset },	{ PMAC_FTR_GMAC_ENABLE,		core99_gmac_enable },	{ PMAC_FTR_GMAC_PHY_RESET,	core99_gmac_phy_reset },	{ PMAC_FTR_USB_ENABLE,		core99_usb_enable },	{ PMAC_FTR_1394_ENABLE,		core99_firewire_enable },	{ PMAC_FTR_1394_CABLE_POWER,	core99_firewire_cable_power },	{ PMAC_FTR_SLEEP_STATE,		core99_sleep_state },#ifdef CONFIG_SMP	{ PMAC_FTR_RESET_CPU,		rackmac_reset_cpu },#endif /* CONFIG_SMP */	{ PMAC_FTR_READ_GPIO,		core99_read_gpio },	{ PMAC_FTR_WRITE_GPIO,		core99_write_gpio },	{ 0, NULL }};/* Pangea features */static struct feature_table_entry pangea_features[]  __pmacdata = {	{ PMAC_FTR_SCC_ENABLE,		core99_scc_enable },	{ PMAC_FTR_MODEM_ENABLE,	pangea_modem_enable },	{ PMAC_FTR_IDE_ENABLE,		core99_ide_enable },	{ PMAC_FTR_IDE_RESET,		core99_ide_reset },	{ PMAC_FTR_GMAC_ENABLE,		core99_gmac_enable },	{ PMAC_FTR_GMAC_PHY_RESET,	core99_gmac_phy_reset },	{ PMAC_FTR_SOUND_CHIP_ENABLE,	core99_sound_chip_enable },	{ PMAC_FTR_AIRPORT_ENABLE,	core99_airport_enable },	{ PMAC_FTR_USB_ENABLE,		core99_usb_enable },	{ PMAC_FTR_1394_ENABLE,		core99_firewire_enable },	{ PMAC_FTR_1394_CABLE_POWER,	core99_firewire_cable_power },	{ PMAC_FTR_SLEEP_STATE,		core99_sleep_state },	{ PMAC_FTR_READ_GPIO,		core99_read_gpio },	{ PMAC_FTR_WRITE_GPIO,		core99_write_gpio },	{ 0, NULL }};	static struct pmac_mb_def pmac_mb_defs[] __pmacdata = {	/* Warning: ordering is important as some models may claim	 * beeing compatible with several types	 */	{	"AAPL,8500",			"PowerMac 8500/8600",		PMAC_TYPE_PSURGE,		NULL,		0	},	{	"AAPL,9500",			"PowerMac 9500/9600",		PMAC_TYPE_PSURGE,		NULL,		0	},	{	"AAPL,7500",			"PowerMac 7500",		PMAC_TYPE_PSURGE,		NULL,		0	},	{	"AAPL,ShinerESB",		"Apple Network Server",		PMAC_TYPE_ANS,			NULL,		0	},	{	"AAPL,e407",			"Alchemy",		PMAC_TYPE_ALCHEMY,		NULL,		0	},	{	"AAPL,e411",			"Gazelle",		PMAC_TYPE_GAZELLE,		NULL,		0	},	{	"AAPL,3400/2400",		"PowerBook 3400",		PMAC_TYPE_HOOPER,		ohare_features,		PMAC_MB_CAN_SLEEP	},	{	"AAPL,3500",			"PowerBook 3500",		PMAC_TYPE_KANGA,		ohare_features,		PMAC_MB_CAN_SLEEP	},	{	"AAPL,Gossamer",		"PowerMac G3 (Gossamer)",		PMAC_TYPE_GOSSAMER,		heathrow_desktop_features,		0	},	{	"AAPL,PowerMac G3",		"PowerMac G3 (Silk)",		PMAC_TYPE_SILK,			heathrow_desktop_features,		0	},	{	"AAPL,PowerBook1998",		"PowerBook Wallstreet",		PMAC_TYPE_WALLSTREET,		heathrow_laptop_features,		PMAC_MB_CAN_SLEEP	},	{	"PowerBook1,1",			"PowerBook 101 (Lombard)",		PMAC_TYPE_101_PBOOK,		paddington_features,		PMAC_MB_CAN_SLEEP	},	{	"iMac,1",			"iMac (first generation)",		PMAC_TYPE_ORIG_IMAC,		paddington_features,		0	},	{	"PowerMac4,1",			"iMac \"Flower Power\"",		PMAC_TYPE_PANGEA_IMAC,		pangea_features,		PMAC_MB_CAN_SLEEP	},	{	"PowerBook4,3",			"iBook 2 rev. 2",		PMAC_TYPE_IBOOK2,		pangea_features,		PMAC_MB_CAN_SLEEP | PMAC_MB_HAS_FW_POWER	},	{	"PowerBook4,2",			"iBook 2",		PMAC_TYPE_IBOOK2,		pangea_features,		PMAC_MB_CAN_SLEEP | PMAC_MB_HAS_FW_POWER	},	{	"PowerBook4,1",			"iBook 2",		PMAC_TYPE_IBOOK2,		pangea_features,		PMAC_MB_CAN_SLEEP | PMAC_MB_HAS_FW_POWER	},	{	"PowerMac4,4",			"eMac",		PMAC_TYPE_EMAC,			core99_features,		PMAC_MB_CAN_SLEEP	},	{	"PowerMac4,2",			"Flat panel iMac",		PMAC_TYPE_FLAT_PANEL_IMAC,	pangea_features,		PMAC_MB_CAN_SLEEP	},	{	"PowerMac1,1",			"Blue&White G3",		PMAC_TYPE_YOSEMITE,		paddington_features,		0	},	{	"PowerMac1,2",			"PowerMac G4 PCI Graphics",		PMAC_TYPE_YIKES,		paddington_features,		0	},	{	"PowerBook2,1",			"iBook (first generation)",		PMAC_TYPE_ORIG_IBOOK,		core99_features,		PMAC_MB_CAN_SLEEP | PMAC_MB_OLD_CORE99	},	{	"PowerMac3,1",			"PowerMac G4 AGP Graphics",		PMAC_TYPE_SAWTOOTH,		core99_features,		PMAC_MB_OLD_CORE99	},	{	"PowerMac3,2",			"PowerMac G4 AGP Graphics",		PMAC_TYPE_SAWTOOTH,		core99_features,		PMAC_MB_OLD_CORE99	},	{	"PowerMac3,3",			"PowerMac G4 AGP Graphics",		PMAC_TYPE_SAWTOOTH,		core99_features,		PMAC_MB_OLD_CORE99	},	{	"PowerMac2,1",			"iMac FireWire",		PMAC_TYPE_FW_IMAC,		core99_features,		PMAC_MB_CAN_SLEEP | PMAC_MB_OLD_CORE99	},	{	"PowerMac2,2",			"iMac FireWire",		PMAC_TYPE_FW_IMAC,		core99_features,		PMAC_MB_CAN_SLEEP | PMAC_MB_OLD_CORE99	},	{	"PowerBook2,2",			"iBook FireWire",		PMAC_TYPE_FW_IBOOK,		core99_features,		PMAC_MB_CAN_SLEEP | PMAC_MB_HAS_FW_POWER | PMAC_MB_OLD_CORE99	},	{	"PowerMac5,1",			"PowerMac G4 Cube",		PMAC_TYPE_CUBE,			core99_features,		PMAC_MB_OLD_CORE99	},	{	"PowerMac3,4",			"PowerMac G4 Silver",		PMAC_TYPE_QUICKSILVER,		core99_features,		0	},	{	"PowerMac3,5",			"PowerMac G4 Silver",		PMAC_TYPE_QUICKSILVER,		core99_features,

⌨️ 快捷键说明

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