xref: /linux/tools/testing/cxl/mock_acpi.c (revision 4b132aacb0768ac1e652cf517097ea6f237214b9)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /* Copyright(c) 2021 Intel Corporation. All rights reserved. */
3 
4 #include <linux/platform_device.h>
5 #include <linux/device.h>
6 #include <linux/acpi.h>
7 #include <cxl.h>
8 #include "test/mock.h"
9 
10 struct acpi_device *to_cxl_host_bridge(struct device *host, struct device *dev)
11 {
12 	int index;
13 	struct acpi_device *adev, *found = NULL;
14 	struct cxl_mock_ops *ops = get_cxl_mock_ops(&index);
15 
16 	if (ops && ops->is_mock_bridge(dev)) {
17 		found = ACPI_COMPANION(dev);
18 		goto out;
19 	}
20 
21 	if (dev->bus == &platform_bus_type)
22 		goto out;
23 
24 	adev = to_acpi_device(dev);
25 	if (!acpi_pci_find_root(adev->handle))
26 		goto out;
27 
28 	if (strcmp(acpi_device_hid(adev), "ACPI0016") == 0) {
29 		found = adev;
30 		dev_dbg(host, "found host bridge %s\n", dev_name(&adev->dev));
31 	}
32 out:
33 	put_cxl_mock_ops(index);
34 	return found;
35 }
36