亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? e100lpslave.s

?? 根據添加了fs2410平臺的arch目錄
?? S
字號:
	;; $Id: e100lpslave.S,v 1.3 2001/06/21 16:55:26 olof Exp $	;;	;; Etrax100 slave network<->parport forwarder	;;	;; Copyright (c) 1999 Bjorn Wesen, Axis Communications AB	;;	;; We got 784 bytes (par loader size) to do DMA forwarding	;; between DMA0/1 (ethernet) and DMA3/4 (par port 0 RX/1 TX)	;;#include <linux/config.h>#if 0#define ASSEMBLER_MACROS_ONLY#endif#include <asm/sv_addr_ag.h>#define BUFSIZE 0x600	;; R_IRQ_READ2#define DMA1EOPBIT 3#define DMA0EOPBIT 1#define DMA3EOPBIT 7#define DMA4DESCBIT 8	;; R_IRQ_READ0#define PAR0ECPCMDBIT 11	;; get host CMDs#include "e100lpslave.h"start:	;; disable interrupts. we are not going to use them at all.	di	;; setup DMA connections and port configuration	movu.w	0x84, r0	; DMA2/3/4/5 to par ports	move.d	r0, [R_GEN_CONFIG]	;; setup port PA dirs and turn on the LED to show were alive	movu.w	0x0cfb, r0	; PA2-PA3 out, PA2 inactive	move.d	r0, [R_PORT_PA_SET]	;; enable MDIO output pin	moveq IO_STATE(R_NETWORK_MGM_CTRL, mdoe, enable), r0	move.d	r0, [R_NETWORK_MGM_CTRL]	;; accept broadcast frames, and enable station address 0	moveq	IO_STATE(R_NETWORK_REC_CONFIG, broadcast, receive) | \		IO_STATE(R_NETWORK_REC_CONFIG, ma0, enable), r0	move.d	r0, [R_NETWORK_REC_CONFIG]	;; use MII CLK mode, and enable the controller	moveq	IO_STATE(R_NETWORK_GEN_CONFIG, phy, mii_clk) | \		IO_STATE(R_NETWORK_GEN_CONFIG, enable, on), r0	move.d	r0, [R_NETWORK_GEN_CONFIG]	move.d	IO_STATE(R_PAR0_CONFIG, ioe,     noninv)    |  \		IO_STATE(R_PAR0_CONFIG, iseli,   noninv)    |  \		IO_STATE(R_PAR0_CONFIG, iautofd, noninv)    |  \		IO_STATE(R_PAR0_CONFIG, istrb,   noninv)    |  \		IO_STATE(R_PAR0_CONFIG, iinit,   noninv)    |  \		IO_STATE(R_PAR0_CONFIG, iperr,   noninv)    |  \		IO_STATE(R_PAR0_CONFIG, iack,    noninv)    |  \		IO_STATE(R_PAR0_CONFIG, ibusy,   noninv)    |  \		IO_STATE(R_PAR0_CONFIG, ifault,  noninv)    |  \		IO_STATE(R_PAR0_CONFIG, isel,    noninv)    |  \		IO_STATE(R_PAR0_CONFIG, dma, enable)        |  \		IO_STATE(R_PAR0_CONFIG, rle_in, disable)    |  \		IO_STATE(R_PAR0_CONFIG, rle_out, disable)   |  \		IO_STATE(R_PAR0_CONFIG, enable, on)         |  \		IO_STATE(R_PAR0_CONFIG, force, on)          |  \		IO_STATE(R_PAR0_CONFIG, mode, ecp_rev), r0	; Reverse ECP - PAR0 is RX	move.d	r0, [R_PAR0_CONFIG]	move.d	IO_STATE(R_PAR1_CONFIG, ioe,     noninv)    |  \		IO_STATE(R_PAR1_CONFIG, iseli,   noninv)    |  \		IO_STATE(R_PAR1_CONFIG, iautofd, noninv)    |  \		IO_STATE(R_PAR1_CONFIG, istrb,   noninv)    |  \		IO_STATE(R_PAR1_CONFIG, iinit,   noninv)    |  \		IO_STATE(R_PAR1_CONFIG, iperr,   inv)       |  \		IO_STATE(R_PAR1_CONFIG, iack,    noninv)    |  \		IO_STATE(R_PAR1_CONFIG, ibusy,   noninv)    |  \		IO_STATE(R_PAR1_CONFIG, ifault,  noninv)    |  \		IO_STATE(R_PAR1_CONFIG, isel,    noninv)    |  \		IO_STATE(R_PAR1_CONFIG, dma, enable)        |  \		IO_STATE(R_PAR1_CONFIG, rle_in, disable)    |  \		IO_STATE(R_PAR1_CONFIG, rle_out, disable)   |  \		IO_STATE(R_PAR1_CONFIG, enable, on)         |  \		IO_STATE(R_PAR1_CONFIG, force, on)          |  \		IO_STATE(R_PAR1_CONFIG, mode, ecp_fwd), r0	; Forward ECP - PAR1 is TX	move.d	r0, [R_PAR1_CONFIG]	moveq	IO_FIELD(R_PAR1_DELAY, setup, 0), r0    ; setup time of value * 160 + 20 == 20 ns	move.d	r0, [R_PAR1_DELAY]	;; we got four descriptors, that can be active at the same time:	;; 1) from network	;; 2) to parport	;; 3) from parport	;; 4) to network	;;	;; we got four buffers, each can hold a max packet (we use 1536 bytes)	;; buffers 1 and 2 are used from network to parport, while	;; buffers 3 and 4 are used from parport to network.	;; 	;; a double buffering scheme is used, so that new data can be read	;; into a buffer pair while the last data is written out from the	;; last buffer. if the read buffer is done before the write buffer,	;; the reading will halt until the writing is done, at which point	;; writing starts from the newly read and reading can start with	;; the newly written.	;; 	move.d	R_DMA_CH0_FIRST, r1   ; we use this as base for subsequent DMA ops	moveq	IO_STATE(R_DMA_CH1_CMD, cmd, start), r6	move.d	FN1desc, r7	move.d	R_IRQ_READ0, r9	;; start receiving from network	jsr	startdmaFPTN	jsr	startdmaFNTP		;; ------------------- MAIN LOOP	;; IRQ bits:	parport rcv is par0_ecp_cmd, then dma3_eop	;;              network rcv is dma1_eop	;;              parport tx  is dma4_desc	;;              network tx  is dma0_eopmainloop:	;; ------- first handle the parport -> network link	;; check if we got something from the parport	move.d	[r9], r0	; r0 <- *R_IRQ_READ0	btstq	PAR0ECPCMDBIT, r0	bpl	noparecp	nop	;; ack it by reading PAR0_STATUS_DATA	move.d	[R_PAR0_STATUS_DATA], r0	;; trigger EOP on DMA3 (par0 incoming channel)	moveq	IO_STATE(R_SET_EOP, ch3_eop, set), r0	move.d	r0, [R_SET_EOP]noparecp:	;; if we simultaneously have parport rx EOP and	;; network TX eop, we can swap buffers and start a new RX/TX	move.d	[r9 + (R_IRQ_READ2 - R_IRQ_READ0)], r0	btstq	DMA3EOPBIT, r0	; check parport rx	bpl	noswap1	btstq	DMA0EOPBIT, r0	; check network tx	bpl	noswap1	nop	;; prepare to swap buffer ptrs (FN3b <-> TN4b)	move.d	[r4 = r7 + 56], r0; FP3b	move.d	[r3 = r7 + 72], r2; TN4b	;; but first check if this was a Host Command Packet	move.d	[r0], r5	; r5 <- first 4 bytes in PAR-received packet	bne	handle_command	; if non-zero, it was a host command	addq	4, r0		; skip command (in delay slot - handle_command requires this)	move.d	r0, [r3]	; write to To Network descriptor	subq	4, r2		; undo the skipping done last swap	move.d	r2, [r4]	; write to From Parport descriptor	;; clear the interrupts	moveq	IO_STATE(R_DMA_CH0_CLR_INTR, clr_eop, do), r0	move.b	r0, [r1 + (R_DMA_CH0_CLR_INTR - R_DMA_CH0_FIRST)]	move.b	r0, [r1 + (R_DMA_CH3_CLR_INTR - R_DMA_CH0_FIRST)]	;; copy received length to outgoing network length	move.w	[r7 + 60], r0	; FPhlen	subq	4, r0		; skip command	move.w	r0, [r7 + 64]	; TN4desc	;; restart DMAs	jsr	startdmaFPTN#ifdef CONFIG_ETRAX_ETHERNET_LPSLAVE_HAS_LEDS#if defined(CONFIG_ETRAX_NETWORK_LED_ON_WHEN_LINK)	;; Turn off the LED signaling an outgoing network packet	movu.b	[LEDOff], r0#elif defined(CONFIG_ETRAX_NETWORK_LED_ON_WHEN_ACTIVITY)	;; Light the LED signaling an outgoing network packet	movu.b	[LEDAmber], r0#else#error "Define either CONFIG_ETRAX_NETWORK_LED_ON_WHEN_LINK or CONFIG_ETRAX_NETWORK_LED_ON_WHEN_ACTIVITY"	#endif 	move.b	r0, [R_PORT_PA_DATA]	move.d	0x00011000, r0	move.d	r0,[LEDCount]#endifnoswap1:	;; ----- now check the network -> parport link	;; if we simultaneously have network rx EOP and	;; parport TX desc, we can swap buffers and start a new RX/TX	move.d	[r9 + (R_IRQ_READ2 - R_IRQ_READ0)], r0	btstq	DMA1EOPBIT, r0	; check network rx	bpl	noswap2	btstq	DMA4DESCBIT, r0	; check parport tx	bpl	noswap2	nop	;; prepare to swap buffer ptrs (FP1b <-> TP2b)	move.d	[r4 = r7 +  8], r0; FN1b	move.d	[r3 = r7 + 24], r2; TP2b	move.d	r0, [r3]	; write to To Parport descriptor	move.d	r2, [r4]	; write to From Network descriptor	;; clear the interrupts	moveq	IO_STATE(R_DMA_CH1_CLR_INTR, clr_eop, do) | \		IO_STATE(R_DMA_CH1_CLR_INTR, clr_descr, do), r0	move.b	r0, [r1 + (R_DMA_CH1_CLR_INTR - R_DMA_CH0_FIRST)]	move.b	r0, [r1 + (R_DMA_CH4_CLR_INTR - R_DMA_CH0_FIRST)]	;; copy received network length to outgoing parport length	move.w	[r7 + 12], r0	; FNhlen	move.w	r0, [r7 + 16]	; TP2desc	;; restart DMAs	jsr	startdmaFNTP#if 0#ifdef CONFIG_ETRAX_ETHERNET_LPSLAVE_HAS_LEDS	;; Light the LED signaling an incoming networkpacket	movu.b	0xFB, r0	move.b	r0, [R_PORT_PA_DATA]	move.d	0x00010000, r0	move.d	r0,[LEDCount]#endif#endifnoswap2:#ifdef CONFIG_ETRAX_ETHERNET_LPSLAVE_HAS_LEDS	;; Count down LED counter, and turn off the network LED if required	move.d	[LEDCount], r0	beq	mainloop	nop	subq	1, r0	move.d	r0, [LEDCount]		bne	mainloop	nop#if defined(CONFIG_ETRAX_NETWORK_LED_ON_WHEN_LINK)		;; Light the network LED , and start over the main loop	movu.b	[LEDAmber], r0#elif defined(CONFIG_ETRAX_NETWORK_LED_ON_WHEN_ACTIVITY)			;; Turn off the network LED, and start over the main loop	movu.b	[LEDOff], r0#else#error "Define either CONFIG_ETRAX_NETWORK_LED_ON_WHEN_LINK or CONFIG_ETRAX_NETWORK_LED_ON_WHEN_ACTIVITY"	#endif	move.b	r0, [R_PORT_PA_DATA]#endif	ba	mainloop	nop	;; --- some useful subroutines.handle_command:	;; handle command. we also need to clear the PAR0 RX EOP IRQ, and 	;; restart the PAR0 dma. command is in R5, packet after cmd is in R0	moveq	IO_STATE(R_DMA_CH3_CLR_INTR, clr_eop, do), r2	move.b	r2, [r1 + (R_DMA_CH3_CLR_INTR - R_DMA_CH0_FIRST)]	cmpq	HOST_CMD_SETMAC, r5	bne	no_setmac	nop	;; copy station address (6 bytes) from packet to hardware	move.d	[r0+], r2	move.d	R_NETWORK_SA_0, r3	move.d	r2, [r3]	move.w	[r0], r2	move.w	r2, [r3 + 4] no_setmac:	move	noswap1, SRP	ba	startdmaFP	nop	;; start DMAs, from parport and to networkstartdmaFPTN:	;; start transmitting to the network (CH0)	move.d	TN4desc, r8	move.d	r8, [r1]					; TN4desc -> FIRST0	move.b	r6, [r1 + (R_DMA_CH0_CMD - R_DMA_CH0_FIRST)]	; start -> CMD0startdmaFP:	;; start receiving from parport (CH3)	move.d	FP3desc, r8	move.d	r8, [r1 + (R_DMA_CH3_FIRST - R_DMA_CH0_FIRST)]  ; FP3desc -> FIRST3	move.b	r6, [r1 + (R_DMA_CH3_CMD - R_DMA_CH0_FIRST)]	; start -> CMD3	ret	nop	;; start DMAs, from network and to parportstartdmaFNTP:	;; start transmitting to the parport (CH4)	move.d	TP2desc, r8	move.d	r8, [r1 + (R_DMA_CH4_FIRST - R_DMA_CH0_FIRST)]	; TP2desc -> FIRST4	move.b	r6, [r1 + (R_DMA_CH4_CMD - R_DMA_CH0_FIRST)]	; start -> CMD4	;; start receiving from network (CH1) (r7 already contains FN1desc)	move.d	r7, [r1 + (R_DMA_CH1_FIRST - R_DMA_CH0_FIRST)]  ; FN1desc -> FIRST1	move.b	r6, [r1 + (R_DMA_CH1_CMD - R_DMA_CH0_FIRST)]	; start -> CMD1	ret	nop	;; --- DMA descriptors - each descriptor is 4 longwords (16 bytes)	;; DONT MOVE THESE AROUND. Due to the as/ld "hole-in-the-head",	;; we cant write stuff like (TP2b - TP2desc) but the offsets	;; have to be hardcoded.	.data	;; 0 from networkFN1desc:	.word	BUFSIZE		; sw_len	.word	0x0001		; ctrl, d_eol is only flag we need	.dword	0		; nextFN1b:	.dword	buffers		; buffer 1 8	.word	0		; hw_len	.word	0		; status	;; 16 to parportTP2desc:	.word	2		; sw_len, filled in by code 	.word	0x0004		; ctrl, d_wait because ecp cmd in next	.dword	TP2desc2	; nextTP2b:	.dword	buffers + BUFSIZE ; buffer 2 24	.word	0		; hw_len	.word	0		; status	;; 32 to parport second descriptor, for the ECP commandTP2desc2:	.word	0x0001		; sw_len, 1 byte (ecp command) 	.word	0x0019		; ctrl, d_ecp | d_eol | d_int	.dword	0		; next	.dword	TP2desc2	; buffer, dont care	.word	0		; hw_len	.word	0		; status	;; 48 from parportFP3desc:	.word	BUFSIZE		; sw_len	.word	0x0001		; ctrl, d_eol is only flag we need	.dword	0		; nextFP3b:	.dword	buffers + BUFSIZE * 2 ; 56 buffer 3FPhlen:	.word	0		; 60 hw_len	.word	0		; status	;; 64 to networkTN4desc:	.word	2		; sw_len, filled in by code 	.word	0x0007		; ctrl, d_eop | d_eol | d_wait	.dword	0		; nextTN4b:	.dword	buffers + BUFSIZE * 3 + 4	; 72 buffer 4 (the +4 is to offset the anti-skipping)	.word	0		; hw_len	.word	0		; status#ifdef CONFIG_ETRAX_ETHERNET_LPSLAVE_HAS_LEDSLEDCount:	.dword	0LEDOff:		.word	0xffLEDGreen:	.word	0xfbLEDRed:	.word	0xf7LEDAmber:	.word	0xf3LED:	.word	0xf7#endif	;; after the prog we put the buffers. not in the asm program, we just use	;; the address generatedbuffers:	;; END

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久久搜平片 | 26uuuu精品一区二区| 丁香桃色午夜亚洲一区二区三区| 视频一区二区不卡| 日本亚洲最大的色成网站www| 亚洲一区二区精品视频| 亚洲香蕉伊在人在线观| 亚洲欧美日韩国产另类专区| 亚洲免费视频成人| 亚洲午夜一区二区| 天天影视涩香欲综合网| 蜜桃视频在线观看一区二区| 裸体歌舞表演一区二区| 久久99精品国产.久久久久| 国产一区免费电影| av一区二区三区在线| 色婷婷久久综合| 欧美日韩精品是欧美日韩精品| 欧美精品久久99久久在免费线| 精品污污网站免费看| 欧美日韩黄色影视| 精品国产一区二区三区av性色 | 麻豆久久一区二区| 国产精品亚洲第一区在线暖暖韩国| 国产麻豆成人传媒免费观看| 成人精品一区二区三区四区| 色综合天天在线| 在线综合亚洲欧美在线视频| 久久综合视频网| 亚洲天堂2016| 蜜桃av一区二区| 99久久综合99久久综合网站| 91官网在线免费观看| 6080亚洲精品一区二区| 国产欧美精品一区| 亚洲电影激情视频网站| 国模少妇一区二区三区| 91香蕉国产在线观看软件| 欧美在线视频全部完| 久久综合久久99| 亚洲一区二区三区精品在线| 精品亚洲成a人| 欧美色图天堂网| 国产亚洲自拍一区| 日本不卡一区二区| 91色porny| 国产午夜精品久久久久久免费视 | 久久亚洲春色中文字幕久久久| 亚洲人123区| 国内成人精品2018免费看| 色激情天天射综合网| 久久综合一区二区| 日本sm残虐另类| 欧美丝袜丝交足nylons图片| 国产女人18水真多18精品一级做| 偷偷要91色婷婷| fc2成人免费人成在线观看播放| 日韩一区国产二区欧美三区| 亚洲天堂2014| 成人性生交大片免费看视频在线| 日韩一区二区三区免费观看| 亚洲精品免费在线播放| 成人激情文学综合网| 久久久国产综合精品女国产盗摄| 同产精品九九九| 在线观看一区二区视频| 亚洲国产成人自拍| 粉嫩一区二区三区性色av| 欧美本精品男人aⅴ天堂| 五月激情丁香一区二区三区| 色婷婷av久久久久久久| 亚洲女与黑人做爰| 一本一道久久a久久精品综合蜜臀| 久久精品欧美一区二区三区麻豆| 九九精品视频在线看| 日韩精品在线一区| 精品一二三四在线| 亚洲精品一区在线观看| 国精产品一区一区三区mba桃花| 日韩欧美你懂的| 国内成人免费视频| 国产精品色在线| 成人久久18免费网站麻豆| 亚洲国产激情av| 91蜜桃婷婷狠狠久久综合9色| 中文字幕在线观看一区| 91香蕉视频污在线| 亚洲成av人片在www色猫咪| 欧美日韩综合色| 日韩精品成人一区二区三区| 欧美一区二区三区在| 极品美女销魂一区二区三区| 精品美女在线观看| 国产91精品在线观看| 亚洲素人一区二区| 欧美狂野另类xxxxoooo| 久久国产乱子精品免费女| 久久久久久久性| 日本乱码高清不卡字幕| 亚洲成人精品在线观看| 日韩欧美在线123| 粉嫩欧美一区二区三区高清影视| 亚洲欧美日韩国产手机在线| 欧美日韩免费一区二区三区| 久久www免费人成看片高清| 国产日韩欧美高清在线| 色哟哟国产精品| 久久av中文字幕片| 中文字幕一区二区三区四区不卡| 欧美三级电影在线看| 精品一区二区三区在线观看| 一区精品在线播放| 欧美变态口味重另类| 99视频在线精品| 奇米综合一区二区三区精品视频| 国产精品欧美一区喷水| 91精品国产欧美一区二区18| 国产99久久久国产精品| 天堂午夜影视日韩欧美一区二区| 久久一区二区三区国产精品| 在线一区二区三区四区| 精品一区二区精品| 同产精品九九九| 国产精品成人在线观看| 日韩精品专区在线| 欧美在线观看视频一区二区 | 欧美在线观看18| 国产精品1区2区3区在线观看| 亚洲制服丝袜av| 日本一区二区三级电影在线观看 | 精品盗摄一区二区三区| 在线视频国产一区| 国产成人高清视频| 久久99深爱久久99精品| 亚洲高清不卡在线观看| 国产精品午夜春色av| 亚洲精品一区二区精华| 7777精品伊人久久久大香线蕉| 色菇凉天天综合网| 91在线视频在线| 国产.欧美.日韩| 国产不卡免费视频| 韩国av一区二区三区在线观看| 丝袜诱惑制服诱惑色一区在线观看 | 亚洲午夜精品在线| 日韩理论电影院| 亚洲四区在线观看| 日韩美女精品在线| 成人免费一区二区三区视频 | av亚洲产国偷v产偷v自拍| 亚洲国产精品精华液2区45| 欧美xfplay| 91精品国产美女浴室洗澡无遮挡| 欧美一a一片一级一片| 91在线观看下载| 成人国产精品免费观看| 国产成人免费视频网站高清观看视频 | 亚洲三级久久久| 成人欧美一区二区三区| 亚洲特级片在线| 亚洲永久免费视频| 亚洲电影一级黄| 亚洲国产欧美日韩另类综合| 亚洲最大的成人av| 日韩精品电影在线观看| 免费人成网站在线观看欧美高清| 美女诱惑一区二区| 国产成人精品网址| 波多野结衣一区二区三区| 成人免费黄色在线| 色婷婷精品久久二区二区蜜臀av| 在线视频你懂得一区| 欧美午夜在线一二页| 日韩一区二区三区视频在线观看| 久久伊人中文字幕| 亚洲少妇中出一区| 天天射综合影视| 国产传媒久久文化传媒| 99视频在线观看一区三区| 在线观看亚洲a| 精品国产1区2区3区| 国产精品女主播在线观看| 亚洲综合精品自拍| 九九国产精品视频| 91丨国产丨九色丨pron| 欧美日韩高清一区二区| 2019国产精品| 亚洲国产美女搞黄色| 激情文学综合丁香| 色噜噜夜夜夜综合网| 日韩亚洲欧美成人一区| 亚洲欧洲韩国日本视频| 免费高清不卡av| 一本久久精品一区二区| 日韩精品一区二区在线| 亚洲美女区一区| 国产乱码精品一区二区三区忘忧草 | 欧美精品免费视频| 中文字幕精品一区二区三区精品 | 精品国产免费人成电影在线观看四季|