Home | History | Annotate | Line # | Download | only in dev
vrtc.c revision 1.1.22.1
      1       1.1   palle /*	$NetBSD: vrtc.c,v 1.1.22.1 2020/04/13 08:04:08 martin Exp $	*/
      2       1.1   palle /*	$OpenBSD: vrtc.c,v 1.1 2008/03/08 19:19:43 kettenis Exp $	*/
      3       1.1   palle /*
      4       1.1   palle  * Copyright (c) 2008 Mark Kettenis
      5       1.1   palle  *
      6       1.1   palle  * Permission to use, copy, modify, and distribute this software for any
      7       1.1   palle  * purpose with or without fee is hereby granted, provided that the above
      8       1.1   palle  * copyright notice and this permission notice appear in all copies.
      9       1.1   palle  *
     10       1.1   palle  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
     11       1.1   palle  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     12       1.1   palle  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     13       1.1   palle  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     14       1.1   palle  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
     15       1.1   palle  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
     16       1.1   palle  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     17       1.1   palle  */
     18       1.1   palle 
     19       1.1   palle #include <sys/param.h>
     20       1.1   palle #include <sys/device.h>
     21       1.1   palle #include <sys/malloc.h>
     22       1.1   palle #include <sys/systm.h>
     23       1.1   palle 
     24       1.1   palle #include <machine/autoconf.h>
     25       1.1   palle #include <machine/hypervisor.h>
     26       1.1   palle #include <machine/openfirm.h>
     27       1.1   palle 
     28       1.1   palle #include <dev/clock_subr.h>
     29       1.1   palle #include <sparc64/dev/vbusvar.h>
     30       1.1   palle 
     31       1.1   palle extern todr_chip_handle_t todr_handle;
     32       1.1   palle 
     33       1.1   palle int	vrtc_match(device_t, cfdata_t, void *);
     34       1.1   palle void	vrtc_attach(device_t, device_t, void *);
     35       1.1   palle 
     36       1.1   palle CFATTACH_DECL_NEW(vrtc, sizeof(device_t),
     37       1.1   palle     vrtc_match, vrtc_attach, NULL, NULL);
     38       1.1   palle 
     39       1.1   palle int	vrtc_gettime(todr_chip_handle_t, struct timeval *);
     40       1.1   palle int	vrtc_settime(todr_chip_handle_t, struct timeval *);
     41       1.1   palle 
     42       1.1   palle int
     43       1.1   palle vrtc_match(device_t parent, cfdata_t match, void *aux)
     44       1.1   palle {
     45       1.1   palle 	struct vbus_attach_args *va = aux;
     46       1.1   palle 
     47       1.1   palle 	if (strcmp(va->va_name, "rtc") == 0)
     48       1.1   palle 		return (1);
     49       1.1   palle 
     50       1.1   palle 	return (0);
     51       1.1   palle }
     52       1.1   palle 
     53       1.1   palle void
     54       1.1   palle vrtc_attach(device_t parent, device_t self, void *aux)
     55       1.1   palle {
     56       1.1   palle 	todr_chip_handle_t handle;
     57       1.1   palle 
     58       1.1   palle 	printf("\n");
     59       1.1   palle 
     60  1.1.22.1  martin 	handle = malloc(sizeof(struct todr_chip_handle), M_DEVBUF,M_WAITOK);
     61       1.1   palle 	handle->cookie = self;
     62       1.1   palle 	handle->todr_gettime = vrtc_gettime;
     63       1.1   palle 	handle->todr_settime = vrtc_settime;
     64       1.1   palle 
     65       1.1   palle 	handle->bus_cookie = NULL;
     66       1.1   palle 	handle->todr_setwen = NULL;
     67       1.1   palle 
     68       1.1   palle 	todr_attach(handle);
     69       1.1   palle }
     70       1.1   palle 
     71       1.1   palle int
     72       1.1   palle vrtc_gettime(todr_chip_handle_t handle, struct timeval *tv)
     73       1.1   palle {
     74       1.1   palle 	u_int64_t tod;
     75       1.1   palle 
     76       1.1   palle 	if (hv_tod_get(&tod) != H_EOK)
     77       1.1   palle 		return (1);
     78       1.1   palle 
     79       1.1   palle 	tv->tv_sec = tod;
     80       1.1   palle 	tv->tv_usec = 0;
     81       1.1   palle 	return (0);
     82       1.1   palle }
     83       1.1   palle 
     84       1.1   palle int
     85       1.1   palle vrtc_settime(todr_chip_handle_t handle, struct timeval *tv)
     86       1.1   palle {
     87       1.1   palle 	if (hv_tod_set(tv->tv_sec) != H_EOK)
     88       1.1   palle 		return (1);
     89       1.1   palle 
     90       1.1   palle 	return (0);
     91       1.1   palle }
     92