vfio_ccw_cp.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * channel program interfaces
  4. *
  5. * Copyright IBM Corp. 2017
  6. *
  7. * Author(s): Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com>
  8. * Xiao Feng Ren <renxiaof@linux.vnet.ibm.com>
  9. */
  10. #ifndef _VFIO_CCW_CP_H_
  11. #define _VFIO_CCW_CP_H_
  12. #include <asm/cio.h>
  13. #include <asm/scsw.h>
  14. #include "orb.h"
  15. #include "vfio_ccw_trace.h"
  16. /*
  17. * Max length for ccw chain.
  18. * XXX: Limit to 256, need to check more?
  19. */
  20. #define CCWCHAIN_LEN_MAX 256
  21. /**
  22. * struct channel_program - manage information for channel program
  23. * @ccwchain_list: list head of ccwchains
  24. * @orb: orb for the currently processed ssch request
  25. * @initialized: whether this instance is actually initialized
  26. *
  27. * @ccwchain_list is the head of a ccwchain list, that contents the
  28. * translated result of the guest channel program that pointed out by
  29. * the iova parameter when calling cp_init.
  30. */
  31. struct channel_program {
  32. struct list_head ccwchain_list;
  33. union orb orb;
  34. bool initialized;
  35. struct ccw1 *guest_cp;
  36. };
  37. int cp_init(struct channel_program *cp, union orb *orb);
  38. void cp_free(struct channel_program *cp);
  39. int cp_prefetch(struct channel_program *cp);
  40. union orb *cp_get_orb(struct channel_program *cp, struct subchannel *sch);
  41. void cp_update_scsw(struct channel_program *cp, union scsw *scsw);
  42. bool cp_iova_pinned(struct channel_program *cp, u64 iova, u64 length);
  43. #endif