海思平台资料,Hi3511 Hi3512_PCI开发参考,介绍了Hi3511/Hi3512 芯片提供的 PCI 涉及的 API 函数及数据类型。
描述范围:
Hi3511/Hi3512 芯片提供符合 PCI Local Bus Specification, Revision 2.3 标准的 PCI 总线。用于挂载标准 PCI 设备(如 SATA 硬盘控制器,以太网控制器等)和实现多片Hi3511/Hi3512 芯片之间大数据量高速级联通信。
Hi3511/Hi3512 的 PCI 驱动软件主要包含以下几个部分:
符合 PCI Local Bus Specification, Revision 2.3 标准的 PCI 总线适配层,用于管理各种标准的 PCI 设备的资源。
Hi3511/Hi3512 作为标准 PCI 设备时的驱动软件,包括 Hi3511/Hi3512 作为 PCI 设备在启动时的软件加载。
函数列表:
函数描述方式:
本文用 10 个域对 API 参考信息进行描述。
结构体描述方式:
API 参考
Hi3511/Hi3512 PCI 配置空间访问接口函数族
pci_bus_read_config_byte/word/dword
【目的】
当 Hi3511/Hi3512 主设备挂载标准 PCI 设备时,提供访问 Hi3511/Hi3512 挂载的各个设备的配置寄存器空间。访问该 PCI 配置空间的方式有按字节、按字和按双字三种。
【语法】
int pci_bus_read_config_byte( struct pci_bus *bus, unsigned int devfn,
int where, u8 *val);
int pci_bus_read_config_word( struct pci_bus *bus, unsigned int devfn,
int where, u16 *val);
int pci_bus_read_config_dword( struct pci_bus *bus, unsigned int devfn,
int where, u32 *val);
【描述】
根据调用传入的 PCI 总线描述结构和设备号,找到相应的设备上的目标配置寄存器,并以一定的数据宽度(1 字节、2 字节或 4 字节)对目标配置寄存器的内容进行读操作。
【参数】
【返回值】
【需求】
头文件:#include <linux/pci.h>
【注意】
无。
【举例】
无。
【相关主题】
pci_bus_write_config_byte/word/dword
pci_bus_write_config_byte/word/dword
【目的】
当 Hi3511/Hi3512 主设备挂载标准 PCI 设备时,提供访问 Hi3511/Hi3512 挂载的各个设备的配置寄存器空间。访问该 PCI 配置空间的方式有按字节、按字和按双字三种。
【语法】
int pci_bus_write_config_byte ( struct pci_bus *bus, unsigned int devfn,
int where, u8 val);
int pci_bus_write_config_word ( struct pci_bus *bus, unsigned int devfn,
int where, u16 val);
int pci_bus_write_config_dword ( struct pci_bus *bus, unsigned int devfn,
int where, u32 val);
【描述】
根据调用传入的 PCI 总线描述结构和设备号,找到相应的设备上的目标配置寄存器,并以一定的数据宽度(1 字节、2 字节或 4 字节)对目标配置寄存器的内容进行写操作。
【参数】
【返回值】
【错误码】
无。
【需求】
头文件:#include <linux/pci.h>
【注意】
无。
【举例】
无。
【相关主题】
pci_bus_read_config_byte/word/dword
pci_read_config_byte/word/dword
【目的】
当 Hi3511/Hi3512 主设备挂载标准 PCI 设备时,提供访问 Hi3511/Hi3512 挂载的各个设备的配置寄存器空间。访问该 PCI 配置空间的方式有按字节、按字和按双字三种。
【语法】
int pci_read_config_byte( struct pci_dev *dev, int where, u8 *val);
int pci_read_config_word( struct pci_dev *dev, int where, u16 *val);
int pci_read_config_dword( struct pci_dev *dev, int where, u32 *val);
【描述】
根据调用传入的 PCI 设备描述结构,找到相应的设备上的目标配置寄存器,并以一定的数据宽度(1 字节、2 字节或 4 字节)对目标配置寄存器的内容进行读操作。
【参数】
【返回值】
【错误码】
无。
【需求】
头文件:#include <linux/pci.h>
【注意】
内核提供的配置空间访问机制中的 pci_bus_read/write_x(x 表示 byte、word 或 dword)和 pci_read/write_x 这两组接口函数实质上都是对同一组配置空间访问函数的回调。两者的传入参数虽有区别,但是 pci_read/write_x 的 dev 参数中包含有
pci_bus_read/write_x 的参数 bus 和 devfn 的信息。因此可根据开发时的上下文来决定使用更方便的接口。例如在做设备驱动软件开发时,通常 dev 参数是直接可以获取的,则使用 pci_read/write_x 这组接口。
内核代码中两组函数的关系:
static inline int pci_read_config_byte(struct pci_dev *dev, int where, u8
*val)
{
return pci_bus_read_config_byte (dev->bus, dev->devfn, where, val);
}
【举例】
#define PCI_COMMAND 0x04
#define PCI_COMMAND_MEMORY 0x2
static void pci_set_command(struct pci_dev *dev)
{
unsigned int cmd;
pci_read_config_dword(dev, PCI_COMMAND, &cmd);
cmd = (cmd | PCI_COMMAND_MEMORY );
pci_write_config_dword(dev, PCI_COMMAND, cmd);
#endif
}