home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-ppc / todc.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  19.4 KB  |  489 lines

  1. /*
  2.  * Definitions for the M48Txx and mc146818 series of Time of day/Real Time
  3.  * Clock chips.
  4.  *
  5.  * Author: Mark A. Greer
  6.  *         mgreer@mvista.com
  7.  *
  8.  * 2001 (c) MontaVista, Software, Inc.  This file is licensed under
  9.  * the terms of the GNU General Public License version 2.  This program
  10.  * is licensed "as is" without any warranty of any kind, whether express
  11.  * or implied.
  12.  */
  13.  
  14. /*
  15.  * Support for the M48T37/M48T59/.../mc146818 Real Time Clock chips.
  16.  * Purpose is to make one generic file that handles all of these chips instead
  17.  * of every platform implementing the same code over & over again.
  18.  */
  19.  
  20. #ifndef __PPC_KERNEL_TODC_H
  21. #define __PPC_KERNEL_TODC_H
  22.  
  23. typedef struct {
  24.     uint rtc_type;        /* your particular chip */
  25.  
  26.     /*
  27.      * Following are the addresses of the AS0, AS1, and DATA registers
  28.      * of these chips.  Note that these are board-specific.
  29.      */
  30.     unsigned int nvram_as0;
  31.     unsigned int nvram_as1;
  32.     unsigned int nvram_data;
  33.  
  34.     /*
  35.      * Define bits to stop external set of regs from changing so
  36.      * the chip can be read/written reliably.
  37.      */
  38.     unsigned char enable_read;
  39.     unsigned char enable_write;
  40.  
  41.     /*
  42.      * Following is the number of AS0 address bits.  This is normally
  43.      * 8 but some bad hardware routes address lines incorrectly.
  44.      */
  45.     int as0_bits;
  46.  
  47.     int nvram_size;    /* Size of NVRAM on chip */
  48.     int sw_flags;    /* Software control flags */
  49.  
  50.     /* Following are the register offsets for the particular chip */
  51.     int year;
  52.     int month;
  53.     int day_of_month;
  54.     int day_of_week;
  55.     int hours;
  56.     int minutes;
  57.     int seconds;
  58.     int control_b;
  59.     int control_a;
  60.     int watchdog;
  61.     int interrupts;
  62.     int alarm_date;
  63.     int alarm_hour;
  64.     int alarm_minutes;
  65.     int alarm_seconds;
  66.     int century;
  67.     int flags;
  68.  
  69.     /*
  70.      * Some RTC chips have their NVRAM buried behind a addr/data pair of
  71.      * regs on the first level/clock registers.  The following fields
  72.      * are the addresses for those addr/data regs.
  73.      */
  74.     int nvram_addr_reg;
  75.     int nvram_data_reg;
  76. } todc_info_t;
  77.  
  78. /*
  79.  * Define the types of TODC/RTC variants that are supported in
  80.  * arch/ppc/kernel/todc_time.c
  81.  * Make a new one of these for any chip somehow differs from what's already
  82.  * defined.  That way, if you ever need to put in code to touch those
  83.  * bits/registers in todc_time.c, you can put it inside an
  84.  * 'if (todc_info->rtc_type ==  TODC_TYPE_XXX)' so you won't break
  85.  * anyone else.
  86.  */
  87. #define    TODC_TYPE_MK48T35        1
  88. #define    TODC_TYPE_MK48T37        2
  89. #define    TODC_TYPE_MK48T59        3
  90. #define    TODC_TYPE_DS1693        4    /* Dallas DS1693 RTC */
  91. #define    TODC_TYPE_DS1743        5    /* Dallas DS1743 RTC */
  92. #define    TODC_TYPE_DS1746        6    /* Dallas DS1746 RTC */
  93. #define    TODC_TYPE_DS1747        7    /* Dallas DS1747 RTC */
  94. #define    TODC_TYPE_DS1501        8    /* Dallas DS1501 RTC */
  95. #define TODC_TYPE_DS1643        9    /* Dallas DS1643 RTC */
  96. #define TODC_TYPE_PC97307        10    /* PC97307 internal RTC */
  97. #define TODC_TYPE_DS1557        11    /* Dallas DS1557 RTC */
  98. #define TODC_TYPE_DS17285        12    /* Dallas DS17285 RTC */
  99. #define TODC_TYPE_DS1553        13    /* Dallas DS1553 RTC */
  100. #define    TODC_TYPE_MC146818        100    /* Leave room for m48txx's */
  101.  
  102. /*
  103.  * Bit to clear/set to enable reads/writes to the chip
  104.  */
  105. #define    TODC_MK48TXX_CNTL_A_R        0x40
  106. #define    TODC_MK48TXX_CNTL_A_W        0x80
  107. #define    TODC_MK48TXX_DAY_CB        0x80
  108.  
  109. #define    TODC_DS1501_CNTL_B_TE        0x80
  110.  
  111. /*
  112.  * Define flag bits used by todc routines.
  113.  */
  114. #define    TODC_FLAG_2_LEVEL_NVRAM        0x00000001
  115.  
  116. /*
  117.  * Define the values for the various RTC's that should to into the todc_info
  118.  * table.
  119.  * Note: The XXX_NVRAM_SIZE, XXX_NVRAM_ADDR_REG, and XXX_NVRAM_DATA_REG only
  120.  * matter if XXX_SW_FLAGS has TODC_FLAG_2_LEVEL_NVRAM set.
  121.  */
  122. #define    TODC_TYPE_MK48T35_NVRAM_SIZE        0x7ff8
  123. #define    TODC_TYPE_MK48T35_SW_FLAGS        0
  124. #define    TODC_TYPE_MK48T35_YEAR            0x7fff
  125. #define    TODC_TYPE_MK48T35_MONTH            0x7ffe
  126. #define    TODC_TYPE_MK48T35_DOM            0x7ffd    /* Day of Month */
  127. #define    TODC_TYPE_MK48T35_DOW            0x7ffc    /* Day of Week */
  128. #define    TODC_TYPE_MK48T35_HOURS            0x7ffb
  129. #define    TODC_TYPE_MK48T35_MINUTES        0x7ffa
  130. #define    TODC_TYPE_MK48T35_SECONDS        0x7ff9
  131. #define    TODC_TYPE_MK48T35_CNTL_B        0x7ff9
  132. #define    TODC_TYPE_MK48T35_CNTL_A        0x7ff8
  133. #define    TODC_TYPE_MK48T35_WATCHDOG        0x0000
  134. #define    TODC_TYPE_MK48T35_INTERRUPTS        0x0000
  135. #define    TODC_TYPE_MK48T35_ALARM_DATE        0x0000
  136. #define    TODC_TYPE_MK48T35_ALARM_HOUR        0x0000
  137. #define    TODC_TYPE_MK48T35_ALARM_MINUTES        0x0000
  138. #define    TODC_TYPE_MK48T35_ALARM_SECONDS        0x0000
  139. #define    TODC_TYPE_MK48T35_CENTURY        0x0000
  140. #define    TODC_TYPE_MK48T35_FLAGS            0x0000
  141. #define    TODC_TYPE_MK48T35_NVRAM_ADDR_REG    0
  142. #define    TODC_TYPE_MK48T35_NVRAM_DATA_REG    0
  143.  
  144. #define    TODC_TYPE_MK48T37_NVRAM_SIZE        0x7ff0
  145. #define    TODC_TYPE_MK48T37_SW_FLAGS        0
  146. #define    TODC_TYPE_MK48T37_YEAR            0x7fff
  147. #define    TODC_TYPE_MK48T37_MONTH            0x7ffe
  148. #define    TODC_TYPE_MK48T37_DOM            0x7ffd    /* Day of Month */
  149. #define    TODC_TYPE_MK48T37_DOW            0x7ffc    /* Day of Week */
  150. #define    TODC_TYPE_MK48T37_HOURS            0x7ffb
  151. #define    TODC_TYPE_MK48T37_MINUTES        0x7ffa
  152. #define    TODC_TYPE_MK48T37_SECONDS        0x7ff9
  153. #define    TODC_TYPE_MK48T37_CNTL_B        0x7ff9
  154. #define    TODC_TYPE_MK48T37_CNTL_A        0x7ff8
  155. #define    TODC_TYPE_MK48T37_WATCHDOG        0x7ff7
  156. #define    TODC_TYPE_MK48T37_INTERRUPTS        0x7ff6
  157. #define    TODC_TYPE_MK48T37_ALARM_DATE        0x7ff5
  158. #define    TODC_TYPE_MK48T37_ALARM_HOUR        0x7ff4
  159. #define    TODC_TYPE_MK48T37_ALARM_MINUTES        0x7ff3
  160. #define    TODC_TYPE_MK48T37_ALARM_SECONDS        0x7ff2
  161. #define    TODC_TYPE_MK48T37_CENTURY        0x7ff1
  162. #define    TODC_TYPE_MK48T37_FLAGS            0x7ff0
  163. #define    TODC_TYPE_MK48T37_NVRAM_ADDR_REG    0
  164. #define    TODC_TYPE_MK48T37_NVRAM_DATA_REG    0
  165.  
  166. #define    TODC_TYPE_MK48T59_NVRAM_SIZE        0x1ff0
  167. #define    TODC_TYPE_MK48T59_SW_FLAGS        0
  168. #define    TODC_TYPE_MK48T59_YEAR            0x1fff
  169. #define    TODC_TYPE_MK48T59_MONTH            0x1ffe
  170. #define    TODC_TYPE_MK48T59_DOM            0x1ffd    /* Day of Month */
  171. #define    TODC_TYPE_MK48T59_DOW            0x1ffc    /* Day of Week */
  172. #define    TODC_TYPE_MK48T59_HOURS            0x1ffb
  173. #define    TODC_TYPE_MK48T59_MINUTES        0x1ffa
  174. #define    TODC_TYPE_MK48T59_SECONDS        0x1ff9
  175. #define    TODC_TYPE_MK48T59_CNTL_B        0x1ff9
  176. #define    TODC_TYPE_MK48T59_CNTL_A        0x1ff8
  177. #define    TODC_TYPE_MK48T59_WATCHDOG        0x1fff
  178. #define    TODC_TYPE_MK48T59_INTERRUPTS        0x1fff
  179. #define    TODC_TYPE_MK48T59_ALARM_DATE        0x1fff
  180. #define    TODC_TYPE_MK48T59_ALARM_HOUR        0x1fff
  181. #define    TODC_TYPE_MK48T59_ALARM_MINUTES        0x1fff
  182. #define    TODC_TYPE_MK48T59_ALARM_SECONDS        0x1fff
  183. #define    TODC_TYPE_MK48T59_CENTURY        0x1fff
  184. #define    TODC_TYPE_MK48T59_FLAGS            0x1fff
  185. #define    TODC_TYPE_MK48T59_NVRAM_ADDR_REG    0
  186. #define    TODC_TYPE_MK48T59_NVRAM_DATA_REG    0
  187.  
  188. #define    TODC_TYPE_DS1501_NVRAM_SIZE    0x100
  189. #define    TODC_TYPE_DS1501_SW_FLAGS    TODC_FLAG_2_LEVEL_NVRAM
  190. #define    TODC_TYPE_DS1501_YEAR        (TODC_TYPE_DS1501_NVRAM_SIZE + 0x06)
  191. #define    TODC_TYPE_DS1501_MONTH        (TODC_TYPE_DS1501_NVRAM_SIZE + 0x05)
  192. #define    TODC_TYPE_DS1501_DOM        (TODC_TYPE_DS1501_NVRAM_SIZE + 0x04)
  193. #define    TODC_TYPE_DS1501_DOW        (TODC_TYPE_DS1501_NVRAM_SIZE + 0x03)
  194. #define    TODC_TYPE_DS1501_HOURS        (TODC_TYPE_DS1501_NVRAM_SIZE + 0x02)
  195. #define    TODC_TYPE_DS1501_MINUTES    (TODC_TYPE_DS1501_NVRAM_SIZE + 0x01)
  196. #define    TODC_TYPE_DS1501_SECONDS    (TODC_TYPE_DS1501_NVRAM_SIZE + 0x00)
  197. #define    TODC_TYPE_DS1501_CNTL_B        (TODC_TYPE_DS1501_NVRAM_SIZE + 0x0f)
  198. #define    TODC_TYPE_DS1501_CNTL_A        (TODC_TYPE_DS1501_NVRAM_SIZE + 0x0f)
  199. #define    TODC_TYPE_DS1501_WATCHDOG    (TODC_TYPE_DS1501_NVRAM_SIZE + 0xff)
  200. #define    TODC_TYPE_DS1501_INTERRUPTS    (TODC_TYPE_DS1501_NVRAM_SIZE + 0xff)
  201. #define    TODC_TYPE_DS1501_ALARM_DATE    (TODC_TYPE_DS1501_NVRAM_SIZE + 0x0b)
  202. #define    TODC_TYPE_DS1501_ALARM_HOUR    (TODC_TYPE_DS1501_NVRAM_SIZE + 0x0a)
  203. #define    TODC_TYPE_DS1501_ALARM_MINUTES    (TODC_TYPE_DS1501_NVRAM_SIZE + 0x09)
  204. #define    TODC_TYPE_DS1501_ALARM_SECONDS    (TODC_TYPE_DS1501_NVRAM_SIZE + 0x08)
  205. #define    TODC_TYPE_DS1501_CENTURY    (TODC_TYPE_DS1501_NVRAM_SIZE + 0x07)
  206. #define    TODC_TYPE_DS1501_FLAGS        (TODC_TYPE_DS1501_NVRAM_SIZE + 0xff)
  207. #define    TODC_TYPE_DS1501_NVRAM_ADDR_REG    0x10
  208. #define    TODC_TYPE_DS1501_NVRAM_DATA_REG    0x13
  209.  
  210. #define    TODC_TYPE_DS1553_NVRAM_SIZE        0x1ff0
  211. #define    TODC_TYPE_DS1553_SW_FLAGS        0
  212. #define    TODC_TYPE_DS1553_YEAR            0x1fff
  213. #define    TODC_TYPE_DS1553_MONTH            0x1ffe
  214. #define    TODC_TYPE_DS1553_DOM            0x1ffd    /* Day of Month */
  215. #define    TODC_TYPE_DS1553_DOW            0x1ffc    /* Day of Week */
  216. #define    TODC_TYPE_DS1553_HOURS            0x1ffb
  217. #define    TODC_TYPE_DS1553_MINUTES        0x1ffa
  218. #define    TODC_TYPE_DS1553_SECONDS        0x1ff9
  219. #define    TODC_TYPE_DS1553_CNTL_B            0x1ff9
  220. #define    TODC_TYPE_DS1553_CNTL_A            0x1ff8    /* control_a R/W regs */
  221. #define    TODC_TYPE_DS1553_WATCHDOG        0x1ff7
  222. #define    TODC_TYPE_DS1553_INTERRUPTS        0x1ff6
  223. #define    TODC_TYPE_DS1553_ALARM_DATE        0x1ff5
  224. #define    TODC_TYPE_DS1553_ALARM_HOUR        0x1ff4
  225. #define    TODC_TYPE_DS1553_ALARM_MINUTES        0x1ff3
  226. #define    TODC_TYPE_DS1553_ALARM_SECONDS        0x1ff2
  227. #define    TODC_TYPE_DS1553_CENTURY        0x1ff8
  228. #define    TODC_TYPE_DS1553_FLAGS            0x1ff0
  229. #define    TODC_TYPE_DS1553_NVRAM_ADDR_REG        0
  230. #define    TODC_TYPE_DS1553_NVRAM_DATA_REG        0
  231.  
  232. #define    TODC_TYPE_DS1557_NVRAM_SIZE        0x7fff0
  233. #define    TODC_TYPE_DS1557_SW_FLAGS        0
  234. #define    TODC_TYPE_DS1557_YEAR            0x7ffff
  235. #define    TODC_TYPE_DS1557_MONTH            0x7fffe
  236. #define    TODC_TYPE_DS1557_DOM            0x7fffd    /* Day of Month */
  237. #define    TODC_TYPE_DS1557_DOW            0x7fffc    /* Day of Week */
  238. #define    TODC_TYPE_DS1557_HOURS            0x7fffb
  239. #define    TODC_TYPE_DS1557_MINUTES        0x7fffa
  240. #define    TODC_TYPE_DS1557_SECONDS        0x7fff9
  241. #define    TODC_TYPE_DS1557_CNTL_B            0x7fff9
  242. #define    TODC_TYPE_DS1557_CNTL_A            0x7fff8    /* control_a R/W regs */
  243. #define    TODC_TYPE_DS1557_WATCHDOG        0x7fff7
  244. #define    TODC_TYPE_DS1557_INTERRUPTS        0x7fff6
  245. #define    TODC_TYPE_DS1557_ALARM_DATE        0x7fff5
  246. #define    TODC_TYPE_DS1557_ALARM_HOUR        0x7fff4
  247. #define    TODC_TYPE_DS1557_ALARM_MINUTES        0x7fff3
  248. #define    TODC_TYPE_DS1557_ALARM_SECONDS        0x7fff2
  249. #define    TODC_TYPE_DS1557_CENTURY        0x7fff8
  250. #define    TODC_TYPE_DS1557_FLAGS            0x7fff0
  251. #define    TODC_TYPE_DS1557_NVRAM_ADDR_REG        0
  252. #define    TODC_TYPE_DS1557_NVRAM_DATA_REG        0
  253.  
  254. #define    TODC_TYPE_DS1643_NVRAM_SIZE        0x1ff8
  255. #define    TODC_TYPE_DS1643_SW_FLAGS        0
  256. #define    TODC_TYPE_DS1643_YEAR            0x1fff
  257. #define    TODC_TYPE_DS1643_MONTH            0x1ffe
  258. #define    TODC_TYPE_DS1643_DOM            0x1ffd    /* Day of Month */
  259. #define    TODC_TYPE_DS1643_DOW            0x1ffc    /* Day of Week */
  260. #define    TODC_TYPE_DS1643_HOURS            0x1ffb
  261. #define    TODC_TYPE_DS1643_MINUTES        0x1ffa
  262. #define    TODC_TYPE_DS1643_SECONDS        0x1ff9
  263. #define    TODC_TYPE_DS1643_CNTL_B            0x1ff9
  264. #define    TODC_TYPE_DS1643_CNTL_A            0x1ff8    /* control_a R/W regs */
  265. #define    TODC_TYPE_DS1643_WATCHDOG        0x1fff
  266. #define    TODC_TYPE_DS1643_INTERRUPTS        0x1fff
  267. #define    TODC_TYPE_DS1643_ALARM_DATE        0x1fff
  268. #define    TODC_TYPE_DS1643_ALARM_HOUR        0x1fff
  269. #define    TODC_TYPE_DS1643_ALARM_MINUTES        0x1fff
  270. #define    TODC_TYPE_DS1643_ALARM_SECONDS        0x1fff
  271. #define    TODC_TYPE_DS1643_CENTURY        0x1ff8
  272. #define    TODC_TYPE_DS1643_FLAGS            0x1fff
  273. #define    TODC_TYPE_DS1643_NVRAM_ADDR_REG        0
  274. #define    TODC_TYPE_DS1643_NVRAM_DATA_REG        0
  275.  
  276. #define    TODC_TYPE_DS1693_NVRAM_SIZE        0 /* Not handled yet */
  277. #define    TODC_TYPE_DS1693_SW_FLAGS        0
  278. #define    TODC_TYPE_DS1693_YEAR            0x09
  279. #define    TODC_TYPE_DS1693_MONTH            0x08
  280. #define    TODC_TYPE_DS1693_DOM            0x07    /* Day of Month */
  281. #define    TODC_TYPE_DS1693_DOW            0x06    /* Day of Week */
  282. #define    TODC_TYPE_DS1693_HOURS            0x04
  283. #define    TODC_TYPE_DS1693_MINUTES        0x02
  284. #define    TODC_TYPE_DS1693_SECONDS        0x00
  285. #define    TODC_TYPE_DS1693_CNTL_B            0x0b
  286. #define    TODC_TYPE_DS1693_CNTL_A            0x0a
  287. #define    TODC_TYPE_DS1693_WATCHDOG        0xff
  288. #define    TODC_TYPE_DS1693_INTERRUPTS        0xff
  289. #define    TODC_TYPE_DS1693_ALARM_DATE        0x49
  290. #define    TODC_TYPE_DS1693_ALARM_HOUR        0x05
  291. #define    TODC_TYPE_DS1693_ALARM_MINUTES        0x03
  292. #define    TODC_TYPE_DS1693_ALARM_SECONDS        0x01
  293. #define    TODC_TYPE_DS1693_CENTURY        0x48
  294. #define    TODC_TYPE_DS1693_FLAGS            0xff
  295. #define    TODC_TYPE_DS1693_NVRAM_ADDR_REG        0
  296. #define    TODC_TYPE_DS1693_NVRAM_DATA_REG        0
  297.  
  298. #define    TODC_TYPE_DS1743_NVRAM_SIZE        0x1ff8
  299. #define    TODC_TYPE_DS1743_SW_FLAGS        0
  300. #define    TODC_TYPE_DS1743_YEAR            0x1fff
  301. #define    TODC_TYPE_DS1743_MONTH            0x1ffe
  302. #define    TODC_TYPE_DS1743_DOM            0x1ffd    /* Day of Month */
  303. #define    TODC_TYPE_DS1743_DOW            0x1ffc    /* Day of Week */
  304. #define    TODC_TYPE_DS1743_HOURS            0x1ffb
  305. #define    TODC_TYPE_DS1743_MINUTES        0x1ffa
  306. #define    TODC_TYPE_DS1743_SECONDS        0x1ff9
  307. #define    TODC_TYPE_DS1743_CNTL_B            0x1ff9
  308. #define    TODC_TYPE_DS1743_CNTL_A            0x1ff8    /* control_a R/W regs */
  309. #define    TODC_TYPE_DS1743_WATCHDOG        0x1fff
  310. #define    TODC_TYPE_DS1743_INTERRUPTS        0x1fff
  311. #define    TODC_TYPE_DS1743_ALARM_DATE        0x1fff
  312. #define    TODC_TYPE_DS1743_ALARM_HOUR        0x1fff
  313. #define    TODC_TYPE_DS1743_ALARM_MINUTES        0x1fff
  314. #define    TODC_TYPE_DS1743_ALARM_SECONDS        0x1fff
  315. #define    TODC_TYPE_DS1743_CENTURY        0x1ff8
  316. #define    TODC_TYPE_DS1743_FLAGS            0x1fff
  317. #define    TODC_TYPE_DS1743_NVRAM_ADDR_REG        0
  318. #define    TODC_TYPE_DS1743_NVRAM_DATA_REG        0
  319.  
  320. #define    TODC_TYPE_DS1746_NVRAM_SIZE        0x1fff8
  321. #define    TODC_TYPE_DS1746_SW_FLAGS        0
  322. #define    TODC_TYPE_DS1746_YEAR            0x1ffff
  323. #define    TODC_TYPE_DS1746_MONTH            0x1fffe
  324. #define    TODC_TYPE_DS1746_DOM            0x1fffd    /* Day of Month */
  325. #define    TODC_TYPE_DS1746_DOW            0x1fffc    /* Day of Week */
  326. #define    TODC_TYPE_DS1746_HOURS            0x1fffb
  327. #define    TODC_TYPE_DS1746_MINUTES        0x1fffa
  328. #define    TODC_TYPE_DS1746_SECONDS        0x1fff9
  329. #define    TODC_TYPE_DS1746_CNTL_B            0x1fff9
  330. #define    TODC_TYPE_DS1746_CNTL_A            0x1fff8    /* control_a R/W regs */
  331. #define    TODC_TYPE_DS1746_WATCHDOG        0x00000
  332. #define    TODC_TYPE_DS1746_INTERRUPTS        0x00000
  333. #define    TODC_TYPE_DS1746_ALARM_DATE        0x00000
  334. #define    TODC_TYPE_DS1746_ALARM_HOUR        0x00000
  335. #define    TODC_TYPE_DS1746_ALARM_MINUTES        0x00000
  336. #define    TODC_TYPE_DS1746_ALARM_SECONDS        0x00000
  337. #define    TODC_TYPE_DS1746_CENTURY        0x00000
  338. #define    TODC_TYPE_DS1746_FLAGS            0x00000
  339. #define    TODC_TYPE_DS1746_NVRAM_ADDR_REG        0
  340. #define    TODC_TYPE_DS1746_NVRAM_DATA_REG        0
  341.  
  342. #define    TODC_TYPE_DS1747_NVRAM_SIZE        0x7fff8
  343. #define    TODC_TYPE_DS1747_SW_FLAGS        0
  344. #define    TODC_TYPE_DS1747_YEAR            0x7ffff
  345. #define    TODC_TYPE_DS1747_MONTH            0x7fffe
  346. #define    TODC_TYPE_DS1747_DOM            0x7fffd    /* Day of Month */
  347. #define    TODC_TYPE_DS1747_DOW            0x7fffc    /* Day of Week */
  348. #define    TODC_TYPE_DS1747_HOURS            0x7fffb
  349. #define    TODC_TYPE_DS1747_MINUTES        0x7fffa
  350. #define    TODC_TYPE_DS1747_SECONDS        0x7fff9
  351. #define    TODC_TYPE_DS1747_CNTL_B            0x7fff9
  352. #define    TODC_TYPE_DS1747_CNTL_A            0x7fff8    /* control_a R/W regs */
  353. #define    TODC_TYPE_DS1747_WATCHDOG        0x00000
  354. #define    TODC_TYPE_DS1747_INTERRUPTS        0x00000
  355. #define    TODC_TYPE_DS1747_ALARM_DATE        0x00000
  356. #define    TODC_TYPE_DS1747_ALARM_HOUR        0x00000
  357. #define    TODC_TYPE_DS1747_ALARM_MINUTES        0x00000
  358. #define    TODC_TYPE_DS1747_ALARM_SECONDS        0x00000
  359. #define    TODC_TYPE_DS1747_CENTURY        0x00000
  360. #define    TODC_TYPE_DS1747_FLAGS            0x00000
  361. #define    TODC_TYPE_DS1747_NVRAM_ADDR_REG        0
  362. #define    TODC_TYPE_DS1747_NVRAM_DATA_REG        0
  363.  
  364. #define TODC_TYPE_DS17285_NVRAM_SIZE        (0x1000-0x80)    /* 4Kx8 NVRAM (minus RTC regs) */
  365. #define TODC_TYPE_DS17285_SW_FLAGS        TODC_FLAG_2_LEVEL_NVRAM
  366. #define TODC_TYPE_DS17285_SECONDS        (TODC_TYPE_DS17285_NVRAM_SIZE + 0x00)
  367. #define TODC_TYPE_DS17285_ALARM_SECONDS        (TODC_TYPE_DS17285_NVRAM_SIZE + 0x01)
  368. #define TODC_TYPE_DS17285_MINUTES        (TODC_TYPE_DS17285_NVRAM_SIZE + 0x02)
  369. #define TODC_TYPE_DS17285_ALARM_MINUTES        (TODC_TYPE_DS17285_NVRAM_SIZE + 0x03)
  370. #define TODC_TYPE_DS17285_HOURS            (TODC_TYPE_DS17285_NVRAM_SIZE + 0x04)
  371. #define TODC_TYPE_DS17285_ALARM_HOUR        (TODC_TYPE_DS17285_NVRAM_SIZE + 0x05)
  372. #define TODC_TYPE_DS17285_DOW            (TODC_TYPE_DS17285_NVRAM_SIZE + 0x06)
  373. #define TODC_TYPE_DS17285_DOM            (TODC_TYPE_DS17285_NVRAM_SIZE + 0x07)
  374. #define TODC_TYPE_DS17285_MONTH            (TODC_TYPE_DS17285_NVRAM_SIZE + 0x08)
  375. #define TODC_TYPE_DS17285_YEAR            (TODC_TYPE_DS17285_NVRAM_SIZE + 0x09)
  376. #define TODC_TYPE_DS17285_CNTL_A        (TODC_TYPE_DS17285_NVRAM_SIZE + 0x0A)
  377. #define TODC_TYPE_DS17285_CNTL_B        (TODC_TYPE_DS17285_NVRAM_SIZE + 0x0B)
  378. #define TODC_TYPE_DS17285_CNTL_C        (TODC_TYPE_DS17285_NVRAM_SIZE + 0x0C)
  379. #define TODC_TYPE_DS17285_CNTL_D        (TODC_TYPE_DS17285_NVRAM_SIZE + 0x0D)
  380. #define TODC_TYPE_DS17285_WATCHDOG        0
  381. #define TODC_TYPE_DS17285_INTERRUPTS        0
  382. #define TODC_TYPE_DS17285_ALARM_DATE        0
  383. #define TODC_TYPE_DS17285_CENTURY        0
  384. #define TODC_TYPE_DS17285_FLAGS            0
  385. #define TODC_TYPE_DS17285_NVRAM_ADDR_REG    0x50
  386. #define TODC_TYPE_DS17285_NVRAM_DATA_REG    0x53
  387.  
  388. #define    TODC_TYPE_MC146818_NVRAM_SIZE        0    /* XXXX */
  389. #define    TODC_TYPE_MC146818_SW_FLAGS        0
  390. #define    TODC_TYPE_MC146818_YEAR            0x09
  391. #define    TODC_TYPE_MC146818_MONTH        0x08
  392. #define    TODC_TYPE_MC146818_DOM            0x07    /* Day of Month */
  393. #define    TODC_TYPE_MC146818_DOW            0x06    /* Day of Week */
  394. #define    TODC_TYPE_MC146818_HOURS        0x04
  395. #define    TODC_TYPE_MC146818_MINUTES        0x02
  396. #define    TODC_TYPE_MC146818_SECONDS        0x00
  397. #define    TODC_TYPE_MC146818_CNTL_B        0x0a
  398. #define    TODC_TYPE_MC146818_CNTL_A        0x0b    /* control_a R/W regs */
  399. #define    TODC_TYPE_MC146818_WATCHDOG        0
  400. #define    TODC_TYPE_MC146818_INTERRUPTS        0x0c
  401. #define    TODC_TYPE_MC146818_ALARM_DATE        0xff
  402. #define    TODC_TYPE_MC146818_ALARM_HOUR        0x05
  403. #define    TODC_TYPE_MC146818_ALARM_MINUTES    0x03
  404. #define    TODC_TYPE_MC146818_ALARM_SECONDS    0x01
  405. #define    TODC_TYPE_MC146818_CENTURY        0xff
  406. #define    TODC_TYPE_MC146818_FLAGS        0xff
  407. #define    TODC_TYPE_MC146818_NVRAM_ADDR_REG    0
  408. #define    TODC_TYPE_MC146818_NVRAM_DATA_REG    0
  409.   
  410. #define    TODC_TYPE_PC97307_NVRAM_SIZE        0    /* No NVRAM? */
  411. #define    TODC_TYPE_PC97307_SW_FLAGS        0
  412. #define    TODC_TYPE_PC97307_YEAR            0x09
  413. #define    TODC_TYPE_PC97307_MONTH            0x08
  414. #define    TODC_TYPE_PC97307_DOM            0x07    /* Day of Month */
  415. #define    TODC_TYPE_PC97307_DOW            0x06    /* Day of Week */
  416. #define    TODC_TYPE_PC97307_HOURS            0x04
  417. #define    TODC_TYPE_PC97307_MINUTES        0x02
  418. #define    TODC_TYPE_PC97307_SECONDS        0x00
  419. #define    TODC_TYPE_PC97307_CNTL_B        0x0a
  420. #define    TODC_TYPE_PC97307_CNTL_A        0x0b    /* control_a R/W regs */
  421. #define    TODC_TYPE_PC97307_WATCHDOG        0x0c
  422. #define    TODC_TYPE_PC97307_INTERRUPTS        0x0d
  423. #define    TODC_TYPE_PC97307_ALARM_DATE        0xff
  424. #define    TODC_TYPE_PC97307_ALARM_HOUR        0x05
  425. #define    TODC_TYPE_PC97307_ALARM_MINUTES        0x03
  426. #define    TODC_TYPE_PC97307_ALARM_SECONDS        0x01
  427. #define    TODC_TYPE_PC97307_CENTURY        0xff
  428. #define    TODC_TYPE_PC97307_FLAGS            0xff
  429. #define    TODC_TYPE_PC97307_NVRAM_ADDR_REG    0
  430. #define    TODC_TYPE_PC97307_NVRAM_DATA_REG    0
  431.  
  432. /*
  433.  * Define macros to allocate and init the todc_info_t table that will
  434.  * be used by the todc_time.c routines.
  435.  */
  436. #define    TODC_ALLOC()                            \
  437.     static todc_info_t todc_info_alloc;                \
  438.     todc_info_t *todc_info = &todc_info_alloc;
  439.  
  440. #define    TODC_INIT(clock_type, as0, as1, data, bits) {            \
  441.     todc_info->rtc_type = clock_type;                \
  442.                                     \
  443.     todc_info->nvram_as0  = (unsigned int)(as0);            \
  444.     todc_info->nvram_as1  = (unsigned int)(as1);            \
  445.     todc_info->nvram_data = (unsigned int)(data);            \
  446.                                     \
  447.     todc_info->as0_bits = (bits);                    \
  448.                                     \
  449.     todc_info->nvram_size     = clock_type ##_NVRAM_SIZE;        \
  450.     todc_info->sw_flags       = clock_type ##_SW_FLAGS;        \
  451.                                     \
  452.     todc_info->year           = clock_type ##_YEAR;            \
  453.     todc_info->month          = clock_type ##_MONTH;        \
  454.     todc_info->day_of_month   = clock_type ##_DOM;            \
  455.     todc_info->day_of_week    = clock_type ##_DOW;            \
  456.     todc_info->hours          = clock_type ##_HOURS;        \
  457.     todc_info->minutes        = clock_type ##_MINUTES;        \
  458.     todc_info->seconds        = clock_type ##_SECONDS;        \
  459.     todc_info->control_b      = clock_type ##_CNTL_B;        \
  460.     todc_info->control_a      = clock_type ##_CNTL_A;        \
  461.     todc_info->watchdog       = clock_type ##_WATCHDOG;        \
  462.     todc_info->interrupts     = clock_type ##_INTERRUPTS;        \
  463.     todc_info->alarm_date     = clock_type ##_ALARM_DATE;        \
  464.     todc_info->alarm_hour     = clock_type ##_ALARM_HOUR;        \
  465.     todc_info->alarm_minutes  = clock_type ##_ALARM_MINUTES;    \
  466.     todc_info->alarm_seconds  = clock_type ##_ALARM_SECONDS;    \
  467.     todc_info->century        = clock_type ##_CENTURY;        \
  468.     todc_info->flags          = clock_type ##_FLAGS;        \
  469.                                     \
  470.     todc_info->nvram_addr_reg = clock_type ##_NVRAM_ADDR_REG;    \
  471.     todc_info->nvram_data_reg = clock_type ##_NVRAM_DATA_REG;    \
  472. }
  473.  
  474. extern todc_info_t *todc_info;
  475.  
  476. unsigned char todc_direct_read_val(int addr);
  477. void todc_direct_write_val(int addr, unsigned char val);
  478. unsigned char todc_m48txx_read_val(int addr);
  479. void todc_m48txx_write_val(int addr, unsigned char val);
  480. unsigned char todc_mc146818_read_val(int addr);
  481. void todc_mc146818_write_val(int addr, unsigned char val);
  482.  
  483. long todc_time_init(void);
  484. unsigned long todc_get_rtc_time(void);
  485. int todc_set_rtc_time(unsigned long nowtime);
  486. void todc_calibrate_decr(void);
  487.  
  488. #endif                /* __PPC_KERNEL_TODC_H */
  489.