memory barrier functions available for drivers.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25183 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -154,6 +154,8 @@ extern status_t unregister_kernel_daemon(daemon_hook hook, void *arg);
|
|||||||
|
|
||||||
extern void call_all_cpus(void (*func)(void *, int), void *cookie);
|
extern void call_all_cpus(void (*func)(void *, int), void *cookie);
|
||||||
extern void call_all_cpus_sync(void (*func)(void *, int), void *cookie);
|
extern void call_all_cpus_sync(void (*func)(void *, int), void *cookie);
|
||||||
|
extern void memory_read_barrier(void);
|
||||||
|
extern void memory_write_barrier(void);
|
||||||
|
|
||||||
/* safe methods to access user memory without having to lock it */
|
/* safe methods to access user memory without having to lock it */
|
||||||
extern status_t user_memcpy(void *to, const void *from, size_t size);
|
extern status_t user_memcpy(void *to, const void *from, size_t size);
|
||||||
|
|||||||
@@ -41,6 +41,10 @@ status_t arch_cpu_user_memset(void *s, char c, size_t count,
|
|||||||
void arch_cpu_idle(void);
|
void arch_cpu_idle(void);
|
||||||
void arch_cpu_sync_icache(void *address, size_t length);
|
void arch_cpu_sync_icache(void *address, size_t length);
|
||||||
|
|
||||||
|
void arch_cpu_memory_read_barrier(void);
|
||||||
|
void arch_cpu_memory_write_barrier(void);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -110,6 +110,22 @@ arch_cpu_sync_icache(void *address, size_t len)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
arch_cpu_memory_read_barrier(void)
|
||||||
|
{
|
||||||
|
asm volatile ("nop;" : : : "memory");
|
||||||
|
#warning M68k: check arch_cpu_memory_read_barrier
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
arch_cpu_memory_write_barrier(void)
|
||||||
|
{
|
||||||
|
asm volatile ("nop;" : : : "memory");
|
||||||
|
#warning M68k: check arch_cpu_memory_write_barrier
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
arch_cpu_invalidate_TLB_range(addr_t start, addr_t end)
|
arch_cpu_invalidate_TLB_range(addr_t start, addr_t end)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -82,6 +82,23 @@ arch_cpu_sync_icache(void *address, size_t len)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
arch_cpu_memory_read_barrier(void)
|
||||||
|
{
|
||||||
|
#warning PPC: is it model-dependant ?
|
||||||
|
asm volatile ("lwsync");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
arch_cpu_memory_write_barrier(void)
|
||||||
|
{
|
||||||
|
#warning PPC: is it model-dependant ?
|
||||||
|
asm volatile ("isync");
|
||||||
|
asm volatile ("eioio");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
arch_cpu_invalidate_TLB_range(addr_t start, addr_t end)
|
arch_cpu_invalidate_TLB_range(addr_t start, addr_t end)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -713,3 +713,19 @@ arch_cpu_sync_icache(void *address, size_t length)
|
|||||||
// instruction cache is always consistent on x86
|
// instruction cache is always consistent on x86
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
arch_cpu_memory_read_barrier(void)
|
||||||
|
{
|
||||||
|
asm volatile ("lock;" : : : "memory");
|
||||||
|
asm volatile ("addl $0,0(%%esp);" : : : "memory");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
arch_cpu_memory_write_barrier(void)
|
||||||
|
{
|
||||||
|
asm volatile ("lock;" : : : "memory");
|
||||||
|
asm volatile ("addl $0,0(%%esp);" : : : "memory");
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -681,3 +681,17 @@ call_all_cpus_sync(void (*func)(void *, int), void *cookie)
|
|||||||
restore_interrupts(state);
|
restore_interrupts(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
memory_read_barrier(void)
|
||||||
|
{
|
||||||
|
arch_cpu_memory_read_barrier();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
memory_write_barrier(void)
|
||||||
|
{
|
||||||
|
arch_cpu_memory_write_barrier();
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user