1.1 --- a/pkg/devices/cpm/src/jz4730/cpm-jz4730.cc Fri Jan 01 00:49:07 2021 +0100
1.2 +++ b/pkg/devices/cpm/src/jz4730/cpm-jz4730.cc Fri Jan 01 01:49:35 2021 +0100
1.3 @@ -1,7 +1,7 @@
1.4 /*
1.5 * JZ4730 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,21 +21,19 @@
1.13
1.14 #include <l4/devices/cpm-jz4730.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 +#include <ipc/server.h>
1.24 +#include "cpm_server.h"
1.25
1.26 -#include <l4/sys/types.h>
1.27 -
1.28 -// Virtual addresses for the CPM and LCD register blocks.
1.29 +/* Virtual addresses for the CPM and LCD register blocks. */
1.30
1.31 static l4_addr_t cpm_virt_base = 0, cpm_virt_base_end = 0;
1.32
1.33
1.34
1.35 -// Access to peripheral memory.
1.36 +/* Access to peripheral memory. */
1.37
1.38 static int setup_memory()
1.39 {
1.40 @@ -47,7 +45,42 @@
1.41
1.42
1.43
1.44 -static L4Re::Util::Registry_server<> server;
1.45 +/* CPM server. */
1.46 +
1.47 +class server_CPM : public CPM
1.48 +{
1.49 + Cpm_jz4730_chip *_chip;
1.50 +
1.51 +public:
1.52 + explicit server_CPM(Cpm_jz4730_chip *chip)
1.53 + : _chip(chip)
1.54 + {
1.55 + }
1.56 +
1.57 + long set_lcd_frequencies(uint32_t pclk, uint8_t multiplier)
1.58 + {
1.59 + _chip->set_lcd_frequencies(pclk, multiplier);
1.60 + return L4_EOK;
1.61 + }
1.62 +
1.63 + long start_lcd()
1.64 + {
1.65 + _chip->start_lcd();
1.66 + return L4_EOK;
1.67 + }
1.68 +
1.69 + long stop_lcd()
1.70 + {
1.71 + _chip->stop_lcd();
1.72 + return L4_EOK;
1.73 + }
1.74 +
1.75 + long update_output_frequency()
1.76 + {
1.77 + _chip->update_output_frequency();
1.78 + return L4_EOK;
1.79 + }
1.80 +};
1.81
1.82
1.83
1.84 @@ -63,11 +96,14 @@
1.85
1.86 /* Initialise and register a server object. */
1.87
1.88 - Cpm_server server_obj(&cpm_device);
1.89 - server.registry()->register_obj(&server_obj, "cpm");
1.90 + server_CPM obj(&cpm_device);
1.91 + l4_cap_idx_t server;
1.92 +
1.93 + if (ipc_server_bind("cpm", (l4_umword_t) &obj, &server)) return 1;
1.94
1.95 /* Enter the IPC server loop. */
1.96
1.97 - server.loop();
1.98 + ipc_server_loop(CPM_expected_items, &obj,
1.99 + (ipc_server_handler_type) handle_CPM);
1.100 return 0;
1.101 }