root/drivers/s390/cio/vfio_ccw_cp.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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 
  11 #ifndef _VFIO_CCW_CP_H_
  12 #define _VFIO_CCW_CP_H_
  13 
  14 #include <asm/cio.h>
  15 #include <asm/scsw.h>
  16 
  17 #include "orb.h"
  18 
  19 /*
  20  * Max length for ccw chain.
  21  * XXX: Limit to 256, need to check more?
  22  */
  23 #define CCWCHAIN_LEN_MAX        256
  24 
  25 /**
  26  * struct channel_program - manage information for channel program
  27  * @ccwchain_list: list head of ccwchains
  28  * @orb: orb for the currently processed ssch request
  29  * @mdev: the mediated device to perform page pinning/unpinning
  30  * @initialized: whether this instance is actually initialized
  31  *
  32  * @ccwchain_list is the head of a ccwchain list, that contents the
  33  * translated result of the guest channel program that pointed out by
  34  * the iova parameter when calling cp_init.
  35  */
  36 struct channel_program {
  37         struct list_head ccwchain_list;
  38         union orb orb;
  39         struct device *mdev;
  40         bool initialized;
  41         struct ccw1 *guest_cp;
  42 };
  43 
  44 extern int cp_init(struct channel_program *cp, struct device *mdev,
  45                    union orb *orb);
  46 extern void cp_free(struct channel_program *cp);
  47 extern int cp_prefetch(struct channel_program *cp);
  48 extern union orb *cp_get_orb(struct channel_program *cp, u32 intparm, u8 lpm);
  49 extern void cp_update_scsw(struct channel_program *cp, union scsw *scsw);
  50 extern bool cp_iova_pinned(struct channel_program *cp, u64 iova);
  51 
  52 #endif

/* [<][>][^][v][top][bottom][index][help] */