64 lines
1.1 KiB
C
64 lines
1.1 KiB
C
/* Renesas SH (32bit) only */
|
|
|
|
#ifndef ARCH_SH_H
|
|
#define ARCH_SH_H
|
|
|
|
#define FIO_ARCH (arch_sh)
|
|
|
|
#ifndef __NR_ioprio_set
|
|
#define __NR_ioprio_set 288
|
|
#define __NR_ioprio_get 289
|
|
#endif
|
|
|
|
#ifndef __NR_fadvise64
|
|
#define __NR_fadvise64 250
|
|
#endif
|
|
|
|
#ifndef __NR_sys_splice
|
|
#define __NR_sys_splice 313
|
|
#define __NR_sys_tee 315
|
|
#define __NR_sys_vmsplice 316
|
|
#endif
|
|
|
|
#define nop __asm__ __volatile__ ("nop": : :"memory")
|
|
|
|
#define mb() \
|
|
do { \
|
|
if (arch_flags & ARCH_FLAG_1) \
|
|
__asm__ __volatile__ ("synco": : :"memory"); \
|
|
else \
|
|
__asm__ __volatile__ (" " : : : "memory"); \
|
|
} while (0)
|
|
|
|
#define read_barrier() mb()
|
|
#define write_barrier() mb()
|
|
|
|
#include <stdio.h>
|
|
#include <elf.h>
|
|
|
|
extern unsigned long arch_flags;
|
|
|
|
#define CPU_HAS_LLSC 0x0040
|
|
|
|
static inline int arch_init(char *envp[])
|
|
{
|
|
Elf32_auxv_t *auxv;
|
|
|
|
while (*envp++ != NULL)
|
|
;
|
|
|
|
for (auxv = (Elf32_auxv_t *) envp; auxv->a_type != AT_NULL; auxv++) {
|
|
if (auxv->a_type == AT_HWCAP) {
|
|
if (auxv->a_un.a_val & CPU_HAS_LLSC) {
|
|
arch_flags |= ARCH_FLAG_1;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
#define ARCH_HAVE_INIT
|
|
|
|
#endif
|