Lines Matching refs:ea

55 extern int do_lq(unsigned long ea, unsigned long *regs);
56 extern int do_stq(unsigned long ea, unsigned long val0, unsigned long val1);
57 extern int do_lqarx(unsigned long ea, unsigned long *regs);
58 extern int do_stqcx(unsigned long ea, unsigned long val0, unsigned long val1,
109 unsigned long ea, int nb) in address_ok() argument
113 if (__access_ok(ea, nb, USER_DS)) in address_ok()
115 if (__access_ok(ea, 1, USER_DS)) in address_ok()
119 regs->dar = ea; in address_ok()
130 unsigned long ea; in dform_ea() local
133 ea = (signed short) instr; /* sign-extend */ in dform_ea()
135 ea += regs->gpr[ra]; in dform_ea()
137 return ea; in dform_ea()
148 unsigned long ea; in dsform_ea() local
151 ea = (signed short) (instr & ~3); /* sign-extend */ in dsform_ea()
153 ea += regs->gpr[ra]; in dsform_ea()
155 return ea; in dsform_ea()
165 unsigned long ea; in dqform_ea() local
168 ea = (signed short) (instr & ~0xf); /* sign-extend */ in dqform_ea()
170 ea += regs->gpr[ra]; in dqform_ea()
172 return ea; in dqform_ea()
183 unsigned long ea; in xform_ea() local
187 ea = regs->gpr[rb]; in xform_ea()
189 ea += regs->gpr[ra]; in xform_ea()
191 return ea; in xform_ea()
250 unsigned long ea, int nb, in read_mem_aligned() argument
258 err = __get_user(x, (unsigned char __user *) ea); in read_mem_aligned()
261 err = __get_user(x, (unsigned short __user *) ea); in read_mem_aligned()
264 err = __get_user(x, (unsigned int __user *) ea); in read_mem_aligned()
268 err = __get_user(x, (unsigned long __user *) ea); in read_mem_aligned()
275 regs->dar = ea; in read_mem_aligned()
283 static nokprobe_inline int copy_mem_in(u8 *dest, unsigned long ea, int nb, in copy_mem_in() argument
290 c = max_align(ea); in copy_mem_in()
295 err = __get_user(*dest, (unsigned char __user *) ea); in copy_mem_in()
299 (unsigned short __user *) ea); in copy_mem_in()
303 (unsigned int __user *) ea); in copy_mem_in()
308 (unsigned long __user *) ea); in copy_mem_in()
313 regs->dar = ea; in copy_mem_in()
317 ea += c; in copy_mem_in()
323 unsigned long ea, int nb, in read_mem_unaligned() argument
335 err = copy_mem_in(&u.b[i], ea, nb, regs); in read_mem_unaligned()
346 static int read_mem(unsigned long *dest, unsigned long ea, int nb, in read_mem() argument
349 if (!address_ok(regs, ea, nb)) in read_mem()
351 if ((ea & (nb - 1)) == 0) in read_mem()
352 return read_mem_aligned(dest, ea, nb, regs); in read_mem()
353 return read_mem_unaligned(dest, ea, nb, regs); in read_mem()
358 unsigned long ea, int nb, in write_mem_aligned() argument
365 err = __put_user(val, (unsigned char __user *) ea); in write_mem_aligned()
368 err = __put_user(val, (unsigned short __user *) ea); in write_mem_aligned()
371 err = __put_user(val, (unsigned int __user *) ea); in write_mem_aligned()
375 err = __put_user(val, (unsigned long __user *) ea); in write_mem_aligned()
380 regs->dar = ea; in write_mem_aligned()
388 static nokprobe_inline int copy_mem_out(u8 *dest, unsigned long ea, int nb, in copy_mem_out() argument
395 c = max_align(ea); in copy_mem_out()
400 err = __put_user(*dest, (unsigned char __user *) ea); in copy_mem_out()
404 (unsigned short __user *) ea); in copy_mem_out()
408 (unsigned int __user *) ea); in copy_mem_out()
413 (unsigned long __user *) ea); in copy_mem_out()
418 regs->dar = ea; in copy_mem_out()
422 ea += c; in copy_mem_out()
428 unsigned long ea, int nb, in write_mem_unaligned() argument
439 return copy_mem_out(&u.b[i], ea, nb, regs); in write_mem_unaligned()
446 static int write_mem(unsigned long val, unsigned long ea, int nb, in write_mem() argument
449 if (!address_ok(regs, ea, nb)) in write_mem()
451 if ((ea & (nb - 1)) == 0) in write_mem()
452 return write_mem_aligned(val, ea, nb, regs); in write_mem()
453 return write_mem_unaligned(val, ea, nb, regs); in write_mem()
462 static int do_fp_load(struct instruction_op *op, unsigned long ea, in do_fp_load() argument
476 if (!address_ok(regs, ea, nb)) in do_fp_load()
479 err = copy_mem_in(u.b, ea, nb, regs); in do_fp_load()
513 static int do_fp_store(struct instruction_op *op, unsigned long ea, in do_fp_store() argument
526 if (!address_ok(regs, ea, nb)) in do_fp_store()
553 return copy_mem_out(u.b, ea, nb, regs); in do_fp_store()
560 static nokprobe_inline int do_vec_load(int rn, unsigned long ea, in do_vec_load() argument
570 if (!address_ok(regs, ea & ~0xfUL, 16)) in do_vec_load()
573 ea &= ~(size - 1); in do_vec_load()
574 err = copy_mem_in(&u.b[ea & 0xf], ea, size, regs); in do_vec_load()
578 do_byte_reverse(&u.b[ea & 0xf], size); in do_vec_load()
588 static nokprobe_inline int do_vec_store(int rn, unsigned long ea, in do_vec_store() argument
597 if (!address_ok(regs, ea & ~0xfUL, 16)) in do_vec_store()
600 ea &= ~(size - 1); in do_vec_store()
609 do_byte_reverse(&u.b[ea & 0xf], size); in do_vec_store()
610 return copy_mem_out(&u.b[ea & 0xf], ea, size, regs); in do_vec_store()
615 static nokprobe_inline int emulate_lq(struct pt_regs *regs, unsigned long ea, in emulate_lq() argument
620 if (!address_ok(regs, ea, 16)) in emulate_lq()
623 if ((ea & 0xf) == 0) { in emulate_lq()
624 err = do_lq(ea, &regs->gpr[reg]); in emulate_lq()
626 err = read_mem(&regs->gpr[reg + IS_LE], ea, 8, regs); in emulate_lq()
628 err = read_mem(&regs->gpr[reg + IS_BE], ea + 8, 8, regs); in emulate_lq()
635 static nokprobe_inline int emulate_stq(struct pt_regs *regs, unsigned long ea, in emulate_stq() argument
641 if (!address_ok(regs, ea, 16)) in emulate_stq()
649 if ((ea & 0xf) == 0) in emulate_stq()
650 return do_stq(ea, vals[0], vals[1]); in emulate_stq()
652 err = write_mem(vals[IS_LE], ea, 8, regs); in emulate_stq()
654 err = write_mem(vals[IS_BE], ea + 8, 8, regs); in emulate_stq()
821 unsigned long ea, struct pt_regs *regs, in do_vsx_load() argument
829 if (!address_ok(regs, ea, size) || copy_mem_in(mem, ea, size, regs)) in do_vsx_load()
853 unsigned long ea, struct pt_regs *regs, in do_vsx_store() argument
861 if (!address_ok(regs, ea, size)) in do_vsx_store()
881 return copy_mem_out(mem, ea, size, regs); in do_vsx_store()
885 int emulate_dcbz(unsigned long ea, struct pt_regs *regs) in emulate_dcbz() argument
893 ea &= 0xffffffffUL; in emulate_dcbz()
897 ea &= ~(size - 1); in emulate_dcbz()
898 if (!address_ok(regs, ea, size)) in emulate_dcbz()
901 err = __put_user(0, (unsigned long __user *) (ea + i)); in emulate_dcbz()
903 regs->dar = ea; in emulate_dcbz()
1876 op->ea = xform_ea(instr, regs); in analyse_instr()
1881 op->ea = xform_ea(instr, regs); in analyse_instr()
1886 op->ea = xform_ea(instr, regs); in analyse_instr()
1892 op->ea = xform_ea(instr, regs); in analyse_instr()
1898 op->ea = xform_ea(instr, regs); in analyse_instr()
1903 op->ea = xform_ea(instr, regs); in analyse_instr()
1922 op->ea = xform_ea(instr, regs); in analyse_instr()
2087 op->ea = ra ? regs->gpr[ra] : 0; in analyse_instr()
2154 op->ea = ra ? regs->gpr[ra] : 0; in analyse_instr()
2196 op->ea = ra ? regs->gpr[ra] : 0; in analyse_instr()
2231 op->ea = ra ? regs->gpr[ra] : 0; in analyse_instr()
2354 op->ea = dform_ea(instr, regs); in analyse_instr()
2360 op->ea = dform_ea(instr, regs); in analyse_instr()
2366 op->ea = dform_ea(instr, regs); in analyse_instr()
2372 op->ea = dform_ea(instr, regs); in analyse_instr()
2378 op->ea = dform_ea(instr, regs); in analyse_instr()
2384 op->ea = dform_ea(instr, regs); in analyse_instr()
2390 op->ea = dform_ea(instr, regs); in analyse_instr()
2397 op->ea = dform_ea(instr, regs); in analyse_instr()
2402 op->ea = dform_ea(instr, regs); in analyse_instr()
2409 op->ea = dform_ea(instr, regs); in analyse_instr()
2415 op->ea = dform_ea(instr, regs); in analyse_instr()
2421 op->ea = dform_ea(instr, regs); in analyse_instr()
2427 op->ea = dform_ea(instr, regs); in analyse_instr()
2435 op->ea = dqform_ea(instr, regs); in analyse_instr()
2441 op->ea = dsform_ea(instr, regs); in analyse_instr()
2466 op->ea = dsform_ea(instr, regs); in analyse_instr()
2486 op->ea = dsform_ea(instr, regs); in analyse_instr()
2491 op->ea = dqform_ea(instr, regs); in analyse_instr()
2501 op->ea = dsform_ea(instr, regs); in analyse_instr()
2510 op->ea = dsform_ea(instr, regs); in analyse_instr()
2518 op->ea = dqform_ea(instr, regs); in analyse_instr()
2531 op->ea = dsform_ea(instr, regs); in analyse_instr()
2596 static nokprobe_inline int handle_stack_update(unsigned long ea, struct pt_regs *regs) in handle_stack_update() argument
2602 if (ea - STACK_INT_FRAME_SIZE <= current->thread.ksp_limit) { in handle_stack_update()
2747 unsigned long ea; in emulate_loadstore() local
2754 ea = truncate_if_32bit(regs->msr, op->ea); in emulate_loadstore()
2758 if (ea & (size - 1)) in emulate_loadstore()
2760 if (!address_ok(regs, ea, size)) in emulate_loadstore()
2767 __get_user_asmx(val, ea, err, "lbarx"); in emulate_loadstore()
2770 __get_user_asmx(val, ea, err, "lharx"); in emulate_loadstore()
2774 __get_user_asmx(val, ea, err, "lwarx"); in emulate_loadstore()
2778 __get_user_asmx(val, ea, err, "ldarx"); in emulate_loadstore()
2781 err = do_lqarx(ea, &regs->gpr[op->reg]); in emulate_loadstore()
2788 regs->dar = ea; in emulate_loadstore()
2796 if (ea & (size - 1)) in emulate_loadstore()
2798 if (!address_ok(regs, ea, size)) in emulate_loadstore()
2804 __put_user_asmx(op->val, ea, err, "stbcx.", cr); in emulate_loadstore()
2807 __put_user_asmx(op->val, ea, err, "stbcx.", cr); in emulate_loadstore()
2811 __put_user_asmx(op->val, ea, err, "stwcx.", cr); in emulate_loadstore()
2815 __put_user_asmx(op->val, ea, err, "stdcx.", cr); in emulate_loadstore()
2818 err = do_stqcx(ea, regs->gpr[op->reg], in emulate_loadstore()
2830 regs->dar = ea; in emulate_loadstore()
2836 err = emulate_lq(regs, ea, op->reg, cross_endian); in emulate_loadstore()
2840 err = read_mem(&regs->gpr[op->reg], ea, size, regs); in emulate_loadstore()
2859 err = do_fp_load(op, ea, regs, cross_endian); in emulate_loadstore()
2866 err = do_vec_load(op->reg, ea, size, regs, cross_endian); in emulate_loadstore()
2881 err = do_vsx_load(op, ea, regs, cross_endian); in emulate_loadstore()
2886 if (!address_ok(regs, ea, size)) in emulate_loadstore()
2895 err = copy_mem_in((u8 *) &v32, ea, nb, regs); in emulate_loadstore()
2901 ea += 4; in emulate_loadstore()
2910 err = emulate_stq(regs, ea, op->reg, cross_endian); in emulate_loadstore()
2917 ea >= regs->gpr[1] - STACK_INT_FRAME_SIZE) { in emulate_loadstore()
2918 err = handle_stack_update(ea, regs); in emulate_loadstore()
2923 err = write_mem(op->val, ea, size, regs); in emulate_loadstore()
2930 err = do_fp_store(op, ea, regs, cross_endian); in emulate_loadstore()
2937 err = do_vec_store(op->reg, ea, size, regs, cross_endian); in emulate_loadstore()
2952 err = do_vsx_store(op, ea, regs, cross_endian); in emulate_loadstore()
2957 if (!address_ok(regs, ea, size)) in emulate_loadstore()
2968 err = copy_mem_out((u8 *) &v32, ea, nb, regs); in emulate_loadstore()
2971 ea += 4; in emulate_loadstore()
2985 regs->gpr[op->update_reg] = op->ea; in emulate_loadstore()
3003 unsigned long ea; in emulate_step() local
3025 ea = truncate_if_32bit(regs->msr, op.ea); in emulate_step()
3026 if (!address_ok(regs, ea, 8)) in emulate_step()
3030 __cacheop_user_asmx(ea, err, "dcbst"); in emulate_step()
3033 __cacheop_user_asmx(ea, err, "dcbf"); in emulate_step()
3037 prefetchw((void *) ea); in emulate_step()
3041 prefetch((void *) ea); in emulate_step()
3044 __cacheop_user_asmx(ea, err, "icbi"); in emulate_step()
3047 err = emulate_dcbz(ea, regs); in emulate_step()
3051 regs->dar = ea; in emulate_step()