正在加载
请稍等

菜单

红楼飞雪 梦

15526773247

文章

硬件接口

android 嵌入式开发, linux开发学习 by

硬件处理 函数名 功能 函数形成 参数 描述
Disable_irq_nosync 不用等待使一个irq无效 void inline disable_irq_nosync (unsigned int irq) irq为中断号 使所选择的中断线无效。使一个中断栈无效。与disable_ irq不同,这个函数并不确保IRQ处理程序的现有实例在退出前已经完成。可以从IRQ的上下文中调用该函数。
Disable_irq 等待完成使一个irq无效 void disable_irq (unsigned int irq) irq为中断号 使所选择的中断线无效。使一个中断栈无效。

这个函数要等待任何挂起的处理程序在退出之前已经完成。如果你在使用这个函数,同时还持有IRQ处理程序可能需要的一个资源,那么,你就可能死锁。要小心地从IRQ的上下文中调用这个函数。

Enable_irq 启用irq的 void enable_irq (unsigned int irq) irq为中断号 重新启用这条IRQ线上的中断处理。在IRQ的上下文中调用这个函数。
Probe_irq_mask 扫描中断线的位图 unsigned int probe_irq_mask (unsigned long val) val为要考虑的中断掩码 扫描ISA总线的中断线,并返回活跃中断的位图。然后把中断探测的逻辑状态返回给它以前的值。
MTRR处理 Mtrr_add 增加一种内存区类型 int mtrr_add (unsigned long base, unsigned long size, unsigned int type, char

increment)

base为内存区的物理基地址,size为内存区大小,type为MTRR期望的类型,increment为布尔值,如果为真,则增加该内存区的引用计数。 内存区类型寄存器控制着较新的Intel处理器或非Intel处理器上的高速缓存。这个函数可以增加请求MTRR的驱动程序。每个处理器实现的详细资料和硬件细节都对调用者隐藏。如果不能增加内存区,则可能因为所有的区都在使用,或CPU就根本不支持,于是返回一个负数。成功则返回一个寄存器号,但应当仅仅当作一个cookie来对待。

可用的类型为:

MTRR_TYPE_UNCACHEABLE :无高速缓存

MTRR_TYPE_WRITEBACK:随时以猝发方式写回MTRR_TYPE_WRCOMB:立即写回,但允许猝发

Mtrr_del 删除一个内存区类型 int mtrr_del (int reg, unsigned long base, unsigned long size); reg为由mtrr_add返回的寄存器,base为物理基地址,size为内存区大小。 如果提供了寄存器reg,则base和size都可忽略。这就是驱动程序如何调用寄存器。如果引用计数降到0,则释放该寄存器,该内存区退回到缺省状态。成功则返回寄存器,失败则返回一个负数。
PCI支持库 pci_find_slot 从一个给定的PCI插槽定位PCI struct pci_dev * pci_find_slot (unsigned int bus, unsigned int devfn) bus为所找PCI设备所驻留的PCI总线的成员,devfn为PCI插槽的成员。 给定一个PCI总线和插槽号,所找的PCI设备位于PCI设备的系统全局链表中。如果设备被找到,则返回一个指向它的数据结构,否则返回空。
pci_find_device 根据PCI标识号开始或继续搜索一个设备 struct pci_dev * pci_find_device (unsigned int vendor, unsigned int device,

const struct pci_dev * from)

vendor为要匹配的PCI商家id,或要与所有商家id匹配的PCI_ANY_ID,device为要匹配的PCI设备id,或要与所有商家id匹配的PCI_ANY_ID,from为以前搜索中找到的PCI设备,或对于一个新的搜索来说为空。 循环搜索已知PCI设备的链表。如果找到与vendor和device匹配的PCI设备,则返回指向设备结构的指针,否则返回NULL。

给from参数传递NULL参数则开始一个新的搜索,否则,如果from不为空,则从那个点开始继续搜索。

 

pci_find_class 根据类别开始或继续搜索一个设备 struct pci_dev * pci_find_class (unsigned int class, const struct pci_dev *

from)

class:根据类别名称搜索PCI设备;

Previous:在搜索着找到的PCI设备,对于新的搜索则为NULL。

 

循环搜索已知PCI设备的链表。如果找到与 class匹配的PCI设备,则返回指向设备结构的指针,否则返回NULL。

给from参数传递NULL参数则开始一个新的搜索,否则,如果from不为空,则从那个点开始继续搜索。

pci_find_capability 查询设备的权能 int pci_find_capability (struct pci_dev * dev, int cap) dev为要查询的PCI设备,

cap为权能取值。

 

断定一个设备是否支持给定PCI权能。返回在设备PCI配置空间内所请求权能结构的地址,如果设备不支持这种权能,则返回0。
pci_find_parent_resource 返回给定区父总线的资源区 struct resource * pci_find_parent_resource (const struct pci_dev * dev,

struct resource * res)

