- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
reques_region和request_mem_region实现
reques_region和request_mem_region实现
request_region()函数用于申请IO端口,而request_mem_region用于申请IO内存。这两个函数都是宏定义,
#define request_region(start,n,name) __request_region(ioport_resource, (start), (n), (name))
#define request_mem_region(start,n,name) __request_region(iomem_resource, (start), (n), (name))
struct resource {
const char *name;
unsigned long start, end;
unsigned long flags;
struct resource *parent, *sibling, *child;
};
其中ioport_resouce 和iomem_resource定义如下:
struct resource ioport_resource = {
.name = PCI IO,
.start = 0x0000,
.end = IO_SPACE_LIMIT,//在ARM平台IO_SPACE_LIMIT=0xffffffff
.flags = IORESOURCE_IO,
};
struct resource iomem_resource = {
.name = PCI mem,
.start = 0UL,
.end = ~0UL,
.flags = IORESOURCE_MEM,
};
__request_region函数定义如下:start为起始地址,long为长度,name为设备名
struct resource * __request_region(struct resource *parent, unsigned long start, unsigned long n, const char *name)
{
struct resource *res = kmalloc(sizeof(*res), GFP_KERNEL);
if (res) {
memset(res, 0, sizeof(*res));
res-name = name;
res-start = start;
res-end = start + n - 1;
res-flags = IORESOURCE_BUSY;
write_lock(resource_lock);
for (;;) {
struct resource *conflict;
conflict = __request_resource(parent, res);
if (!conflict)/* 返回NULL证明找到了合适的空间 */
break;
if (conflict != parent) {
parent = conflict;
if (!(conflict-flags IORESOURCE_BUSY))
continue;
}
/* Uhhuh, that didnt work out.. */
kfree(res);//函数调用失败
res = NULL;
break;
}
write_unlock(resource_lock);
}
return res;
}
__request_resource定义如下:
/* Return the conflict entry if you cant request it */
static struct resource * __request_resource(struct resource *root, struct resource *new)
{
unsigned long start = new-start;
unsigned long end = new-end;
struct resource *tmp, **p;
/* 三个if进行出错处理 ,如果返回root,则request_resource函数返回NULL*/
if (end start)
return root;
if (start root-start)
return root;
if (end root-end)
return root;
p = root-child;
for (;;) {
tmp = *p;
if (!tm
您可能关注的文档
- Ping不通的十大原因.doc
- Ping命令使用技巧.doc
- ping通但不能上网解决方法.doc
- poi的变化.doc
- POP制作小技巧.doc
- postfix-Sasl配置实例.doc
- POS机代码类型.doc
- PP,PVC,PPS,ASA 塑料特性、成型工艺、用途.doc
- ppt变文档.doc
- PPT制作操作.doc
- 2025年广播电视编辑记者题库试题【考点精练】附答案详解.docx
- 2025年广播电视编辑记者高分题库及答案详解(最新).docx
- 广播电视编辑记者考试彩蛋押题含答案详解(典型题).docx
- 广播电视编辑记者常考点试卷【实用】附答案详解.docx
- 广播电视编辑记者考试黑钻押题附答案详解(研优卷).docx
- 2025广播电视编辑记者考试综合练习含答案详解(综合题).docx
- 2025国家电网招聘考试自我提分评估(各地真题)附答案详解.docx
- 2025年广播电视编辑记者过关检测试卷附答案详解(精练).docx
- 2025年广播电视编辑记者考试综合练习及参考答案详解(实用).docx
- 2025年广播电视编辑记者测试卷含答案详解【满分必刷】.docx
最近下载
- QBT5510-2021 家用电冰箱保鲜性能试验方法.pdf VIP
- 纸箱生产技术培训.docx VIP
- 金属成型软件:PAM-STAMP二次开发_(14).用户界面与图形编程.docx VIP
- TJ9-74 工业与民用建筑结构荷载规范.pdf VIP
- ±800kV及以下直流架空输电线路工程施工及验收规程.pdf VIP
- 2025年勘察设计注册土木工程师水利水电工程资格考试基础考试大纲.pdf VIP
- 纸箱生产工艺流程.ppt VIP
- 2025汽车驾驶员高级技师基本理论知识考试题(+答案解析).docx VIP
- 固化剂化学品安全技术说明书.docx VIP
- 浙江省居住建筑节能设计标准.pdf VIP
文档评论(0)