本章介绍了下列关于内存处理的符号:
和内存管理相关的大部分函数和结构, 原型和定义在这些头文件.
在内核逻辑地址和物理地址之间转换的宏定义.
常量, 给出底层硬件的页的大小(字节)和一个页面号必须被移位来转变为一个物理地址的位数.
在系统内存映射中表示一个硬件页的结构.
宏定义, 在内核逻辑地址和它们相关的内存映射入口之间转换的. page_address 只用在低地址页或者已被明确映射的高地址页. pfn_to_page 转换一个页面号到它的相关的 struct page 指针.
kmap 返回一个内核虚拟地址, 被映射到给定页, 如果需要并创建映射. kunmap 为给定页删除映射.
kmap 的高性能版本; 结果的映射只能被原子代码持有. 对于驱动, type 应当是 KM_USER1, KM_USER1, KM_IRQ0, 或者 KM_IRQ1.
描述一个 VMA 的结构.
位于 mmap 核心的函数. 它们映射 size 字节的物理地址, 从 pfn 指出的页号开始到虚拟地址 virt_add. 和虚拟空间相关联的保护位在 prot 里指定. io_remap_page_range 应当在目标地址在 I/O 内存空间里时被使用.
转换一个由 vmalloc 获得的内核虚拟地址到它的对应的 struct page 指针.
函数, 加锁一个用户空间缓冲到内存并且返回对应的 struct page 指针. 调用者必须持有 mm->mmap_sem.
宏定义, 标识给定的页为"脏"(被修改)并且需要写到它的后备存储, 在它被释放前.
释放给定的页从页缓存中.
宏定义, 返回非零如果给定的 IOCB 需要同步执行.
函数, 指示一个异步 I/O 操作完成.
过时的不好的函数, 在内核, 虚拟, 和总线地址之间转换. 总线地址必须用来和外设通讯.
需要来定义通用 DMA 函数的头文件.
对于无法寻址整个 32-位范围的外设, 这个函数通知内核可寻址的地址范围并且如果可进行 DMA 返回非零.
分配和释放一致 DMA 映射, 对一个将持续在驱动的生命周期中的缓冲.
创建, 销毁, 和使用 DMA 池来管理小 DMA 区的函数.
符号, 用来告知流映射函数在什么方向数据移入或出缓冲.
创建和销毁一个单使用, 流 DMA 映射.
同步一个由一个流映射的缓冲. 必须使用这些函数, 如果处理器必须存取一个缓冲当使用流映射时.(即, 当设备拥有缓冲时).
这个散布表结构描述一个涉及不止一个缓冲的 I/O 操作. 宏 sg_dma_address he sg_dma_len 可用来抽取总线地址和缓冲长度来传递给设备, 当实现发散/汇聚操作时.
dma_map_sg 映射一个 发散/汇聚 操作, 并且 dma_unmap_sg 恢复这些映射. 如果在这个映射被激活时缓冲必须被存取, dma_sync_sg_* 可用来同步.
包含在 DMA 控制器中的被分配的通道的文本快照的文件. 基于 PCI 的 DMA 不显示, 因为每个板独立工作, 不需要分配一个通道在 DMA 控制器中.
定义或者原型化所有和 DMA 相关的函数和宏定义. 它必须被包含来使用任何下面符号.
存取 DMA 注册. 注册必须在使用 ISA DMA 通道之前进行.
获取和释放 DMA 自旋锁, 它必须被持有, 在调用其他的在这个列表中描述的 ISA DMA 函数之前. 它们在本地处理器上也关闭和重新使能中断
编程 DMA 信息在 DMA 控制器中. addr 是一个总线地址.
一个 DMA 通道必须被关闭在配置期间. 这些函数改变 DMA 通道的状态.
如果这驱动需要知道一个 DMA 传送在进行, 它可调用这个函数, 返回尚未完成的数据传输的数目. 在成功的 DMA 完成后, 这个函数返回 0; 值是不可预测的当数据仍然在传送时.
DMA flip-flop 被控制器用来传送 16-位值, 通过 2 个 8 位操作. 它必须被清除, 在发送任何数据给处理器之前.