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));
|
: "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.
|
* Reads the specified CPU control register and returns its value.
|
||||||
*
|
*
|
||||||
@ -485,6 +502,23 @@ ArReadTimeStampCounter()
|
|||||||
return ((ULONGLONG)High << 32) | Low;
|
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.
|
* Instructs the processor to set the interrupt flag.
|
||||||
*
|
*
|
||||||
|
@ -252,6 +252,24 @@ ArLoadTaskRegister(USHORT Source)
|
|||||||
: "rm" (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.
|
* Reads the specified CPU control register and returns its value.
|
||||||
*
|
*
|
||||||
@ -454,6 +472,23 @@ ArReadTimeStampCounter()
|
|||||||
return Value;
|
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.
|
* Instructs the processor to set the interrupt flag.
|
||||||
*
|
*
|
||||||
|
@ -63,6 +63,10 @@ XTCDECL
|
|||||||
VOID
|
VOID
|
||||||
ArLoadTaskRegister(USHORT Source);
|
ArLoadTaskRegister(USHORT Source);
|
||||||
|
|
||||||
|
XTCDECL
|
||||||
|
VOID
|
||||||
|
ArMemoryBarrier();
|
||||||
|
|
||||||
XTCDECL
|
XTCDECL
|
||||||
ULONG_PTR
|
ULONG_PTR
|
||||||
ArReadControlRegister(IN USHORT ControlRegister);
|
ArReadControlRegister(IN USHORT ControlRegister);
|
||||||
@ -87,6 +91,10 @@ XTCDECL
|
|||||||
ULONGLONG
|
ULONGLONG
|
||||||
ArReadTimeStampCounter();
|
ArReadTimeStampCounter();
|
||||||
|
|
||||||
|
XTCDECL
|
||||||
|
VOID
|
||||||
|
ArReadWriteBarrier();
|
||||||
|
|
||||||
XTAPI
|
XTAPI
|
||||||
VOID
|
VOID
|
||||||
ArSetGdtEntryBase(IN PKGDTENTRY Gdt,
|
ArSetGdtEntryBase(IN PKGDTENTRY Gdt,
|
||||||
|
@ -59,6 +59,10 @@ XTCDECL
|
|||||||
VOID
|
VOID
|
||||||
ArLoadTaskRegister(USHORT Source);
|
ArLoadTaskRegister(USHORT Source);
|
||||||
|
|
||||||
|
XTCDECL
|
||||||
|
VOID
|
||||||
|
ArMemoryBarrier();
|
||||||
|
|
||||||
XTCDECL
|
XTCDECL
|
||||||
ULONG_PTR
|
ULONG_PTR
|
||||||
ArReadControlRegister(IN USHORT ControlRegister);
|
ArReadControlRegister(IN USHORT ControlRegister);
|
||||||
@ -83,6 +87,10 @@ XTCDECL
|
|||||||
ULONGLONG
|
ULONGLONG
|
||||||
ArReadTimeStampCounter();
|
ArReadTimeStampCounter();
|
||||||
|
|
||||||
|
XTCDECL
|
||||||
|
VOID
|
||||||
|
ArReadWriteBarrier();
|
||||||
|
|
||||||
XTAPI
|
XTAPI
|
||||||
VOID
|
VOID
|
||||||
ArSetGdtEntryBase(IN PKGDTENTRY Gdt,
|
ArSetGdtEntryBase(IN PKGDTENTRY Gdt,
|
||||||
|
Loading…
Reference in New Issue
Block a user