source: mainline/uspace/lib/drv/generic/remote_clock_dev.c@ 33b9dcb

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 33b9dcb was 59e92f62, checked in by Maurizio Lombardi <m.lombardi85@…>, 14 years ago

rtc: add the remote clock interface (time_get() not supported yet).

  • Property mode set to 100644
File size: 3.3 KB
Line 
1/*
2 * Copyright (c) 2012 Maurizio Lombardi
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup libdrv
30 * @{
31 */
32/** @file
33 */
34
35#include <async.h>
36#include <errno.h>
37#include <time.h>
38
39#include <ops/clock_dev.h>
40#include <ddf/driver.h>
41
42static void remote_clock_time_get(ddf_fun_t *, void *, ipc_callid_t,
43 ipc_call_t *);
44/*
45static void remote_clock_time_set(ddf_fun_t *, void *, ipc_callid_t,
46 ipc_call_t *);
47*/
48
49/** Remote clock interface operations */
50static remote_iface_func_ptr_t remote_clock_dev_iface_ops[] = {
51 &remote_clock_time_get,
52 /* XXX &remote_clock_time_set, */
53};
54
55/** Remote clock interface structure
56 *
57 * Interface for processing requests from remote clients
58 * addressed by the clock interface.
59 */
60remote_iface_t remote_clock_dev_iface = {
61 .method_count = sizeof(remote_clock_dev_iface_ops) /
62 sizeof(remote_iface_func_ptr_t),
63 .methods = remote_clock_dev_iface_ops,
64};
65
66/** Process the time_get() request from the remote client
67 *
68 * @param fun The function from which the time is read
69 * @param ops The local ops structure
70 */
71static void
72remote_clock_time_get(ddf_fun_t *fun, void *ops, ipc_callid_t callid,
73 ipc_call_t *call)
74{
75 clock_dev_ops_t *clock_dev_ops = (clock_dev_ops_t *) ops;
76 ipc_callid_t cid;
77 struct tm t;
78 int rc;
79 size_t len;
80
81 if (!async_data_read_receive(&cid, &len)) {
82 /* TODO: Handle protocol error */
83 async_answer_0(callid, EINVAL);
84 return;
85 }
86
87 if (!clock_dev_ops->time_get) {
88 /* The driver does not provide the time_get() functionality */
89 async_data_read_finalize(cid, NULL, 0);
90 async_answer_0(callid, ENOTSUP);
91 return;
92 }
93
94 rc = (*clock_dev_ops->time_get)(fun, &t);
95
96 if (rc != EOK) {
97 /* Some error occurred */
98 async_data_read_finalize(cid, NULL, 0);
99 async_answer_0(callid, rc);
100 }
101
102 /* The operation was successful */
103 async_data_read_finalize(cid, &t, sizeof(struct tm));
104 async_answer_1(callid, EOK, rc);
105}
106
107/* TODO: remote_clock_time_set() */
108
109/**
110 * @}
111 */
112
Note: See TracBrowser for help on using the repository browser.