1 /* $NetBSD: a34kbbc.c,v 1.19 2006/09/11 17:18:00 gdamore Exp $ */
4 * Copyright (c) 1982, 1990 The Regents of the University of California.
7 * This code is derived from software contributed to Berkeley by
8 * the Systems Programming Group of the University of Utah Computer
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions and the following disclaimer.
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in the
18 * documentation and/or other materials provided with the distribution.
19 * 3. Neither the name of the University nor the names of its contributors
20 * may be used to endorse or promote products derived from this software
21 * without specific prior written permission.
23 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35 * from: Utah $Hdr: clock.c 1.18 91/01/21$
37 * @(#)clock.c 7.6 (Berkeley) 5/7/91
41 * Copyright (c) 1988 University of Utah.
43 * This code is derived from software contributed to Berkeley by
44 * the Systems Programming Group of the University of Utah Computer
47 * Redistribution and use in source and binary forms, with or without
48 * modification, are permitted provided that the following conditions
50 * 1. Redistributions of source code must retain the above copyright
51 * notice, this list of conditions and the following disclaimer.
52 * 2. Redistributions in binary form must reproduce the above copyright
53 * notice, this list of conditions and the following disclaimer in the
54 * documentation and/or other materials provided with the distribution.
55 * 3. All advertising materials mentioning features or use of this software
56 * must display the following acknowledgement:
57 * This product includes software developed by the University of
58 * California, Berkeley and its contributors.
59 * 4. Neither the name of the University nor the names of its contributors
60 * may be used to endorse or promote products derived from this software
61 * without specific prior written permission.
63 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
64 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
65 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
66 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
67 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
68 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
69 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
70 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
71 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
72 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
75 * from: Utah $Hdr: clock.c 1.18 91/01/21$
77 * @(#)clock.c 7.6 (Berkeley) 5/7/91
80 #include <sys/cdefs.h>
81 __KERNEL_RCSID(0, "$NetBSD: a34kbbc.c,v 1.19 2006/09/11 17:18:00 gdamore Exp $");
83 #include <sys/param.h>
84 #include <sys/kernel.h>
85 #include <sys/device.h>
86 #include <sys/systm.h>
87 #include <machine/psl.h>
88 #include <machine/cpu.h>
89 #include <amiga/amiga/device.h>
90 #include <amiga/amiga/custom.h>
91 #include <amiga/amiga/cia.h>
92 #include <amiga/dev/rtc.h>
93 #include <amiga/dev/zbusvar.h>
95 #include <dev/clock_subr.h>
97 int a34kbbc_match(struct device
*, struct cfdata
*, void *);
98 void a34kbbc_attach(struct device
*, struct device
*, void *);
100 CFATTACH_DECL(a34kbbc
, sizeof(struct device
),
101 a34kbbc_match
, a34kbbc_attach
, NULL
, NULL
);
104 int a34kugettod(todr_chip_handle_t
, struct clock_ymdhms
*);
105 int a34kusettod(todr_chip_handle_t
, struct clock_ymdhms
*);
106 static struct todr_chip_handle a34ktodr
;
109 a34kbbc_match(struct device
*pdp
, struct cfdata
*cfp
, void *auxp
)
111 struct clock_ymdhms dt
;
112 static int a34kbbc_matched
= 0;
114 if (!matchname("a34kbbc", auxp
))
117 /* Allow only one instance. */
121 if (!(is_a3000() || is_a4000()))
124 a34kclockaddr
= (void *)__UNVOLATILE(ztwomap(0xdc0000));
125 if (a34kugettod(&a34ktodr
, &dt
) != 0)
133 * Attach us to the rtc function pointers.
136 a34kbbc_attach(struct device
*pdp
, struct device
*dp
, void *auxp
)
139 a34kclockaddr
= (void *)__UNVOLATILE(ztwomap(0xdc0000));
141 a34ktodr
.cookie
= a34kclockaddr
;
142 a34ktodr
.todr_gettime_ymdhms
= a34kugettod
;
143 a34ktodr
.todr_settime_ymdhms
= a34kusettod
;
144 todr_attach(&a34ktodr
);
148 a34kugettod(todr_chip_handle_t h
, struct clock_ymdhms
*dt
)
150 struct rtclock3000
*rt
;
155 rt
->control1
= A3CONTROL1_HOLD_CLOCK
;
157 /* Copy the info. Careful about the order! */
158 dt
->dt_sec
= rt
->second1
* 10 + rt
->second2
;
159 dt
->dt_min
= rt
->minute1
* 10 + rt
->minute2
;
160 dt
->dt_hour
= rt
->hour1
* 10 + rt
->hour2
;
161 dt
->dt_wday
= rt
->weekday
;
162 dt
->dt_day
= rt
->day1
* 10 + rt
->day2
;
163 dt
->dt_mon
= rt
->month1
* 10 + rt
->month2
;
164 dt
->dt_year
= rt
->year1
* 10 + rt
->year2
;
166 dt
->dt_year
+= CLOCK_BASE_YEAR
;
167 /* let it run again.. */
168 rt
->control1
= A3CONTROL1_FREE_CLOCK
;
170 if (dt
->dt_year
< STARTOFTIME
)
175 * These checks are mostly redundant against those already in the
176 * generic todr, but apparently the attach code checks against the
177 * return value of this function, so we have to include a check here,
180 if ((dt
->dt_hour
> 23) ||
184 /* (dt.dt_year < STARTOFTIME) || */ (dt
->dt_year
> 2036))
191 a34kusettod(todr_chip_handle_t h
, struct clock_ymdhms
*dt
)
193 struct rtclock3000
*rt
;
197 * there seem to be problems with the bitfield addressing
204 rt
->control1
= A3CONTROL1_HOLD_CLOCK
; /* implies mode 0 */
205 rt
->second1
= dt
->dt_sec
/ 10;
206 rt
->second2
= dt
->dt_sec
% 10;
207 rt
->minute1
= dt
->dt_min
/ 10;
208 rt
->minute2
= dt
->dt_min
% 10;
209 rt
->hour1
= dt
->dt_hour
/ 10;
210 rt
->hour2
= dt
->dt_hour
% 10;
211 rt
->weekday
= dt
->dt_wday
;
212 rt
->day1
= dt
->dt_day
/ 10;
213 rt
->day2
= dt
->dt_day
% 10;
214 rt
->month1
= dt
->dt_mon
/ 10;
215 rt
->month2
= dt
->dt_mon
% 10;
216 rt
->year1
= (dt
->dt_year
/ 10) % 10;
217 rt
->year2
= dt
->dt_year
% 10;
218 rt
->control1
= A3CONTROL1_HOLD_CLOCK
| 1; /* mode 1 registers */
219 rt
->leapyear
= dt
->dt_year
; /* XXX implicit % 4 */
220 rt
->control1
= A3CONTROL1_FREE_CLOCK
; /* implies mode 1 */