added API driver interface for MMU

This commit is contained in:
Markus Fröschle
2014-09-29 06:10:19 +00:00
parent c0d21a104f
commit 37dfe6b7c5
3 changed files with 35 additions and 0 deletions

View File

@@ -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 */
{

View File

@@ -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

View File

@@ -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_ */