#ifndef _ARCHITECTURE_H_ #define _ARCHITECTURE_H_ #include /* 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_ */