pci memory-map region的prefetchable 和 nonprefetchable
来源:互联网 发布:腾讯视频 mac 10.9.5 编辑:程序博客网 时间:2024/05/07 05:30
在PCI设备驱动开发过程中,处理板载I/O和内存空间时,常常会遇到prefetchable和nonprefetchable两词,直译为可预取和不可预取。但是两者具体究竟是什么含义呢?在LDD3, Chapter 12: PCI Drivers一章找到了不错的解释,姑且一边翻译一边解读如下(原文:LDD3影印版p316,Accessing the I/O and Memory Spaces 下面一段):PCI设备会实现多至六个I/O地址区间(region)。每个区间由内存或I/O地址组成。大部分设备在内存区间实现其I/O寄存器,这样做也更合理(参考P236),不过,和普通内存不同,I/O寄存器不应该被CPU缓存,因为每次访问可能伴随副作用(side effect,如何理解这个副作用呢?比如,有些设备的中断状态寄存器只要一读取,便自动清零;这儿所谓副作用就是指读取某个地址时可能导致该地址内容发生变化)。把I/O寄存器实现成内存区间的PCI设备可以通过设定其配置空间寄存器的"内存为可预取"位(bit)来标明某地址区间是否可预取。如果内存区间被标记为可预取,那么CPU便会缓存其内容,访问时会进行各种优化方法;相反,访问不可预取内存时就不能进行优化,因为每次访问都伴随副作用,就和I/O端口一样。将其控制寄存器映射到内存地址范围的外设会把该范围置为不可预取,不过诸如PCI板卡上的显示内存(video memory)之类都是可预取的。
在内核中,PCI设备的I/O区间已集成到通用资源管理中。因此,欲知设备是否映射成内存或I/O空间,不需要直接访问配置变量(系统启动时,会将PCI配置空间信息导入到内核数据结构中)。比如:
unsigned long pci_resource_flags(struct pci_dev *dev, int bar);
可以返回某个资源的标志信息。
资源的标志可以用来定义一些自己独有的特性。比如对PCI I/O区间相关的PCI资源而言,可以从基址寄存器抽取出该信息,当然也能从不是和PCI设备相关联的资源中获取。
<linux/ioport.h>中定义了所有的资源标志,最重要的如下:
IORESOURCE_IO
IORESOURCE_MEM
如果存在相关的I/O区间,会设置如下两个标志之一:
IORESOURCE_PREFETCH
IORESOURCE_READONLY
这些标志标明内存区间是否可预取和/或写保护,PCI资源不会用到后面那个标志。
在内核中,PCI设备的I/O区间已集成到通用资源管理中。因此,欲知设备是否映射成内存或I/O空间,不需要直接访问配置变量(系统启动时,会将PCI配置空间信息导入到内核数据结构中)。比如:
unsigned long pci_resource_flags(struct pci_dev *dev, int bar);
可以返回某个资源的标志信息。
资源的标志可以用来定义一些自己独有的特性。比如对PCI I/O区间相关的PCI资源而言,可以从基址寄存器抽取出该信息,当然也能从不是和PCI设备相关联的资源中获取。
<linux/ioport.h>中定义了所有的资源标志,最重要的如下:
IORESOURCE_IO
IORESOURCE_MEM
如果存在相关的I/O区间,会设置如下两个标志之一:
IORESOURCE_PREFETCH
IORESOURCE_READONLY
这些标志标明内存区间是否可预取和/或写保护,PCI资源不会用到后面那个标志。
- pci memory-map region的prefetchable 和 nonprefetchable
- pci memory-map region的prefetchable 和 nonprefetchable
- PCIe学习笔记(13)--- Prefetchable and Non-Prefetchable Memory
- memblock memory type和reserve type region的添加
- #region和#endregion的作用
- 整理一下 PCI的Memory Mapped IO vs Port IO
- 整理一下 PCI的Memory Mapped IO vs Port IO
- PCI和PCI-E
- Memory Map
- Memory Map
- memory-map i/o和port-map i/o
- AGP与PCI-E的区别和PCI-E接口与PCI接口的区别
- C#中#region和#if的作用
- C#中的#region和#endregion的作用
- C# 中的 #region 和 #endregion的作用
- Region和Rect的一点比较
- MKMapView的Span和Region深入分析
- Region和Available Zone的区别
- Linux内核Makefile文件(二)
- Linux 标准目录结构
- 数据结构理解
- 网页图片自动缩小代码
- API HOOK
- pci memory-map region的prefetchable 和 nonprefetchable
- windows系统下在dos命令行kill掉被占用的pid
- 鼠标移动图片震动效果
- 鼠标移动图片变暗渐隐效果
- HDU 1394 Minimum Inversion Number (线段树+最小逆序数)
- AFNetwork作用和用法详解
- 图片广告随机显示代码
- android文件系统及其制作
- android如何让service不被杀死