20 Jul, 2011

5 commits

  • …N_PCIDEV_BACKEND_VPCI

    .. compile options. This way the user can decide during runtime whether they
    want the default 'vpci' (virtual pci passthrough) or where the PCI devices
    are passed in without any BDF renumbering. The option 'passthrough' allows
    the user to toggle the it from 0 (vpci) to 1 (passthrough).

    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

    Konrad Rzeszutek Wilk
     
  • The latter is easily fixed - by the developer compiling the
    module with -DDEBUG. And during runtime - the loglvl provides
    quite a lot of useful data.

    Signed-off-by: Konrad Rzeszutek Wilk

    Konrad Rzeszutek Wilk
     
  • - Remove the slot and controller controller backend as they
    are not used.
    - Document the find pciback_[read|write]_config_[byte|word|dword]
    to make it easier to find.
    - Collapse the code from conf_space_capability_msi into pciback_ops.c
    - Collapse conf_space_capability_[pm|vpd].c in conf_space_capability.c
    [and remove the conf_space_capability.h file]
    - Rename all visible functions from pciback to xen_pcibk.
    - Rename all the printk/pr_info, etc that use the "pciback" to say
    "xen-pciback".
    - Convert functions that are not referenced outside the code to be
    static to save on name space.
    - Do the same thing for structures that are internal to the driver.
    - Run checkpatch.pl after the renames and fixup its warnings and
    fix any compile errors caused by the variable rename
    - Cleanup any structs that checkpath.pl commented about or just
    look odd.

    Signed-off-by: Konrad Rzeszutek Wilk

    Konrad Rzeszutek Wilk
     
  • pciback is rather generic for a modular distro style kernel.

    Signed-off-by: Ian Campbell
    Cc: Jeremy Fitzhardinge
    Cc: Konrad Rzeszutek Wilk
    Signed-off-by: Jeremy Fitzhardinge

    Ian Campbell
     
  • This is the host side counterpart to the frontend driver in
    drivers/pci/xen-pcifront.c. The PV protocol is also implemented by
    frontend drivers in other OSes too, such as the BSDs.

    The PV protocol is rather simple. There is page shared with the guest,
    which has the 'struct xen_pci_sharedinfo' embossed in it. The backend
    has a thread that is kicked every-time the structure is changed and
    based on the operation field it performs specific tasks:

    XEN_PCI_OP_conf_[read|write]:
    Read/Write 0xCF8/0xCFC filtered data. (conf_space*.c)
    Based on which field is probed, we either enable/disable the PCI
    device, change power state, read VPD, etc. The major goal of this
    call is to provide a Physical IRQ (PIRQ) to the guest.

    The PIRQ is Xen hypervisor global IRQ value irrespective of the IRQ
    is tied in to the IO-APIC, or is a vector. For GSI type
    interrupts, the PIRQ==GSI holds. For MSI/MSI-X the
    PIRQ value != Linux IRQ number (thought PIRQ==vector).

    Please note, that with Xen, all interrupts (except those level shared ones)
    are injected directly to the guest - there is no host interaction.

    XEN_PCI_OP_[enable|disable]_msi[|x] (pciback_ops.c)
    Enables/disables the MSI/MSI-X capability of the device. These operations
    setup the MSI/MSI-X vectors for the guest and pass them to the frontend.

    When the device is activated, the interrupts are directly injected in the
    guest without involving the host.

    XEN_PCI_OP_aer_[detected|resume|mmio|slotreset]: In case of failure,
    perform the appropriate AER commands on the guest. Right now that is
    a cop-out - we just kill the guest.

    Besides implementing those commands, it can also

    - hide a PCI device from the host. When booting up, the user can specify
    xen-pciback.hide=(1:0:0)(BDF..) so that host does not try to use the
    device.

    The driver was lifted from linux-2.6.18.hg tree and fixed up
    so that it could compile under v3.0. Per suggestion from Jesse Barnes
    moved the driver to drivers/xen/xen-pciback.

    Signed-off-by: Konrad Rzeszutek Wilk
    Signed-off-by: Jeremy Fitzhardinge

    Konrad Rzeszutek Wilk