This is the mail archive of the
ecos-patches@sourceware.org
mailing list for the eCos project.
Re: Patch for Dallas DS12887 regarding Intel PC architectures
- From: David Fernandez <dfernandez at cct dot co dot uk>
- To: ecos-patches at ecos dot sourceware dot org
- Date: Thu, 23 Nov 2006 17:27:47 +0000
- Subject: Re: Patch for Dallas DS12887 regarding Intel PC architectures
- Organization: Concurrent Technologies, Plc
- References: <1164281607.8511.2.camel@software.cct.co.uk> <4565A91B.8060704@eCosCentric.com> <1164299741.8511.5.camel@software.cct.co.uk>
- Reply-to: dfernandez at cct dot co dot uk
On Thu, 2006-11-23 at 16:35 +0000, David Fernandez wrote:
> On Thu, 2006-11-23 at 13:58 +0000, Jonathan Larmour wrote:
> > We should avoid introducing changes #ifdeffed for specific targets in
> > generic code, especially so in this case when it's avoidable.
> >
> > We should allow an override of DS_READ/DS_WRITE so that
> > devs/wallclock/i386/pc/current/include/devices_wallclock_i386_pc.inl can
> > set its own DS_READ/DS_WRITE. A patch that did this would be great, thanks.
> >
> > Jifl
>
Jonathan,
Here you are the new patch with the specifics in the inl part.
Have fun.
Index: devs/wallclock/i386/pc/current/ChangeLog
===================================================================
RCS file: /home/cvs/cvsroot/dfernandez/Projects/ecos/packages/devs/wallclock/i386/pc/current/ChangeLog,v
retrieving revision 1.1.1.1
diff -u -5 -B -b -w -p -r1.1.1.1 ChangeLog
--- devs/wallclock/i386/pc/current/ChangeLog 2006/06/26 10:52:46 1.1.1.1
+++ devs/wallclock/i386/pc/current/ChangeLog 2006/11/23 17:20:22
@@ -1,5 +1,12 @@
+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:
* cdl/i386_pc_wallclock_drivers.cdl:
New package.
Index: devs/wallclock/i386/pc/current/include/devices_wallclock_i386_pc.inl
===================================================================
RCS file: /home/cvs/cvsroot/dfernandez/Projects/ecos/packages/devs/wallclock/i386/pc/current/include/devices_wallclock_i386_pc.inl,v
retrieving revision 1.1.1.1
diff -u -5 -B -b -w -p -r1.1.1.1 devices_wallclock_i386_pc.inl
--- devs/wallclock/i386/pc/current/include/devices_wallclock_i386_pc.inl 2006/06/26 10:52:46 1.1.1.1
+++ devs/wallclock/i386/pc/current/include/devices_wallclock_i386_pc.inl 2006/11/23 17:20:22
@@ -49,7 +49,25 @@
#include CYGDAT_DEVS_WALLCLOCK_i386_PC_CFG
#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
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 -B -b -w -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 17:20:42
@@ -1,5 +1,10 @@
+2006-11-23 David Fernandez <dfernandez@cct.co.uk>
+
+ * src/ds17887.cxx (defines): Added check for some defines being done
+ in INL file.
+
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 -B -b -w -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 17:20:59
@@ -68,20 +68,23 @@
#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)
#endif
+#if !defined(DS_READ) && !defined(DS_WRITE) // Allow for INL to define this
#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
+#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
# define DS_READ(offset, data) \
CYG_MACRO_START \
@@ -92,10 +95,11 @@
CYG_MACRO_START \
DS_WRITE_UINT8(DS_ADDR, (offset)); \
DS_WRITE_UINT8(DS_DATA, (data)); \
CYG_MACRO_END
#endif
+#endif // ! DS_READ && ! DS_WRITE
// Registers
#define DS_SECONDS 0x00
#define DS_SECONDS_ALARM 0x01
#define DS_MINUTES 0x02