]>
Commit | Line | Data |
---|---|---|
9fa5780b JB |
1 | #include <linux/pci.h> |
2 | #include <linux/usb.h> | |
3 | #include <linux/usb/ehci_def.h> | |
4 | #include <linux/usb/hcd.h> | |
5 | #include <asm/xen/hypercall.h> | |
6 | #include <xen/interface/physdev.h> | |
7 | #include <xen/xen.h> | |
8 | ||
9 | static int xen_dbgp_op(struct usb_hcd *hcd, int op) | |
10 | { | |
801e7fb7 | 11 | #ifdef CONFIG_PCI |
9fa5780b | 12 | const struct device *ctrlr = hcd_to_bus(hcd)->controller; |
801e7fb7 | 13 | #endif |
9fa5780b JB |
14 | struct physdev_dbgp_op dbgp; |
15 | ||
16 | if (!xen_initial_domain()) | |
17 | return 0; | |
18 | ||
19 | dbgp.op = op; | |
20 | ||
21 | #ifdef CONFIG_PCI | |
89c3cf52 | 22 | if (dev_is_pci(ctrlr)) { |
9fa5780b JB |
23 | const struct pci_dev *pdev = to_pci_dev(ctrlr); |
24 | ||
25 | dbgp.u.pci.seg = pci_domain_nr(pdev->bus); | |
26 | dbgp.u.pci.bus = pdev->bus->number; | |
27 | dbgp.u.pci.devfn = pdev->devfn; | |
28 | dbgp.bus = PHYSDEVOP_DBGP_BUS_PCI; | |
29 | } else | |
30 | #endif | |
31 | dbgp.bus = PHYSDEVOP_DBGP_BUS_UNKNOWN; | |
32 | ||
33 | return HYPERVISOR_physdev_op(PHYSDEVOP_dbgp_op, &dbgp); | |
34 | } | |
35 | ||
36 | int xen_dbgp_reset_prep(struct usb_hcd *hcd) | |
37 | { | |
38 | return xen_dbgp_op(hcd, PHYSDEVOP_DBGP_RESET_PREPARE); | |
39 | } | |
40 | ||
41 | int xen_dbgp_external_startup(struct usb_hcd *hcd) | |
42 | { | |
43 | return xen_dbgp_op(hcd, PHYSDEVOP_DBGP_RESET_DONE); | |
44 | } | |
45 | ||
46 | #ifndef CONFIG_EARLY_PRINTK_DBGP | |
47 | #include <linux/export.h> | |
48 | EXPORT_SYMBOL_GPL(xen_dbgp_reset_prep); | |
49 | EXPORT_SYMBOL_GPL(xen_dbgp_external_startup); | |
50 | #endif |