forked from xt-sys/exectos
Implement memory barriers
This commit is contained in:
parent
ec81294eba
commit
9ce841e957
@ -271,6 +271,23 @@ ArLoadTaskRegister(USHORT Source)
|
||||
: "rm" (Source));
|
||||
}
|
||||
|
||||
/**
|
||||
* Orders memory accesses as seen by other processors.
|
||||
*
|
||||
* @return This routine does not return any value.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTCDECL
|
||||
VOID
|
||||
ArMemoryBarrier()
|
||||
{
|
||||
LONG Barrier;
|
||||
asm volatile("lock; orl $0, %0;"
|
||||
:
|
||||
: "m"(Barrier));
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads the specified CPU control register and returns its value.
|
||||
*
|
||||
@ -485,6 +502,23 @@ ArReadTimeStampCounter()
|
||||
return ((ULONGLONG)High << 32) | Low;
|
||||
}
|
||||
|
||||
/**
|
||||
* Orders memory accesses as seen by other processors, without fence.
|
||||
*
|
||||
* @return This routine does not return any value.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTCDECL
|
||||
VOID
|
||||
ArReadWriteBarrier()
|
||||
{
|
||||
asm volatile(""
|
||||
:
|
||||
:
|
||||
: "memory");
|
||||
}
|
||||
|
||||
/**
|
||||
* Instructs the processor to set the interrupt flag.
|
||||
*
|
||||
|
@ -252,6 +252,24 @@ ArLoadTaskRegister(USHORT Source)
|
||||
: "rm" (Source));
|
||||
}
|
||||
|
||||
/**
|
||||
* Orders memory accesses as seen by other processors.
|
||||
*
|
||||
* @return This routine does not return any value.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTCDECL
|
||||
VOID
|
||||
ArMemoryBarrier()
|
||||
{
|
||||
LONG Barrier;
|
||||
asm volatile("xchg %%eax, %0"
|
||||
:
|
||||
: "m" (Barrier)
|
||||
: "%eax");
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads the specified CPU control register and returns its value.
|
||||
*
|
||||
@ -454,6 +472,23 @@ ArReadTimeStampCounter()
|
||||
return Value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Orders memory accesses as seen by other processors, without fence.
|
||||
*
|
||||
* @return This routine does not return any value.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTCDECL
|
||||
VOID
|
||||
ArReadWriteBarrier()
|
||||
{
|
||||
asm volatile(""
|
||||
:
|
||||
:
|
||||
: "memory");
|
||||
}
|
||||
|
||||
/**
|
||||
* Instructs the processor to set the interrupt flag.
|
||||
*
|
||||
|
@ -63,6 +63,10 @@ XTCDECL
|
||||
VOID
|
||||
ArLoadTaskRegister(USHORT Source);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
ArMemoryBarrier();
|
||||
|
||||
XTCDECL
|
||||
ULONG_PTR
|
||||
ArReadControlRegister(IN USHORT ControlRegister);
|
||||
@ -87,6 +91,10 @@ XTCDECL
|
||||
ULONGLONG
|
||||
ArReadTimeStampCounter();
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
ArReadWriteBarrier();
|
||||
|
||||
XTAPI
|
||||
VOID
|
||||
ArSetGdtEntryBase(IN PKGDTENTRY Gdt,
|
||||
|
@ -59,6 +59,10 @@ XTCDECL
|
||||
VOID
|
||||
ArLoadTaskRegister(USHORT Source);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
ArMemoryBarrier();
|
||||
|
||||
XTCDECL
|
||||
ULONG_PTR
|
||||
ArReadControlRegister(IN USHORT ControlRegister);
|
||||
@ -83,6 +87,10 @@ XTCDECL
|
||||
ULONGLONG
|
||||
ArReadTimeStampCounter();
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
ArReadWriteBarrier();
|
||||
|
||||
XTAPI
|
||||
VOID
|
||||
ArSetGdtEntryBase(IN PKGDTENTRY Gdt,
|
||||
|
Loading…
Reference in New Issue
Block a user