zero: finish implementation

This commit is contained in:
Mathieu Maret 2024-02-07 23:15:56 +01:00 committed by Mathieu Maret
parent f751835115
commit 62a1c1cefb
1 changed files with 25 additions and 11 deletions

View File

@ -1,27 +1,41 @@
#include "alloc.h"
#include "klibc.h"
#include "zero.h" #include "zero.h"
#include "alloc.h"
#include "kernel.h"
#include "klibc.h"
struct zeroMappedEntry { struct zeroMappedEntry {
int refCnt; int refCnt;
}; };
static int zeroOpen(struct uAddrVirtualReg *vreg) static int zeroOpen(struct uAddrVirtualReg *vreg)
{ {
(void)vreg; struct zeroMappedEntry *ent = (struct zeroMappedEntry *)vreg->res->customData;
return 0; ent->refCnt++;
return 0;
} }
static int zeroClose(struct uAddrVirtualReg *vreg) static int zeroClose(struct uAddrVirtualReg *vreg)
{ {
(void)vreg; struct zeroMappedEntry *ent = (struct zeroMappedEntry *)vreg->res->customData;
return 0; ent->refCnt--;
return 0;
} }
static int zeroNoPage(struct uAddrVirtualReg *vreg, uaddr_t addr, int right) static int zeroNoPage(struct uAddrVirtualReg *vreg, uaddr_t addr, int right)
{ {
(void)vreg; (void)vreg;
(void)addr;
(void)right; int ret = 0;
return 0; paddr_t ppage = allocPhyPage(1);
ret = pageMap(ALIGN_DOWN(addr, PAGE_SIZE), ppage, right | PAGING_MEM_USER) ;
unrefPhyPage(ppage);
if (ret) {
return ret;
}
memset((void *)ALIGN_DOWN(addr, PAGE_SIZE), 0, PAGE_SIZE);
return ret;
} }
static struct mappedRessourceOps zeroOps = { static struct mappedRessourceOps zeroOps = {