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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? l1.c

?? 根據(jù)添加了fs2410平臺(tái)的arch目錄
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
/* $Id$ * * This file is subject to the terms and conditions of the GNU General Public * License.  See the file "COPYING" in the main directory of this archive * for more details. * * Copyright (C) 1992 - 1997, 2000 Silicon Graphics, Inc. * Copyright (C) 2000 by Colin Ngam *//* In general, this file is organized in a hierarchy from lower-level * to higher-level layers, as follows: * *	UART routines *	Bedrock/L1 "PPP-like" protocol implementation *	System controller "message" interface (allows multiplexing *		of various kinds of requests and responses with *		console I/O) *	Console interfaces (there are two): *	  (1) "elscuart", used in the IP35prom and (maybe) some *		debugging situations elsewhere, and *	  (2) "l1_cons", the glue that allows the L1 to act *		as the system console for the stdio libraries * * Routines making use of the system controller "message"-style interface * can be found in l1_command.c.  Their names are leftover from early SN0,  * when the "module system controller" (msc) was known as the "entry level * system controller" (elsc).  The names and signatures of those functions  * remain unchanged in order to keep the SN0 -> SN1 system controller * changes fairly localized. */#include <linux/types.h>#include <linux/config.h>#include <linux/slab.h>#include <linux/spinlock.h>#include <asm/sn/sgi.h>#include <asm/sn/iograph.h>#include <asm/sn/invent.h>#include <asm/sn/hcl.h>#include <asm/sn/hcl_util.h>#include <asm/sn/labelcl.h>#include <asm/sn/eeprom.h>#include <asm/sn/ksys/i2c.h>#include <asm/sn/router.h>#include <asm/sn/module.h>#include <asm/sn/ksys/l1.h>#include <asm/sn/nodepda.h>#include <asm/sn/clksupport.h>#include <asm/sn/sn1/uart16550.h>/* * Delete this when atomic_clear is part of atomic.h. */static __inline__ intatomic_clear (int i, atomic_t *v){	__s32 old, new;	do {		old = atomic_read(v);		new = old & ~i;	} while (ia64_cmpxchg("acq", v, old, new, sizeof(atomic_t)) != old);	return new;}#if defined(EEPROM_DEBUG)#define db_printf(x) printk x#else#define db_printf(x)#endif// From irix/kern/sys/SN/SN1/bdrkhspecregs.h#define    HSPEC_UART_0              0x00000080    /* UART Registers         *//********************************************************************* * Hardware-level (UART) driver routines. *//* macros for reading/writing registers */#define LD(x)		(*(volatile uint64_t *)(x))#define SD(x, v)        (LD(x) = (uint64_t) (v))/* location of uart receive/xmit data register */#define L1_UART_BASE(n)	((ulong)REMOTE_HSPEC_ADDR((n), HSPEC_UART_0))#define LOCAL_HUB	LOCAL_HUB_ADDR#define LOCK_HUB	REMOTE_HUB_ADDR#define ADDR_L1_REG(n, r)	\    (L1_UART_BASE(n) | ( (r) << 3 ))#define READ_L1_UART_REG(n, r) \    ( LD(ADDR_L1_REG((n), (r))) )#define WRITE_L1_UART_REG(n, r, v) \    ( SD(ADDR_L1_REG((n), (r)), (v)) )/* UART-related #defines */#define UART_BAUD_RATE		57600#define UART_FIFO_DEPTH		0xf0#define UART_DELAY_SPAN		10#define UART_PUTC_TIMEOUT	50000#define UART_INIT_TIMEOUT	100000/* error codes */#define UART_SUCCESS		  0#define UART_TIMEOUT		(-1)#define UART_LINK		(-2)#define UART_NO_CHAR		(-3)#define UART_VECTOR		(-4)#ifdef BRINGUP#define UART_DELAY(x)	{ int i; i = x * 1000; while (--i); }#else#define UART_DELAY(x)	us_delay(x)#endif/* *	Some macros for handling Endian-ness */#ifdef	LITTLE_ENDIAN#define COPY_INT_TO_BUFFER(_b, _i, _n)		\	{					\		_b[_i++] = (_n >> 24) & 0xff;	\		_b[_i++] = (_n >> 16) & 0xff;	\		_b[_i++] = (_n >>  8) & 0xff;	\		_b[_i++] =  _n        & 0xff;	\	}#define COPY_BUFFER_TO_INT(_b, _i, _n)		\	{					\		_n  = (_b[_i++] << 24) & 0xff;	\		_n |= (_b[_i++] << 16) & 0xff;	\		_n |= (_b[_i++] <<  8) & 0xff;	\		_n |=  _b[_i++]        & 0xff;	\	}#define COPY_BUFFER_TO_BUFFER(_b, _i, _bn)	\	{					\	    char *_xyz = (char *)_bn;		\	    _xyz[3] = _b[_i++];			\	    _xyz[2] = _b[_i++];			\	    _xyz[1] = _b[_i++];			\	    _xyz[0] = _b[_i++];			\	}#else	/* BIG_ENDIAN */extern char *bcopy(const char * src, char * dest, int count);#define COPY_INT_TO_BUFFER(_b, _i, _n)			\	{						\		bcopy((char *)&_n, _b, sizeof(_n));	\		_i += sizeof(_n);			\	}#define COPY_BUFFER_TO_INT(_b, _i, _n)			\	{						\		bcopy(&_b[_i], &_n, sizeof(_n));	\		_i += sizeof(_n);			\	}#define COPY_BUFFER_TO_BUFFER(_b, _i, _bn)		\	{						\            bcopy(&(_b[_i]), _bn, sizeof(int));		\            _i += sizeof(int);				\	}#endif	/* LITTLE_ENDIAN */void kmem_free(void *where, int size);#define BCOPY(x,y,z)	memcpy(y,x,z)/* * Console locking defines and functions. * */#ifdef BRINGUP#define FORCE_CONSOLE_NASID#endif#define HUB_LOCK		16#define PRIMARY_LOCK_TIMEOUT    10000000#define HUB_LOCK_REG(n)         LOCK_HUB(n, MD_PERF_CNT0)#define SET_BITS(reg, bits)     SD(reg, LD(reg) |  (bits))#define CLR_BITS(reg, bits)     SD(reg, LD(reg) & ~(bits))#define TST_BITS(reg, bits)     ((LD(reg) & (bits)) != 0)#define HUB_TEST_AND_SET(n)	LD(LOCK_HUB(n,LB_SCRATCH_REG3_RZ))#define HUB_CLEAR(n)		SD(LOCK_HUB(n,LB_SCRATCH_REG3),0)#define RTC_TIME_MAX		((rtc_time_t) ~0ULL)/* * primary_lock * *   Allows CPU's 0-3  to mutually exclude the hub from one another by *   obtaining a blocking lock.  Does nothing if only one CPU is active. * *   This lock should be held just long enough to set or clear a global *   lock bit.  After a relatively short timeout period, this routine *   figures something is wrong, and steals the lock. It does not set *   any other CPU to "dead". */inline voidprimary_lock(nasid_t nasid){	rtc_time_t          expire;	expire = rtc_time() + PRIMARY_LOCK_TIMEOUT;	while (HUB_TEST_AND_SET(nasid)) {		if (rtc_time() > expire) {			HUB_CLEAR(nasid);		}	}}/* * primary_unlock (internal) * *   Counterpart to primary_lock */inline voidprimary_unlock(nasid_t nasid){	HUB_CLEAR(nasid);}/* * hub_unlock * *   Counterpart to hub_lock_timeout and hub_lock */inline voidhub_unlock(nasid_t nasid, int level){	uint64_t mask = 1ULL << level;	primary_lock(nasid);	CLR_BITS(HUB_LOCK_REG(nasid), mask);	primary_unlock(nasid);}/* * hub_lock_timeout * *   Uses primary_lock to implement multiple lock levels. * *   There are 20 lock levels from 0 to 19 (limited by the number of bits *   in HUB_LOCK_REG).  To prevent deadlock, multiple locks should be *   obtained in order of increasingly higher level, and released in the *   reverse order. * *   A timeout value of 0 may be used for no timeout. * *   Returns 0 if successful, -1 if lock times out. */inline inthub_lock_timeout(nasid_t nasid, int level, rtc_time_t timeout){	uint64_t mask = 1ULL << level;	rtc_time_t expire = (timeout ?  rtc_time() + timeout : RTC_TIME_MAX);	int done    = 0;	while (! done) {		while (TST_BITS(HUB_LOCK_REG(nasid), mask)) {			if (rtc_time() > expire)				return -1;		}		primary_lock(nasid);		if (! TST_BITS(HUB_LOCK_REG(nasid), mask)) {			SET_BITS(HUB_LOCK_REG(nasid), mask);			done = 1;		}		primary_unlock(nasid);	}	return 0;}#define LOCK_TIMEOUT	(0x1500000 * 1) /* 0x1500000 is ~30 sec */inline voidlock_console(nasid_t nasid){	int ret;	ret = hub_lock_timeout(nasid, HUB_LOCK, (rtc_time_t)LOCK_TIMEOUT);	if ( ret != 0 ) {		/* timeout */		hub_unlock(nasid, HUB_LOCK);		/* If the 2nd lock fails, just pile ahead.... */		hub_lock_timeout(nasid, HUB_LOCK, (rtc_time_t)LOCK_TIMEOUT);	}}inline voidunlock_console(nasid_t nasid){	hub_unlock(nasid, HUB_LOCK);}int get_L1_baud(void){    return UART_BAUD_RATE;}/* uart driver functions */static voiduart_delay( rtc_time_t delay_span ){    UART_DELAY( delay_span );}#define UART_PUTC_READY(n)      ( (READ_L1_UART_REG((n), REG_LSR) & LSR_XHRE) && (READ_L1_UART_REG((n), REG_MSR) & MSR_CTS) )static intuart_putc( l1sc_t *sc ) {#ifdef BRINGUP    /* need a delay to avoid dropping chars */    UART_DELAY(57);#endif#ifdef FORCE_CONSOLE_NASID    /* We need this for the console write path _elscuart_flush() -> brl1_send() */    sc->nasid = 0;#endif    WRITE_L1_UART_REG( sc->nasid, REG_DAT,		       sc->send[sc->sent] );    return UART_SUCCESS;}static intuart_getc( l1sc_t *sc ){    u_char lsr_reg = 0;    nasid_t nasid = sc->nasid;#ifdef FORCE_CONSOLE_NASID    nasid = sc->nasid = 0;#endif    if( (lsr_reg = READ_L1_UART_REG( nasid, REG_LSR )) & 	(LSR_RCA | LSR_PARERR | LSR_FRMERR) )     {	if( lsr_reg & LSR_RCA ) 	    return( (u_char)READ_L1_UART_REG( nasid, REG_DAT ) );	else if( lsr_reg & (LSR_PARERR | LSR_FRMERR) ) {	    return UART_LINK;	}    }    return UART_NO_CHAR;}#define PROM_SER_CLK_SPEED	12000000#define PROM_SER_DIVISOR(x)	(PROM_SER_CLK_SPEED / ((x) * 16))static voiduart_init( l1sc_t *sc, int baud ){    rtc_time_t expire;    int clkdiv;    nasid_t nasid;    clkdiv = PROM_SER_DIVISOR(baud);    expire = rtc_time() + UART_INIT_TIMEOUT;    nasid = sc->nasid;        /* make sure the transmit FIFO is empty */    while( !(READ_L1_UART_REG( nasid, REG_LSR ) & LSR_XSRE) ) {	uart_delay( UART_DELAY_SPAN );	if( rtc_time() > expire ) {	    break;	}    }    if ( sc->uart == BRL1_LOCALUART )	lock_console(nasid);    WRITE_L1_UART_REG( nasid, REG_LCR, LCR_DLAB );	uart_delay( UART_DELAY_SPAN );    WRITE_L1_UART_REG( nasid, REG_DLH, (clkdiv >> 8) & 0xff );	uart_delay( UART_DELAY_SPAN );    WRITE_L1_UART_REG( nasid, REG_DLL, clkdiv & 0xff );	uart_delay( UART_DELAY_SPAN );    /* set operating parameters and set DLAB to 0 */    WRITE_L1_UART_REG( nasid, REG_LCR, LCR_BITS8 | LCR_STOP1 );	uart_delay( UART_DELAY_SPAN );    WRITE_L1_UART_REG( nasid, REG_MCR, MCR_RTS | MCR_AFE );	uart_delay( UART_DELAY_SPAN );    /* disable interrupts */    WRITE_L1_UART_REG( nasid, REG_ICR, 0x0 );	uart_delay( UART_DELAY_SPAN );    /* enable FIFO mode and reset both FIFOs */    WRITE_L1_UART_REG( nasid, REG_FCR, FCR_FIFOEN );	uart_delay( UART_DELAY_SPAN );    WRITE_L1_UART_REG( nasid, REG_FCR,	FCR_FIFOEN | FCR_RxFIFO | FCR_TxFIFO );    if ( sc->uart == BRL1_LOCALUART )	unlock_console(nasid);}/* This requires the console lock */static voiduart_intr_enable( l1sc_t *sc, u_char mask ){    u_char lcr_reg, icr_reg;    nasid_t nasid = sc->nasid;    /* make sure that the DLAB bit in the LCR register is 0     */    lcr_reg = READ_L1_UART_REG( nasid, REG_LCR );    lcr_reg &= ~(LCR_DLAB);    WRITE_L1_UART_REG( nasid, REG_LCR, lcr_reg );    /* enable indicated interrupts     */    icr_reg = READ_L1_UART_REG( nasid, REG_ICR );    icr_reg |= mask;    WRITE_L1_UART_REG( nasid, REG_ICR, icr_reg /*(ICR_RIEN | ICR_TIEN)*/ );}/* This requires the console lock */static voiduart_intr_disable( l1sc_t *sc, u_char mask ){    u_char lcr_reg, icr_reg;    nasid_t nasid = sc->nasid;    /* make sure that the DLAB bit in the LCR register is 0     */    lcr_reg = READ_L1_UART_REG( nasid, REG_LCR );    lcr_reg &= ~(LCR_DLAB);    WRITE_L1_UART_REG( nasid, REG_LCR, lcr_reg );    /* enable indicated interrupts     */    icr_reg = READ_L1_UART_REG( nasid, REG_ICR );    icr_reg &= mask;    WRITE_L1_UART_REG( nasid, REG_ICR, icr_reg /*(ICR_RIEN | ICR_TIEN)*/ );}#define uart_enable_xmit_intr(sc) \	uart_intr_enable((sc), ICR_TIEN)#define uart_disable_xmit_intr(sc) \        uart_intr_disable((sc), ~(ICR_TIEN))#define uart_enable_recv_intr(sc) \        uart_intr_enable((sc), ICR_RIEN)#define uart_disable_recv_intr(sc) \        uart_intr_disable((sc), ~(ICR_RIEN))/********************************************************************* * Routines for accessing a remote (router) UART */#define READ_RTR_L1_UART_REG(p, n, r, v)		\    {							\	if( vector_read_node( (p), (n), 0,		\			      RR_JBUS1(r), (v) ) ) {	\	    return UART_VECTOR;				\	}						\

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人国产免费视频| 午夜精品久久久久久久久| 亚洲人一二三区| 亚洲bdsm女犯bdsm网站| 黄页视频在线91| 97久久久精品综合88久久| 这里只有精品电影| 欧美激情一区二区| 亚洲专区一二三| 极品美女销魂一区二区三区| 99国产一区二区三精品乱码| 欧美日韩成人激情| 欧美激情一区二区三区不卡| 午夜精品一区在线观看| 国产成人高清视频| 欧美日韩国产高清一区二区三区| 久久先锋影音av鲁色资源网| 一区二区三区在线观看动漫 | 99精品视频在线观看| 欧美日韩精品一区视频| 欧美精彩视频一区二区三区| 亚洲第一狼人社区| 成人福利电影精品一区二区在线观看| 欧美日韩国产电影| 国产精品毛片久久久久久久| 蜜臀av性久久久久蜜臀aⅴ | 亚洲精品久久7777| 激情另类小说区图片区视频区| 91丨九色丨国产丨porny| 欧美一个色资源| 亚洲欧洲99久久| 精品一区二区三区免费播放| 色狠狠色狠狠综合| 国产精品网站一区| 久久 天天综合| 欧美日韩精品三区| 中文字幕亚洲区| 国产成人综合亚洲网站| 欧美日产在线观看| 亚洲狠狠丁香婷婷综合久久久| 国产精品一区免费视频| 欧美精品一区视频| 图片区小说区区亚洲影院| 91麻豆swag| 国产精品日日摸夜夜摸av| 精品一区二区三区av| 欧美日韩视频不卡| 一级女性全黄久久生活片免费| 成人午夜又粗又硬又大| 26uuu国产在线精品一区二区| 天天影视涩香欲综合网| 91视频观看视频| 中文av一区特黄| 国产很黄免费观看久久| 在线91免费看| 亚洲高清在线精品| 欧美无砖砖区免费| 一区二区三区欧美在线观看| 成人午夜私人影院| 国产精品久久久久国产精品日日| 国产一区二区三区香蕉| 精品成人一区二区三区四区| 欧美狂野另类xxxxoooo| 成人久久久精品乱码一区二区三区| 中文字幕免费在线观看视频一区| 美国毛片一区二区三区| 欧美一级免费观看| 亚洲丝袜制服诱惑| 色哟哟一区二区三区| 尤物在线观看一区| 欧美日韩国产区一| 国产成人精品亚洲777人妖 | 69堂成人精品免费视频| 亚洲国产裸拍裸体视频在线观看乱了| 一本色道久久综合亚洲91 | 色综合天天狠狠| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 秋霞午夜av一区二区三区| 欧美日韩高清不卡| 日韩精品电影一区亚洲| 日韩欧美在线影院| 激情五月激情综合网| 欧美成人官网二区| 国产一区视频网站| 亚洲国产精品v| 成人免费观看视频| 亚洲精品成人在线| 欧美日韩综合在线免费观看| 日日欢夜夜爽一区| 欧美国产1区2区| 白白色 亚洲乱淫| 亚洲裸体xxx| 欧美电影在哪看比较好| 蜜桃在线一区二区三区| 久久午夜老司机| 成人免费高清在线| 一区二区三区四区在线免费观看| 欧美最新大片在线看 | 欧美videossexotv100| 久久er99精品| 中文天堂在线一区| 欧洲色大大久久| 蜜桃久久av一区| 中文字幕av资源一区| 在线观看日韩精品| 久久精品国产第一区二区三区| 国产农村妇女精品| 欧美三级日本三级少妇99| 极品少妇xxxx精品少妇偷拍| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 欧美一级生活片| 国产精品综合av一区二区国产馆| 中文字幕一区二区三区不卡在线| 欧美日韩的一区二区| 国产一区二区成人久久免费影院 | 99re视频这里只有精品| 亚洲成a人v欧美综合天堂| 精品国产99国产精品| 色综合天天综合在线视频| 日韩国产欧美三级| 日本一区二区三区国色天香| 欧美日韩国产一级| 大胆亚洲人体视频| 日韩电影在线观看网站| 中文一区在线播放| 欧美欧美欧美欧美首页| 成人在线综合网| 琪琪久久久久日韩精品| 亚洲视频免费观看| 日韩视频一区在线观看| 91麻豆免费观看| 国产一区在线观看麻豆| 亚洲一二三区视频在线观看| 国产亚洲一二三区| 欧美日韩美女一区二区| 99久久777色| 国产一区二区三区久久悠悠色av| 亚洲国产欧美在线人成| 18涩涩午夜精品.www| 欧美白人最猛性xxxxx69交| 欧美性三三影院| 丁香激情综合五月| 久久精品国产亚洲高清剧情介绍| 亚洲精品视频在线看| 亚洲国产精品高清| 欧美大胆一级视频| 欧美视频一区二区三区四区| 成人精品一区二区三区四区 | 国产日韩高清在线| 91精品国产一区二区人妖| 91亚洲大成网污www| 99国产精品国产精品毛片| 国产精品亚洲成人| 人禽交欧美网站| 一区二区三区四区视频精品免费| 亚洲国产精品传媒在线观看| 欧美大白屁股肥臀xxxxxx| 欧美日韩免费不卡视频一区二区三区| www.亚洲激情.com| 国产**成人网毛片九色| 久99久精品视频免费观看| 日本欧洲一区二区| 亚洲国产精品一区二区尤物区| 亚洲欧美日韩久久精品| 中文字幕av不卡| 国产午夜精品一区二区| 2021久久国产精品不只是精品| 欧美一区二区私人影院日本| 欧美色手机在线观看| 欧美专区日韩专区| 欧美亚洲国产一区在线观看网站| 99国产一区二区三精品乱码| gogo大胆日本视频一区| 国产成人av在线影院| 懂色av噜噜一区二区三区av| 国产精品一区在线观看你懂的| 精品无人区卡一卡二卡三乱码免费卡| 日韩在线观看一区二区| 视频在线在亚洲| 日韩成人午夜精品| 美女视频黄免费的久久| 免费看欧美美女黄的网站| 日韩二区在线观看| 日韩中文字幕一区二区三区| 日韩电影在线观看网站| 免费美女久久99| 国产又粗又猛又爽又黄91精品| 久久精工是国产品牌吗| 激情文学综合网| 国产成人午夜精品5599| 粉嫩aⅴ一区二区三区四区五区| 国产成人超碰人人澡人人澡| 成人毛片老司机大片| 91麻豆免费看| 欧美日韩国产不卡| 日韩欧美国产电影| 久久综合久久99| 中文字幕一区日韩精品欧美| 亚洲人xxxx| 亚洲成av人片在线|