VME 设备驱动程序¶
驱动程序注册¶
与 Linux 内核中的其他子系统一样,VME 设备驱动程序向 VME 子系统注册,通常从设备的初始化例程中调用。 这通过调用 vme_register_driver() 来实现。
必须向注册函数提供指向 struct vme_driver 类型结构的指针,以及您的驱动程序能够支持的最大设备数量。
至少应正确设置 struct vme_driver 的 ‘.name’、’.match’ 和 ‘.probe’ 元素。 ‘.name’ 元素是指向保存设备驱动程序名称的字符串的指针。
‘.match’ 函数允许控制应向哪个 VME 设备注册驱动程序。 如果应探测设备,则匹配函数应返回 1,否则返回 0。 此示例匹配函数(来自 vme_user.c)将探测的设备数量限制为一个
#define USER_BUS_MAX 1
...
static int vme_user_match(struct vme_dev *vdev)
{
if (vdev->id.num >= USER_BUS_MAX)
return 0;
return 1;
}
‘.probe’ 元素应包含指向探测例程的指针。 探测例程将 struct vme_dev 指针作为参数传递。
在此,“num”字段是指此特定驱动程序的顺序设备 ID。 可以使用 dev->bridge->num 访问桥号(或总线号)。
还提供了一个函数来从 VME 内核取消注册驱动程序,该函数称为 vme_unregister_driver(),通常应从设备驱动程序的退出例程中调用该函数。
资源管理¶
驱动程序向 VME 内核注册后,将调用提供的匹配例程,调用的次数是在注册期间指定的。 如果匹配成功,则应返回非零值。 返回零值表示失败。 对于所有成功的匹配,将调用相应驱动程序的探测例程。 探测例程会传递一个指向设备设备结构的指针。 应保存此指针,请求 VME 资源时需要它。
驱动程序可以请求一个或多个主窗口 (vme_master_request())、从窗口 (vme_slave_request()) 和/或 DMA 通道 (vme_dma_request()) 的所有权。 API 不是允许设备驱动程序请求特定的窗口或 DMA 通道(可能被不同的驱动程序使用),而是允许根据相关驱动程序的所需属性分配资源。 对于从窗口,这些属性分为需要在“aspace”中访问的 VME 地址空间和在“cycle”中需要的 VME 总线周期类型。 主窗口在“width”中添加了一组额外的属性,用于指定所需的数据传输宽度。 这些属性定义为位掩码,因此可以为单个窗口请求属性的任何组合,内核将分配一个满足要求的窗口,返回一个 vme_resource 类型的指针,该指针应用于标识使用时分配的资源。 对于 DMA 控制器,请求函数需要以路由属性提供任何传输的潜在方向。 这通常是 VME 到 MEM 和/或 MEM 到 VME,尽管某些硬件可以支持 VME 到 VME 和 MEM 到 MEM 传输以及测试模式生成。 如果找不到符合要求的未分配窗口,则将返回 NULL 指针。
还提供了用于释放不再需要的窗口分配的函数。 这些函数 (vme_master_free()、vme_slave_free() 和 vme_dma_free()) 应传递在资源分配期间提供的资源指针。
主窗口¶
主窗口提供从本地处理器到 VME 总线的访问。 可用窗口的数量和可用的访问模式取决于底层芯片组。 窗口必须先配置才能使用。
主窗口配置¶
分配主窗口后,可以使用 vme_master_set() 进行配置,可以使用 vme_master_get() 检索当前设置。 地址空间、传输宽度和周期类型与资源管理下描述的相同,但是某些选项是互斥的。 例如,只能指定一个地址空间。
主窗口访问¶
函数 vme_master_read() 可用于从配置的主窗口读取,vme_master_write() 可用于写入配置的主窗口。
除了简单的读取和写入之外,还提供了 vme_master_rmw() 来执行读取-修改-写入事务。 还可以使用 vme_master_mmap() 将 VME 窗口的部分映射到用户空间内存中。
从窗口¶
从窗口提供 VME 总线上的设备访问到本地内存的映射部分。 可用窗口的数量和可以使用的访问模式取决于底层芯片组。 窗口必须先配置才能使用。
从窗口配置¶
分配从窗口后,可以使用 vme_slave_set() 进行配置,可以使用 vme_slave_get() 检索当前设置。
地址空间、传输宽度和周期类型与资源管理下描述的相同,但是某些选项是互斥的。 例如,只能指定一个地址空间。
从窗口缓冲区分配¶
提供了一些函数,允许用户分配 (vme_alloc_consistent()) 和释放 (vme_free_consistent()) VME 桥可访问的连续缓冲区。 这些函数不必使用,可以使用其他方法来分配缓冲区,但必须注意确保它们是连续的并且 VME 桥可以访问。
从窗口访问¶
从窗口将本地内存映射到 VME 总线上,应使用访问内存的标准方法。
DMA 通道¶
VME DMA 传输提供运行链接列表 DMA 传输的能力。 API 引入了 DMA 列表的概念。 每个 DMA 列表都是一个链接列表,可以传递给 DMA 控制器。 可以创建、扩展、执行、重用和销毁多个列表。
列表管理¶
提供了函数 vme_new_dma_list() 来创建 DMA 列表,提供了 vme_dma_list_free() 来销毁 DMA 列表。 列表的执行不会自动销毁列表,从而使列表可以重用于重复性任务。
列表填充¶
可以使用 vme_dma_list_add() 将项目添加到列表中(需要在调用此函数之前创建源和目标属性,这在“传输属性”下介绍)。
注意
在将条目添加到 DMA 列表之前,不会检查传输源和目标的详细属性,请求 DMA 通道只是检查控制器预期传输数据的方向。 因此,此调用可能会返回错误,例如,如果源或目标位于不受支持的 VME 地址空间中。
传输属性¶
源和目标的属性与将项目添加到列表中分开处理。 这是由于每种类型的源和目标所需的各种属性所致。 有一些函数可以为 PCI、VME 和模式源和目标(如果适用)创建属性
PCI 源或目标:
vme_dma_pci_attribute()VME 源或目标:
vme_dma_vme_attribute()
函数 vme_dma_free_attribute() 应用于释放属性。
列表执行¶
函数 vme_dma_list_exec() 将列表排队以供执行,并在列表执行完毕后返回。
中断¶
VME API 提供了一些函数,用于将回调附加到特定的 VME 级别和状态 ID 组合,以及用于生成具有特定 VME 级别和状态 ID 的 VME 中断。
附加中断处理程序¶
函数 vme_irq_request() 可用于附加,vme_irq_free() 可用于释放特定的 VME 级别和状态 ID 组合。 任何给定的组合只能分配一个回调函数。 提供了一个 void 指针参数,其值会传递给回调函数,此指针的用途由用户定义。 回调参数如下。 在编写回调函数时必须小心,回调函数在中断上下文中运行
void callback(int level, int statid, void *priv);
中断生成¶
函数 vme_irq_generate() 可用于在给定的 VME 级别和 VME 状态 ID 生成 VME 中断。
位置监视器¶
VME API 提供以下功能来配置位置监视器。
位置监视器管理¶
提供了函数 vme_lm_request() 来请求使用位置监视器块,提供了 vme_lm_free() 在不再需要它们后释放它们。 每个块可以提供多个位置监视器,监视相邻位置。 函数 vme_lm_count() 可用于确定提供了多少个位置。
位置监视器配置¶
分配了位置监视器库后,提供了函数 vme_lm_set() 来配置位置监视器的位置和模式。 函数 vme_lm_get() 可用于检索现有设置。
位置监视器使用¶
函数 vme_lm_attach() 允许将回调附加到每个位置监视器位置,vme_lm_detach() 允许从每个位置监视器位置分离。 每个位置监视器可以监视多个相邻位置。 回调函数声明如下。
void callback(void *data);
插槽检测¶
函数 vme_slot_num() 返回所提供的桥的插槽 ID。
总线检测¶
函数 vme_bus_num() 返回所提供的桥的总线 ID。
VME API¶
-
struct vme_dev¶
表示 VME 设备的结构
定义:
struct vme_dev {
int num;
struct vme_bridge *bridge;
struct device dev;
struct list_head drv_list;
struct list_head bridge_list;
};
成员
num设备号
bridge指向此设备所在桥设备的指针
dev内部设备结构
drv_list设备列表(每个驱动程序)
bridge_list设备列表(每个桥)
-
struct vme_driver¶
表示 VME 驱动程序的结构
定义:
struct vme_driver {
const char *name;
int (*match)(struct vme_dev *);
int (*probe)(struct vme_dev *);
void (*remove)(struct vme_dev *);
struct device_driver driver;
struct list_head devices;
};
成员
name驱动程序名称,在 VME 驱动程序中应唯一,并且通常与模块名称相同。
match用于确定是否应运行探测的回调。
probe用于设备绑定的回调,在新设备被检测到时调用。
remove回调,在删除设备时调用。
driver底层通用设备驱动程序结构。
devices与此驱动程序关联的 VME 设备列表 (
struct vme_dev)。
-
void *vme_alloc_consistent(struct vme_resource *resource, size_t size, dma_addr_t *dma)¶
分配连续内存。
参数
struct vme_resource *resource指向 VME 资源的指针。
size_t size所需分配的大小。
dma_addr_t *dma指向变量的指针,用于存储分配的物理地址。
描述
为驱动程序分配一个连续的内存块以供使用。 这用于创建从窗口的缓冲区。
返回
成功时返回分配的虚拟地址,失败时返回 NULL。
-
void vme_free_consistent(struct vme_resource *resource, size_t size, void *vaddr, dma_addr_t dma)¶
释放先前分配的内存。
参数
struct vme_resource *resource指向 VME 资源的指针。
size_t size要释放的分配的大小。
void *vaddr分配的虚拟地址。
dma_addr_t dma分配的物理地址。
描述
释放先前分配的连续内存块。
-
size_t vme_get_size(struct vme_resource *resource)¶
返回 VME 窗口大小的辅助函数
参数
struct vme_resource *resource指向 VME 从属或主属资源的指针。
描述
确定所提供的 VME 窗口的大小。 这是一个辅助函数,它包装了对 vme_master_get 或 vme_slave_get 的调用,具体取决于传递给它的窗口资源类型。
返回
成功时返回窗口大小,失败时返回零。
-
struct vme_resource *vme_slave_request(struct vme_dev *vdev, u32 address, u32 cycle)¶
请求 VME 从设备窗口资源。
参数
struct vme_dev *vdev指向分配给驱动程序实例的 VME 设备的指针
struct vme_dev。u32 address所需的 VME 地址空间。
u32 cycle所需的 VME 数据传输周期类型。
描述
请求使用一个 VME 窗口资源,该资源能够设置为请求的地址空间和数据传输周期。
返回
成功时返回指向 VME 资源的指针,失败时返回 NULL。
-
int vme_slave_set(struct vme_resource *resource, int enabled, unsigned long long vme_base, unsigned long long size, dma_addr_t buf_base, u32 aspace, u32 cycle)¶
设置 VME 从设备窗口配置。
参数
struct vme_resource *resource指向 VME 从设备资源的指针。
int enabled窗口应配置到的状态。
unsigned long long vme_base窗口的基地址。
unsigned long long sizeVME 窗口的大小。
dma_addr_t buf_base用于提供 VME 从设备窗口存储的缓冲区的基地址。
u32 aspaceVME 窗口的 VME 地址空间。
u32 cycleVME 窗口的 VME 数据传输周期类型。
描述
设置提供的 VME 从设备窗口的配置。
返回
- 成功时返回零,如果设备不支持该操作、提供了无效的资源或提供了无效的属性,则返回 -EINVAL。也可能返回硬件特定的错误。
设备错误,如果提供了无效资源或提供了无效属性。也可能返回硬件相关的错误。
-
int vme_slave_get(struct vme_resource *resource, int *enabled, unsigned long long *vme_base, unsigned long long *size, dma_addr_t *buf_base, u32 *aspace, u32 *cycle)¶
检索 VME 从设备窗口配置。
参数
struct vme_resource *resource指向 VME 从设备资源的指针。
int *enabled指向用于存储状态的变量的指针。
unsigned long long *vme_base指向用于存储窗口基地址的变量的指针。
unsigned long long *size指向用于存储窗口大小的变量的指针。
dma_addr_t *buf_base指向用于存储从设备缓冲区基地址的变量的指针。
u32 *aspace指向用于存储 VME 地址空间的变量的指针。
u32 *cycle指向用于存储 VME 数据传输周期类型的变量的指针。
描述
返回提供的 VME 从设备窗口的配置。
返回
- 成功时返回零,如果设备不支持该操作、提供了无效的资源或提供了无效的属性,则返回 -EINVAL。也可能返回硬件特定的错误。
设备或提供了无效资源。
-
void vme_slave_free(struct vme_resource *resource)¶
释放 VME 从设备窗口
参数
struct vme_resource *resource指向 VME 从设备资源的指针。
描述
释放提供的从设备资源,以便可以重新分配它。
-
struct vme_resource *vme_master_request(struct vme_dev *vdev, u32 address, u32 cycle, u32 dwidth)¶
请求 VME 主设备窗口资源。
参数
struct vme_dev *vdev指向分配给驱动程序实例的 VME 设备的指针
struct vme_dev。u32 address所需的 VME 地址空间。
u32 cycle所需的 VME 数据传输周期类型。
u32 dwidth所需的 VME 数据传输宽度。
描述
请求使用一个 VME 窗口资源,该资源能够设置为请求的地址空间、数据传输周期和宽度。
返回
成功时返回指向 VME 资源的指针,失败时返回 NULL。
-
int vme_master_set(struct vme_resource *resource, int enabled, unsigned long long vme_base, unsigned long long size, u32 aspace, u32 cycle, u32 dwidth)¶
设置 VME 主设备窗口配置。
参数
struct vme_resource *resource指向 VME 主设备资源的指针。
int enabled窗口应配置到的状态。
unsigned long long vme_base窗口的基地址。
unsigned long long sizeVME 窗口的大小。
u32 aspaceVME 窗口的 VME 地址空间。
u32 cycleVME 窗口的 VME 数据传输周期类型。
u32 dwidthVME 窗口的 VME 数据传输宽度。
描述
设置提供的 VME 主设备窗口的配置。
返回
- 成功时返回零,如果设备不支持该操作、提供了无效的资源或提供了无效的属性,则返回 -EINVAL。也可能返回硬件特定的错误。
设备错误,如果提供了无效资源或提供了无效属性。也可能返回硬件相关的错误。
-
int vme_master_get(struct vme_resource *resource, int *enabled, unsigned long long *vme_base, unsigned long long *size, u32 *aspace, u32 *cycle, u32 *dwidth)¶
检索 VME 主设备窗口配置。
参数
struct vme_resource *resource指向 VME 主设备资源的指针。
int *enabled指向用于存储状态的变量的指针。
unsigned long long *vme_base指向用于存储窗口基地址的变量的指针。
unsigned long long *size指向用于存储窗口大小的变量的指针。
u32 *aspace指向用于存储 VME 地址空间的变量的指针。
u32 *cycle指向用于存储 VME 数据传输周期类型的变量的指针。
u32 *dwidth指向用于存储 VME 数据传输宽度的变量的指针。
描述
返回提供的 VME 主设备窗口的配置。
返回
- 成功时返回零,如果设备不支持该操作、提供了无效的资源或提供了无效的属性,则返回 -EINVAL。也可能返回硬件特定的错误。
设备或提供了无效资源。
-
ssize_t vme_master_read(struct vme_resource *resource, void *buf, size_t count, loff_t offset)¶
将数据从 VME 空间读入缓冲区。
参数
struct vme_resource *resource指向 VME 主设备资源的指针。
void *buf指向应该传输数据的缓冲区的指针。
size_t count要传输的字节数。
loff_t offset从 VME 主设备窗口的哪个偏移量开始传输。
描述
执行从 VME 总线上某个位置读取 count 个字节的数据的操作,该位置映射到 VME 主设备窗口中偏移量为 offset 的位置,并将数据读取到 buf 中。
返回
- 读取的字节数,如果资源不是 VME 主设备资源或不支持读取操作,则返回 -EINVAL。如果提供了无效的偏移量,则返回 -EFAULT。也可能返回硬件特定的错误。
不支持资源或读取操作。如果提供了无效偏移量,则返回-EFAULT。也可能返回硬件相关的错误。
-
ssize_t vme_master_write(struct vme_resource *resource, void *buf, size_t count, loff_t offset)¶
将数据从缓冲区写入 VME 空间。
参数
struct vme_resource *resource指向 VME 主设备资源的指针。
void *buf指向包含要传输的数据的缓冲区的指针。
size_t count要传输的字节数。
loff_t offset从 VME 主设备窗口的哪个偏移量开始传输。
描述
执行将 buf 中的 count 个字节的数据写入 VME 总线上某个位置的操作,该位置映射到 VME 主设备窗口中偏移量为 offset 的位置。
返回
- 写入的字节数,如果资源不是 VME 主设备资源或不支持写入操作,则返回 -EINVAL。如果提供了无效的偏移量,则返回 -EFAULT。也可能返回硬件特定的错误。
不支持资源或写入操作。如果提供了无效偏移量,则返回-EFAULT。也可能返回硬件相关的错误。
-
unsigned int vme_master_rmw(struct vme_resource *resource, unsigned int mask, unsigned int compare, unsigned int swap, loff_t offset)¶
执行读-修改-写周期。
参数
struct vme_resource *resource指向 VME 主设备资源的指针。
unsigned int mask要在操作中比较和交换的位。
unsigned int compare要与从偏移量读取的数据进行比较的位。
unsigned int swap要交换到从偏移量读取的数据中的位。
loff_t offset要在 VME 主设备窗口中执行操作的偏移量。
描述
对提供的位置执行读-修改-写周期: - 读取 VME 总线上的位置。 - 由 mask 选择的位与 compare 进行比较。 - 如果选定的位与 compare 中的位匹配,并且在 swap 中被选中,则交换该位。 - 结果写回 VME 总线上的位置。
返回
- 成功时返回写入的字节数,如果资源不是 VME 主设备资源或不支持 RMW 操作,则返回 -EINVAL。也可能返回硬件特定的错误。
不支持资源或RMW操作。也可能返回硬件相关的错误。
-
int vme_master_mmap(struct vme_resource *resource, struct vm_area_struct *vma)¶
将 VME 主设备窗口的区域进行内存映射。
参数
struct vme_resource *resource指向 VME 主设备资源的指针。
struct vm_area_struct *vma指向用户映射的定义的指针。
描述
将 VME 主设备窗口的一个区域内存映射到用户空间。
返回
- 成功时返回零,如果资源不是 VME 主设备资源,则返回 -EINVAL,如果映射超出窗口大小,则返回 -EFAULT。也可能返回其他通用 mmap 错误。
如果映射超出窗口大小,则返回资源或-EFAULT。也可能返回其他通用mmap错误。
-
void vme_master_free(struct vme_resource *resource)¶
释放 VME 主设备窗口
参数
struct vme_resource *resource指向 VME 主设备资源的指针。
描述
释放提供的主设备资源,以便可以重新分配它。
参数
struct vme_dev *vdev指向分配给驱动程序实例的 VME 设备的指针
struct vme_dev。u32 route所需的源/目标组合。
描述
请求一个 VME DMA 控制器,该控制器能够执行请求的源/目标组合之间的传输。
返回
成功时返回指向 VME DMA 资源的指针,失败时返回 NULL。
-
struct vme_dma_list *vme_new_dma_list(struct vme_resource *resource)¶
创建新的 VME DMA 列表。
参数
struct vme_resource *resource指向 VME DMA 资源的指针。
描述
创建一个新的 VME DMA 列表。用户有责任在使用 vme_dma_list_free() 释放不再需要的列表。
返回
- 指向新的 VME DMA 列表的指针,分配失败或无效的 VME DMA 资源时返回 NULL。
VME DMA资源。
-
struct vme_dma_attr *vme_dma_pattern_attribute(u32 pattern, u32 type)¶
创建 “Pattern” 类型 VME DMA 列表属性。
参数
u32 pattern用作模式的值
u32 type要写入的模式的类型。
描述
创建用于模式生成的 VME DMA 列表属性。用户有责任使用 vme_dma_free_attribute() 释放已使用的属性。
返回
指向 VME DMA 属性的指针,失败时返回 NULL。
-
struct vme_dma_attr *vme_dma_pci_attribute(dma_addr_t address)¶
创建“PCI”类型VME DMA列表属性。
参数
dma_addr_t addressDMA传输的PCI基地址。
描述
创建指向PCI上位置的VME DMA列表属性,用于DMA传输。用户有责任使用vme_dma_free_attribute()释放使用的属性。
返回
指向 VME DMA 属性的指针,失败时返回 NULL。
-
struct vme_dma_attr *vme_dma_vme_attribute(unsigned long long address, u32 aspace, u32 cycle, u32 dwidth)¶
创建“VME”类型VME DMA列表属性。
参数
unsigned long long addressDMA传输的VME基地址。
u32 aspace用于DMA传输的VME地址空间。
u32 cycle用于DMA传输的VME总线周期。
u32 dwidth用于DMA传输的VME数据宽度。
描述
创建指向VME总线上位置的VME DMA列表属性,用于DMA传输。用户有责任使用vme_dma_free_attribute()释放使用的属性。
返回
指向 VME DMA 属性的指针,失败时返回 NULL。
-
void vme_dma_free_attribute(struct vme_dma_attr *attributes)¶
释放DMA列表属性。
参数
struct vme_dma_attr *attributes指向DMA列表属性的指针。
描述
释放VME DMA列表属性。一旦vme_dma_list_add()返回,可以安全地释放VME DMA列表属性。
-
int vme_dma_list_add(struct vme_dma_list *list, struct vme_dma_attr *src, struct vme_dma_attr *dest, size_t count)¶
将条目添加到VME DMA列表。
参数
struct vme_dma_list *list指向VME列表的指针。
struct vme_dma_attr *src指向用作源的DMA列表属性的指针。
struct vme_dma_attr *dest指向用作目标的DMA列表属性的指针。
size_t count要传输的字节数。
描述
将条目添加到提供的VME DMA列表。该条目需要指向源和目标DMA属性的指针以及计数。
请注意,作为传输的源和目标支持的属性取决于硬件。
返回
- 成功时返回零,如果设备不支持该操作、提供了无效的资源或提供了无效的属性,则返回 -EINVAL。也可能返回硬件特定的错误。
设备错误,或者如果链接列表已经提交执行。也可能出现硬件相关错误。
-
int vme_dma_list_exec(struct vme_dma_list *list)¶
将VME DMA列表排队以供执行。
参数
struct vme_dma_list *list指向VME列表的指针。
描述
将提供的VME DMA列表排队以供执行。一旦列表被执行,调用将返回。
返回
- 成功时返回零,如果设备不支持该操作、提供了无效的资源或提供了无效的属性,则返回 -EINVAL。也可能返回硬件特定的错误。
设备错误。也可能出现硬件相关错误。
-
int vme_dma_list_free(struct vme_dma_list *list)¶
释放VME DMA列表。
参数
struct vme_dma_list *list指向VME列表的指针。
描述
释放提供的DMA列表及其所有条目。
返回
- 成功时返回零,无效VME资源时返回-EINVAL,资源
仍在被使用时返回-EBUSY。也可能出现硬件相关错误。
-
int vme_dma_free(struct vme_resource *resource)¶
释放VME DMA资源。
参数
struct vme_resource *resource指向 VME DMA 资源的指针。
描述
释放提供的DMA资源,以便可以重新分配它。
返回
- 成功时返回零,无效VME资源时返回-EINVAL,资源
仍在活动状态。
-
int vme_irq_request(struct vme_dev *vdev, int level, int statid, void (*callback)(int, int, void*), void *priv_data)¶
请求特定的VME中断。
参数
struct vme_dev *vdev指向分配给驱动程序实例的 VME 设备的指针
struct vme_dev。int level正在请求的中断优先级。
int statid正在请求的中断向量。
void (*callback)(int, int, void *)指向接收到VME中断/向量时调用的回调函数的指针。
void *priv_data将传递给回调函数的通用指针。
描述
请求将回调附加为具有提供的级别和statid的VME中断的处理程序。
返回
- 成功时返回零,无效的vme设备、级别或如果不
支持该函数时返回-EINVAL,如果级别/statid组合已被使用时返回-EBUSY。也可能出现硬件相关错误。
参数
struct vme_dev *vdev指向分配给驱动程序实例的 VME 设备的指针
struct vme_dev。int level正在释放的中断的中断优先级。
int statid正在释放的中断的中断向量。
描述
从VME中断优先级/向量中移除先前附加的回调。
参数
struct vme_dev *vdev指向分配给驱动程序实例的 VME 设备的指针
struct vme_dev。int level断言中断的中断优先级。
int statid与中断关联的中断向量。
描述
生成具有提供的级别和statid的VME中断。
返回
- 成功时返回零,无效的vme设备、级别或如果不
不支持该函数。也可能出现硬件相关错误。
参数
struct vme_dev *vdev指向分配给驱动程序实例的 VME 设备的指针
struct vme_dev。
描述
为驱动程序分配位置监视器资源。位置监视器允许驱动程序监视对VME总线上连续地址的访问。
返回
成功时返回指向VME资源的指针,失败时返回NULL。
-
int vme_lm_count(struct vme_resource *resource)¶
确定监视的VME地址数
参数
struct vme_resource *resource指向VME位置监视器资源的指针。
描述
监视的连续地址的数量取决于硬件。返回位置监视器监视的连续地址的数量。
返回
- 监视的地址计数,或者当提供一个
无效的位置监视器资源时,返回-EINVAL。
-
int vme_lm_set(struct vme_resource *resource, unsigned long long lm_base, u32 aspace, u32 cycle)¶
配置位置监视器
参数
struct vme_resource *resource指向VME位置监视器资源的指针。
unsigned long long lm_base要监视的基地址。
u32 aspace要监视的VME地址空间。
u32 cycle要监视的VME总线周期类型。
描述
设置要由位置监视器监视的访问的基地址、地址空间和周期类型。
返回
- 成功时返回零,当提供无效的位置
监视器资源或不支持该函数时,返回-EINVAL。也可能返回硬件相关的错误。
-
int vme_lm_get(struct vme_resource *resource, unsigned long long *lm_base, u32 *aspace, u32 *cycle)¶
检索位置监视器设置
参数
struct vme_resource *resource指向VME位置监视器资源的指针。
unsigned long long *lm_base用于输出监视的基地址的指针。
u32 *aspace用于输出监视的地址空间的指针。
u32 *cycle用于输出监视的VME总线周期类型的指针。
描述
检索要由位置监视器监视的访问的基地址、地址空间和周期类型。
返回
- 成功时返回零,当提供无效的位置
监视器资源或不支持该函数时,返回-EINVAL。也可能返回硬件相关的错误。
-
int vme_lm_attach(struct vme_resource *resource, int monitor, void (*callback)(void*), void *data)¶
为位置监视器地址提供回调
参数
struct vme_resource *resource指向VME位置监视器资源的指针。
int monitor应附加回调的偏移量。
void (*callback)(void *)指向触发时调用的回调函数的指针。
void *data将传递给回调函数的通用指针。
描述
将回调附加到位置监视器监视的地址中指定的偏移量。提供一个通用指针,以便在调用时可以将数据传递给回调。
返回
- 成功时返回零,当提供无效的位置
监视器资源或不支持该函数时,返回-EINVAL。也可能返回硬件相关的错误。
-
int vme_lm_detach(struct vme_resource *resource, int monitor)¶
移除位置监视器地址的回调
参数
struct vme_resource *resource指向VME位置监视器资源的指针。
int monitor应移除回调的偏移量。
描述
移除与位置监视器监视的地址中指定的偏移量关联的回调。
返回
- 成功时返回零,当提供无效的位置
监视器资源或不支持该函数时,返回-EINVAL。也可能返回硬件相关的错误。
-
void vme_lm_free(struct vme_resource *resource)¶
释放已分配的VME位置监视器
参数
struct vme_resource *resource指向VME位置监视器资源的指针。
描述
释放VME位置监视器的分配。
- 警告:此函数当前期望已
经附加到位置监视器的任何回调都已被移除。
返回
- 成功时返回零,当提供无效的位置
监视器资源。
参数
struct vme_dev *vdev指向分配给驱动程序实例的 VME 设备的指针
struct vme_dev。
描述
检索与提供的VME设备关联的插槽ID。
返回
- 成功时返回插槽ID,如果无法确定VME桥接
或者不支持该函数,则返回-EINVAL。也可能返回硬件相关的错误。
参数
struct vme_dev *vdev指向分配给驱动程序实例的 VME 设备的指针
struct vme_dev。
描述
检索与提供的VME设备关联的总线枚举。
返回
- 成功时返回总线号,如果无法确定VME桥接,
则返回-EINVAL。
-
int vme_register_driver(struct vme_driver *drv, unsigned int ndevs)¶
注册一个 VME 驱动
参数
struct vme_driver *drv指向要注册的 VME 驱动程序结构的指针。
unsigned int ndevs允许枚举的最大设备数量。
描述
向 VME 子系统注册 VME 设备驱动程序。
返回
成功时返回零,注册失败时返回错误值。
-
void vme_unregister_driver(struct vme_driver *drv)¶
注销一个 VME 驱动
参数
struct vme_driver *drv指向要注销的 VME 驱动程序结构的指针。
描述
从 VME 子系统注销 VME 设备驱动程序。