diff --git a/repos/dde_linux/include/lxip/lxip.h b/repos/dde_linux/include/lxip/lxip.h index 88cded637..75da3ac51 100644 --- a/repos/dde_linux/include/lxip/lxip.h +++ b/repos/dde_linux/include/lxip/lxip.h @@ -39,7 +39,7 @@ namespace Lxip { * * \return Reference to Socketcall object */ - Socketcall & init(char const *address_config); + Socketcall & init(Genode::Env &env, char const *address_config); typedef Genode::uint8_t uint8_t; typedef Genode::uint16_t uint16_t; diff --git a/repos/dde_linux/lib/mk/libc_lxip.mk b/repos/dde_linux/lib/mk/libc_lxip.mk index 635c43dbc..513a795e1 100644 --- a/repos/dde_linux/lib/mk/libc_lxip.mk +++ b/repos/dde_linux/lib/mk/libc_lxip.mk @@ -1,4 +1,4 @@ -SRC_CC = init.cc plugin.cc +SRC_CC = plugin.cc vpath %.cc $(REP_DIR)/src/lib/libc_lxip diff --git a/repos/dde_linux/lib/mk/lxip.mk b/repos/dde_linux/lib/mk/lxip.mk index dd31a7286..e6c5a53ff 100644 --- a/repos/dde_linux/lib/mk/lxip.mk +++ b/repos/dde_linux/lib/mk/lxip.mk @@ -27,7 +27,7 @@ CC_CXX_OPT = -fpermissive SRC_CC = dummies.cc lxcc_emul.cc nic_handler.cc socket_handler.cc \ timer_handler.cc random.cc -SRC_CC += malloc.cc printf.cc +SRC_CC += malloc.cc printf.cc env.cc SRC_C += driver.c dummies_c.c lxc_emul.c diff --git a/repos/dde_linux/src/lib/libc_lxip/init.cc b/repos/dde_linux/src/lib/libc_lxip/init.cc deleted file mode 100644 index b5da42b3a..000000000 --- a/repos/dde_linux/src/lib/libc_lxip/init.cc +++ /dev/null @@ -1,80 +0,0 @@ -/* - * \brief Lxip plugin creation - * \author Christian Helmuth - * \author Sebastian Sumpf - * \date 2013-09-04 - * - */ - -/* - * Copyright (C) 2010-2013 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU General Public License version 2. - */ - -#include -#include -#include -#include - -extern void create_lxip_plugin(char const *address_config); - -void __attribute__((constructor)) init_libc_lxip(void) -{ - char ip_addr_str[16] = {0}; - char netmask_str[16] = {0}; - char gateway_str[16] = {0}; - char address_buf[128]; - char const *address_config; - - try { - Genode::Xml_node libc_node = Genode::config()->xml_node().sub_node("libc"); - - try { - libc_node.attribute("ip_addr").value(ip_addr_str, sizeof(ip_addr_str)); - } catch(...) { } - - try { - libc_node.attribute("netmask").value(netmask_str, sizeof(netmask_str)); - } catch(...) { } - - try { - libc_node.attribute("gateway").value(gateway_str, sizeof(gateway_str)); - } catch(...) { } - - /* either none or all 3 interface attributes must exist */ - if ((Genode::strlen(ip_addr_str) != 0) || - (Genode::strlen(netmask_str) != 0) || - (Genode::strlen(gateway_str) != 0)) { - if (Genode::strlen(ip_addr_str) == 0) { - Genode::error("missing \"ip_addr\" attribute. Ignoring network interface config."); - throw Genode::Xml_node::Nonexistent_attribute(); - } else if (Genode::strlen(netmask_str) == 0) { - Genode::error("missing \"netmask\" attribute. Ignoring network interface config."); - throw Genode::Xml_node::Nonexistent_attribute(); - } else if (Genode::strlen(gateway_str) == 0) { - Genode::error("missing \"gateway\" attribute. Ignoring network interface config."); - throw Genode::Xml_node::Nonexistent_attribute(); - } - } else - throw -1; - - Genode::log("static network interface: ", - "ip_addr=", Genode::Cstring(ip_addr_str), " " - "netmask=", Genode::Cstring(netmask_str), " " - "gateway=", Genode::Cstring(gateway_str)); - - Genode::snprintf(address_buf, sizeof(address_buf), "%s::%s:%s:::off", - ip_addr_str, gateway_str, netmask_str); - address_config = address_buf; - } - catch (...) { - Genode::log("Using DHCP for interface configuration."); - address_config = "dhcp"; - } - - Genode::log("init_libc_lxip() address config=", address_config); - - create_lxip_plugin(address_config); -} diff --git a/repos/dde_linux/src/lib/libc_lxip/plugin.cc b/repos/dde_linux/src/lib/libc_lxip/plugin.cc index fa5e8ec83..cf5d7fc2a 100644 --- a/repos/dde_linux/src/lib/libc_lxip/plugin.cc +++ b/repos/dde_linux/src/lib/libc_lxip/plugin.cc @@ -19,7 +19,9 @@ #include /* Genode includes */ +#include #include +#include #include /* Libc plugin includes */ @@ -76,12 +78,34 @@ struct Plugin : Libc::Plugin /** * Interface to LXIP stack */ - struct Lxip::Socketcall &socketcall; + struct Socketcall + { + Genode::Heap heap; + Lxip::Socketcall &socketcall; + + Socketcall(Genode::Env &env, char const *address_config) + : heap(env.ram(), env.rm()), socketcall(Lxip::init(env, address_config)) + { } + }; + + Genode::Constructible socketconstruct; + + Lxip::Socketcall &socketcall() + { + return socketconstruct->socketcall; + } + + Genode::Heap &heap() + { + return socketconstruct->heap; + } /** * Constructor */ - Plugin(char const *address_config); + Plugin(); + + void init(Genode::Env &env) override; bool supports_select(int nfds, fd_set *readfds, @@ -138,12 +162,72 @@ struct Plugin : Libc::Plugin }; -Plugin::Plugin(char const *address_config) : socketcall(Lxip::init(address_config)) +Plugin::Plugin() { Genode::log("using the lxip libc plugin"); } +void Plugin::init(Genode::Env &env) +{ + char ip_addr_str[16] = {0}; + char netmask_str[16] = {0}; + char gateway_str[16] = {0}; + char address_buf[128]; + char const *address_config; + + Genode::Attached_rom_dataspace config { env, "config"} ; + + try { + Genode::Xml_node libc_node = config.xml().sub_node("libc"); + + try { + libc_node.attribute("ip_addr").value(ip_addr_str, sizeof(ip_addr_str)); + } catch(...) { } + + try { + libc_node.attribute("netmask").value(netmask_str, sizeof(netmask_str)); + } catch(...) { } + + try { + libc_node.attribute("gateway").value(gateway_str, sizeof(gateway_str)); + } catch(...) { } + + /* either none or all 3 interface attributes must exist */ + if ((Genode::strlen(ip_addr_str) != 0) || + (Genode::strlen(netmask_str) != 0) || + (Genode::strlen(gateway_str) != 0)) { + if (Genode::strlen(ip_addr_str) == 0) { + Genode::error("missing \"ip_addr\" attribute. Ignoring network interface config."); + throw Genode::Xml_node::Nonexistent_attribute(); + } else if (Genode::strlen(netmask_str) == 0) { + Genode::error("missing \"netmask\" attribute. Ignoring network interface config."); + throw Genode::Xml_node::Nonexistent_attribute(); + } else if (Genode::strlen(gateway_str) == 0) { + Genode::error("missing \"gateway\" attribute. Ignoring network interface config."); + throw Genode::Xml_node::Nonexistent_attribute(); + } + } else + throw -1; + + Genode::log("static network interface: ", + "ip_addr=", Genode::Cstring(ip_addr_str), " " + "netmask=", Genode::Cstring(netmask_str), " " + "gateway=", Genode::Cstring(gateway_str)); + + Genode::snprintf(address_buf, sizeof(address_buf), "%s::%s:%s:::off", + ip_addr_str, gateway_str, netmask_str); + address_config = address_buf; + } + catch (...) { + Genode::log("Using DHCP for interface configuration."); + address_config = "dhcp"; + } + + Genode::log("Plugin::init() address config=", address_config); + socketconstruct.construct(env, address_config); +}; + /* TODO shameful copied from lwip... generalize this */ bool Plugin::supports_select(int nfds, fd_set *readfds, @@ -184,7 +268,7 @@ Libc::File_descriptor *Plugin::accept(Libc::File_descriptor *sockfdo, { Lxip::Handle handle; - handle = socketcall.accept(context(sockfdo)->handle(), (void *)addr, addrlen); + handle = socketcall().accept(context(sockfdo)->handle(), (void *)addr, addrlen); if (!handle.socket) return 0; @@ -193,7 +277,7 @@ Libc::File_descriptor *Plugin::accept(Libc::File_descriptor *sockfdo, addr->sa_len = *addrlen; } - Plugin_context *context = new (Genode::env()->heap()) Plugin_context(handle); + Plugin_context *context = new (heap()) Plugin_context(handle); Libc::File_descriptor *fd = Libc::file_descriptor_allocator()->alloc(this, context); return fd; } @@ -209,7 +293,7 @@ int Plugin::bind(Libc::File_descriptor *sockfdo, const struct sockaddr *addr, return -1; } - errno = -socketcall.bind(context(sockfdo)->handle(), family, (void*)addr); + errno = -socketcall().bind(context(sockfdo)->handle(), family, (void*)addr); return errno > 0 ? -1 : 0; } @@ -217,10 +301,10 @@ int Plugin::bind(Libc::File_descriptor *sockfdo, const struct sockaddr *addr, int Plugin::close(Libc::File_descriptor *sockfdo) { - socketcall.close(context(sockfdo)->handle()); + socketcall().close(context(sockfdo)->handle()); if (context(sockfdo)) - Genode::destroy(Genode::env()->heap(), context(sockfdo)); + Genode::destroy(heap(), context(sockfdo)); Libc::file_descriptor_allocator()->free(sockfdo); @@ -239,7 +323,7 @@ int Plugin::connect(Libc::File_descriptor *sockfdo, return -1; } - errno = -socketcall.connect(context(sockfdo)->handle(), family, (void *)addr); + errno = -socketcall().connect(context(sockfdo)->handle(), family, (void *)addr); return errno > 0 ? -1 : 0; } @@ -277,7 +361,7 @@ int Plugin::getpeername(Libc::File_descriptor *sockfdo, return -1; } - errno = -socketcall.getpeername(context(sockfdo)->handle(), (void *)addr, addrlen); + errno = -socketcall().getpeername(context(sockfdo)->handle(), (void *)addr, addrlen); addr->sa_family = bsd_family(addr); addr->sa_len = *addrlen; @@ -295,7 +379,7 @@ int Plugin::getsockname(Libc::File_descriptor *sockfdo, return -1; } - errno = -socketcall.getsockname(context(sockfdo)->handle(), (void *)addr, addrlen); + errno = -socketcall().getsockname(context(sockfdo)->handle(), (void *)addr, addrlen); addr->sa_family = bsd_family(addr); addr->sa_len = *addrlen; @@ -319,7 +403,7 @@ int Plugin::getsockopt(Libc::File_descriptor *sockfdo, int level, return -1; } - return socketcall.getsockopt(context(sockfdo)->handle(), Lxip::LINUX_SOL_SOCKET, + return socketcall().getsockopt(context(sockfdo)->handle(), Lxip::LINUX_SOL_SOCKET, optname, optval, (int *)optlen); } @@ -335,7 +419,7 @@ int Plugin::ioctl(Libc::File_descriptor *sockfdo, int request, char *argp) case FIONREAD: - errno = -socketcall.ioctl(context(sockfdo)->handle(), Lxip::LINUX_FIONREAD, + errno = -socketcall().ioctl(context(sockfdo)->handle(), Lxip::LINUX_FIONREAD, argp); return errno > 0 ? -1 : 0; @@ -350,14 +434,14 @@ int Plugin::ioctl(Libc::File_descriptor *sockfdo, int request, char *argp) int Plugin::listen(Libc::File_descriptor *sockfdo, int backlog) { - errno = -socketcall.listen(context(sockfdo)->handle(), backlog); + errno = -socketcall().listen(context(sockfdo)->handle(), backlog); return errno > 0 ? -1 : 0; } int Plugin::shutdown(Libc::File_descriptor *sockfdo, int how) { - errno = -socketcall.shutdown(context(sockfdo)->handle(), how); + errno = -socketcall().shutdown(context(sockfdo)->handle(), how); return errno > 0 ? -1 : 0; } @@ -405,7 +489,7 @@ int Plugin::select(int nfds, continue; /* call IP stack blocking/non-blocking */ - int mask = socketcall.poll(context(sockfdo)->handle(), block); + int mask = socketcall().poll(context(sockfdo)->handle(), block); if (mask) block = false; @@ -448,7 +532,7 @@ ssize_t Plugin::recvfrom(Libc::File_descriptor *sockfdo, void *buf, ::size_t len return -1; } - int recv = socketcall.recv(context(sockfdo)->handle(), buf, len, translate_msg_flags(flags), + int recv = socketcall().recv(context(sockfdo)->handle(), buf, len, translate_msg_flags(flags), family, (void *)src_addr, addrlen); if (recv < 0) { @@ -482,7 +566,7 @@ ssize_t Plugin::sendto(Libc::File_descriptor *sockfdo, const void *buf, return -1; } - int send = socketcall.send(context(sockfdo)->handle(), buf, len, translate_msg_flags(flags), + int send = socketcall().send(context(sockfdo)->handle(), buf, len, translate_msg_flags(flags), family, (void *)dest_addr); if (send < 0) errno = -send; @@ -507,7 +591,7 @@ int Plugin::setsockopt(Libc::File_descriptor *sockfdo, int level, return -1; } - return socketcall.setsockopt(context(sockfdo)->handle(), Lxip::LINUX_SOL_SOCKET, + return socketcall().setsockopt(context(sockfdo)->handle(), Lxip::LINUX_SOL_SOCKET, optname, optval, optlen); } @@ -515,14 +599,14 @@ int Plugin::setsockopt(Libc::File_descriptor *sockfdo, int level, Libc::File_descriptor *Plugin::socket(int domain, int type, int protocol) { using namespace Lxip; - Handle handle = socketcall.socket(type == SOCK_STREAM ? TYPE_STREAM : TYPE_DGRAM); + Handle handle = socketcall().socket(type == SOCK_STREAM ? TYPE_STREAM : TYPE_DGRAM); if (!handle.socket) { errno = EBADF; return 0; } - Plugin_context *context = new (Genode::env()->heap()) Plugin_context(handle); + Plugin_context *context = new (heap()) Plugin_context(handle); Libc::File_descriptor *fd = Libc::file_descriptor_allocator()->alloc(this, context); return fd; } @@ -647,7 +731,7 @@ int Plugin::translate_ops_linux(int optname) } /* unnamed namespace */ -void create_lxip_plugin(char const *address_config) +void __attribute__((constructor)) init_lxip_plugin() { - static Plugin lxip_plugin(address_config); + static Plugin lxip_plugin; } diff --git a/repos/dde_linux/src/lib/lxip/lx.h b/repos/dde_linux/src/lib/lxip/lx.h index e86927448..144712f8b 100644 --- a/repos/dde_linux/src/lib/lxip/lx.h +++ b/repos/dde_linux/src/lib/lxip/lx.h @@ -17,19 +17,30 @@ #include +namespace Lx_kit { class Env; } + namespace Lx { void nic_client_init(Genode::Env &env, + Genode::Entrypoint &ep, Genode::Allocator &alloc, void (*ticker)()); + void timer_init(Genode::Env &env, + Genode::Entrypoint &ep, Genode::Allocator &alloc, void (*ticker)()); - void event_init(Genode::Env &env, void (*ticker)()); + + void event_init(Genode::Env &env, + Genode::Entrypoint &ep, + void (*ticker)()); void timer_update_jiffies(); + + void lxcc_emul_init(Lx_kit::Env &env); } extern "C" int lxip_init(char const *address_config); + #endif /* _LX_H_ */ diff --git a/repos/dde_linux/src/lib/lxip/lxcc_emul.cc b/repos/dde_linux/src/lib/lxip/lxcc_emul.cc index b1a383dd4..1145fa075 100644 --- a/repos/dde_linux/src/lib/lxip/lxcc_emul.cc +++ b/repos/dde_linux/src/lib/lxip/lxcc_emul.cc @@ -28,19 +28,28 @@ #include +/* Lx_kit */ +#include + /********************************* ** Lx::Backend_alloc interface ** *********************************/ #include +static Lx_kit::Env *lx_env; + +void Lx::lxcc_emul_init(Lx_kit::Env &env) +{ + lx_env = &env; +} struct Memory_object_base : Genode::Object_pool::Entry { Memory_object_base(Genode::Ram_dataspace_capability cap) : Genode::Object_pool::Entry(cap) {} - void free() { Genode::env()->ram_session()->free(ram_cap()); } + void free() { lx_env->ram().free(ram_cap()); } Genode::Ram_dataspace_capability ram_cap() { @@ -58,8 +67,8 @@ Lx::backend_alloc(Genode::addr_t size, Genode::Cache_attribute cached) { using namespace Genode; - Genode::Ram_dataspace_capability cap = env()->ram_session()->alloc(size); - Memory_object_base *o = new (env()->heap()) Memory_object_base(cap); + Genode::Ram_dataspace_capability cap = lx_env->ram().alloc(size); + Memory_object_base *o = new (lx_env->heap()) Memory_object_base(cap); memory_pool.insert(o); return cap; @@ -79,7 +88,7 @@ void Lx::backend_free(Genode::Ram_dataspace_capability cap) object = o; /* save for destroy */ }); - destroy(env()->heap(), object); + destroy(lx_env->heap(), object); } @@ -104,7 +113,8 @@ void *alloc_large_system_hash(const char *tablename, unsigned long nlog2 = ilog2(elements); nlog2 <<= (1 << nlog2) < elements ? 1 : 0; - void *table = Genode::env()->heap()->alloc(elements * bucketsize); + void *table; + lx_env->heap().alloc(elements * bucketsize, &table); if (_hash_mask) *_hash_mask = (1 << nlog2) - 1; @@ -311,10 +321,10 @@ struct Timeout : Genode::Signal_handler tick(); } - Timeout(Genode::Env &env, void (*ticker)()) + Timeout(Genode::Env &env, Genode::Entrypoint &ep, void (*ticker)()) : - Signal_handler(env.ep(), *this, &Timeout::handle), - ep(env.ep()), timer(env), tick(ticker) + Signal_handler(ep, *this, &Timeout::handle), + ep(ep), timer(env), tick(ticker) { timer.sigh(*this); } @@ -336,9 +346,9 @@ struct Timeout : Genode::Signal_handler static Timeout *_timeout; static Genode::Signal_context_capability tick_sig_cap; -void Lx::event_init(Genode::Env &env, void (*ticker)()) +void Lx::event_init(Genode::Env &env, Genode::Entrypoint &ep, void (*ticker)()) { - static Timeout handler(env, ticker); + static Timeout handler(env, ep, ticker); _timeout = &handler; } @@ -438,7 +448,7 @@ struct page *alloc_pages(gfp_t gfp_mask, unsigned int order) { Avl_page *p; try { - p = (Avl_page *)new (Genode::env()->heap()) Avl_page(PAGE_SIZE << order); + p = (Avl_page *)new (lx_env->heap()) Avl_page(PAGE_SIZE << order); tree.insert(p); } catch (...) { return 0; } @@ -461,7 +471,7 @@ void __free_page_frag(void *addr) Avl_page *p = tree.first()->find_by_address((Genode::addr_t)addr); tree.remove(p); - destroy(Genode::env()->heap(), p); + destroy(lx_env->heap(), p); } @@ -487,7 +497,7 @@ void put_page(struct page *page) Avl_page *p = tree.first()->find_by_address((Genode::addr_t)page->addr); tree.remove(p); - destroy(Genode::env()->heap(), p); + destroy(lx_env->heap(), p); } diff --git a/repos/dde_linux/src/lib/lxip/nic_handler.cc b/repos/dde_linux/src/lib/lxip/nic_handler.cc index b63a0d576..9e6e51c47 100644 --- a/repos/dde_linux/src/lib/lxip/nic_handler.cc +++ b/repos/dde_linux/src/lib/lxip/nic_handler.cc @@ -89,14 +89,15 @@ class Nic_client public: Nic_client(Genode::Env &env, + Genode::Entrypoint &ep, Genode::Allocator &alloc, void (*ticker)()) : _tx_block_alloc(&alloc), _nic(env, &_tx_block_alloc, BUF_SIZE, BUF_SIZE), - _sink_ack(env.ep(), *this, &Nic_client::_packet_avail), - _sink_submit(env.ep(), *this, &Nic_client::_ready_to_ack), - _source_ack(env.ep(), *this, &Nic_client::_ack_avail), + _sink_ack(ep, *this, &Nic_client::_packet_avail), + _sink_submit(ep, *this, &Nic_client::_ready_to_ack), + _source_ack(ep, *this, &Nic_client::_ack_avail), _tick(ticker) { _nic.rx_channel()->sigh_ready_to_ack(_sink_ack); @@ -113,10 +114,11 @@ static Nic_client *_nic_client; void Lx::nic_client_init(Genode::Env &env, - Genode::Allocator &alloc, - void (*ticker)()) + Genode::Entrypoint &ep, + Genode::Allocator &alloc, + void (*ticker)()) { - static Nic_client _inst(env, alloc, ticker); + static Nic_client _inst(env, ep, alloc, ticker); _nic_client = &_inst; } diff --git a/repos/dde_linux/src/lib/lxip/socket_handler.cc b/repos/dde_linux/src/lib/lxip/socket_handler.cc index 56b50eade..15712a603 100644 --- a/repos/dde_linux/src/lib/lxip/socket_handler.cc +++ b/repos/dde_linux/src/lib/lxip/socket_handler.cc @@ -22,6 +22,8 @@ #include #include +/* Lx_kit */ +#include static const bool verbose = false; @@ -111,10 +113,8 @@ namespace Net }; -class Net::Socketcall : public Genode::Signal_dispatcher_base, - public Genode::Signal_context_capability, - public Lxip::Socketcall, - public Genode::Thread_deprecated<64 * 1024 * sizeof(Genode::addr_t)> +class Net::Socketcall : public Lxip::Socketcall, + public Genode::Entrypoint { private: @@ -122,13 +122,12 @@ class Net::Socketcall : public Genode::Signal_dispatcher_base, Result _result; Lxip::Handle _handle; - Genode::Signal_receiver &_sig_rec; - Genode::Signal_transmitter _signal; - Genode::Semaphore _block; + Genode::Semaphore _block; + Genode::Signal_handler _dispatcher { *this, *this, &Socketcall::_dispatch }; void _submit_and_block() { - _signal.submit(); /* global submit */ + Genode::Signal_transmitter(_dispatcher).submit(); _block.down(); } @@ -388,32 +387,11 @@ class Net::Socketcall : public Genode::Signal_dispatcher_base, _handle.socket = static_cast(s); } - public: - - Socketcall(Genode::Signal_receiver &sig_rec) - : - Thread_deprecated("socketcall"), - _sig_rec(sig_rec), - _signal(Genode::Signal_context_capability(_sig_rec.manage(this))) - { - start(); - } - - ~Socketcall() { _sig_rec.dissolve(this); } - - void entry() - { - while (true) { - Genode::Signal s = _sig_rec.wait_for_signal(); - static_cast(s.context())->dispatch(s.num()); - } - } - /*********************** ** Signal dispatcher ** ***********************/ - void dispatch(unsigned num) + void _dispatch() { switch (_call.opcode) { @@ -441,6 +419,12 @@ class Net::Socketcall : public Genode::Signal_dispatcher_base, _unblock(); } + public: + + Socketcall(Genode::Env &env) + : + Entrypoint(env, 64 * 1024 * sizeof(long), "socketcall") + { } /************************** ** Socketcall interface ** @@ -631,17 +615,20 @@ class Net::Socketcall : public Genode::Signal_dispatcher_base, } }; +static void ticker() { } -Lxip::Socketcall & Lxip::init(char const *address_config) +Lxip::Socketcall & Lxip::init(Genode::Env &env, char const *address_config) { - static Genode::Signal_receiver sig_rec; + Lx_kit::Env &lx_env = Lx_kit::construct_env(env); - Lx::timer_init(sig_rec); - Lx::event_init(sig_rec); - Lx::nic_client_init(sig_rec); + static Net::Socketcall socketcall(env); - static int init = lxip_init(address_config); - static Net::Socketcall socketcall(sig_rec); + Lx::timer_init(env, socketcall, lx_env.heap(), ticker); + Lx::event_init(env, socketcall, ticker); + Lx::nic_client_init(env, socketcall, lx_env.heap(), ticker); + Lx::lxcc_emul_init(lx_env); + + lxip_init(address_config); return socketcall; } diff --git a/repos/dde_linux/src/lib/lxip/timer_handler.cc b/repos/dde_linux/src/lib/lxip/timer_handler.cc index 13db19a44..45514c459 100644 --- a/repos/dde_linux/src/lib/lxip/timer_handler.cc +++ b/repos/dde_linux/src/lib/lxip/timer_handler.cc @@ -192,10 +192,11 @@ class Lx::Timer /** * Constructor */ - Timer(Genode::Env &env, Genode::Allocator &alloc, void (*tick)()) + Timer(Genode::Env &env, Genode::Entrypoint &ep, Genode::Allocator &alloc, + void (*tick)()) : _timer_conn(env), - _handler(env.ep(), *this, &Lx::Timer::_handle), + _handler(ep, *this, &Lx::Timer::_handle), _timer_alloc(&alloc), _tick(tick) { @@ -296,9 +297,10 @@ class Lx::Timer static Lx::Timer *_timer; -void Lx::timer_init(Genode::Env &env, Genode::Allocator &alloc, void (*tick)()) +void Lx::timer_init(Genode::Env &env, Genode::Entrypoint &ep, + Genode::Allocator &alloc, void (*tick)()) { - static Lx::Timer inst(env, alloc, tick); + static Lx::Timer inst(env, ep, alloc, tick); _timer = &inst; }