• Home
  • Raw
  • Download

Lines Matching full:ea

53 extern int do_lq(unsigned long ea, unsigned long *regs);
54 extern int do_stq(unsigned long ea, unsigned long val0, unsigned long val1);
55 extern int do_lqarx(unsigned long ea, unsigned long *regs);
56 extern int do_stqcx(unsigned long ea, unsigned long val0, unsigned long val1,
107 unsigned long ea, int nb) in address_ok() argument
111 if (access_ok((void __user *)ea, nb)) in address_ok()
113 if (access_ok((void __user *)ea, 1)) in address_ok()
117 regs->dar = ea; in address_ok()
128 unsigned long ea; in dform_ea() local
131 ea = (signed short) instr; /* sign-extend */ in dform_ea()
133 ea += regs->gpr[ra]; in dform_ea()
135 return ea; in dform_ea()
146 unsigned long ea; in dsform_ea() local
149 ea = (signed short) (instr & ~3); /* sign-extend */ in dsform_ea()
151 ea += regs->gpr[ra]; in dsform_ea()
153 return ea; in dsform_ea()
163 unsigned long ea; in dqform_ea() local
166 ea = (signed short) (instr & ~0xf); /* sign-extend */ in dqform_ea()
168 ea += regs->gpr[ra]; in dqform_ea()
170 return ea; in dqform_ea()
181 unsigned long ea; in xform_ea() local
185 ea = regs->gpr[rb]; in xform_ea()
187 ea += regs->gpr[ra]; in xform_ea()
189 return ea; in xform_ea()
202 unsigned long ea, d0, d1, d; in mlsd_8lsd_ea() local
215 ea = (signed int)dd; in mlsd_8lsd_ea()
216 ea = (ea << 2) | (d & 0x3); in mlsd_8lsd_ea()
219 ea += regs->gpr[ra]; in mlsd_8lsd_ea()
221 ; /* Leave ea as is */ in mlsd_8lsd_ea()
223 ea += regs->nip; in mlsd_8lsd_ea()
230 return ea; in mlsd_8lsd_ea()
289 unsigned long ea, int nb, in read_mem_aligned() argument
297 err = __get_user(x, (unsigned char __user *) ea); in read_mem_aligned()
300 err = __get_user(x, (unsigned short __user *) ea); in read_mem_aligned()
303 err = __get_user(x, (unsigned int __user *) ea); in read_mem_aligned()
307 err = __get_user(x, (unsigned long __user *) ea); in read_mem_aligned()
314 regs->dar = ea; in read_mem_aligned()
322 static nokprobe_inline int copy_mem_in(u8 *dest, unsigned long ea, int nb, in copy_mem_in() argument
329 c = max_align(ea); in copy_mem_in()
334 err = __get_user(*dest, (unsigned char __user *) ea); in copy_mem_in()
338 (unsigned short __user *) ea); in copy_mem_in()
342 (unsigned int __user *) ea); in copy_mem_in()
347 (unsigned long __user *) ea); in copy_mem_in()
352 regs->dar = ea; in copy_mem_in()
356 ea += c; in copy_mem_in()
362 unsigned long ea, int nb, in read_mem_unaligned() argument
374 err = copy_mem_in(&u.b[i], ea, nb, regs); in read_mem_unaligned()
381 * Read memory at address ea for nb bytes, return 0 for success
385 static int read_mem(unsigned long *dest, unsigned long ea, int nb, in read_mem() argument
388 if (!address_ok(regs, ea, nb)) in read_mem()
390 if ((ea & (nb - 1)) == 0) in read_mem()
391 return read_mem_aligned(dest, ea, nb, regs); in read_mem()
392 return read_mem_unaligned(dest, ea, nb, regs); in read_mem()
397 unsigned long ea, int nb, in write_mem_aligned() argument
404 err = __put_user(val, (unsigned char __user *) ea); in write_mem_aligned()
407 err = __put_user(val, (unsigned short __user *) ea); in write_mem_aligned()
410 err = __put_user(val, (unsigned int __user *) ea); in write_mem_aligned()
414 err = __put_user(val, (unsigned long __user *) ea); in write_mem_aligned()
419 regs->dar = ea; in write_mem_aligned()
427 static nokprobe_inline int copy_mem_out(u8 *dest, unsigned long ea, int nb, in copy_mem_out() argument
434 c = max_align(ea); in copy_mem_out()
439 err = __put_user(*dest, (unsigned char __user *) ea); in copy_mem_out()
443 (unsigned short __user *) ea); in copy_mem_out()
447 (unsigned int __user *) ea); in copy_mem_out()
452 (unsigned long __user *) ea); in copy_mem_out()
457 regs->dar = ea; in copy_mem_out()
461 ea += c; in copy_mem_out()
467 unsigned long ea, int nb, in write_mem_unaligned() argument
478 return copy_mem_out(&u.b[i], ea, nb, regs); in write_mem_unaligned()
482 * Write memory at address ea for nb bytes, return 0 for success
485 static int write_mem(unsigned long val, unsigned long ea, int nb, in write_mem() argument
488 if (!address_ok(regs, ea, nb)) in write_mem()
490 if ((ea & (nb - 1)) == 0) in write_mem()
491 return write_mem_aligned(val, ea, nb, regs); in write_mem()
492 return write_mem_unaligned(val, ea, nb, regs); in write_mem()
501 static int do_fp_load(struct instruction_op *op, unsigned long ea, in do_fp_load() argument
517 if (!address_ok(regs, ea, nb)) in do_fp_load()
520 err = copy_mem_in(u.b, ea, nb, regs); in do_fp_load()
554 static int do_fp_store(struct instruction_op *op, unsigned long ea, in do_fp_store() argument
569 if (!address_ok(regs, ea, nb)) in do_fp_store()
596 return copy_mem_out(u.b, ea, nb, regs); in do_fp_store()
603 static nokprobe_inline int do_vec_load(int rn, unsigned long ea, in do_vec_load() argument
616 if (!address_ok(regs, ea & ~0xfUL, 16)) in do_vec_load()
619 ea &= ~(size - 1); in do_vec_load()
620 err = copy_mem_in(&u.b[ea & 0xf], ea, size, regs); in do_vec_load()
624 do_byte_reverse(&u.b[ea & 0xf], size); in do_vec_load()
634 static nokprobe_inline int do_vec_store(int rn, unsigned long ea, in do_vec_store() argument
646 if (!address_ok(regs, ea & ~0xfUL, 16)) in do_vec_store()
649 ea &= ~(size - 1); in do_vec_store()
658 do_byte_reverse(&u.b[ea & 0xf], size); in do_vec_store()
659 return copy_mem_out(&u.b[ea & 0xf], ea, size, regs); in do_vec_store()
664 static nokprobe_inline int emulate_lq(struct pt_regs *regs, unsigned long ea, in emulate_lq() argument
669 if (!address_ok(regs, ea, 16)) in emulate_lq()
672 if ((ea & 0xf) == 0) { in emulate_lq()
673 err = do_lq(ea, &regs->gpr[reg]); in emulate_lq()
675 err = read_mem(&regs->gpr[reg + IS_LE], ea, 8, regs); in emulate_lq()
677 err = read_mem(&regs->gpr[reg + IS_BE], ea + 8, 8, regs); in emulate_lq()
684 static nokprobe_inline int emulate_stq(struct pt_regs *regs, unsigned long ea, in emulate_stq() argument
690 if (!address_ok(regs, ea, 16)) in emulate_stq()
698 if ((ea & 0xf) == 0) in emulate_stq()
699 return do_stq(ea, vals[0], vals[1]); in emulate_stq()
701 err = write_mem(vals[IS_LE], ea, 8, regs); in emulate_stq()
703 err = write_mem(vals[IS_BE], ea + 8, 8, regs); in emulate_stq()
870 unsigned long ea, struct pt_regs *regs, in do_vsx_load() argument
878 if (!address_ok(regs, ea, size) || copy_mem_in(mem, ea, size, regs)) in do_vsx_load()
902 unsigned long ea, struct pt_regs *regs, in do_vsx_store() argument
910 if (!address_ok(regs, ea, size)) in do_vsx_store()
930 return copy_mem_out(mem, ea, size, regs); in do_vsx_store()
934 int emulate_dcbz(unsigned long ea, struct pt_regs *regs) in emulate_dcbz() argument
942 ea &= 0xffffffffUL; in emulate_dcbz()
946 ea &= ~(size - 1); in emulate_dcbz()
947 if (!address_ok(regs, ea, size)) in emulate_dcbz()
950 err = __put_user(0, (unsigned long __user *) (ea + i)); in emulate_dcbz()
952 regs->dar = ea; in emulate_dcbz()
2094 op->ea = xform_ea(word, regs); in analyse_instr()
2099 op->ea = xform_ea(word, regs); in analyse_instr()
2104 op->ea = xform_ea(word, regs); in analyse_instr()
2110 op->ea = xform_ea(word, regs); in analyse_instr()
2116 op->ea = xform_ea(word, regs); in analyse_instr()
2121 op->ea = xform_ea(word, regs); in analyse_instr()
2140 op->ea = xform_ea(word, regs); in analyse_instr()
2199 * bits of the EA say which field of the VMX register to use. in analyse_instr()
2305 op->ea = ra ? regs->gpr[ra] : 0; in analyse_instr()
2372 op->ea = ra ? regs->gpr[ra] : 0; in analyse_instr()
2418 op->ea = ra ? regs->gpr[ra] : 0; in analyse_instr()
2459 op->ea = ra ? regs->gpr[ra] : 0; in analyse_instr()
2598 op->ea = dform_ea(word, regs); in analyse_instr()
2604 op->ea = dform_ea(word, regs); in analyse_instr()
2610 op->ea = dform_ea(word, regs); in analyse_instr()
2616 op->ea = dform_ea(word, regs); in analyse_instr()
2622 op->ea = dform_ea(word, regs); in analyse_instr()
2628 op->ea = dform_ea(word, regs); in analyse_instr()
2634 op->ea = dform_ea(word, regs); in analyse_instr()
2641 op->ea = dform_ea(word, regs); in analyse_instr()
2646 op->ea = dform_ea(word, regs); in analyse_instr()
2653 op->ea = dform_ea(word, regs); in analyse_instr()
2659 op->ea = dform_ea(word, regs); in analyse_instr()
2665 op->ea = dform_ea(word, regs); in analyse_instr()
2671 op->ea = dform_ea(word, regs); in analyse_instr()
2679 op->ea = dqform_ea(word, regs); in analyse_instr()
2685 op->ea = dsform_ea(word, regs); in analyse_instr()
2714 op->ea = dsform_ea(word, regs); in analyse_instr()
2734 op->ea = dsform_ea(word, regs); in analyse_instr()
2741 op->ea = dqform_ea(word, regs); in analyse_instr()
2753 op->ea = dsform_ea(word, regs); in analyse_instr()
2764 op->ea = dsform_ea(word, regs); in analyse_instr()
2774 op->ea = dqform_ea(word, regs); in analyse_instr()
2787 op->ea = dsform_ea(word, regs); in analyse_instr()
2818 op->ea = mlsd_8lsd_ea(word, suffix, regs); in analyse_instr()
2884 op->ea = mlsd_8lsd_ea(word, suffix, regs); in analyse_instr()
2993 static nokprobe_inline int handle_stack_update(unsigned long ea, struct pt_regs *regs) in handle_stack_update() argument
2999 if (ea - STACK_INT_FRAME_SIZE <= current->thread.ksp_limit) { in handle_stack_update()
3146 unsigned long ea; in emulate_loadstore() local
3153 ea = truncate_if_32bit(regs->msr, op->ea); in emulate_loadstore()
3157 if (ea & (size - 1)) in emulate_loadstore()
3159 if (!address_ok(regs, ea, size)) in emulate_loadstore()
3166 __get_user_asmx(val, ea, err, "lbarx"); in emulate_loadstore()
3169 __get_user_asmx(val, ea, err, "lharx"); in emulate_loadstore()
3173 __get_user_asmx(val, ea, err, "lwarx"); in emulate_loadstore()
3177 __get_user_asmx(val, ea, err, "ldarx"); in emulate_loadstore()
3180 err = do_lqarx(ea, &regs->gpr[op->reg]); in emulate_loadstore()
3187 regs->dar = ea; in emulate_loadstore()
3195 if (ea & (size - 1)) in emulate_loadstore()
3197 if (!address_ok(regs, ea, size)) in emulate_loadstore()
3203 __put_user_asmx(op->val, ea, err, "stbcx.", cr); in emulate_loadstore()
3206 __put_user_asmx(op->val, ea, err, "sthcx.", cr); in emulate_loadstore()
3210 __put_user_asmx(op->val, ea, err, "stwcx.", cr); in emulate_loadstore()
3214 __put_user_asmx(op->val, ea, err, "stdcx.", cr); in emulate_loadstore()
3217 err = do_stqcx(ea, regs->gpr[op->reg], in emulate_loadstore()
3229 regs->dar = ea; in emulate_loadstore()
3235 err = emulate_lq(regs, ea, op->reg, cross_endian); in emulate_loadstore()
3239 err = read_mem(&regs->gpr[op->reg], ea, size, regs); in emulate_loadstore()
3258 err = do_fp_load(op, ea, regs, cross_endian); in emulate_loadstore()
3265 err = do_vec_load(op->reg, ea, size, regs, cross_endian); in emulate_loadstore()
3280 err = do_vsx_load(op, ea, regs, cross_endian); in emulate_loadstore()
3285 if (!address_ok(regs, ea, size)) in emulate_loadstore()
3294 err = copy_mem_in((u8 *) &v32, ea, nb, regs); in emulate_loadstore()
3300 ea += 4; in emulate_loadstore()
3309 err = emulate_stq(regs, ea, op->reg, cross_endian); in emulate_loadstore()
3316 ea >= regs->gpr[1] - STACK_INT_FRAME_SIZE) { in emulate_loadstore()
3317 err = handle_stack_update(ea, regs); in emulate_loadstore()
3322 err = write_mem(op->val, ea, size, regs); in emulate_loadstore()
3329 err = do_fp_store(op, ea, regs, cross_endian); in emulate_loadstore()
3336 err = do_vec_store(op->reg, ea, size, regs, cross_endian); in emulate_loadstore()
3351 err = do_vsx_store(op, ea, regs, cross_endian); in emulate_loadstore()
3356 if (!address_ok(regs, ea, size)) in emulate_loadstore()
3367 err = copy_mem_out((u8 *) &v32, ea, nb, regs); in emulate_loadstore()
3370 ea += 4; in emulate_loadstore()
3384 regs->gpr[op->update_reg] = op->ea; in emulate_loadstore()
3402 unsigned long ea; in emulate_step() local
3424 ea = truncate_if_32bit(regs->msr, op.ea); in emulate_step()
3425 if (!address_ok(regs, ea, 8)) in emulate_step()
3429 __cacheop_user_asmx(ea, err, "dcbst"); in emulate_step()
3432 __cacheop_user_asmx(ea, err, "dcbf"); in emulate_step()
3436 prefetchw((void *) ea); in emulate_step()
3440 prefetch((void *) ea); in emulate_step()
3443 __cacheop_user_asmx(ea, err, "icbi"); in emulate_step()
3446 err = emulate_dcbz(ea, regs); in emulate_step()
3450 regs->dar = ea; in emulate_step()