Lines Matching refs:ea

54 extern int do_lq(unsigned long ea, unsigned long *regs);
55 extern int do_stq(unsigned long ea, unsigned long val0, unsigned long val1);
56 extern int do_lqarx(unsigned long ea, unsigned long *regs);
57 extern int do_stqcx(unsigned long ea, unsigned long val0, unsigned long val1,
106 unsigned long ea, int nb)
110 if (access_ok((void __user *)ea, nb))
112 if (access_ok((void __user *)ea, 1))
116 regs->dar = ea;
127 unsigned long ea;
130 ea = (signed short) instr; /* sign-extend */
132 ea += regs->gpr[ra];
134 return ea;
145 unsigned long ea;
148 ea = (signed short) (instr & ~3); /* sign-extend */
150 ea += regs->gpr[ra];
152 return ea;
162 unsigned long ea;
165 ea = (signed short) (instr & ~0xf); /* sign-extend */
167 ea += regs->gpr[ra];
169 return ea;
180 unsigned long ea;
184 ea = regs->gpr[rb];
186 ea += regs->gpr[ra];
188 return ea;
201 unsigned long ea, d0, d1, d;
214 ea = (signed int)dd;
215 ea = (ea << 2) | (d & 0x3);
218 ea += regs->gpr[ra];
220 ; /* Leave ea as is */
222 ea += regs->nip;
229 return ea;
301 __read_mem_aligned(unsigned long *dest, unsigned long ea, int nb, struct pt_regs *regs)
307 unsafe_get_user(x, (unsigned char __user *)ea, Efault);
310 unsafe_get_user(x, (unsigned short __user *)ea, Efault);
313 unsafe_get_user(x, (unsigned int __user *)ea, Efault);
317 unsafe_get_user(x, (unsigned long __user *)ea, Efault);
325 regs->dar = ea;
330 read_mem_aligned(unsigned long *dest, unsigned long ea, int nb, struct pt_regs *regs)
334 if (is_kernel_addr(ea))
335 return __read_mem_aligned(dest, ea, nb, regs);
337 if (user_read_access_begin((void __user *)ea, nb)) {
338 err = __read_mem_aligned(dest, ea, nb, regs);
342 regs->dar = ea;
352 static __always_inline int __copy_mem_in(u8 *dest, unsigned long ea, int nb, struct pt_regs *regs)
357 c = max_align(ea);
362 unsafe_get_user(*dest, (u8 __user *)ea, Efault);
365 unsafe_get_user(*(u16 *)dest, (u16 __user *)ea, Efault);
368 unsafe_get_user(*(u32 *)dest, (u32 __user *)ea, Efault);
372 unsafe_get_user(*(u64 *)dest, (u64 __user *)ea, Efault);
377 ea += c;
382 regs->dar = ea;
386 static nokprobe_inline int copy_mem_in(u8 *dest, unsigned long ea, int nb, struct pt_regs *regs)
390 if (is_kernel_addr(ea))
391 return __copy_mem_in(dest, ea, nb, regs);
393 if (user_read_access_begin((void __user *)ea, nb)) {
394 err = __copy_mem_in(dest, ea, nb, regs);
398 regs->dar = ea;
405 unsigned long ea, int nb,
417 err = copy_mem_in(&u.b[i], ea, nb, regs);
424 * Read memory at address ea for nb bytes, return 0 for success
428 static int read_mem(unsigned long *dest, unsigned long ea, int nb,
431 if (!address_ok(regs, ea, nb))
433 if ((ea & (nb - 1)) == 0)
434 return read_mem_aligned(dest, ea, nb, regs);
435 return read_mem_unaligned(dest, ea, nb, regs);
440 __write_mem_aligned(unsigned long val, unsigned long ea, int nb, struct pt_regs *regs)
444 unsafe_put_user(val, (unsigned char __user *)ea, Efault);
447 unsafe_put_user(val, (unsigned short __user *)ea, Efault);
450 unsafe_put_user(val, (unsigned int __user *)ea, Efault);
454 unsafe_put_user(val, (unsigned long __user *)ea, Efault);
461 regs->dar = ea;
466 write_mem_aligned(unsigned long val, unsigned long ea, int nb, struct pt_regs *regs)
470 if (is_kernel_addr(ea))
471 return __write_mem_aligned(val, ea, nb, regs);
473 if (user_write_access_begin((void __user *)ea, nb)) {
474 err = __write_mem_aligned(val, ea, nb, regs);
478 regs->dar = ea;
488 static __always_inline int __copy_mem_out(u8 *dest, unsigned long ea, int nb, struct pt_regs *regs)
493 c = max_align(ea);
498 unsafe_put_user(*dest, (u8 __user *)ea, Efault);
501 unsafe_put_user(*(u16 *)dest, (u16 __user *)ea, Efault);
504 unsafe_put_user(*(u32 *)dest, (u32 __user *)ea, Efault);
508 unsafe_put_user(*(u64 *)dest, (u64 __user *)ea, Efault);
513 ea += c;
518 regs->dar = ea;
522 static nokprobe_inline int copy_mem_out(u8 *dest, unsigned long ea, int nb, struct pt_regs *regs)
526 if (is_kernel_addr(ea))
527 return __copy_mem_out(dest, ea, nb, regs);
529 if (user_write_access_begin((void __user *)ea, nb)) {
530 err = __copy_mem_out(dest, ea, nb, regs);
534 regs->dar = ea;
541 unsigned long ea, int nb,
552 return copy_mem_out(&u.b[i], ea, nb, regs);
556 * Write memory at address ea for nb bytes, return 0 for success
559 static int write_mem(unsigned long val, unsigned long ea, int nb,
562 if (!address_ok(regs, ea, nb))
564 if ((ea & (nb - 1)) == 0)
565 return write_mem_aligned(val, ea, nb, regs);
566 return write_mem_unaligned(val, ea, nb, regs);
575 static int do_fp_load(struct instruction_op *op, unsigned long ea,
591 if (!address_ok(regs, ea, nb))
594 err = copy_mem_in(u.b, ea, nb, regs);
628 static int do_fp_store(struct instruction_op *op, unsigned long ea,
643 if (!address_ok(regs, ea, nb))
670 return copy_mem_out(u.b, ea, nb, regs);
677 static nokprobe_inline int do_vec_load(int rn, unsigned long ea,
690 if (!address_ok(regs, ea & ~0xfUL, 16))
693 ea &= ~(size - 1);
694 err = copy_mem_in(&u.b[ea & 0xf], ea, size, regs);
698 do_byte_reverse(&u.b[ea & 0xf], min_t(size_t, size, sizeof(u)));
708 static nokprobe_inline int do_vec_store(int rn, unsigned long ea,
720 if (!address_ok(regs, ea & ~0xfUL, 16))
723 ea &= ~(size - 1);
732 do_byte_reverse(&u.b[ea & 0xf], min_t(size_t, size, sizeof(u)));
733 return copy_mem_out(&u.b[ea & 0xf], ea, size, regs);
738 static nokprobe_inline int emulate_lq(struct pt_regs *regs, unsigned long ea,
743 if (!address_ok(regs, ea, 16))
746 if ((ea & 0xf) == 0) {
747 err = do_lq(ea, &regs->gpr[reg]);
749 err = read_mem(&regs->gpr[reg + IS_LE], ea, 8, regs);
751 err = read_mem(&regs->gpr[reg + IS_BE], ea + 8, 8, regs);
758 static nokprobe_inline int emulate_stq(struct pt_regs *regs, unsigned long ea,
764 if (!address_ok(regs, ea, 16))
772 if ((ea & 0xf) == 0)
773 return do_stq(ea, vals[0], vals[1]);
775 err = write_mem(vals[IS_LE], ea, 8, regs);
777 err = write_mem(vals[IS_BE], ea + 8, 8, regs);
962 unsigned long ea, struct pt_regs *regs,
971 if (!address_ok(regs, ea, size) || copy_mem_in(mem, ea, size, regs))
1009 unsigned long ea, struct pt_regs *regs,
1018 if (!address_ok(regs, ea, size))
1052 return copy_mem_out(mem, ea, size, regs);
1056 static __always_inline int __emulate_dcbz(unsigned long ea)
1062 unsafe_put_user(0, (unsigned long __user *)(ea + i), Efault);
1070 int emulate_dcbz(unsigned long ea, struct pt_regs *regs)
1075 ea = truncate_if_32bit(regs->msr, ea);
1076 ea &= ~(size - 1);
1077 if (!address_ok(regs, ea, size))
1080 if (is_kernel_addr(ea)) {
1081 err = __emulate_dcbz(ea);
1082 } else if (user_write_access_begin((void __user *)ea, size)) {
1083 err = __emulate_dcbz(ea);
1090 regs->dar = ea;
2241 op->ea = xform_ea(word, regs);
2246 op->ea = xform_ea(word, regs);
2251 op->ea = xform_ea(word, regs);
2257 op->ea = xform_ea(word, regs);
2263 op->ea = xform_ea(word, regs);
2268 op->ea = xform_ea(word, regs);
2287 op->ea = xform_ea(word, regs);
2453 op->ea = ra ? regs->gpr[ra] : 0;
2520 op->ea = ra ? regs->gpr[ra] : 0;
2566 op->ea = ra ? regs->gpr[ra] : 0;
2615 op->ea = ra ? regs->gpr[ra] : 0;
2761 op->ea = dform_ea(word, regs);
2767 op->ea = dform_ea(word, regs);
2773 op->ea = dform_ea(word, regs);
2779 op->ea = dform_ea(word, regs);
2785 op->ea = dform_ea(word, regs);
2791 op->ea = dform_ea(word, regs);
2797 op->ea = dform_ea(word, regs);
2804 op->ea = dform_ea(word, regs);
2809 op->ea = dform_ea(word, regs);
2816 op->ea = dform_ea(word, regs);
2822 op->ea = dform_ea(word, regs);
2828 op->ea = dform_ea(word, regs);
2834 op->ea = dform_ea(word, regs);
2842 op->ea = dqform_ea(word, regs);
2848 op->ea = dsform_ea(word, regs);
2877 op->ea = dsform_ea(word, regs);
2896 op->ea = dqform_ea(word, regs);
2913 op->ea = dsform_ea(word, regs);
2920 op->ea = dqform_ea(word, regs);
2932 op->ea = dsform_ea(word, regs);
2943 op->ea = dsform_ea(word, regs);
2953 op->ea = dqform_ea(word, regs);
2966 op->ea = dsform_ea(word, regs);
2997 op->ea = mlsd_8lsd_ea(word, suffix, regs);
3077 op->ea = mlsd_8lsd_ea(word, suffix, regs);
3186 static nokprobe_inline int handle_stack_update(unsigned long ea, struct pt_regs *regs)
3330 unsigned long ea;
3337 ea = truncate_if_32bit(regs->msr, op->ea);
3341 if (ea & (size - 1))
3343 if (!address_ok(regs, ea, size))
3350 __get_user_asmx(val, ea, err, "lbarx");
3353 __get_user_asmx(val, ea, err, "lharx");
3357 __get_user_asmx(val, ea, err, "lwarx");
3361 __get_user_asmx(val, ea, err, "ldarx");
3364 err = do_lqarx(ea, &regs->gpr[op->reg]);
3371 regs->dar = ea;
3379 if (ea & (size - 1))
3381 if (!address_ok(regs, ea, size))
3387 __put_user_asmx(op->val, ea, err, "stbcx.", cr);
3390 __put_user_asmx(op->val, ea, err, "sthcx.", cr);
3394 __put_user_asmx(op->val, ea, err, "stwcx.", cr);
3398 __put_user_asmx(op->val, ea, err, "stdcx.", cr);
3401 err = do_stqcx(ea, regs->gpr[op->reg],
3413 regs->dar = ea;
3419 err = emulate_lq(regs, ea, op->reg, cross_endian);
3423 err = read_mem(&regs->gpr[op->reg], ea, size, regs);
3442 err = do_fp_load(op, ea, regs, cross_endian);
3449 err = do_vec_load(op->reg, ea, size, regs, cross_endian);
3464 err = do_vsx_load(op, ea, regs, cross_endian);
3469 if (!address_ok(regs, ea, size))
3478 err = copy_mem_in((u8 *) &v32, ea, nb, regs);
3484 ea += 4;
3493 err = emulate_stq(regs, ea, op->reg, cross_endian);
3499 ea >= regs->gpr[1] - STACK_INT_FRAME_SIZE) {
3500 err = handle_stack_update(ea, regs);
3505 err = write_mem(op->val, ea, size, regs);
3512 err = do_fp_store(op, ea, regs, cross_endian);
3519 err = do_vec_store(op->reg, ea, size, regs, cross_endian);
3534 err = do_vsx_store(op, ea, regs, cross_endian);
3539 if (!address_ok(regs, ea, size))
3550 err = copy_mem_out((u8 *) &v32, ea, nb, regs);
3553 ea += 4;
3567 regs->gpr[op->update_reg] = op->ea;
3585 unsigned long ea;
3607 ea = truncate_if_32bit(regs->msr, op.ea);
3608 if (!address_ok(regs, ea, 8))
3612 __cacheop_user_asmx(ea, err, "dcbst");
3615 __cacheop_user_asmx(ea, err, "dcbf");
3619 prefetchw((void *) ea);
3623 prefetch((void *) ea);
3626 __cacheop_user_asmx(ea, err, "icbi");
3629 err = emulate_dcbz(ea, regs);
3633 regs->dar = ea;