setup-visws.c

来自「是关于linux2.5.1的完全源码」· C语言 代码 · 共 127 行

C
127
字号
/* *  Unmaintained SGI Visual Workstation support. *  Split out from setup.c by davej@suse.de */char visws_board_type = -1;char visws_board_rev = -1;#define	PIIX_PM_START		0x0F80#define	SIO_GPIO_START		0x0FC0#define	SIO_PM_START		0x0FC8#define	PMBASE			PIIX_PM_START#define	GPIREG0			(PMBASE+0x30)#define	GPIREG(x)		(GPIREG0+((x)/8))#define	PIIX_GPI_BD_ID1		18#define	PIIX_GPI_BD_REG		GPIREG(PIIX_GPI_BD_ID1)#define	PIIX_GPI_BD_SHIFT	(PIIX_GPI_BD_ID1 % 8)#define	SIO_INDEX	0x2e#define	SIO_DATA	0x2f#define	SIO_DEV_SEL	0x7#define	SIO_DEV_ENB	0x30#define	SIO_DEV_MSB	0x60#define	SIO_DEV_LSB	0x61#define	SIO_GP_DEV	0x7#define	SIO_GP_BASE	SIO_GPIO_START#define	SIO_GP_MSB	(SIO_GP_BASE>>8)#define	SIO_GP_LSB	(SIO_GP_BASE&0xff)#define	SIO_GP_DATA1	(SIO_GP_BASE+0)#define	SIO_PM_DEV	0x8#define	SIO_PM_BASE	SIO_PM_START#define	SIO_PM_MSB	(SIO_PM_BASE>>8)#define	SIO_PM_LSB	(SIO_PM_BASE&0xff)#define	SIO_PM_INDEX	(SIO_PM_BASE+0)#define	SIO_PM_DATA	(SIO_PM_BASE+1)#define	SIO_PM_FER2	0x1#define	SIO_PM_GP_EN	0x80void __init visws_get_board_type_and_rev(void){	int raw;	visws_board_type = (char)(inb_p(PIIX_GPI_BD_REG) & PIIX_GPI_BD_REG)							 >> PIIX_GPI_BD_SHIFT;/* * Get Board rev. * First, we have to initialize the 307 part to allow us access * to the GPIO registers.  Let's map them at 0x0fc0 which is right * after the PIIX4 PM section. */	outb_p(SIO_DEV_SEL, SIO_INDEX);	outb_p(SIO_GP_DEV, SIO_DATA);	/* Talk to GPIO regs. */	outb_p(SIO_DEV_MSB, SIO_INDEX);	outb_p(SIO_GP_MSB, SIO_DATA);	/* MSB of GPIO base address */	outb_p(SIO_DEV_LSB, SIO_INDEX);	outb_p(SIO_GP_LSB, SIO_DATA);	/* LSB of GPIO base address */	outb_p(SIO_DEV_ENB, SIO_INDEX);	outb_p(1, SIO_DATA);		/* Enable GPIO registers. *//* * Now, we have to map the power management section to write * a bit which enables access to the GPIO registers. * What lunatic came up with this shit? */	outb_p(SIO_DEV_SEL, SIO_INDEX);	outb_p(SIO_PM_DEV, SIO_DATA);	/* Talk to GPIO regs. */	outb_p(SIO_DEV_MSB, SIO_INDEX);	outb_p(SIO_PM_MSB, SIO_DATA);	/* MSB of PM base address */	outb_p(SIO_DEV_LSB, SIO_INDEX);	outb_p(SIO_PM_LSB, SIO_DATA);	/* LSB of PM base address */	outb_p(SIO_DEV_ENB, SIO_INDEX);	outb_p(1, SIO_DATA);		/* Enable PM registers. *//* * Now, write the PM register which enables the GPIO registers. */	outb_p(SIO_PM_FER2, SIO_PM_INDEX);	outb_p(SIO_PM_GP_EN, SIO_PM_DATA);/* * Now, initialize the GPIO registers. * We want them all to be inputs which is the * power on default, so let's leave them alone. * So, let's just read the board rev! */	raw = inb_p(SIO_GP_DATA1);	raw &= 0x7f;	/* 7 bits of valid board revision ID. */	if (visws_board_type == VISWS_320) {		if (raw < 0x6) {			visws_board_rev = 4;		} else if (raw < 0xc) {			visws_board_rev = 5;		} else {			visws_board_rev = 6;		}	} else if (visws_board_type == VISWS_540) {			visws_board_rev = 2;		} else {			visws_board_rev = raw;		}		printk(KERN_INFO "Silicon Graphics %s (rev %d)\n",			visws_board_type == VISWS_320 ? "320" :			(visws_board_type == VISWS_540 ? "540" :					"unknown"), visws_board_rev);	}}

⌨️ 快捷键说明

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