Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 88959
b: refs/heads/master
c: dcd215c
h: refs/heads/master
i:
  88957: 160d7ed
  88955: 415529b
  88951: f1d8030
  88943: 2b4508c
  88927: d741627
  88895: af39578
  88831: 1c4cf3a
v: v3
  • Loading branch information
Joe Perches authored and Ingo Molnar committed Apr 17, 2008
1 parent 1766d7f commit cc0c740
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 55 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 9bd73425142a610ae72c5e2b89e036e5214bb6ca
refs/heads/master: dcd215c9089c1203eed6f84dde2eb2cc0bbf9501
137 changes: 83 additions & 54 deletions trunk/include/asm-x86/io_32.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,14 @@
*
* The returned physical address is the physical (CPU) mapping for
* the memory address given. It is only valid to use this function on
* addresses directly mapped or allocated via kmalloc.
* addresses directly mapped or allocated via kmalloc.
*
* This function does not give bus mappings for DMA transfers. In
* almost all conceivable cases a device driver should not be using
* this function
*/
static inline unsigned long virt_to_phys(volatile void * address)

static inline unsigned long virt_to_phys(volatile void *address)
{
return __pa(address);
}
Expand All @@ -90,7 +90,7 @@ static inline unsigned long virt_to_phys(volatile void * address)
* this function
*/

static inline void * phys_to_virt(unsigned long address)
static inline void *phys_to_virt(unsigned long address)
{
return __va(address);
}
Expand Down Expand Up @@ -169,16 +169,19 @@ extern void __iomem *fix_ioremap(unsigned idx, unsigned long phys);

static inline unsigned char readb(const volatile void __iomem *addr)
{
return *(volatile unsigned char __force *) addr;
return *(volatile unsigned char __force *)addr;
}

static inline unsigned short readw(const volatile void __iomem *addr)
{
return *(volatile unsigned short __force *) addr;
return *(volatile unsigned short __force *)addr;
}

static inline unsigned int readl(const volatile void __iomem *addr)
{
return *(volatile unsigned int __force *) addr;
}

#define readb_relaxed(addr) readb(addr)
#define readw_relaxed(addr) readw(addr)
#define readl_relaxed(addr) readl(addr)
Expand All @@ -188,15 +191,17 @@ static inline unsigned int readl(const volatile void __iomem *addr)

static inline void writeb(unsigned char b, volatile void __iomem *addr)
{
*(volatile unsigned char __force *) addr = b;
*(volatile unsigned char __force *)addr = b;
}

static inline void writew(unsigned short b, volatile void __iomem *addr)
{
*(volatile unsigned short __force *) addr = b;
*(volatile unsigned short __force *)addr = b;
}

static inline void writel(unsigned int b, volatile void __iomem *addr)
{
*(volatile unsigned int __force *) addr = b;
*(volatile unsigned int __force *)addr = b;
}
#define __raw_writeb writeb
#define __raw_writew writew
Expand Down Expand Up @@ -239,12 +244,12 @@ memcpy_toio(volatile void __iomem *dst, const void *src, int count)
* 1. Out of order aware processors
* 2. Accidentally out of order processors (PPro errata #51)
*/

#if defined(CONFIG_X86_OOSTORE) || defined(CONFIG_X86_PPRO_FENCE)

static inline void flush_write_buffers(void)
{
__asm__ __volatile__ ("lock; addl $0,0(%%esp)": : :"memory");
asm volatile("lock; addl $0,0(%%esp)": : :"memory");
}

#else
Expand All @@ -264,7 +269,8 @@ extern void io_delay_init(void);
#include <asm/paravirt.h>
#else

static inline void slow_down_io(void) {
static inline void slow_down_io(void)
{
native_io_delay();
#ifdef REALLY_SLOW_IO
native_io_delay();
Expand All @@ -275,51 +281,74 @@ static inline void slow_down_io(void) {

#endif

#define __BUILDIO(bwl,bw,type) \
static inline void out##bwl(unsigned type value, int port) { \
out##bwl##_local(value, port); \
} \
static inline unsigned type in##bwl(int port) { \
return in##bwl##_local(port); \
#define __BUILDIO(bwl, bw, type) \
static inline void out##bwl(unsigned type value, int port) \
{ \
out##bwl##_local(value, port); \
} \
\
static inline unsigned type in##bwl(int port) \
{ \
return in##bwl##_local(port); \
}

#define BUILDIO(bwl,bw,type) \
static inline void out##bwl##_local(unsigned type value, int port) { \
__asm__ __volatile__("out" #bwl " %" #bw "0, %w1" : : "a"(value), "Nd"(port)); \
} \
static inline unsigned type in##bwl##_local(int port) { \
unsigned type value; \
__asm__ __volatile__("in" #bwl " %w1, %" #bw "0" : "=a"(value) : "Nd"(port)); \
return value; \
} \
static inline void out##bwl##_local_p(unsigned type value, int port) { \
out##bwl##_local(value, port); \
slow_down_io(); \
} \
static inline unsigned type in##bwl##_local_p(int port) { \
unsigned type value = in##bwl##_local(port); \
slow_down_io(); \
return value; \
} \
__BUILDIO(bwl,bw,type) \
static inline void out##bwl##_p(unsigned type value, int port) { \
out##bwl(value, port); \
slow_down_io(); \
} \
static inline unsigned type in##bwl##_p(int port) { \
unsigned type value = in##bwl(port); \
slow_down_io(); \
return value; \
} \
static inline void outs##bwl(int port, const void *addr, unsigned long count) { \
__asm__ __volatile__("rep; outs" #bwl : "+S"(addr), "+c"(count) : "d"(port)); \
} \
static inline void ins##bwl(int port, void *addr, unsigned long count) { \
__asm__ __volatile__("rep; ins" #bwl : "+D"(addr), "+c"(count) : "d"(port)); \
#define BUILDIO(bwl, bw, type) \
static inline void out##bwl##_local(unsigned type value, int port) \
{ \
asm volatile("out" #bwl " %" #bw "0, %w1" \
: : "a"(value), "Nd"(port)); \
} \
\
static inline unsigned type in##bwl##_local(int port) \
{ \
unsigned type value; \
asm volatile("in" #bwl " %w1, %" #bw "0" \
: "=a"(value) : "Nd"(port)); \
return value; \
} \
\
static inline void out##bwl##_local_p(unsigned type value, int port) \
{ \
out##bwl##_local(value, port); \
slow_down_io(); \
} \
\
static inline unsigned type in##bwl##_local_p(int port) \
{ \
unsigned type value = in##bwl##_local(port); \
slow_down_io(); \
return value; \
} \
\
__BUILDIO(bwl, bw, type) \
\
static inline void out##bwl##_p(unsigned type value, int port) \
{ \
out##bwl(value, port); \
slow_down_io(); \
} \
\
static inline unsigned type in##bwl##_p(int port) \
{ \
unsigned type value = in##bwl(port); \
slow_down_io(); \
return value; \
} \
\
static inline void outs##bwl(int port, const void *addr, unsigned long count) \
{ \
asm volatile("rep; outs" #bwl \
: "+S"(addr), "+c"(count) : "d"(port)); \
} \
\
static inline void ins##bwl(int port, void *addr, unsigned long count) \
{ \
asm volatile("rep; ins" #bwl \
: "+D"(addr), "+c"(count) : "d"(port)); \
}

BUILDIO(b,b,char)
BUILDIO(w,w,short)
BUILDIO(l,,int)
BUILDIO(b, b, char)
BUILDIO(w, w, short)
BUILDIO(l, , int)

#endif

0 comments on commit cc0c740

Please sign in to comment.