1/* Renesas SH (32bit) only */ 2 3#ifndef ARCH_SH_H 4#define ARCH_SH_H 5 6#define FIO_ARCH (arch_sh) 7 8#ifndef __NR_ioprio_set 9#define __NR_ioprio_set 288 10#define __NR_ioprio_get 289 11#endif 12 13#ifndef __NR_fadvise64 14#define __NR_fadvise64 250 15#endif 16 17#ifndef __NR_sys_splice 18#define __NR_sys_splice 313 19#define __NR_sys_tee 315 20#define __NR_sys_vmsplice 316 21#endif 22 23#define nop __asm__ __volatile__ ("nop": : :"memory") 24 25#define mb() \ 26 do { \ 27 if (arch_flags & ARCH_FLAG_1) \ 28 __asm__ __volatile__ ("synco": : :"memory"); \ 29 else \ 30 __asm__ __volatile__ (" " : : : "memory"); \ 31 } while (0) 32 33#define read_barrier() mb() 34#define write_barrier() mb() 35 36#include <stdio.h> 37#include <elf.h> 38 39extern unsigned long arch_flags; 40 41#define CPU_HAS_LLSC 0x0040 42 43static inline int arch_init(char *envp[]) 44{ 45 Elf32_auxv_t *auxv; 46 47 while (*envp++ != NULL) 48 ; 49 50 for (auxv = (Elf32_auxv_t *) envp; auxv->a_type != AT_NULL; auxv++) { 51 if (auxv->a_type == AT_HWCAP) { 52 if (auxv->a_un.a_val & CPU_HAS_LLSC) { 53 arch_flags |= ARCH_FLAG_1; 54 break; 55 } 56 } 57 } 58 59 return 0; 60} 61 62#define ARCH_HAVE_INIT 63 64#endif 65