dev为设备结构,该结构包括要搜索的资源,res为要搜索的子资源记录。 对于给定设备的给定资源区,返回给定区所包含的父总线的资源区。
pci_set_power_state 设置一个设备电源管理的状态。 int pci_set_power_state (struct pci_dev * dev, int new_state) dev为PCI设备,new_state为新的电源管理声明(0 == D0, 3 == D3等) 设置设备的电源管理状态。对于从状态D3的转换,并不像想象的那么简单,因为很多设备在唤醒期间忘了它们的配置空间。返回原先的电源状态。
pci_save_state 保存设备在挂起之前PCI的配置空间 int pci_save_state (struct pci_dev * dev, u32 * buffer) dev为我们正在处理的PCI设备,buffer为持有配置空间的上下文。 缓冲区必须足够大,以保持整个PCI2.2的配置空间(>= 64 bytes)。
pci_restore_state 恢复PCI设备保存的状态 int pci_restore_state (struct pci_dev * dev, u32 * buffer) dev为我们正在处理的PCI设备,buffer为保存的配置空间。  
pci_enable_device 驱动程序使用设备前进行初始化 int pci_enable_device (struct pci_dev * dev) dev为要初始化的PCI设备。 驱动程序使用设备前对设备进行初始化。请求低级代码启用I/O和内存。如果设备被挂起,则唤醒它。小心,这个函数可能失败。
pci_disable_device 使用PCI设备之后使其无效 void pci_disable_device (struct pci_dev * dev) dev为使无效的PCI设备 向系统发送信号,以表明系统不再使用PCI设备。这仅仅包括使PCI总线控制(如果激活)无效。
pci_enable_wake 当设备被挂起时启用设备产生PME# int pci_enable_wake (struct pci_dev * dev, u32 state, int enable) dev为对其实施操作的PCI 设备,state为设备的当前状态,enable为启用或禁用“产生”的标志。 当系统被挂起时,在设备的PM能力中设置位以产生PME#。如果设备没有PM能力,则返回-EIO。如果设备支持它,则返回-EINVAL,但不能产生唤醒事件。如果操作成功,则返回0。
pci_release_regions 释放保留的PCI I/O和内存资源 void pci_release_regions (struct pci_dev * pdev) pdev 为PCI设备,其资源以前曾由pci_request_regions保留。 释放所有的PCI I/O和以前对pci_request_regions成功调用而使用的内存。只有在PCI区的所有使用都停止后才调用这个函数。
pci_request_regions 保留PCI I/O和内存资源 int pci_request_regions (struct pci_dev * pdev, char * res_name) pdev为PCI设备,它的资源要被保留,res_name为与资源相关的名字。 把所有与PCI设备pdev相关联的PCI区进行标记,设备pdev是由属主res_name保留的。除非这次调用成功返回,否则不要访问PCI内的任何地址。

成功返回0,出错返回EBUSY,失败时也打印警告信息。

pci_register_driver 注册一个PCI设备 int pci_register_driver (struct pci_driver * drv) drv为要注册的驱动程序结构。

 

 

把驱动程序结构增加到已注册驱动程序链表,返回驱动程序注册期间所声明的PCI设备号。即使返回值为0,驱动程序仍然是已注册。
pci_unregister_driver 注销一个PCI设备 void pci_unregister_driver (struct pci_driver * drv) drv为要注销的驱动程序结构。 从已注册的PCI驱动程序链表中删除驱动程序结构,对每个驱动程序所驱动的设备,通过调用驱动程序的删除函数,给它一个清理的机会,把把这些设备标记为无驱动程序的。
pci_insert_device 插入一个热插拔设备 void pci_insert_device (struct pci_dev * dev, struct pci_bus * bus) dev为要插入的设备,bus为PCI总线,设备就插入到该总线。 把一个新设备插入到设备列表,并向用户空间(/sbin/hotplug)发出通知。
pci_remove_device 删除一个热插拔设备 void pci_remove_device (struct pci_dev * dev) dev为要删除的设备 把一个新设备从设备列表删除,并向用户空间(/sbin/hotplug)发出通知。
pci_dev_driver 获得一个设备的pci_driver struct pci_driver * pci_dev_driver (const struct pci_dev * dev) dev为要查询的设备 返回合适的pci_driver结构,如果一个设备没有注册的驱动程序,则返回NULL。

 

pci_set_master 为设备dev启用总线控制 void pci_set_master (struct pci_dev * dev) dev为要启用的设备 启用设备上的总线控制,并调用pcibios_set_master对特定的体系结构进行设置。
pci_setup_device 填充一个设备的类和映射信息 int pci_setup_device (struct pci_dev * dev) dev为要填充的设备结构 用有关设备的商家、类型、内存及IO空间地址,IRO线等初始化设备结构。在PCI子系统初始化时调用该函数。成功返回0,设备类型未知返回-1

 

 

02 2015-12

 

我要 分享

 

 

本文 作者

 

相关 文章