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

📄 head.s

📁 优龙2410linux2.6.8内核源代码
💻 S
📖 第 1 页 / 共 2 页
字号:
		;; Check if there is a cramfs (magic value).	;; Notice that we check for cramfs magic value - which is	;; the "rom fs" we'll possibly use in 2.4 if not JFFS (which does	;; not need this mechanism anyway)	move.d	__vmlinux_end, $r0; the image will be after the vmlinux end address	move.d	[$r0], $r1	; cramfs assumes same endian on host/target	cmp.d	CRAMFS_MAGIC, $r1; magic value in cramfs superblock	bne	2f	nop	;; Ok. What is its size ? 		move.d	[$r0 + 4], $r2	; cramfs_super.size (again, no need to swapwb)	;; We want to copy it to the end of the BSS	move.d	_end, $r1	;; Remember values so cramfs and setup can find this info	move.d	$r1, [romfs_start]	; new romfs location	move.d	$r2, [romfs_length]	;; We need to copy it backwards, since they can be overlapping	add.d	$r2, $r0	add.d	$r2, $r1			;; Go ahead. Make my loop.	lsrq	1, $r2		; size is in bytes, we copy words1:	move.w	[$r0=$r0-2],$r3	move.w	$r3,[$r1=$r1-2]	subq	1, $r2	bne	1b	nop2:			;; Dont worry that the BSS is tainted. It will be cleared later.	moveq	0, $r0	move.d	$r0, [romfs_in_flash]	jump	_start_it	; better skip the additional cramfs check below	_start_it:	;; the kernel stack is overlayed with the task structure for each	;; task. thus the initial kernel stack is in the same page as the	;; init_task (but starts in the top of the page, size 8192)	move.d	init_thread_union + 8192, $sp	move.d	ibr_start,$r0	; this symbol is set by the linker script 	move	$r0,$ibr	move.d	$r0,[etrax_irv]	; set the interrupt base register and pointer		;; Clear BSS region, from _bss_start to _end	move.d	__bss_start, $r0	move.d	_end, $r11:	clear.d	[$r0+]	cmp.d	$r1, $r0	blo	1b	nop	#ifdef CONFIG_BLK_DEV_ETRAXIDE	;; disable ATA before enabling it in genconfig below	moveq	0,$r0	move.d	$r0,[R_ATA_CTRL_DATA]	move.d	$r0,[R_ATA_TRANSFER_CNT]	move.d	$r0,[R_ATA_CONFIG]#if 0	move.d	R_PORT_G_DATA, $r1	move.d	$r0, [$r1]; assert ATA bus-reset	nop	nop	nop	nop	nop	nop	move.d	0x08000000,$r0	move.d	$r0,[$r1]#endif#endif#ifdef CONFIG_JULIETTE	;; configure external DMA channel 0 before enabling it in genconfig		moveq	0,$r0	move.d	$r0,[R_EXT_DMA_0_ADDR]	; cnt enable, word size, output, stop, size 0	move.d	  IO_STATE (R_EXT_DMA_0_CMD, cnt, enable)	\		| IO_STATE (R_EXT_DMA_0_CMD, rqpol, ahigh)	\		| IO_STATE (R_EXT_DMA_0_CMD, apol, ahigh)	\		| IO_STATE (R_EXT_DMA_0_CMD, rq_ack, burst)	\		| IO_STATE (R_EXT_DMA_0_CMD, wid, word)		\		| IO_STATE (R_EXT_DMA_0_CMD, dir, output)	\		| IO_STATE (R_EXT_DMA_0_CMD, run, stop)		\		| IO_FIELD (R_EXT_DMA_0_CMD, trf_count, 0),$r0	move.d	$r0,[R_EXT_DMA_0_CMD]	;; reset dma4 and wait for completion		moveq	IO_STATE (R_DMA_CH4_CMD, cmd, reset),$r0	move.b	$r0,[R_DMA_CH4_CMD]1:	move.b	[R_DMA_CH4_CMD],$r0	and.b	IO_MASK (R_DMA_CH4_CMD, cmd),$r0	cmp.b	IO_STATE (R_DMA_CH4_CMD, cmd, reset),$r0	beq	1b	nop	;; reset dma5 and wait for completion		moveq	IO_STATE (R_DMA_CH5_CMD, cmd, reset),$r0	move.b	$r0,[R_DMA_CH5_CMD]1:	move.b	[R_DMA_CH5_CMD],$r0	and.b	IO_MASK (R_DMA_CH5_CMD, cmd),$r0	cmp.b	IO_STATE (R_DMA_CH5_CMD, cmd, reset),$r0	beq	1b	nop#endif					;; Etrax product HW genconfig setup	moveq	0,$r0#if (!defined(CONFIG_ETRAX_KGDB) || !defined(CONFIG_ETRAX_DEBUG_PORT0)) \	&& !defined(CONFIG_DMA_MEMCPY)	; DMA channels 6 and 7 to ser0, kgdb doesnt want DMA	or.d	  IO_STATE (R_GEN_CONFIG, dma7, serial0)	\		| IO_STATE (R_GEN_CONFIG, dma6, serial0),$r0#endif#if !defined(CONFIG_ETRAX_KGDB) || !defined(CONFIG_ETRAX_DEBUG_PORT1)	; DMA channels 8 and 9 to ser1, kgdb doesnt want DMA	or.d	  IO_STATE (R_GEN_CONFIG, dma9, serial1)	\		| IO_STATE (R_GEN_CONFIG, dma8, serial1),$r0#endif	#ifdef CONFIG_DMA_MEMCPY	; 6/7 memory-memory DMA	or.d	  IO_STATE (R_GEN_CONFIG, dma7, intdma6)	\		| IO_STATE (R_GEN_CONFIG, dma6, intdma7),$r0#endif#ifdef CONFIG_ETRAX_SERIAL_PORT2	; Enable serial port 2	or.w	IO_STATE (R_GEN_CONFIG, ser2, select),$r0#if !defined(CONFIG_ETRAX_KGDB) || !defined(CONFIG_ETRAX_DEBUG_PORT2)	; DMA channels 2 and 3 to ser2, kgdb doesnt want DMA	or.d	  IO_STATE (R_GEN_CONFIG, dma3, serial2)	\		| IO_STATE (R_GEN_CONFIG, dma2, serial2),$r0#endif#endif#if defined(CONFIG_ETRAX_SERIAL_PORT3) || defined(CONFIG_ETRAX_SYNCHRONOUS_SERIAL_PORT1)	; Enable serial port 3	or.w	IO_STATE (R_GEN_CONFIG, ser3, select),$r0#if !defined(CONFIG_ETRAX_KGDB) || !defined(CONFIG_ETRAX_DEBUG_PORT3)	; DMA channels 4 and 5 to ser3, kgdb doesnt want DMA	or.d	  IO_STATE (R_GEN_CONFIG, dma5, serial3)	\		| IO_STATE (R_GEN_CONFIG, dma4, serial3),$r0#endif#endif#if defined(CONFIG_ETRAX_PARALLEL_PORT0) || defined(CONFIG_ETRAX_ETHERNET_LPSLAVE)	; parport 0 enabled using DMA 2/3	or.w	IO_STATE (R_GEN_CONFIG, par0, select),$r0#endif#if defined(CONFIG_ETRAX_PARALLEL_PORT1) || defined(CONFIG_ETRAX_ETHERNET_LPSLAVE)	; parport 1 enabled using DMA 4/5	or.w	IO_STATE (R_GEN_CONFIG, par1, select),$r0#endif#ifdef CONFIG_ETRAX_IDE	; DMA channels 2 and 3 to ATA, ATA enabled	or.d	  IO_STATE (R_GEN_CONFIG, dma3, ata)	\		| IO_STATE (R_GEN_CONFIG, dma2, ata)	\		| IO_STATE (R_GEN_CONFIG, ata, select),$r0#endif	#ifdef CONFIG_ETRAX_USB_HOST_PORT1	; Set the USB port 1 enable bit	or.d	IO_STATE (R_GEN_CONFIG, usb1, select),$r0#endif#ifdef CONFIG_ETRAX_USB_HOST_PORT2	; Set the USB port 2 enable bit	or.d	IO_STATE (R_GEN_CONFIG, usb2, select),$r0#endif#ifdef CONFIG_ETRAX_USB_HOST	; Connect DMA channels 8 and 9 to USB	and.d	(~(IO_MASK (R_GEN_CONFIG, dma9)		\		   | IO_MASK (R_GEN_CONFIG, dma8)))	\		| IO_STATE (R_GEN_CONFIG, dma9, usb)	\		| IO_STATE (R_GEN_CONFIG, dma8, usb),$r0#endif	#ifdef CONFIG_JULIETTE	; DMA channels 4 and 5 to EXTDMA0, for Juliette	or.d	  IO_STATE (R_GEN_CONFIG, dma5, extdma0)	\		| IO_STATE (R_GEN_CONFIG, dma4, extdma0),$r0#endif#if defined(CONFIG_ETRAX_DEF_R_PORT_G0_DIR_OUT)        or.d      IO_STATE (R_GEN_CONFIG, g0dir, out),$r0#endif#if defined(CONFIG_ETRAX_DEF_R_PORT_G8_15_DIR_OUT)        or.d      IO_STATE (R_GEN_CONFIG, g8_15dir, out),$r0#endif#if defined(CONFIG_ETRAX_DEF_R_PORT_G16_23_DIR_OUT)       or.d      IO_STATE (R_GEN_CONFIG, g16_23dir, out),$r0#endif#if defined(CONFIG_ETRAX_DEF_R_PORT_G24_DIR_OUT)       or.d      IO_STATE (R_GEN_CONFIG, g24dir, out),$r0#endif	move.d	$r0,[genconfig_shadow] ; init a shadow register of R_GEN_CONFIG#ifndef CONFIG_SVINTO_SIM	move.d	$r0,[R_GEN_CONFIG]#if 0	moveq	4,$r0	move.b	$r0,[R_DMA_CH6_CMD]	; reset (ser0 dma out)	move.b	$r0,[R_DMA_CH7_CMD]	; reset (ser0 dma in)1:	move.b	[R_DMA_CH6_CMD],$r0	; wait for reset cycle to finish	and.b	7,$r0	cmp.b	4,$r0	beq	1b	nop1:	move.b	[R_DMA_CH7_CMD],$r0	; wait for reset cycle to finish	and.b	7,$r0	cmp.b	4,$r0	beq	1b	nop#endif		moveq	IO_STATE (R_DMA_CH8_CMD, cmd, reset),$r0	move.b	$r0,[R_DMA_CH8_CMD]	; reset (ser1 dma out)	move.b	$r0,[R_DMA_CH9_CMD]	; reset (ser1 dma in)1:	move.b	[R_DMA_CH8_CMD],$r0	; wait for reset cycle to finish	andq	IO_MASK (R_DMA_CH8_CMD, cmd),$r0	cmpq	IO_STATE (R_DMA_CH8_CMD, cmd, reset),$r0	beq	1b	nop1:	move.b	[R_DMA_CH9_CMD],$r0	; wait for reset cycle to finish	andq	IO_MASK (R_DMA_CH9_CMD, cmd),$r0	cmpq	IO_STATE (R_DMA_CH9_CMD, cmd, reset),$r0	beq	1b	nop	;; setup port PA and PB default initial directions and data	;; including their shadow registers			move.b	CONFIG_ETRAX_DEF_R_PORT_PA_DIR,$r0#if defined(CONFIG_BLUETOOTH) && defined(CONFIG_BLUETOOTH_RESET_PA7)	or.b	IO_STATE (R_PORT_PA_DIR, dir7, output),$r0#endif	move.b	$r0,[port_pa_dir_shadow]	move.b	$r0,[R_PORT_PA_DIR]	move.b	CONFIG_ETRAX_DEF_R_PORT_PA_DATA,$r0#if defined(CONFIG_BLUETOOTH) && defined(CONFIG_BLUETOOTH_RESET_PA7)#if defined(CONFIG_BLUETOOTH_RESET_ACTIVE_HIGH)	and.b	~(1 << 7),$r0#else	or.b	(1 << 7),$r0#endif#endif	move.b	$r0,[port_pa_data_shadow]	move.b	$r0,[R_PORT_PA_DATA]		move.b	CONFIG_ETRAX_DEF_R_PORT_PB_CONFIG,$r0	move.b	$r0,[port_pb_config_shadow]	move.b	$r0,[R_PORT_PB_CONFIG]	move.b	CONFIG_ETRAX_DEF_R_PORT_PB_DIR,$r0#if defined(CONFIG_BLUETOOTH) && defined(CONFIG_BLUETOOTH_RESET_PB5)	or.b	IO_STATE (R_PORT_PB_DIR, dir5, output),$r0#endif	move.b	$r0,[port_pb_dir_shadow]	move.b	$r0,[R_PORT_PB_DIR]	move.b	CONFIG_ETRAX_DEF_R_PORT_PB_DATA,$r0#if defined(CONFIG_BLUETOOTH) && defined(CONFIG_BLUETOOTH_RESET_PB5)#if defined(CONFIG_BLUETOOTH_RESET_ACTIVE_HIGH)	and.b	~(1 << 5),$r0#else	or.b	(1 << 5),$r0#endif#endif	move.b	$r0,[port_pb_data_shadow]	move.b	$r0,[R_PORT_PB_DATA]	moveq   0, $r0	move.d  $r0,[port_pb_i2c_shadow]	move.d  $r0, [R_PORT_PB_I2C]	moveq	0,$r0#if defined(CONFIG_BLUETOOTH) && defined(CONFIG_BLUETOOTH_RESET_G10)#if defined(CONFIG_BLUETOOTH_RESET_ACTIVE_HIGH)	and.d	~(1 << 10),$r0#else	or.d	(1 << 10),$r0#endif#endif#if defined(CONFIG_BLUETOOTH) && defined(CONFIG_BLUETOOTH_RESET_G11)#if defined(CONFIG_BLUETOOTH_RESET_ACTIVE_HIGH)	and.d	~(1 << 11),$r0#else	or.d	(1 << 11),$r0#endif#endif	move.d	$r0,[port_g_data_shadow]	move.d	$r0,[R_PORT_G_DATA]		;; setup the serial port 0 at 115200 baud for debug purposes		moveq	  IO_STATE (R_SERIAL0_XOFF, tx_stop, enable)		\		| IO_STATE (R_SERIAL0_XOFF, auto_xoff, disable)		\		| IO_FIELD (R_SERIAL0_XOFF, xoff_char, 0),$r0	move.d	$r0,[R_SERIAL0_XOFF] 	; 115.2kbaud for both transmit and receive	move.b	  IO_STATE (R_SERIAL0_BAUD, tr_baud, c115k2Hz)		\		| IO_STATE (R_SERIAL0_BAUD, rec_baud, c115k2Hz),$r0	move.b	$r0,[R_SERIAL0_BAUD]	; Set up and enable the serial0 receiver.	move.b	  IO_STATE (R_SERIAL0_REC_CTRL, dma_err, stop)		\		| IO_STATE (R_SERIAL0_REC_CTRL, rec_enable, enable)	\		| IO_STATE (R_SERIAL0_REC_CTRL, rts_, active)		\		| IO_STATE (R_SERIAL0_REC_CTRL, sampling, middle)	\		| IO_STATE (R_SERIAL0_REC_CTRL, rec_stick_par, normal)	\		| IO_STATE (R_SERIAL0_REC_CTRL, rec_par, even)		\		| IO_STATE (R_SERIAL0_REC_CTRL, rec_par_en, disable)	\		| IO_STATE (R_SERIAL0_REC_CTRL, rec_bitnr, rec_8bit),$r0	move.b	$r0,[R_SERIAL0_REC_CTRL] 		; Set up and enable the serial0 transmitter.	move.b	  IO_FIELD (R_SERIAL0_TR_CTRL, txd, 0)			\		| IO_STATE (R_SERIAL0_TR_CTRL, tr_enable, enable)	\		| IO_STATE (R_SERIAL0_TR_CTRL, auto_cts, disabled)	\		| IO_STATE (R_SERIAL0_TR_CTRL, stop_bits, one_bit)	\		| IO_STATE (R_SERIAL0_TR_CTRL, tr_stick_par, normal)	\		| IO_STATE (R_SERIAL0_TR_CTRL, tr_par, even)		\		| IO_STATE (R_SERIAL0_TR_CTRL, tr_par_en, disable)	\		| IO_STATE (R_SERIAL0_TR_CTRL, tr_bitnr, tr_8bit),$r0	move.b	$r0,[R_SERIAL0_TR_CTRL]	;; setup the serial port 1 at 115200 baud for debug purposes		moveq	  IO_STATE (R_SERIAL1_XOFF, tx_stop, enable)		\		| IO_STATE (R_SERIAL1_XOFF, auto_xoff, disable)		\		| IO_FIELD (R_SERIAL1_XOFF, xoff_char, 0),$r0	move.d	$r0,[R_SERIAL1_XOFF] 	; 115.2kbaud for both transmit and receive	move.b	  IO_STATE (R_SERIAL1_BAUD, tr_baud, c115k2Hz)		\		| IO_STATE (R_SERIAL1_BAUD, rec_baud, c115k2Hz),$r0	move.b	$r0,[R_SERIAL1_BAUD]	; Set up and enable the serial1 receiver.	move.b	  IO_STATE (R_SERIAL1_REC_CTRL, dma_err, stop)		\		| IO_STATE (R_SERIAL1_REC_CTRL, rec_enable, enable)	\		| IO_STATE (R_SERIAL1_REC_CTRL, rts_, active)		\		| IO_STATE (R_SERIAL1_REC_CTRL, sampling, middle)	\		| IO_STATE (R_SERIAL1_REC_CTRL, rec_stick_par, normal)	\		| IO_STATE (R_SERIAL1_REC_CTRL, rec_par, even)		\		| IO_STATE (R_SERIAL1_REC_CTRL, rec_par_en, disable)	\		| IO_STATE (R_SERIAL1_REC_CTRL, rec_bitnr, rec_8bit),$r0	move.b	$r0,[R_SERIAL1_REC_CTRL] 		; Set up and enable the serial1 transmitter.	move.b	  IO_FIELD (R_SERIAL1_TR_CTRL, txd, 0)			\		| IO_STATE (R_SERIAL1_TR_CTRL, tr_enable, enable)	\		| IO_STATE (R_SERIAL1_TR_CTRL, auto_cts, disabled)	\		| IO_STATE (R_SERIAL1_TR_CTRL, stop_bits, one_bit)	\		| IO_STATE (R_SERIAL1_TR_CTRL, tr_stick_par, normal)	\		| IO_STATE (R_SERIAL1_TR_CTRL, tr_par, even)		\		| IO_STATE (R_SERIAL1_TR_CTRL, tr_par_en, disable)	\		| IO_STATE (R_SERIAL1_TR_CTRL, tr_bitnr, tr_8bit),$r0	move.b	$r0,[R_SERIAL1_TR_CTRL]	#ifdef CONFIG_ETRAX_SERIAL_PORT3		;; setup the serial port 3 at 115200 baud for debug purposes		moveq	  IO_STATE (R_SERIAL3_XOFF, tx_stop, enable)		\		| IO_STATE (R_SERIAL3_XOFF, auto_xoff, disable)		\		| IO_FIELD (R_SERIAL3_XOFF, xoff_char, 0),$r0	move.d	$r0,[R_SERIAL3_XOFF] 	; 115.2kbaud for both transmit and receive	move.b	  IO_STATE (R_SERIAL3_BAUD, tr_baud, c115k2Hz)		\		| IO_STATE (R_SERIAL3_BAUD, rec_baud, c115k2Hz),$r0	move.b	$r0,[R_SERIAL3_BAUD]	; Set up and enable the serial3 receiver.	move.b	  IO_STATE (R_SERIAL3_REC_CTRL, dma_err, stop)		\		| IO_STATE (R_SERIAL3_REC_CTRL, rec_enable, enable)	\		| IO_STATE (R_SERIAL3_REC_CTRL, rts_, active)		\		| IO_STATE (R_SERIAL3_REC_CTRL, sampling, middle)	\		| IO_STATE (R_SERIAL3_REC_CTRL, rec_stick_par, normal)	\		| IO_STATE (R_SERIAL3_REC_CTRL, rec_par, even)		\		| IO_STATE (R_SERIAL3_REC_CTRL, rec_par_en, disable)	\		| IO_STATE (R_SERIAL3_REC_CTRL, rec_bitnr, rec_8bit),$r0	move.b	$r0,[R_SERIAL3_REC_CTRL] 		; Set up and enable the serial3 transmitter.	move.b	  IO_FIELD (R_SERIAL3_TR_CTRL, txd, 0)			\		| IO_STATE (R_SERIAL3_TR_CTRL, tr_enable, enable)	\		| IO_STATE (R_SERIAL3_TR_CTRL, auto_cts, disabled)	\		| IO_STATE (R_SERIAL3_TR_CTRL, stop_bits, one_bit)	\		| IO_STATE (R_SERIAL3_TR_CTRL, tr_stick_par, normal)	\		| IO_STATE (R_SERIAL3_TR_CTRL, tr_par, even)		\		| IO_STATE (R_SERIAL3_TR_CTRL, tr_par_en, disable)	\		| IO_STATE (R_SERIAL3_TR_CTRL, tr_bitnr, tr_8bit),$r0	move.b	$r0,[R_SERIAL3_TR_CTRL]#endif	#endif /* CONFIG_SVINTO_SIM */	jump	start_kernel	; jump into the C-function start_kernel in init/main.c			.dataetrax_irv:		.dword	0romfs_start:	.dword	0romfs_length:	.dword	0romfs_in_flash:	.dword	0		;; put some special pages at the beginning of the kernel aligned	;; to page boundaries - the kernel cannot start until after this#ifdef CONFIG_CRIS_LOW_MAPswapper_pg_dir = 0x60002000#else	swapper_pg_dir = 0xc0002000#endif	.section ".init.data", "aw"#include "../lib/hw_settings.S"

⌨️ 快捷键说明

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