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

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

?? ohci.h

?? host usb 主設備程序 支持sd卡 mouse keyboard 的最單單的驅動程序 gcc編譯
?? H
?? 第 1 頁 / 共 2 頁
字號:
 */struct ohci_hcd {	spinlock_t		lock;	/*	 * I/O memory used to communicate with the HC (dma-consistent)	 */	struct ohci_regs __iomem *regs;	/*	 * main memory used to communicate with the HC (dma-consistent).	 * hcd adds to schedule for a live hc any time, but removals finish	 * only at the start of the next frame.	 */	struct ohci_hcca	*hcca;	dma_addr_t		hcca_dma;	struct ed		*ed_rm_list;		/* to be removed */	struct ed		*ed_bulktail;		/* last in bulk list */	struct ed		*ed_controltail;	/* last in ctrl list */	struct ed		*periodic [NUM_INTS];	/* shadow int_table */	/*	 * OTG controllers and transceivers need software interaction;	 * other external transceivers should be software-transparent	 */	struct otg_transceiver	*transceiver;	/*	 * memory management for queue data structures	 */	struct dma_pool		*td_cache;	struct dma_pool		*ed_cache;	struct td		*td_hash [TD_HASH_SIZE];	struct list_head	pending;	/*	 * driver state	 */	int			num_ports;	int			load [NUM_INTS];	u32			hc_control;	/* copy of hc control reg */	unsigned long		next_statechange;	/* suspend/resume */	u32			fminterval;		/* saved register */	unsigned		autostop:1;	/* rh auto stopping/stopped */	unsigned long		flags;		/* for HC bugs */#define	OHCI_QUIRK_AMD756	0x01			/* erratum #4 */#define	OHCI_QUIRK_SUPERIO	0x02			/* natsemi */#define	OHCI_QUIRK_INITRESET	0x04			/* SiS, OPTi, ... */#define	OHCI_QUIRK_BE_DESC	0x08			/* BE descriptors */#define	OHCI_QUIRK_BE_MMIO	0x10			/* BE registers */#define	OHCI_QUIRK_ZFMICRO	0x20			/* Compaq ZFMicro chipset*/	// there are also chip quirks/bugs in init logic};/* convert between an hcd pointer and the corresponding ohci_hcd */static inline struct ohci_hcd *hcd_to_ohci (struct usb_hcd *hcd){	return (struct ohci_hcd *) (hcd->hcd_priv);}static inline struct usb_hcd *ohci_to_hcd (const struct ohci_hcd *ohci){	return container_of ((void *) ohci, struct usb_hcd, hcd_priv);}/*-------------------------------------------------------------------------*/#ifndef DEBUG#define STUB_DEBUG_FILES#endif	/* DEBUG */#define ohci_dbg(ohci, fmt, args...) \	dev_dbg (ohci_to_hcd(ohci)->self.controller , fmt , ## args )#define ohci_err(ohci, fmt, args...) \	dev_err (ohci_to_hcd(ohci)->self.controller , fmt , ## args )#define ohci_info(ohci, fmt, args...) \	dev_info (ohci_to_hcd(ohci)->self.controller , fmt , ## args )#define ohci_warn(ohci, fmt, args...) \	dev_warn (ohci_to_hcd(ohci)->self.controller , fmt , ## args )#ifdef OHCI_VERBOSE_DEBUG#	define ohci_vdbg ohci_dbg#else#	define ohci_vdbg(ohci, fmt, args...) do { } while (0)#endif/*-------------------------------------------------------------------------*//* * While most USB host controllers implement their registers and * in-memory communication descriptors in little-endian format, * a minority (notably the IBM STB04XXX and the Motorola MPC5200 * processors) implement them in big endian format. * * In addition some more exotic implementations like the Toshiba * Spider (aka SCC) cell southbridge are "mixed" endian, that is, * they have a different endianness for registers vs. in-memory * descriptors. * * This attempts to support either format at compile time without a * runtime penalty, or both formats with the additional overhead * of checking a flag bit. * * That leads to some tricky Kconfig rules howevber. There are * different defaults based on some arch/ppc platforms, though * the basic rules are: * * Controller type              Kconfig options needed * ---------------              ---------------------- * little endian                CONFIG_USB_OHCI_LITTLE_ENDIAN * * fully big endian             CONFIG_USB_OHCI_BIG_ENDIAN_DESC _and_ *                              CONFIG_USB_OHCI_BIG_ENDIAN_MMIO * * mixed endian                 CONFIG_USB_OHCI_LITTLE_ENDIAN _and_ *                              CONFIG_USB_OHCI_BIG_ENDIAN_{MMIO,DESC} * * (If you have a mixed endian controller, you -must- also define * CONFIG_USB_OHCI_LITTLE_ENDIAN or things will not work when building * both your mixed endian and a fully big endian controller support in * the same kernel image). */#ifdef CONFIG_USB_OHCI_BIG_ENDIAN_DESC#ifdef CONFIG_USB_OHCI_LITTLE_ENDIAN#define big_endian_desc(ohci)	(ohci->flags & OHCI_QUIRK_BE_DESC)#else#define big_endian_desc(ohci)	1		/* only big endian */#endif#else#define big_endian_desc(ohci)	0		/* only little endian */#endif#ifdef CONFIG_USB_OHCI_BIG_ENDIAN_MMIO#ifdef CONFIG_USB_OHCI_LITTLE_ENDIAN#define big_endian_mmio(ohci)	(ohci->flags & OHCI_QUIRK_BE_MMIO)#else#define big_endian_mmio(ohci)	1		/* only big endian */#endif#else#define big_endian_mmio(ohci)	0		/* only little endian */#endif/* * Big-endian read/write functions are arch-specific. * Other arches can be added if/when they're needed. * * REVISIT: arch/powerpc now has readl/writel_be, so the * definition below can die once the STB04xxx support is * finally ported over. */#if defined(CONFIG_PPC) && !defined(CONFIG_PPC_MERGE)#define readl_be(addr)		in_be32((__force unsigned *)addr)#define writel_be(val, addr)	out_be32((__force unsigned *)addr, val)#endifstatic inline unsigned int _ohci_readl (const struct ohci_hcd *ohci,					__hc32 __iomem * regs){#ifdef CONFIG_USB_OHCI_BIG_ENDIAN_MMIO	return big_endian_mmio(ohci) ?		readl_be (regs) :		readl (regs);#else	return readl (regs);#endif}static inline void _ohci_writel (const struct ohci_hcd *ohci,				 const unsigned int val, __hc32 __iomem *regs){#ifdef CONFIG_USB_OHCI_BIG_ENDIAN_MMIO	big_endian_mmio(ohci) ?		writel_be (val, regs) :		writel (val, regs);#else		writel (val, regs);#endif}#ifdef CONFIG_ARCH_LH7A404/* Marc Singer: at the time this code was written, the LH7A404 * had a problem reading the USB host registers.  This * implementation of the ohci_readl function performs the read * twice as a work-around. */#define ohci_readl(o,r)		(_ohci_readl(o,r),_ohci_readl(o,r))#define ohci_writel(o,v,r)	_ohci_writel(o,v,r)#else#define ohci_readl(o,r)		_ohci_readl(o,r)#define ohci_writel(o,v,r)	_ohci_writel(o,v,r)#endif/*-------------------------------------------------------------------------*//* cpu to ohci */static inline __hc16 cpu_to_hc16 (const struct ohci_hcd *ohci, const u16 x){	return big_endian_desc(ohci) ?		(__force __hc16)cpu_to_be16(x) :		(__force __hc16)cpu_to_le16(x);}static inline __hc16 cpu_to_hc16p (const struct ohci_hcd *ohci, const u16 *x){	return big_endian_desc(ohci) ?		cpu_to_be16p(x) :		cpu_to_le16p(x);}static inline __hc32 cpu_to_hc32 (const struct ohci_hcd *ohci, const u32 x){	return big_endian_desc(ohci) ?		(__force __hc32)cpu_to_be32(x) :		(__force __hc32)cpu_to_le32(x);}static inline __hc32 cpu_to_hc32p (const struct ohci_hcd *ohci, const u32 *x){	return big_endian_desc(ohci) ?		cpu_to_be32p(x) :		cpu_to_le32p(x);}/* ohci to cpu */static inline u16 hc16_to_cpu (const struct ohci_hcd *ohci, const __hc16 x){	return big_endian_desc(ohci) ?		be16_to_cpu((__force __be16)x) :		le16_to_cpu((__force __le16)x);}static inline u16 hc16_to_cpup (const struct ohci_hcd *ohci, const __hc16 *x){	return big_endian_desc(ohci) ?		be16_to_cpup((__force __be16 *)x) :		le16_to_cpup((__force __le16 *)x);}static inline u32 hc32_to_cpu (const struct ohci_hcd *ohci, const __hc32 x){	return big_endian_desc(ohci) ?		be32_to_cpu((__force __be32)x) :		le32_to_cpu((__force __le32)x);}static inline u32 hc32_to_cpup (const struct ohci_hcd *ohci, const __hc32 *x){	return big_endian_desc(ohci) ?		be32_to_cpup((__force __be32 *)x) :		le32_to_cpup((__force __le32 *)x);}/*-------------------------------------------------------------------------*//* HCCA frame number is 16 bits, but is accessed as 32 bits since not all * hardware handles 16 bit reads.  That creates a different confusion on * some big-endian SOC implementations.  Same thing happens with PSW access. * * FIXME: Deal with that as a runtime quirk when STB03xxx is ported over * to arch/powerpc */#ifdef CONFIG_STB03xxx#define OHCI_BE_FRAME_NO_SHIFT	16#else#define OHCI_BE_FRAME_NO_SHIFT	0#endifstatic inline u16 ohci_frame_no(const struct ohci_hcd *ohci){	u32 tmp;	if (big_endian_desc(ohci)) {		tmp = be32_to_cpup((__force __be32 *)&ohci->hcca->frame_no);		tmp >>= OHCI_BE_FRAME_NO_SHIFT;	} else		tmp = le32_to_cpup((__force __le32 *)&ohci->hcca->frame_no);	return (u16)tmp;}static inline __hc16 *ohci_hwPSWp(const struct ohci_hcd *ohci,                                 const struct td *td, int index){	return (__hc16 *)(big_endian_desc(ohci) ?			&td->hwPSW[index ^ 1] : &td->hwPSW[index]);}static inline u16 ohci_hwPSW(const struct ohci_hcd *ohci,                               const struct td *td, int index){	return hc16_to_cpup(ohci, ohci_hwPSWp(ohci, td, index));}/*-------------------------------------------------------------------------*/static inline void disable (struct ohci_hcd *ohci){	ohci_to_hcd(ohci)->state = HC_STATE_HALT;}#define	FI			0x2edf		/* 12000 bits per frame (-1) */#define	FSMP(fi)		(0x7fff & ((6 * ((fi) - 210)) / 7))#define	FIT			(1 << 31)#define LSTHRESH		0x628		/* lowspeed bit threshold */static inline void periodic_reinit (struct ohci_hcd *ohci){	u32	fi = ohci->fminterval & 0x03fff;	u32	fit = ohci_readl(ohci, &ohci->regs->fminterval) & FIT;	ohci_writel (ohci, (fit ^ FIT) | ohci->fminterval,						&ohci->regs->fminterval);	ohci_writel (ohci, ((9 * fi) / 10) & 0x3fff,						&ohci->regs->periodicstart);}/* AMD-756 (D2 rev) reports corrupt register contents in some cases. * The erratum (#4) description is incorrect.  AMD's workaround waits * till some bits (mostly reserved) are clear; ok for all revs. */#define read_roothub(hc, register, mask) ({ \	u32 temp = ohci_readl (hc, &hc->regs->roothub.register); \	if (temp == -1) \		disable (hc); \	else if (hc->flags & OHCI_QUIRK_AMD756) \		while (temp & mask) \			temp = ohci_readl (hc, &hc->regs->roothub.register); \	temp; })static inline u32 roothub_a (struct ohci_hcd *hc)	{ return read_roothub (hc, a, 0xfc0fe000); }static inline u32 roothub_b (struct ohci_hcd *hc)	{ return ohci_readl (hc, &hc->regs->roothub.b); }static inline u32 roothub_status (struct ohci_hcd *hc)	{ return ohci_readl (hc, &hc->regs->roothub.status); }static inline u32 roothub_portstatus (struct ohci_hcd *hc, int i)	{ return read_roothub (hc, portstatus [i], 0xffe0fce0); }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品三级在线观看| 国产综合色视频| 精品写真视频在线观看| 色欧美乱欧美15图片| 欧美哺乳videos| 一区二区三区在线播| 国产一区二区三区综合| 3d动漫精品啪啪| 亚洲小说欧美激情另类| eeuss国产一区二区三区| 欧美mv日韩mv亚洲| 日韩精品一二三四| 色又黄又爽网站www久久| 日本一区二区成人在线| 国产一区二三区好的| 日韩一区二区三区免费看| 亚洲一区二区视频| 在线免费观看不卡av| 国产精品久久久久久久久免费樱桃 | 久久蜜桃av一区二区天堂| 五月激情丁香一区二区三区| 色偷偷久久人人79超碰人人澡| 久久久久久久久久久久久久久99| 日韩在线卡一卡二| 欧美精三区欧美精三区| 亚洲一区二三区| 在线国产亚洲欧美| 亚洲午夜av在线| 欧美军同video69gay| 亚洲午夜视频在线| 69堂亚洲精品首页| 日日摸夜夜添夜夜添精品视频| 在线欧美日韩精品| 亚洲午夜精品网| 3751色影院一区二区三区| 亚洲成人综合视频| 日韩一区二区三区高清免费看看| 日韩国产欧美在线视频| 日韩视频在线一区二区| 久久精品72免费观看| 国产亚洲人成网站| caoporm超碰国产精品| 亚洲男同1069视频| 欧美情侣在线播放| 人人超碰91尤物精品国产| 精品国产sm最大网站| 国产激情一区二区三区| 中文字幕一区二区在线观看| 色综合久久综合网97色综合| 亚洲一二三四区不卡| 91精品国产福利在线观看| 久久99精品久久久久久国产越南| 久久精品亚洲精品国产欧美kt∨ | 久久成人久久爱| 日本一区二区视频在线| 91丨porny丨在线| 亚洲不卡在线观看| 欧美本精品男人aⅴ天堂| 国产91丝袜在线播放| 一区二区三区四区精品在线视频| 欧美日韩国产欧美日美国产精品| 久久精品av麻豆的观看方式| 国产精品久久毛片a| 欧美日韩国产大片| 粉嫩13p一区二区三区| 亚洲超丰满肉感bbw| 欧美激情中文字幕| 欧美日韩国产区一| 成人av电影免费在线播放| 亚洲成av人片一区二区三区| 精品国产a毛片| 欧美四级电影在线观看| 国产成人一级电影| 五月婷婷综合网| 国产精品免费丝袜| 日韩午夜小视频| 色妞www精品视频| 国产一区二区不卡老阿姨| 亚洲品质自拍视频| 国产午夜亚洲精品羞羞网站| 欧美剧情片在线观看| 成人黄色片在线观看| 麻豆成人免费电影| 亚洲午夜久久久久久久久久久| 国产欧美精品一区二区色综合| 欧美日韩国产不卡| 色综合av在线| 不卡的av中国片| 国产精品18久久久久久vr| 日韩福利视频网| 亚洲精品老司机| 国产精品成人免费| 欧美精品一区二区久久久| 欧美高清dvd| 色先锋资源久久综合| 国产精品亚洲专一区二区三区| 水蜜桃久久夜色精品一区的特点 | 欧洲精品一区二区三区在线观看| 国产精品一区二区在线播放| 麻豆精品一区二区三区| 午夜a成v人精品| 亚洲成人你懂的| 一个色综合av| 夜夜嗨av一区二区三区四季av| 国产视频一区二区在线观看| 欧美sm极限捆绑bd| 精品久久一区二区| 欧美成人精品3d动漫h| 91精品国产综合久久久久久久| 精品视频1区2区3区| 欧美偷拍一区二区| 欧美猛男gaygay网站| 欧美日韩久久一区二区| 欧美日精品一区视频| 欧美亚洲一区二区在线| 欧美日韩在线播放一区| 欧美日韩亚洲综合在线| 在线播放/欧美激情| 91精品午夜视频| 欧美大片一区二区三区| 欧美电影精品一区二区| 久久综合久色欧美综合狠狠| 久久综合九色综合欧美亚洲| 国产欧美在线观看一区| 日韩美女啊v在线免费观看| 亚洲女同一区二区| 亚洲123区在线观看| 免费观看日韩电影| 国产福利一区二区三区在线视频| 国产69精品久久99不卡| www..com久久爱| 欧美性生活一区| 日韩一区二区精品在线观看| 精品少妇一区二区三区在线播放 | www欧美成人18+| 国产精品欧美一级免费| 亚洲精品国产精华液| 天天综合天天做天天综合| 精品一区二区三区蜜桃| 成人短视频下载| 欧美伊人精品成人久久综合97 | 欧美手机在线视频| 精品少妇一区二区三区日产乱码 | 国产一区二区三区久久悠悠色av| 国产麻豆精品95视频| caoporn国产精品| 538在线一区二区精品国产| 久久婷婷国产综合国色天香 | 久久亚区不卡日本| 一区二区三区四区在线免费观看| 青青草视频一区| 26uuu国产电影一区二区| 日韩小视频在线观看专区| 2021久久国产精品不只是精品| 中文字幕一区二区5566日韩| 精品国产免费视频| 欧美在线视频你懂得| 美女www一区二区| 成人ar影院免费观看视频| 欧美一区二区三区喷汁尤物| 国产精品视频第一区| 日本 国产 欧美色综合| av不卡在线播放| 久久综合九色综合久久久精品综合| 综合在线观看色| 国内精品伊人久久久久av影院| 色婷婷综合久久久| 国产网站一区二区三区| 肉丝袜脚交视频一区二区| 99久久免费视频.com| www国产成人免费观看视频 深夜成人网| 亚洲久本草在线中文字幕| 国产精品亚洲专一区二区三区| 欧美猛男超大videosgay| 亚洲日本电影在线| 国产成都精品91一区二区三| 日韩精品一区在线| 亚洲妇熟xx妇色黄| 色综合色狠狠综合色| 欧美国产在线观看| 黄色日韩网站视频| 欧美成人在线直播| 日韩精品一区第一页| 在线观看一区日韩| 一区二区三区四区在线播放 | 日韩不卡手机在线v区| 日本高清无吗v一区| 国产精品入口麻豆九色| 成人午夜视频在线| 欧美国产日韩在线观看| 国产精品中文有码| 久久久久国产精品厨房| 国产一区二区影院| 久久久99精品免费观看不卡| 久久成人久久爱| 久久精品网站免费观看| 国产尤物一区二区在线| 欧美韩国一区二区| 91丝袜美腿高跟国产极品老师 | 欧美极品少妇xxxxⅹ高跟鞋|