| /* 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 |