9.硬件接口
硬件处理 |
函数名 |
功能 |
函数形成 |
参数 |
描述 |
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 |