1.1 --- a/pkg/devices/cpm/src/jz4780/cpm-jz4780.cc Fri Jan 01 00:49:07 2021 +0100
1.2 +++ b/pkg/devices/cpm/src/jz4780/cpm-jz4780.cc Fri Jan 01 01:49:35 2021 +0100
1.3 @@ -1,7 +1,7 @@
1.4 /*
1.5 * JZ4780 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-jz4780.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,66 @@
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_jz4780_chip *_chip;
1.40 +
1.41 +public:
1.42 + explicit server_CPM(Cpm_jz4780_chip *chip)
1.43 + : _chip(chip)
1.44 + {
1.45 + }
1.46 +
1.47 + long get_lcd_pixel_frequency(uint8_t controller, uint32_t *frequency)
1.48 + {
1.49 + *frequency = _chip->get_lcd_pixel_frequency(controller);
1.50 + return L4_EOK;
1.51 + }
1.52 +
1.53 + long set_hdmi_frequency(uint32_t frequency)
1.54 + {
1.55 + _chip->set_hdmi_frequency(frequency);
1.56 + return L4_EOK;
1.57 + }
1.58 +
1.59 + long set_lcd_frequencies(uint32_t pclk, uint8_t multiplier)
1.60 + {
1.61 + _chip->set_lcd_frequencies(pclk, multiplier);
1.62 + return L4_EOK;
1.63 + }
1.64 +
1.65 + long start_hdmi()
1.66 + {
1.67 + _chip->start_hdmi();
1.68 + return L4_EOK;
1.69 + }
1.70 +
1.71 + long stop_hdmi()
1.72 + {
1.73 + _chip->stop_hdmi();
1.74 + return L4_EOK;
1.75 + }
1.76 +
1.77 + long start_lcd()
1.78 + {
1.79 + _chip->start_lcd();
1.80 + return L4_EOK;
1.81 + }
1.82 +
1.83 + long stop_lcd()
1.84 + {
1.85 + _chip->stop_lcd();
1.86 + return L4_EOK;
1.87 + }
1.88 +
1.89 + long update_output_frequency()
1.90 + {
1.91 + _chip->update_output_frequency();
1.92 + return L4_EOK;
1.93 + }
1.94 +};
1.95
1.96
1.97
1.98 @@ -63,11 +120,14 @@
1.99
1.100 /* Initialise and register a server object. */
1.101
1.102 - Cpm_server server_obj(&cpm_device);
1.103 - server.registry()->register_obj(&server_obj, "cpm");
1.104 + server_CPM obj(&cpm_device);
1.105 + l4_cap_idx_t server;
1.106 +
1.107 + if (ipc_server_bind("cpm", (l4_umword_t) &obj, &server)) return 1;
1.108
1.109 /* Enter the IPC server loop. */
1.110
1.111 - server.loop();
1.112 + ipc_server_loop(CPM_expected_items, &obj,
1.113 + (ipc_server_handler_type) handle_CPM);
1.114 return 0;
1.115 }