This is the mail archive of the ecos-patches@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Patch for Dallas DS12887 regarding Intel PC architectures


Hi there,

This fixes a small bug that causes NMIs being disabled or enabled in PCs
when using this device.

Have fun.

David Fernandez.

Index: devs/wallclock/dallas/ds12887/current//ChangeLog
===================================================================
RCS file: /home/cvs/cvsroot/dfernandez/Projects/ecos/packages/devs/wallclock/dallas/ds12887/current/ChangeLog,v
retrieving revision 1.1.1.1
diff -u -5 -p -r1.1.1.1 ChangeLog
--- devs/wallclock/dallas/ds12887/current//ChangeLog	2006/06/26 10:52:46	1.1.1.1
+++ devs/wallclock/dallas/ds12887/current//ChangeLog	2006/11/23 11:25:23
@@ -1,5 +1,11 @@
+2006-11-23  David Fernandez  <dfernandez@cct.co.uk>
+
+	* src/ds17887.cxx (defines)> 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-07-27  Jesper Skov  <jskov@redhat.com>
 
 	* src/ds12887.cxx (init_ds_hwclock): Use BCD mode since Century is
 	NA in binary mode. Force sane settings in registers if they are
 	undefined.
Index: devs/wallclock/dallas/ds12887/current//src/ds12887.cxx
===================================================================
RCS file: /home/cvs/cvsroot/dfernandez/Projects/ecos/packages/devs/wallclock/dallas/ds12887/current/src/ds12887.cxx,v
retrieving revision 1.1.1.1
diff -u -5 -p -r1.1.1.1 ds12887.cxx
--- devs/wallclock/dallas/ds12887/current//src/ds12887.cxx	2006/06/26 10:52:46	1.1.1.1
+++ devs/wallclock/dallas/ds12887/current//src/ds12887.cxx	2006/11/23 11:25:23
@@ -64,37 +64,56 @@
 
 // Platform details
 #include CYGDAT_DEVS_WALLCLOCK_DALLAS_12887_INL
 
 #ifndef DS_READ_UINT8
-# define DS_READ_UINT8(x,y) HAL_READ_UINT8(x,y)
-# define DS_WRITE_UINT8(x,y) HAL_WRITE_UINT8(x,y)
+#   define DS_READ_UINT8(x,y)   HAL_READ_UINT8(x,y)
+#   define DS_WRITE_UINT8(x,y)  HAL_WRITE_UINT8(x,y)
 #endif
 
 #ifdef DS_LINEAR
-# ifndef DS_STEP
-#  define DS_STEP 0
-# endif
-# ifndef DS_BASE
-#  error "Need to know base of DS12887 part"
-# endif
-# define DS_READ(offset, data) DS_READ_UINT8(DS_BASE + ((offset) << DS_STEP), (data))
-# define DS_WRITE(offset, data) DS_WRITE_UINT8(DS_BASE + ((offset) << DS_STEP), (data))
-#else
-# if !defined(DS_ADDR) || !defined(DS_DATA)
-#  error "Need to know addr/data locations of DS12887 part"
-# endif
-# define DS_READ(offset, data)                 \
-  CYG_MACRO_START                              \
-  DS_WRITE_UINT8(DS_ADDR, (offset));           \
-  DS_READ_UINT8(DS_DATA, (data));              \
-  CYG_MACRO_END
-# define DS_WRITE(offset, data)                \
-  CYG_MACRO_START                              \
-  DS_WRITE_UINT8(DS_ADDR, (offset));           \
-  DS_WRITE_UINT8(DS_DATA, (data));             \
-  CYG_MACRO_END
+#   ifndef DS_STEP
+#       define DS_STEP 0
+#   endif
+#   ifndef DS_BASE
+#       error "Need to know base of DS12887 part"
+#   endif
+#define DS_READ( offset, data)  \
+    DS_READ_UINT8( DS_BASE + ((offset) << DS_STEP), (data))
+#define DS_WRITE(offset, data)  \
+    DS_WRITE_UINT8(DS_BASE + ((offset) << DS_STEP), (data))
+#else   //  !DS_LINEAR
+#   if !defined(DS_ADDR) || !defined(DS_DATA)
+#       error "Need to know addr/data locations of DS12887 part"
+#   endif
+#   ifdef   CYGPKG_HAL_I386_PC
+#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
+#   else    //  !CYGPKG_HAL_I386_PC
+#define DS_READ(offset, data)                               \
+CYG_MACRO_START                                             \
+    DS_WRITE_UINT8(DS_ADDR, (offset));                      \
+    DS_READ_UINT8(DS_DATA, (data));                         \
+CYG_MACRO_END
+#define DS_WRITE(offset, data)                              \
+CYG_MACRO_START                                             \
+    DS_WRITE_UINT8(DS_ADDR, (offset));                      \
+    DS_WRITE_UINT8(DS_DATA, (data));                        \
+CYG_MACRO_END
+#   endif   //  !CYGPKG_HAL_I386_PC
 #endif
 
 // Registers
 #define DS_SECONDS         0x00
 #define DS_SECONDS_ALARM   0x01

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]