unsigned long virt_to_phys(unsigned long addr) { unsigned long seg = addr & 0xe0000000; unsigned long long start = 0; int have_32bit = is_32bit(); if (seg != 0x80000000 && (have_32bit || seg != 0xc0000000)) die("Virtual address %p is not in P1%s\n", (void *)addr, have_32bit ? "" : " or P2"); /* If 32bit addressing is used then the base of system RAM * is an offset into physical memory. */ if (have_32bit) { unsigned long long end; int ret; /* Assume there is only one "System RAM" region */ ret = parse_iomem_single("System RAM\n", &start, &end); if (ret) die("Could not parse System RAM region " "in /proc/iomem\n"); } return addr - seg + start; }
copyin_afs_ioctl(caddr_t cmarg, struct afs_ioctl *dst) #endif { int code; #if defined(AFS_DARWIN100_ENV) struct afs_ioctl32 dst32; if (!proc_is64bit(current_proc())) { AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code); if (!code) afs_ioctl32_to_afs_ioctl(&dst32, dst); return code; } #endif #if defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL) struct afs_ioctl32 dst32; if (!(IS64U)) { AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code); if (!code) afs_ioctl32_to_afs_ioctl(&dst32, dst); return code; } #endif /* defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL) */ #if defined(AFS_HPUX_64BIT_ENV) struct afs_ioctl32 dst32; if (is_32bit(u.u_procp)) { /* is_32bit() in proc_iface.h */ AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code); if (!code) afs_ioctl32_to_afs_ioctl(&dst32, dst); return code; } #endif /* defined(AFS_HPUX_64BIT_ENV) */ #if defined(AFS_SUN5_64BIT_ENV) struct afs_ioctl32 dst32; if (get_udatamodel() == DATAMODEL_ILP32) { AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code); if (!code) afs_ioctl32_to_afs_ioctl(&dst32, dst); return code; } #endif /* defined(AFS_SUN5_64BIT_ENV) */ #if defined(AFS_SGI_ENV) && (_MIPS_SZLONG==64) struct afs_ioctl32 dst32; if (!ABI_IS_64BIT(get_current_abi())) { AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code); if (!code) afs_ioctl32_to_afs_ioctl(&dst32, dst); return code; } #endif /* defined(AFS_SGI_ENV) && (_MIPS_SZLONG==64) */ #if defined(AFS_LINUX_64BIT_KERNEL) && !defined(AFS_ALPHA_LINUX20_ENV) && !defined(AFS_IA64_LINUX20_ENV) struct afs_ioctl32 dst32; #ifdef AFS_SPARC64_LINUX26_ENV if (test_thread_flag(TIF_32BIT)) #elif defined(AFS_SPARC64_LINUX24_ENV) if (current->thread.flags & SPARC_FLAG_32BIT) #elif defined(AFS_SPARC64_LINUX20_ENV) if (current->tss.flags & SPARC_FLAG_32BIT) #elif defined(AFS_AMD64_LINUX26_ENV) if (test_thread_flag(TIF_IA32)) #elif defined(AFS_AMD64_LINUX20_ENV) if (current->thread.flags & THREAD_IA32) #elif defined(AFS_PPC64_LINUX26_ENV) #if defined(STRUCT_TASK_STRUCT_HAS_THREAD_INFO) if (current->thread_info->flags & _TIF_32BIT) #else if (task_thread_info(current)->flags & _TIF_32BIT) #endif #elif defined(AFS_PPC64_LINUX20_ENV) if (current->thread.flags & PPC_FLAG_32BIT) #elif defined(AFS_S390X_LINUX26_ENV) if (test_thread_flag(TIF_31BIT)) #elif defined(AFS_S390X_LINUX20_ENV) if (current->thread.flags & S390_FLAG_31BIT) #else #error pioctl32 not done for this linux #endif { AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code); if (!code) afs_ioctl32_to_afs_ioctl(&dst32, dst); return code; } #endif /* defined(AFS_LINUX_64BIT_KERNEL) */ AFS_COPYIN(cmarg, (caddr_t) dst, sizeof *dst, code); return code; }
static int copyin_iparam(caddr_t cmarg, struct iparam *dst) { int code; #if defined(AFS_HPUX_64BIT_ENV) struct iparam32 dst32; if (is_32bit(u.u_procp)) { /* is_32bit() in proc_iface.h */ AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code); if (!code) iparam32_to_iparam(&dst32, dst); return code; } #endif /* AFS_HPUX_64BIT_ENV */ #if defined(AFS_SUN5_64BIT_ENV) struct iparam32 dst32; if (get_udatamodel() == DATAMODEL_ILP32) { AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code); if (!code) iparam32_to_iparam(&dst32, dst); return code; } #endif /* AFS_SUN5_64BIT_ENV */ #if defined(AFS_LINUX_64BIT_KERNEL) && !defined(AFS_ALPHA_LINUX20_ENV) && !defined(AFS_IA64_LINUX20_ENV) struct iparam32 dst32; #ifdef AFS_SPARC64_LINUX26_ENV if (test_thread_flag(TIF_32BIT)) #elif defined(AFS_SPARC64_LINUX24_ENV) if (current->thread.flags & SPARC_FLAG_32BIT) #elif defined(AFS_SPARC64_LINUX20_ENV) if (current->tss.flags & SPARC_FLAG_32BIT) #elif defined(AFS_AMD64_LINUX26_ENV) if (test_thread_flag(TIF_IA32)) #elif defined(AFS_AMD64_LINUX20_ENV) if (current->thread.flags & THREAD_IA32) #elif defined(AFS_PPC64_LINUX26_ENV) #if defined(STRUCT_TASK_STRUCT_HAS_THREAD_INFO) if (current->thread_info->flags & _TIF_32BIT) #else if (task_thread_info(current)->flags & _TIF_32BIT) #endif #elif defined(AFS_PPC64_LINUX20_ENV) if (current->thread.flags & PPC_FLAG_32BIT) #elif defined(AFS_S390X_LINUX26_ENV) if (test_thread_flag(TIF_31BIT)) #elif defined(AFS_S390X_LINUX20_ENV) if (current->thread.flags & S390_FLAG_31BIT) #else #error iparam32 not done for this linux platform #endif { AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code); if (!code) iparam32_to_iparam(&dst32, dst); return code; } #endif /* AFS_LINUX_64BIT_KERNEL */ AFS_COPYIN(cmarg, (caddr_t) dst, sizeof *dst, code); return code; }