blob: 3745bf8748991212d0ebacc698f3389f48832f60 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#ifndef _ARCHITECTURE_H_
#define _ARCHITECTURE_H_
#include <linux/types.h>
/* BAR configuration */
struct hw_bar_config {
u64 bar0;
u64 bar1;
u64 bar2;
u64 bar3;
};
/* Hardware architecture definition */
struct hw_architecture {
const char *name;
u32 pci_vendor_id;
u32 *pci_device_ids;
int num_device_ids;
struct hw_bar_config bar_sizes;
u64 doorbell_offset;
u64 shared_mem_offset;
u32 shared_mem_size;
u64 msix_table_offset;
u64 msix_pba_offset;
u32 msix_vectors;
u32 max_vfs;
u64 vram_size;
u32 page_size;
bool supports_mig;
bool supports_sriov;
const char *gsp_version;
};
/* Architecture registry */
struct hw_architecture *arch_get_by_name(const char *name);
struct hw_architecture *arch_get_by_pci_id(u32 vendor_id, u32 device_id);
struct hw_architecture *arch_get_default(void);
/* Architecture queries */
const struct hw_bar_config *arch_get_bar_config(struct hw_architecture *arch);
u64 arch_get_doorbell_offset(struct hw_architecture *arch);
u64 arch_get_shared_mem_offset(struct hw_architecture *arch);
u32 arch_get_msix_vectors(struct hw_architecture *arch);
bool arch_supports_mig(struct hw_architecture *arch);
bool arch_supports_sriov(struct hw_architecture *arch);
const char *arch_get_gsp_version(struct hw_architecture *arch);
#endif /* _ARCHITECTURE_H_ */
|