1
2
3
4
5
6 #ifndef _SPARC_MOSTEK_H
7 #define _SPARC_MOSTEK_H
8
9 #include <asm/idprom.h>
10
11
12
13
14 struct mostek48t02 {
15 char eeprom[2008];
16 struct idp_struct idprom;
17 volatile unsigned char creg;
18 volatile unsigned char sec;
19 volatile unsigned char min;
20 volatile unsigned char hour;
21 volatile unsigned char dow;
22 volatile unsigned char dom;
23 volatile unsigned char mnth;
24 volatile unsigned char yr;
25 };
26
27 extern struct mostek48t02 *mstk48t02_regs;
28
29
30 #define MSTK_CREG_WRITE 0x80
31 #define MSTK_CREG_READ 0x40
32 #define MSTK_CREG_SIGN 0x20
33
34 #define MSTK_YR_ZERO 1968
35 #define MSTK_CVT_YEAR(yr) ((yr) + MSTK_YR_ZERO)
36
37
38 #define MSTK_SEC_MASK 0x7f
39 #define MSTK_MIN_MASK 0x7f
40 #define MSTK_HOUR_MASK 0x3f
41 #define MSTK_DOW_MASK 0x07
42 #define MSTK_DOM_MASK 0x3f
43 #define MSTK_MNTH_MASK 0x1f
44 #define MSTK_YR_MASK 0xff
45
46
47 #define MSTK_REGVAL_TO_DECIMAL(x) (((x) & 0xf) + 0xa * ((x) >> 0x4))
48 #define MSTK_DECIMAL_TO_REGVAL(x) ((((x) / 0xa) << 0x4) + ((x) % 0xa))
49
50
51
52
53
54 #define MSTK_REG_CREG(ptr) (ptr->creg)
55 #define MSTK_REG_SEC(ptr) (MSTK_REGVAL_TO_DECIMAL((ptr->sec & MSTK_SEC_MASK)))
56 #define MSTK_REG_MIN(ptr) (MSTK_REGVAL_TO_DECIMAL((ptr->min & MSTK_MIN_MASK)))
57 #define MSTK_REG_HOUR(ptr) (MSTK_REGVAL_TO_DECIMAL((ptr->hour & MSTK_HOUR_MASK)))
58 #define MSTK_REG_DOW(ptr) (MSTK_REGVAL_TO_DECIMAL((ptr->dow & MSTK_DOW_MASK)))
59 #define MSTK_REG_DOM(ptr) (MSTK_REGVAL_TO_DECIMAL((ptr->dom & MSTK_DOM_MASK)))
60 #define MSTK_REG_MNTH(ptr) (MSTK_REGVAL_TO_DECIMAL((ptr->mnth & MSTK_MNTH_MASK)))
61 #define MSTK_REG_YR(ptr) (MSTK_REGVAL_TO_DECIMAL((ptr->yr & MSTK_YR_MASK)))
62
63
64
65
66 struct mostek48t08 {
67 char offset[6*1024];
68 struct mostek48t02 regs;
69 };
70 extern struct mostek48t08 *mstk48t08_regs;
71
72 enum sparc_clock_type { MSTK48T02, MSTK48T08, MSTK_INVALID };
73 extern enum sparc_clock_type sp_clock_typ;
74
75 #endif