diff --git a/BaS_gcc/if/driver_vec.c b/BaS_gcc/if/driver_vec.c index 5b93a51..96cb27f 100644 --- a/BaS_gcc/if/driver_vec.c +++ b/BaS_gcc/if/driver_vec.c @@ -30,6 +30,7 @@ #include "driver_vec.h" #include "driver_mem.h" #include "pci.h" +#include "mmu.h" /* * driver interface struct for the SD card BaS driver @@ -131,6 +132,16 @@ static struct framebuffer_driver_interface framebuffer_interface = .framebuffer_info = &info_fb }; +/* + * driver interface struct for the BaS MMU driver + */ +static struct mmu_driver_interface mmu_interface = +{ + .map_page_locked = &mmu_map_page_locked, + .unlock_page = &mmu_unlock_page, + .report_locked_pages = &mmu_report_locked_pages +}; + static struct generic_interface interfaces[] = { { @@ -167,6 +178,14 @@ static struct generic_interface interfaces[] = .revision = 1, .interface.pci = &pci_interface, }, + { + .type = MMU_DRIVER, + .name = "MMU", + .description = "BaS MMU driver", + .version = 0, + .revision = 1, + .interface.mmu = &mmu_interface, + }, /* insert new drivers here */ { diff --git a/BaS_gcc/include/driver_vec.h b/BaS_gcc/include/driver_vec.h index a9588d5..b45e5fd 100644 --- a/BaS_gcc/include/driver_vec.h +++ b/BaS_gcc/include/driver_vec.h @@ -37,6 +37,7 @@ enum driver_type MCD_DRIVER, VIDEO_DRIVER, PCI_DRIVER, + MMU_DRIVER, END_OF_DRIVERS, /* marks end of driver list */ }; @@ -259,6 +260,13 @@ struct pci_bios_interface { // int32_t reserved[2]; }; +struct mmu_driver_interface +{ + int32_t (*map_page_locked)(uint32_t address, uint32_t length); + int32_t (*unlock_page)(uint32_t address, uint32_t length); + int32_t (*report_locked_pages)(void); +}; + union interface { struct generic_driver_interface *gdi; @@ -266,6 +274,7 @@ union interface struct dma_driver_interface *dma; struct framebuffer_driver_interface *fb; struct pci_bios_interface *pci; + struct mmu_driver_interface *mmu; }; struct generic_interface diff --git a/BaS_gcc/include/mmu.h b/BaS_gcc/include/mmu.h index 7cc9f84..6a99304 100644 --- a/BaS_gcc/include/mmu.h +++ b/BaS_gcc/include/mmu.h @@ -102,4 +102,11 @@ extern long video_sbt; extern void mmu_init(void); extern int mmu_map_page(uint32_t virt, uint32_t phys, enum mmu_page_size sz, const struct mmu_map_flags *flags); +/* + * API functions for the BaS driver interface + */ +extern int32_t mmu_map_page_locked(uint32_t address, uint32_t length); +extern int32_t mmu_unlock_page(uint32_t address, uint32_t length); +extern int32_t mmu_report_locked_pages(void); + #endif /* _MMU_H_ */