changeset 2323:a22de7f91661

* include/devices_wallclock_i386_pc.inl: Added exception for DS_READ DS_WRITE. Take into account that in Intel PC platforms the 8Th bit in DS_ADDR is used to enable or disable NMI gate, and therefore, should be preserved.
author jlarmour
date Thu, 23 Nov 2006 18:21:30 +0000
parents f501ab75db13
children daa709b6d819
files packages/devs/wallclock/i386/pc/current/ChangeLog packages/devs/wallclock/i386/pc/current/include/devices_wallclock_i386_pc.inl
diffstat 2 files changed, 25 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/packages/devs/wallclock/i386/pc/current/ChangeLog
+++ b/packages/devs/wallclock/i386/pc/current/ChangeLog
@@ -1,3 +1,10 @@
+2006-11-23  David Fernandez  <dfernandez@cct.co.uk>
+
+	* include/devices_wallclock_i386_pc.inl: Added exception for DS_READ
+	  DS_WRITE. Take into account that in Intel PC platforms the 8Th bit
+	  in DS_ADDR is used to enable or disable NMI gate, and therefore,
+	  should be preserved.
+
 2001-09-18  Rajagopalan Thiruvenkatachary  <rajt@us.ibm.com>
 
 	* include/devices_wallclock_i386_pc.inl:
--- a/packages/devs/wallclock/i386/pc/current/include/devices_wallclock_i386_pc.inl
+++ b/packages/devs/wallclock/i386/pc/current/include/devices_wallclock_i386_pc.inl
@@ -52,4 +52,22 @@
 #define DS_ADDR CYGDAT_DEVS_WALLCLOCK_I386_PC_RTC_ADDRESS_PORT
 #define DS_DATA    CYGDAT_DEVS_WALLCLOCK_I386_PC_RTC_DATA_PORT
 
+#ifndef DS_LINEAR
+#define DS_READ(offset, data)                               \
+CYG_MACRO_START                                             \
+    register CYG_BYTE btval;                                \
+    DS_READ_UINT8( DS_ADDR, (btval));                       \
+    DS_WRITE_UINT8(DS_ADDR, ((offset)&0x7F)|(btval&0x80));  \
+    DS_READ_UINT8( DS_DATA, (data));                        \
+CYG_MACRO_END
+#define DS_WRITE(offset, data)                              \
+CYG_MACRO_START                                             \
+    register CYG_BYTE btval;                                \
+    DS_READ_UINT8( DS_ADDR, (btval));                       \
+    DS_WRITE_UINT8(DS_ADDR, ((offset)&0x7F)|(btval&0x80));  \
+    DS_WRITE_UINT8(DS_DATA, (data));                        \
+CYG_MACRO_END
+#endif
+
+
 // EOF devs_wallclock_i386_pc.inl