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

📄 hw.c

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 C
字号:
/* * arch/arm/kernel/hw-sa1100.c * * SA1100-dependent machine specifics * * Copyright (C) 2000 Nicolas Pitre <nico@cam.org> * * This will certainly contain more stuff with time... like power management, * special hardware autodetection, etc. * */#include <linux/config.h>#include <linux/module.h>#include <linux/init.h>#include <linux/kernel.h>#include <linux/sched.h>#include <asm/delay.h>#include <asm/hardware.h>#include <asm/mach-types.h>/* * SA1100 GPIO edge detection for IRQs: * IRQs are generated on Falling-Edge, Rising-Edge, or both. * This must be called *before* the appropriate IRQ is registered. * Use this instead of directly setting GRER/GFER. */int GPIO_IRQ_rising_edge;int GPIO_IRQ_falling_edge;void set_GPIO_IRQ_edge( int gpio_mask, int edge ){	if( edge & GPIO_FALLING_EDGE )		GPIO_IRQ_falling_edge |= gpio_mask;	else		GPIO_IRQ_falling_edge &= ~gpio_mask;	if( edge & GPIO_RISING_EDGE )		GPIO_IRQ_rising_edge |= gpio_mask;	else		GPIO_IRQ_rising_edge &= ~gpio_mask;}EXPORT_SYMBOL(set_GPIO_IRQ_edge);#ifdef CONFIG_SA1100_ASSABETunsigned long BCR_value = BCR_DB1110;unsigned long SCR_value = SCR_INIT;EXPORT_SYMBOL(BCR_value);EXPORT_SYMBOL(SCR_value);/* * Read System Configuration "Register" * (taken from "Intel StrongARM SA-1110 Microprocessor Development Board * User's Guide", section 4.4.1) * * This same scan is performed in arch/arm/boot/compressed/head-sa1100.S * to set up the serial port for decompression status messages. We  * repeat it here because the kernel may not be loaded as a zImage, and * also because it's a hassle to communicate the SCR value to the kernel * from the decompressor. */void __init get_assabet_scr(void){	unsigned long flags, scr, i;	local_irq_save(flags);	GPDR |= 0x3fc;			/* Configure GPIO 9:2 as outputs */	GPSR = 0x3fc;			/* Write 0xFF to GPIO 9:2 */	GPDR &= ~(0x3fc);		/* Configure GPIO 9:2 as inputs */	for(i = 100; i--; scr = GPLR);	/* Read GPIO 9:2 */	GPDR |= 0x3fc;			/*  restore correct pin direction */	local_irq_restore(flags);	scr &= 0x3fc;			/* save as system configuration byte. */	SCR_value = scr;}#endif  /* CONFIG_SA1100_ASSABET */#if defined(CONFIG_SA1100_BITSY)/* * Bitsy has extended, write-only memory-mapped GPIO's */static int bitsy_egpio = EGPIO_BITSY_RS232_ON;void clr_bitsy_egpio(unsigned long x) {  bitsy_egpio &= ~x;  *(volatile int *)0xdc000000 = bitsy_egpio;}void set_bitsy_egpio(unsigned long x) {  bitsy_egpio |= x;  *(volatile int *)0xdc000000 = bitsy_egpio;}EXPORT_SYMBOL(clr_bitsy_egpio);EXPORT_SYMBOL(set_bitsy_egpio);#endif#ifdef CONFIG_SA1111static void __init sa1111_init(void){  unsigned long id=SKID;  if((id & SKID_ID_MASK) == SKID_SA1111_ID)    printk(KERN_INFO "SA-1111 Microprocessor Companion Chip: "	   "silicon revision %x, metal revision %x\n",	   (id & SKID_SIREV_MASK)>>4, (id & SKID_MTREV_MASK));  else {    printk(KERN_ERR "Could not detect SA-1111!\n");    return;  }  /* First, set up the 3.6864MHz clock on GPIO 27 for the SA-1111:   * (SA-1110 Developer's Manual, section 9.1.2.1)   */  GAFR |= GPIO_GPIO27;  GPDR |= GPIO_GPIO27;  TUCR = TUCR_3_6864MHz;  /* Now, set up the PLL and RCLK in the SA-1111: */  SKCR = SKCR_PLL_BYPASS | SKCR_RDYEN | SKCR_OE_EN;  udelay(100);  SKCR = SKCR_PLL_BYPASS | SKCR_RCLKEN | SKCR_RDYEN | SKCR_OE_EN;  /* SA-1111 Register Access Bus should now be available. Clocks for   * any other SA-1111 functional blocks must be enabled separately   * using the SKPCR.   */  {  /*   * SA1111 DMA bus master setup    */	int cas;	/* SA1111 side */	switch ( (MDCNFG>>12) & 0x03 ) {	case 0x02:		cas = 0; break;	case 0x03:		cas = 1; break;	default:		cas = 1; break;	}	SMCR = 1		/* 1: memory is SDRAM */		| ( 1 << 1 )	/* 1:MBGNT is enable */		| ( ((MDCNFG >> 4) & 0x07) << 2 )	/* row address lines */		| ( cas << 5 );	/* CAS latency */	/* SA1110 side */	GPDR |= 1<<21;	GPDR &= ~(1<<22);	GAFR |= ( (1<<21) | (1<<22) );	TUCR |= (1<<10);  }}#else#define sa1111_init()  printk( "Warning: missing SA1111 support\n" )#endifstatic int __init hw_sa1100_init(void){	if( machine_is_assabet() ){		if(machine_has_neponset()){#ifdef CONFIG_ASSABET_NEPONSET			LEDS = WHOAMI;			sa1111_init();#else			printk( "Warning: Neponset detected but full support "				"hasn't been configured in the kernel\n" );#endif		}	} else if (machine_is_xp860()) {		sa1111_init();	}	return 0;}module_init(hw_sa1100_init);

⌨️ 快捷键说明

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