"The part of the interface most used by drivers is reading and
writing memory-mapped registers on the device. Linux provides
interfaces to read and write 8-bit, 16-bit, 32-bit and 64-bit
quantities. Due to a historical accident, these are named byte,
word, long, and quad accesses. Both read and write accesses are
supported; there is no prefetch support at this time. The functions
are named readb, readw, readl, readq, writeb, writew, writel, and
"Some devices (such as framebuffers) would like to use larger
transfers that are more than 8 bytes at a time. For these devices,
the memcpy_toio, memcpy_fromio and memset_io functions are
provided. Do not use memset or memcpy on I/O addresses; they are
not guaranteed to copy data in order.
"The read and write functions are defined to be ordered. That
is, the compiler the the the is not permitted to reorder the I/O
sequence. When the ordering can be compiler optimized, you can use
__readb and friends to indicate the relaxed ordering. Use this with
care. The rmb provides a read memory barrier. The wmb provides a
write memory barrier."
Some of the products that appear on this site are from companies from which QuinStreet receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. QuinStreet does not include all companies or all types of products available in the marketplace.