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

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

?? mmc_sysfs.c

?? mmc 記憶棒驅動 for linux ,可以看一看
?? C
字號:
/* *  linux/drivers/mmc/mmc_sysfs.c * *  Copyright (C) 2003 Russell King, All Rights Reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * *  MMC sysfs/driver model support. */#include <linux/module.h>#include <linux/init.h>#include <linux/device.h>#include <linux/idr.h>#include <linux/mmc/card.h>#include <linux/mmc/host.h>#include "mmc.h"#define dev_to_mmc_card(d)	container_of(d, struct mmc_card, dev)#define to_mmc_driver(d)	container_of(d, struct mmc_driver, drv)#define cls_dev_to_mmc_host(d)	container_of(d, struct mmc_host, class_dev)#define MMC_ATTR(name, fmt, args...)					\static ssize_t mmc_##name##_show (struct device *dev, struct device_attribute *attr, char *buf)	\{									\	struct mmc_card *card = dev_to_mmc_card(dev);			\	return sprintf(buf, fmt, args);					\}MMC_ATTR(cid, "%08x%08x%08x%08x\n", card->raw_cid[0], card->raw_cid[1],	card->raw_cid[2], card->raw_cid[3]);MMC_ATTR(csd, "%08x%08x%08x%08x\n", card->raw_csd[0], card->raw_csd[1],	card->raw_csd[2], card->raw_csd[3]);MMC_ATTR(scr, "%08x%08x\n", card->raw_scr[0], card->raw_scr[1]);MMC_ATTR(date, "%02d/%04d\n", card->cid.month, card->cid.year);MMC_ATTR(fwrev, "0x%x\n", card->cid.fwrev);MMC_ATTR(hwrev, "0x%x\n", card->cid.hwrev);MMC_ATTR(manfid, "0x%06x\n", card->cid.manfid);MMC_ATTR(name, "%s\n", card->cid.prod_name);MMC_ATTR(oemid, "0x%04x\n", card->cid.oemid);MMC_ATTR(serial, "0x%08x\n", card->cid.serial);#define MMC_ATTR_RO(name) __ATTR(name, S_IRUGO, mmc_##name##_show, NULL)static struct device_attribute mmc_dev_attrs[] = {	MMC_ATTR_RO(cid),	MMC_ATTR_RO(csd),	MMC_ATTR_RO(date),	MMC_ATTR_RO(fwrev),	MMC_ATTR_RO(hwrev),	MMC_ATTR_RO(manfid),	MMC_ATTR_RO(name),	MMC_ATTR_RO(oemid),	MMC_ATTR_RO(serial),	__ATTR_NULL};static struct device_attribute mmc_dev_attr_scr = MMC_ATTR_RO(scr);static void mmc_release_card(struct device *dev){	struct mmc_card *card = dev_to_mmc_card(dev);	kfree(card);}/* * This currently matches any MMC driver to any MMC card - drivers * themselves make the decision whether to drive this card in their * probe method.  However, we force "bad" cards to fail. */static int mmc_bus_match(struct device *dev, struct device_driver *drv){	struct mmc_card *card = dev_to_mmc_card(dev);	return !mmc_card_bad(card);}static intmmc_bus_uevent(struct device *dev, char **envp, int num_envp, char *buf,		int buf_size){	struct mmc_card *card = dev_to_mmc_card(dev);	char ccc[13];	int i = 0;#define add_env(fmt,val)						\	({								\		int len, ret = -ENOMEM;					\		if (i < num_envp) {					\			envp[i++] = buf;				\			len = snprintf(buf, buf_size, fmt, val) + 1;	\			buf_size -= len;				\			buf += len;					\			if (buf_size >= 0)				\				ret = 0;				\		}							\		ret;							\	})	for (i = 0; i < 12; i++)		ccc[i] = card->csd.cmdclass & (1 << i) ? '1' : '0';	ccc[12] = '\0';	i = 0;	add_env("MMC_CCC=%s", ccc);	add_env("MMC_MANFID=%06x", card->cid.manfid);	add_env("MMC_NAME=%s", mmc_card_name(card));	add_env("MMC_OEMID=%04x", card->cid.oemid);	return 0;}static int mmc_bus_suspend(struct device *dev, pm_message_t state){	struct mmc_driver *drv = to_mmc_driver(dev->driver);	struct mmc_card *card = dev_to_mmc_card(dev);	int ret = 0;	if (dev->driver && drv->suspend)		ret = drv->suspend(card, state);	return ret;}static int mmc_bus_resume(struct device *dev){	struct mmc_driver *drv = to_mmc_driver(dev->driver);	struct mmc_card *card = dev_to_mmc_card(dev);	int ret = 0;	if (dev->driver && drv->resume)		ret = drv->resume(card);	return ret;}static int mmc_bus_probe(struct device *dev){	struct mmc_driver *drv = to_mmc_driver(dev->driver);	struct mmc_card *card = dev_to_mmc_card(dev);	return drv->probe(card);}static int mmc_bus_remove(struct device *dev){	struct mmc_driver *drv = to_mmc_driver(dev->driver);	struct mmc_card *card = dev_to_mmc_card(dev);	drv->remove(card);	return 0;}static struct bus_type mmc_bus_type = {	.name		= "mmc",	.dev_attrs	= mmc_dev_attrs,	.match		= mmc_bus_match,	.uevent		= mmc_bus_uevent,	.probe		= mmc_bus_probe,	.remove		= mmc_bus_remove,	.suspend	= mmc_bus_suspend,	.resume		= mmc_bus_resume,};/** *	mmc_register_driver - register a media driver *	@drv: MMC media driver */int mmc_register_driver(struct mmc_driver *drv){	drv->drv.bus = &mmc_bus_type;	return driver_register(&drv->drv);}EXPORT_SYMBOL(mmc_register_driver);/** *	mmc_unregister_driver - unregister a media driver *	@drv: MMC media driver */void mmc_unregister_driver(struct mmc_driver *drv){	drv->drv.bus = &mmc_bus_type;	driver_unregister(&drv->drv);}EXPORT_SYMBOL(mmc_unregister_driver);/* * Internal function.  Initialise a MMC card structure. */void mmc_init_card(struct mmc_card *card, struct mmc_host *host){	memset(card, 0, sizeof(struct mmc_card));	card->host = host;	device_initialize(&card->dev);	card->dev.parent = card->host->dev;	card->dev.bus = &mmc_bus_type;	card->dev.release = mmc_release_card;}/* * Internal function.  Register a new MMC card with the driver model. */int mmc_register_card(struct mmc_card *card){	int ret;	snprintf(card->dev.bus_id, sizeof(card->dev.bus_id),		 "%s:%04x", mmc_hostname(card->host), card->rca);	ret = device_add(&card->dev);	if (ret == 0) {		if (mmc_card_sd(card)) {			ret = device_create_file(&card->dev, &mmc_dev_attr_scr);			if (ret)				device_del(&card->dev);		}	}	return ret;}/* * Internal function.  Unregister a new MMC card with the * driver model, and (eventually) free it. */void mmc_remove_card(struct mmc_card *card){	if (mmc_card_present(card)) {		if (mmc_card_sd(card))			device_remove_file(&card->dev, &mmc_dev_attr_scr);		device_del(&card->dev);	}	put_device(&card->dev);}static void mmc_host_classdev_release(struct class_device *dev){	struct mmc_host *host = cls_dev_to_mmc_host(dev);	kfree(host);}static struct class mmc_host_class = {	.name		= "mmc_host",	.release	= mmc_host_classdev_release,};static DEFINE_IDR(mmc_host_idr);static DEFINE_SPINLOCK(mmc_host_lock);/* * Internal function. Allocate a new MMC host. */struct mmc_host *mmc_alloc_host_sysfs(int extra, struct device *dev){	struct mmc_host *host;	host = kmalloc(sizeof(struct mmc_host) + extra, GFP_KERNEL);	if (host) {		memset(host, 0, sizeof(struct mmc_host) + extra);		host->dev = dev;		host->class_dev.dev = host->dev;		host->class_dev.class = &mmc_host_class;		class_device_initialize(&host->class_dev);	}	return host;}/* * Internal function. Register a new MMC host with the MMC class. */int mmc_add_host_sysfs(struct mmc_host *host){	int err;	if (!idr_pre_get(&mmc_host_idr, GFP_KERNEL))		return -ENOMEM;	spin_lock(&mmc_host_lock);	err = idr_get_new(&mmc_host_idr, host, &host->index);	spin_unlock(&mmc_host_lock);	if (err)		return err;	snprintf(host->class_dev.class_id, BUS_ID_SIZE,		 "mmc%d", host->index);	return class_device_add(&host->class_dev);}/* * Internal function. Unregister a MMC host with the MMC class. */void mmc_remove_host_sysfs(struct mmc_host *host){	class_device_del(&host->class_dev);	spin_lock(&mmc_host_lock);	idr_remove(&mmc_host_idr, host->index);	spin_unlock(&mmc_host_lock);}/* * Internal function. Free a MMC host. */void mmc_free_host_sysfs(struct mmc_host *host){	class_device_put(&host->class_dev);}static int __init mmc_init(void){	int ret = bus_register(&mmc_bus_type);	if (ret == 0) {		ret = class_register(&mmc_host_class);		if (ret)			bus_unregister(&mmc_bus_type);	}	return ret;}static void __exit mmc_exit(void){	class_unregister(&mmc_host_class);	bus_unregister(&mmc_bus_type);}module_init(mmc_init);module_exit(mmc_exit);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷综合久久久中文字幕| 日本一区二区三区高清不卡| 欧美电视剧免费全集观看| 国产欧美精品一区| 久久精品国产一区二区| 色婷婷av一区二区三区大白胸| 日韩精品在线一区二区| 亚洲国产精品一区二区尤物区| 国产一区在线精品| 91精品国产手机| 一区二区成人在线| 成人免费高清在线观看| 久久久久久一级片| 免费成人在线网站| 欧美日韩的一区二区| 亚洲男同性视频| 成人一级视频在线观看| 26uuu精品一区二区| 亚洲成av人片在线观看| 色综合天天综合网天天狠天天 | 中文字幕一区二区不卡| 国内久久婷婷综合| 91精品蜜臀在线一区尤物| 亚洲综合激情网| 色呦呦日韩精品| 中文字幕亚洲视频| av爱爱亚洲一区| 国产精品美女www爽爽爽| 国产高清不卡一区| 国产欧美综合在线观看第十页 | 久久综合国产精品| 麻豆精品新av中文字幕| 欧美电影影音先锋| 日韩av网站免费在线| 欧美一卡二卡在线| 麻豆精品视频在线观看免费 | 欧洲精品中文字幕| 亚洲精品成人在线| 欧美亚洲自拍偷拍| 亚洲成人精品一区| 欧美一区二区三区在线视频| 日本不卡高清视频| 亚洲日本va在线观看| 国产成人精品三级麻豆| 中文字幕一区二区三区色视频| 99久久久久久99| 亚洲视频一二三| 欧美午夜在线观看| 青青草一区二区三区| 日韩免费高清电影| 成人午夜免费视频| 一区二区三区小说| 日韩一区二区三区免费看| 国产一区二区三区四区五区美女| 中文字幕电影一区| 日本高清不卡视频| 日本美女视频一区二区| 久久久久久久久久看片| 色欧美88888久久久久久影院| 亚洲国产综合在线| 久久伊99综合婷婷久久伊| 91丝袜美女网| 免费看日韩精品| 国产精品色在线观看| 91久久精品一区二区二区| 日本不卡一区二区| 久久美女艺术照精彩视频福利播放| 99热99精品| 五月开心婷婷久久| 国产精品网站在线观看| 欧美精品三级日韩久久| 成人av电影免费在线播放| 日韩国产一二三区| 中文字幕亚洲区| 欧美不卡一二三| 在线中文字幕一区二区| 国产在线精品一区在线观看麻豆| 亚洲欧洲成人av每日更新| 日韩欧美一级二级三级| 色综合中文综合网| 麻豆精品国产91久久久久久 | 精品国产污污免费网站入口| 99国产精品国产精品毛片| 奇米精品一区二区三区四区| 亚洲欧洲av另类| 精品国产一区二区三区av性色 | 国产盗摄女厕一区二区三区 | 91精品国产欧美一区二区成人| 丁香网亚洲国际| 另类成人小视频在线| 亚洲午夜久久久久中文字幕久| 久久久国产综合精品女国产盗摄| 在线播放/欧美激情| 色综合婷婷久久| 不卡影院免费观看| 国产**成人网毛片九色| 日本少妇一区二区| 午夜国产不卡在线观看视频| 一区二区三区日韩| 国产精品欧美一区二区三区| 337p粉嫩大胆噜噜噜噜噜91av | 色综合久久综合| 东方欧美亚洲色图在线| 国产自产视频一区二区三区| 天天亚洲美女在线视频| 激情另类小说区图片区视频区| 日韩在线观看一区二区| 亚洲最大成人网4388xx| 亚洲欧美偷拍另类a∨色屁股| 中文字幕av资源一区| 精品国产露脸精彩对白| 精品日产卡一卡二卡麻豆| 91精品在线观看入口| 欧美男男青年gay1069videost | 大胆欧美人体老妇| 成人综合日日夜夜| 成人久久视频在线观看| 国产成人鲁色资源国产91色综| 国产精品 欧美精品| 国产一区二区三区国产| 韩国女主播成人在线| 久久se这里有精品| 国产曰批免费观看久久久| 激情文学综合插| 成人污污视频在线观看| 丰满少妇久久久久久久| 99久久精品99国产精品| 色综合久久久久| 欧美日韩精品系列| 日韩欧美另类在线| 久久老女人爱爱| 国产精品国产自产拍高清av王其| 国产拍欧美日韩视频二区| 1024成人网| 亚洲18女电影在线观看| 麻豆91免费看| 成人美女视频在线观看18| 欧美综合一区二区三区| 日韩一卡二卡三卡四卡| 久久久精品黄色| 亚洲欧洲综合另类| 青青草国产成人av片免费| 麻豆久久一区二区| 99免费精品视频| 日韩一区二区电影网| 欧美国产国产综合| 亚洲狠狠爱一区二区三区| 韩国午夜理伦三级不卡影院| 国产精品白丝jk黑袜喷水| 91黄色免费版| 日韩你懂的电影在线观看| 日韩毛片在线免费观看| 人妖欧美一区二区| 成人免费看视频| 日韩一区二区三区电影| 国产精品看片你懂得| 午夜久久电影网| 国产成人av影院| 欧美久久久久久蜜桃| 国产精品三级久久久久三级| 日韩av一区二区三区四区| 99精品视频在线免费观看| 日韩欧美国产成人一区二区| 一区二区三区在线观看欧美| 国产在线不卡一卡二卡三卡四卡| 色噜噜久久综合| 国产午夜精品一区二区三区四区| 夜夜精品视频一区二区| 国产成人鲁色资源国产91色综 | 日本色综合中文字幕| 99精品视频一区| 久久综合狠狠综合久久激情 | 有码一区二区三区| 国产乱色国产精品免费视频| 欧美精品久久99| 亚洲女女做受ⅹxx高潮| 国产麻豆精品一区二区| 3d动漫精品啪啪| 亚洲综合久久久久| 一本色道久久综合亚洲91| 亚洲福利一区二区三区| 成人午夜精品一区二区三区| 日韩欧美综合在线| 丝瓜av网站精品一区二区| 日本丰满少妇一区二区三区| 国产女同互慰高潮91漫画| 六月丁香婷婷久久| 日韩一区二区在线看| 日韩国产在线观看| 91精品国产欧美一区二区18 | 欧美日韩精品一区二区三区| 亚洲精品视频观看| 99视频热这里只有精品免费| 欧美激情一区二区三区四区| 激情亚洲综合在线| 国产亚洲女人久久久久毛片| 国产夫妻精品视频| 欧美国产禁国产网站cc| 99久久精品免费| 亚洲人亚洲人成电影网站色|