1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright (c) 2014 Google, Inc
4 * Written by Simon Glass <sjg@chromium.org>
10 #include <linux/libfdt.h>
14 struct sandbox_pci_emul_priv
{
18 int sandbox_pci_get_emul(struct udevice
*bus
, pci_dev_t find_devfn
,
19 struct udevice
**containerp
, struct udevice
**emulp
)
25 ret
= pci_bus_find_devfn(bus
, PCI_MASK_BUS(find_devfn
), &dev
);
27 debug("%s: Could not find emulator for dev %x\n", __func__
,
33 if (device_get_uclass_id(dev
) == UCLASS_PCI_GENERIC
) {
34 ret
= device_find_first_child(dev
, emulp
);
41 return *emulp
? 0 : -ENODEV
;
44 static int sandbox_pci_emul_post_probe(struct udevice
*dev
)
46 struct sandbox_pci_emul_priv
*priv
= dev
->uclass
->priv
;
49 sandbox_set_enable_pci_map(true);
54 static int sandbox_pci_emul_pre_remove(struct udevice
*dev
)
56 struct sandbox_pci_emul_priv
*priv
= dev
->uclass
->priv
;
59 sandbox_set_enable_pci_map(priv
->dev_count
> 0);
64 UCLASS_DRIVER(pci_emul
) = {
65 .id
= UCLASS_PCI_EMUL
,
67 .post_probe
= sandbox_pci_emul_post_probe
,
68 .pre_remove
= sandbox_pci_emul_pre_remove
,
69 .priv_auto_alloc_size
= sizeof(struct sandbox_pci_emul_priv
),