Skip to content

Commit c362c69

Browse files
committed
karm-sys: Implemented enought api to get the browser working again.
1 parent 4f4f41a commit c362c69

7 files changed

Lines changed: 40 additions & 9 deletions

File tree

src/kernel/hjert-core/mem.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import Karm.Core;
22
import Karm.Logger;
33

4-
#include "arch.h"
54
#include "mem.h"
65

6+
#include "arch.h"
7+
78
namespace Hjert::Core {
89

910
struct Pmm : Hal::Pmm {
@@ -44,7 +45,8 @@ struct Pmm : Hal::Pmm {
4445
}
4546

4647
LockScope scope(_lock);
47-
try$(prange.ensureAligned(Hal::PAGE_SIZE));
48+
try$(prange.ensureAligned(Hal::PAGE_SIZE)
49+
.okOr(Error::invalidInput("range is not page aligned")));
4850
_bits.set(pmm2Bits(prange), false);
4951
return Ok();
5052
}
@@ -122,10 +124,10 @@ Hal::PmmRange _findBitmapSpace(Handover::Payload& payload, usize bitmapSize) {
122124
continue;
123125

124126
if (record.start == 0 and (record.size >= bitmapSize + Hal::PAGE_SIZE))
125-
return {static_cast<usize>(record.start) + Hal::PAGE_SIZE, bitmapSize};
127+
return {record.start + Hal::PAGE_SIZE, bitmapSize};
126128

127129
if (record.size >= bitmapSize)
128-
return {static_cast<usize>(record.start), bitmapSize};
130+
return {record.start, bitmapSize};
129131
}
130132

131133
logFatal("mem: no usable memory for bitmap");

src/kernel/hjert-core/vmo.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ Res<Arc<Vmo>> Vmo::makeDma(Hal::DmaRange prange) {
2020
return Error::invalidInput("size is zero");
2121
}
2222

23-
try$(prange.ensureAligned(Hal::PAGE_SIZE));
23+
try$(prange.ensureAligned(Hal::PAGE_SIZE)
24+
.okOr(Error::invalidInput("range is not page aligned")));
2425
return Ok(makeArc<Vmo>(prange));
2526
}
2627

src/libs/karm-sys/efi/sys.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,10 @@ Res<Rc<Fd>> listenUdp(SocketAddr) {
215215
return Error::notImplemented();
216216
}
217217

218+
Res<Rc<Fd>> connectIpc(Ref::Url){
219+
return Error::notImplemented();
220+
}
221+
218222
Res<Rc<Fd>> listenIpc(Ref::Url) {
219223
return Error::notImplemented();
220224
}
@@ -391,6 +395,10 @@ Res<Rc<Pid>> spawn(Command const&) {
391395
return Error::notImplemented();
392396
}
393397

398+
Res<Tuple<Rc<Pid>, Rc<Fd>>> spawnPty(Command const& ) {
399+
return Error::notImplemented();
400+
}
401+
394402
// MARK: Process Managment -----------------------------------------------------
395403

396404
Res<> sleep(Duration) {

src/libs/karm-sys/skift/async.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ struct SkiftSched : Sys::Sched {
3939
co_trya$(waitFor(chan.cap(), Hj::Sigs::READABLE, Hj::Sigs::NONE));
4040
static_assert(sizeof(Handle) == sizeof(Hj::Cap) and alignof(Handle) == alignof(Hj::Cap));
4141
co_return chan.read(buf);
42+
} else if (auto vmo = fd.is<Skift::VmoFd>()) {
43+
co_return vmo->read(buf);
4244
}
4345

4446
co_return Error::notImplemented("unsupported fd type");

src/libs/karm-sys/skift/bootfs.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ module;
66

77
export module Karm.Sys.Skift:bootfs;
88

9+
import Karm.Logger;
10+
911
namespace Karm::Sys::Skift {
1012

1113
export struct Bootfs {
@@ -55,6 +57,7 @@ export struct Bootfs {
5557
if (not fileDirent)
5658
return Error::notFound("elf not found");
5759

60+
logDebug("opening {}: {:x} {:x}", path, _physStart + fileDirent->offset, alignUp(fileDirent->length, Sys::pageSize()));
5861
auto fileVmo = try$(
5962
Hj::Vmo::create(
6063
Hj::ROOT,

src/libs/karm-sys/skift/fd.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ export enum struct FdType {
2121

2222
export struct VmoFd : NullFd {
2323
Hj::Vmo _vmo;
24+
Opt<Hj::Mapped> _mapped;
25+
usize _off = 0;
2426

2527
Hj::Vmo& vmo() {
2628
return _vmo;
@@ -35,6 +37,19 @@ export struct VmoFd : NullFd {
3537
try$(scope.serializeUnit({.kind = Serde::Type::OBJECT_ITEM}, _vmo));
3638
return scope.end();
3739
}
40+
41+
Hj::Mapped& _ensureMapped() {
42+
if (not _mapped) {
43+
_mapped = Hj::map(_vmo, {Hj::MapFlags::READ}).take();
44+
}
45+
return _mapped.unwrap();
46+
}
47+
48+
Res<usize> read(MutBytes buf) override {
49+
auto read = copy(next(_ensureMapped().bytes(), _off), buf);
50+
_off += read;
51+
return Ok(read);
52+
}
3853
};
3954

4055
export struct DuplexFd : NullFd {

src/libs/karm-sys/skift/sys.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,12 @@ Res<Rc<Fd>> openFile(Ref::Url const& url) {
5656
return Ok(makeRc<Skift::VmoFd>(std::move(vmo)));
5757
}
5858

59-
Res<Rc<Fd>> createFile(Ref::Url const&) {
60-
return Error::notImplemented();
59+
Res<Rc<Fd>> createFile(Ref::Url const& url) {
60+
return openFile(url);
6161
}
6262

63-
Res<Rc<Fd>> openOrCreateFile(Ref::Url const&) {
64-
return Error::notImplemented();
63+
Res<Rc<Fd>> openOrCreateFile(Ref::Url const& url) {
64+
return openFile(url);
6565
}
6666

6767
Res<Pair<Rc<Fd>, Rc<Fd>>> createPipe() {

0 commit comments

Comments
 (0)