diff --git a/nre/apps/ipc/delegate/delegate.cc b/nre/apps/ipc/delegate/delegate.cc index 110b177..87506da 100644 --- a/nre/apps/ipc/delegate/delegate.cc +++ b/nre/apps/ipc/delegate/delegate.cc @@ -24,14 +24,15 @@ static Pt *echo; PORTAL static void portal_getcap(void*) { UtcbFrameRef uf; - // TODO delegate cap + uf.delegate(echo->sel()); } PORTAL static void portal_echo(void*) { UtcbFrameRef uf; - // TODO receive integer + int x; + uf >> x; uf.finish_input(); - // TODO echo integer back + uf << x; } // provides the echo portal @@ -42,10 +43,22 @@ static void service() { // wants to call the echo portal static void client(Pt &getcap) { - // TODO request echo portal cap + capsel_t cap = CapSelSpace::get().allocate(1); + { + UtcbFrame uf; + uf.delegation_window(Crd(cap,0,Crd::OBJ_ALL)); + getcap.call(uf); + } + // call portal int res; - // TODO call portal + { + Pt echopt(cap); + UtcbFrame uf; + uf << 42; + echopt.call(uf); + uf >> res; + } Serial::get() << "Hello World: " << res << "\n"; } diff --git a/nre/apps/ipc/echo/echo.cc b/nre/apps/ipc/echo/echo.cc index ec5249f..d6ce9ce 100644 --- a/nre/apps/ipc/echo/echo.cc +++ b/nre/apps/ipc/echo/echo.cc @@ -22,9 +22,10 @@ using namespace nre; PORTAL static void portal_echo(void*) { UtcbFrameRef uf; - // TODO receive integer + int x; + uf >> x; uf.finish_input(); - // TODO echo integer back + uf << x; } int main() { diff --git a/nre/apps/ipc/service/service.cc b/nre/apps/ipc/service/service.cc index 882eff1..c702db3 100644 --- a/nre/apps/ipc/service/service.cc +++ b/nre/apps/ipc/service/service.cc @@ -19,7 +19,11 @@ using namespace nre; PORTAL static void portal_echo(void*) { - // TODO implement me + UtcbFrameRef uf; + int x; + uf >> x; + uf.finish_input(); + uf << x; } int main() {