• Home
  • Raw
  • Download

Lines Matching refs:cp

356 static struct ccwchain *ccwchain_alloc(struct channel_program *cp, int len)  in ccwchain_alloc()  argument
378 list_add_tail(&chain->next, &cp->ccwchain_list); in ccwchain_alloc()
413 static int ccwchain_calc_length(u64 iova, struct channel_program *cp) in ccwchain_calc_length() argument
415 struct ccw1 *ccw = cp->guest_cp; in ccwchain_calc_length()
426 if ((!cp->orb.cmd.c64 || cp->orb.cmd.i2k) && ccw_is_idal(ccw)) in ccwchain_calc_length()
449 static int tic_target_chain_exists(struct ccw1 *tic, struct channel_program *cp) in tic_target_chain_exists() argument
454 list_for_each_entry(chain, &cp->ccwchain_list, next) { in tic_target_chain_exists()
464 struct channel_program *cp);
466 static int ccwchain_handle_ccw(u32 cda, struct channel_program *cp) in ccwchain_handle_ccw() argument
469 &container_of(cp, struct vfio_ccw_private, cp)->vdev; in ccwchain_handle_ccw()
474 len = copy_from_iova(vdev, cp->guest_cp, cda, in ccwchain_handle_ccw()
480 if (!cp->orb.cmd.fmt) in ccwchain_handle_ccw()
481 convert_ccw0_to_ccw1(cp->guest_cp, CCWCHAIN_LEN_MAX); in ccwchain_handle_ccw()
484 len = ccwchain_calc_length(cda, cp); in ccwchain_handle_ccw()
489 chain = ccwchain_alloc(cp, len); in ccwchain_handle_ccw()
495 memcpy(chain->ch_ccw, cp->guest_cp, len * sizeof(struct ccw1)); in ccwchain_handle_ccw()
498 ret = ccwchain_loop_tic(chain, cp); in ccwchain_handle_ccw()
507 static int ccwchain_loop_tic(struct ccwchain *chain, struct channel_program *cp) in ccwchain_loop_tic() argument
519 if (tic_target_chain_exists(tic, cp)) in ccwchain_loop_tic()
523 ret = ccwchain_handle_ccw(tic->cda, cp); in ccwchain_loop_tic()
533 struct channel_program *cp) in ccwchain_fetch_tic() argument
539 list_for_each_entry(iter, &cp->ccwchain_list, next) { in ccwchain_fetch_tic()
553 struct channel_program *cp) in ccwchain_fetch_direct() argument
556 &container_of(cp, struct vfio_ccw_private, cp)->vdev; in ccwchain_fetch_direct()
655 struct channel_program *cp) in ccwchain_fetch_one() argument
660 return ccwchain_fetch_tic(chain, idx, cp); in ccwchain_fetch_one()
662 return ccwchain_fetch_direct(chain, idx, cp); in ccwchain_fetch_one()
681 int cp_init(struct channel_program *cp, union orb *orb) in cp_init() argument
684 &container_of(cp, struct vfio_ccw_private, cp)->vdev; in cp_init()
690 if (cp->initialized) in cp_init()
705 INIT_LIST_HEAD(&cp->ccwchain_list); in cp_init()
706 memcpy(&cp->orb, orb, sizeof(*orb)); in cp_init()
709 ret = ccwchain_handle_ccw(orb->cmd.cpa, cp); in cp_init()
712 cp->initialized = true; in cp_init()
717 cp->orb.cmd.c64 = 1; in cp_init()
732 void cp_free(struct channel_program *cp) in cp_free() argument
735 &container_of(cp, struct vfio_ccw_private, cp)->vdev; in cp_free()
739 if (!cp->initialized) in cp_free()
742 cp->initialized = false; in cp_free()
743 list_for_each_entry_safe(chain, temp, &cp->ccwchain_list, next) { in cp_free()
789 int cp_prefetch(struct channel_program *cp) in cp_prefetch() argument
795 if (!cp->initialized) in cp_prefetch()
798 list_for_each_entry(chain, &cp->ccwchain_list, next) { in cp_prefetch()
801 ret = ccwchain_fetch_one(chain, idx, cp); in cp_prefetch()
811 list_for_each_entry_continue(chain, &cp->ccwchain_list, next) { in cp_prefetch()
827 union orb *cp_get_orb(struct channel_program *cp, u32 intparm, u8 lpm) in cp_get_orb() argument
834 if (!cp->initialized) in cp_get_orb()
837 orb = &cp->orb; in cp_get_orb()
846 chain = list_first_entry(&cp->ccwchain_list, struct ccwchain, next); in cp_get_orb()
867 void cp_update_scsw(struct channel_program *cp, union scsw *scsw) in cp_update_scsw() argument
873 if (!cp->initialized) in cp_update_scsw()
882 list_for_each_entry(chain, &cp->ccwchain_list, next) { in cp_update_scsw()
912 bool cp_iova_pinned(struct channel_program *cp, u64 iova, u64 length) in cp_iova_pinned() argument
917 if (!cp->initialized) in cp_iova_pinned()
920 list_for_each_entry(chain, &cp->ccwchain_list, next) { in cp_iova_pinned()