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 和模式源和目標(如果適用)建立屬性

函式 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 size

VME 視窗的大小。

dma_addr_t buf_base

用於提供 VME 從裝置視窗儲存的緩衝區的基地址。

u32 aspace

VME 視窗的 VME 地址空間。

u32 cycle

VME 視窗的 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 size

VME 視窗的大小。

u32 aspace

VME 視窗的 VME 地址空間。

u32 cycle

VME 視窗的 VME 資料傳輸週期型別。

u32 dwidth

VME 視窗的 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_resource *vme_dma_request(struct vme_dev *vdev, u32 route)

請求 DMA 控制器。

引數

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 address

DMA傳輸的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 address

DMA傳輸的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。也可能出現硬體相關錯誤。

void vme_irq_free(struct vme_dev *vdev, int level, int statid)

釋放VME中斷。

引數

struct vme_dev *vdev

指向分配給驅動程式例項的 VME 裝置的指標 struct vme_dev

int level

正在釋放的中斷的中斷優先順序。

int statid

正在釋放的中斷的中斷向量。

描述

從VME中斷優先順序/向量中移除先前附加的回撥。

int vme_irq_generate(struct vme_dev *vdev, int level, int statid)

生成VME中斷。

引數

struct vme_dev *vdev

指向分配給驅動程式例項的 VME 裝置的指標 struct vme_dev

int level

斷言中斷的中斷優先順序。

int statid

與中斷關聯的中斷向量。

描述

生成具有提供的級別和statid的VME中斷。

返回

成功時返回零,無效的vme裝置、級別或如果不

不支援該函式。也可能出現硬體相關錯誤。

struct vme_resource *vme_lm_request(struct vme_dev *vdev)

請求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位置監視器的分配。

警告:此函式當前期望已

經附加到位置監視器的任何回撥都已被移除。

返回

成功時返回零,當提供無效的位置

監視器資源。

int vme_slot_num(struct vme_dev *vdev)

檢索插槽ID

引數

struct vme_dev *vdev

指向分配給驅動程式例項的 VME 裝置的指標 struct vme_dev

描述

檢索與提供的VME裝置關聯的插槽ID。

返回

成功時返回插槽ID,如果無法確定VME橋接

或者不支援該函式,則返回-EINVAL。也可能返回硬體相關的錯誤。

int vme_bus_num(struct vme_dev *vdev)

檢索匯流排號

引數

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 裝置驅動程式。