diff options
Diffstat (limited to 'kernel/architecture/architecture.h')
| -rw-r--r-- | kernel/architecture/architecture.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/kernel/architecture/architecture.h b/kernel/architecture/architecture.h new file mode 100644 index 0000000..3745bf8 --- /dev/null +++ b/kernel/architecture/architecture.h @@ -0,0 +1,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_ */
\ No newline at end of file |
