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