EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  <20042005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  <20042005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: Re: Compiler switches on RISC byte alignment
From: Till Straumann <[email protected]>
To: Kay-Uwe Kasemir <[email protected]>
Cc: "Lawrence T. Hoff" <[email protected]>, "Fairley, Diane" <[email protected]>, EPICS Tech Talk <[email protected]>
Date: Mon, 06 Sep 2004 11:12:19 -0700
Kay-Uwe Kasemir wrote:
Hi:

I'm surprised Jeff Hill hasn't jumped onto this thread.
He and I had talked about similar issues before.
Maybe he's getting some work done and ignoring tech-talk.

Anyway, the thing about using packed structures
in order to access memory mapped I/O or

IMHO it is always a very bad idea to do memory mapped I/O by treating I/O registers as they were ordinary variables because it is nonportable (see below) and to the reader it is not obvious what statements actually perform I/O operations.

On some modern CPUs, doing (memory mapped) I/O still requires
special instructions to be used and therefore, a person porting
a driver needs to identify I/O operations and port them.

If you code e.g.,

regs.csr     = ENABLE_XMIT
regs.xt_data = data

this will only work on a machine with the correct endianness and
with no requirements on instruction execution ordering.

Contrast this with:

out_32be(&regs.csr, ENABLE_XMIT);
out_32be(&regs.xt_data, data);

Here it is obvious what you are doing and all I have to do
when porting to e.g., a little endian machine is providing the correct
macro / inline implementation.

If we had a generic API for I/O operations, porting drivers would
obviously be a lot easier...

-- Till

BTW: I have a header for helping with I/O and endianness issues
     I could contribute...


References:
RE: Compiler switches on RISC byte alignment Fairley, Diane
Re: Compiler switches on RISC byte alignment Lawrence T. Hoff
Re: Compiler switches on RISC byte alignment Kay-Uwe Kasemir

Navigate by Date:
Prev: Converting GPIB device support from R3.13.9 to R3.14.6 Kristi Luchini
Next: what need i do if i use linux to login sun xuguanglei
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  <20042005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: RE: Compiler switches on RISC byte alignment J. Frederick Bartlett
Next: RE: Compiler switches on RISC byte alignment Fairley, Diane
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  <20042005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
ANJ, 10 Aug 2010 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·