1.1 --- a/pkg/devices/cpm/src/jz4740/cpm-jz4740.cc Fri Jan 01 00:49:07 2021 +0100
1.2 +++ b/pkg/devices/cpm/src/jz4740/cpm-jz4740.cc Fri Jan 01 01:49:35 2021 +0100
1.3 @@ -1,7 +1,7 @@
1.4 /*
1.5 * JZ4740 CPM server.
1.6 *
1.7 - * Copyright (C) 2018 Paul Boddie <paul@boddie.org.uk>
1.8 + * Copyright (C) 2018, 2020 Paul Boddie <paul@boddie.org.uk>
1.9 *
1.10 * This program is free software; you can redistribute it and/or
1.11 * modify it under the terms of the GNU General Public License as
1.12 @@ -21,13 +21,11 @@
1.13
1.14 #include <l4/devices/cpm-jz4740.h>
1.15 #include <l4/devices/memory.h>
1.16 -#include "cpm-server.h"
1.17 +
1.18 +#include <l4/re/env.h>
1.19
1.20 -#include <l4/re/dataspace>
1.21 -#include <l4/re/env>
1.22 -#include <l4/re/util/object_registry>
1.23 -
1.24 -#include <l4/sys/types.h>
1.25 +#include <ipc/server.h>
1.26 +#include "cpm_server.h"
1.27
1.28 // Virtual addresses for the CPM and LCD register blocks.
1.29
1.30 @@ -47,7 +45,42 @@
1.31
1.32
1.33
1.34 -static L4Re::Util::Registry_server<> server;
1.35 +/* CPM server. */
1.36 +
1.37 +class server_CPM : public CPM
1.38 +{
1.39 + Cpm_jz4740_chip *_chip;
1.40 +
1.41 +public:
1.42 + explicit server_CPM(Cpm_jz4740_chip *chip)
1.43 + : _chip(chip)
1.44 + {
1.45 + }
1.46 +
1.47 + long set_lcd_frequencies(uint32_t pclk, uint8_t multiplier)
1.48 + {
1.49 + _chip->set_lcd_frequencies(pclk, multiplier);
1.50 + return L4_EOK;
1.51 + }
1.52 +
1.53 + long start_lcd()
1.54 + {
1.55 + _chip->start_lcd();
1.56 + return L4_EOK;
1.57 + }
1.58 +
1.59 + long stop_lcd()
1.60 + {
1.61 + _chip->stop_lcd();
1.62 + return L4_EOK;
1.63 + }
1.64 +
1.65 + long update_output_frequency()
1.66 + {
1.67 + _chip->update_output_frequency();
1.68 + return L4_EOK;
1.69 + }
1.70 +};
1.71
1.72
1.73
1.74 @@ -62,12 +95,15 @@
1.75 Cpm_jz4740_chip cpm_device(cpm_virt_base, 12000000);
1.76
1.77 /* Initialise and register a server object. */
1.78 -
1.79 - Cpm_server server_obj(&cpm_device);
1.80 - server.registry()->register_obj(&server_obj, "cpm");
1.81 -
1.82 +
1.83 + server_CPM obj(&cpm_device);
1.84 + l4_cap_idx_t server;
1.85 +
1.86 + if (ipc_server_bind("cpm", (l4_umword_t) &obj, &server)) return 1;
1.87 +
1.88 /* Enter the IPC server loop. */
1.89 -
1.90 - server.loop();
1.91 +
1.92 + ipc_server_loop(CPM_expected_items, &obj,
1.93 + (ipc_server_handler_type) handle_CPM);
1.94 return 0;
1.95 }