On Mon, 6 Jun 2016 10:57:49 +0530
Kirti Wankhede <kwankh...@nvidia.com> wrote:

> 
> 
> On 6/3/2016 2:27 PM, Dong Jia wrote:
> > On Wed, 25 May 2016 01:28:15 +0530
> > Kirti Wankhede <kwankh...@nvidia.com> wrote:
> > 
> > 
> > ...snip...
> > 
> >> +struct phy_device_ops {
> >> +  struct module   *owner;
> >> +  const struct attribute_group **dev_attr_groups;
> >> +  const struct attribute_group **mdev_attr_groups;
> >> +
> >> +  int     (*supported_config)(struct device *dev, char *config);
> >> +  int     (*create)(struct device *dev, uuid_le uuid,
> >> +                    uint32_t instance, char *mdev_params);
> >> +  int     (*destroy)(struct device *dev, uuid_le uuid,
> >> +                     uint32_t instance);
> >> +  int     (*start)(uuid_le uuid);
> >> +  int     (*shutdown)(uuid_le uuid);
> >> +  ssize_t (*read)(struct mdev_device *vdev, char *buf, size_t count,
> >> +                  enum mdev_emul_space address_space, loff_t pos);
> >> +  ssize_t (*write)(struct mdev_device *vdev, char *buf, size_t count,
> >> +                   enum mdev_emul_space address_space, loff_t pos);
> >> +  int     (*set_irqs)(struct mdev_device *vdev, uint32_t flags,
> >> +                      unsigned int index, unsigned int start,
> >> +                      unsigned int count, void *data);
> >> +  int     (*get_region_info)(struct mdev_device *vdev, int region_index,
> >> +                           struct pci_region_info *region_info);
> >> +  int     (*validate_map_request)(struct mdev_device *vdev,
> >> +                                  unsigned long virtaddr,
> >> +                                  unsigned long *pfn, unsigned long *size,
> >> +                                  pgprot_t *prot);
> >> +};
> > 
> > Dear Kirti:
> > 
> > When I rebased my vfio-ccw patches on this series, I found I need an
> > extra 'ioctl' callback in phy_device_ops.
> > 
> 
> Thanks for taking closer look. As per my knowledge ccw is not PCI
> device, right? Correct me if I'm wrong.
Dear Kirti:

You are right. CCW is different to PCI. The official term is 'Channel
I/O device'. They use 'Channels' (co-processors) and CCWs (channel
command words) to handle I/O operations.

> I'm curious to know. Are you planning to write a driver (vfio-mccw) for
> mediated ccw device?
I wrote two drivers:
1. A vfio-pccw driver for the physical ccw device, which will reigister
the device and callbacks to mdev framework. With this, I could create
a mediated ccw device for the physical one then.
2. A vfio-mccw driver for the mediated ccw device, which will add
itself to a vfio_group, mimiced what vfio-mpci did.

The problem is, vfio-mccw need to implement new ioctls besides the
existing ones (VFIO_DEVICE_GET_INFO, etc). And these ioctls really need
the physical device help to handle.

> 
> Thanks,
> Kirti
> 
> > The ccw physical device only supports one ccw mediated device. And I
> > have two new ioctl commands for the ccw mediated device. One is 
> > to hot-reset the resource in the physical device that allocated for
> > the mediated device, the other is to do an I/O instruction translation
> > and perform an I/O operation on the physical device. I found the
> > existing callbacks could not meet my requirements.
> > 
> > Something like the following would be fine for my case:
> >     int (*ioctl)(struct mdev_device *vdev,
> >                  unsigned int cmd,
> >                  unsigned long arg);
> > 
> > What do you think about this?
> > 
> > --------
> > Dong Jia
> > 
> 

--------
Dong Jia


Reply via email to