coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
generic.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <acpi/acpi.h>
4 #include <acpi/acpigen.h>
5 #include <acpi/acpigen_pci.h>
6 #include <device/device.h>
7 #include <device/pci.h>
8 #include "chip.h"
9 
10 static const char *pcie_generic_acpi_name(const struct device *dev)
11 {
13 
14  if (config->companion_dev)
15  return acpi_device_name(config->companion_dev);
16  return "DEV0";
17 }
18 
19 static void pcie_generic_fill_ssdt(const struct device *dev)
20 {
22  struct acpi_dp *dsd;
23 
24  if (!is_dev_enabled(dev))
25  return;
26 
27  pci_rom_ssdt(dev);
28 
29  config = dev->chip_info;
30  if (!config || !config->is_untrusted || !dev->bus || !dev->bus->dev)
31  return;
32 
33  const char *scope;
34  const char *name;
35 
36  /* Code will be generated under companion device instead if present. */
37  if (config->companion_dev)
38  scope = acpi_device_path(config->companion_dev);
39  else
40  scope = acpi_device_path(dev->bus->dev);
41  name = acpi_device_name(dev);
42  acpigen_write_scope(scope);
43  if (!config->companion_dev) {
46  }
47  dsd = acpi_dp_new_table("_DSD");
48  acpi_dp_add_integer(dsd, "DmaProperty", 1);
49  acpi_dp_write(dsd);
50  if (!config->companion_dev)
53 
54  printk(BIOS_INFO, "%s.%s: Enable ACPI properties for %s (%s)\n", scope, name,
55  dev_path(dev), dev->chip_ops->name);
56 }
57 
60  .set_resources = pci_dev_set_resources,
61  .enable_resources = pci_dev_enable_resources,
62  .init = pci_dev_init,
63  .ops_pci = &pci_dev_ops_pci,
64  .acpi_name = pcie_generic_acpi_name,
65  .acpi_fill_ssdt = pcie_generic_fill_ssdt,
66 };
67 
68 static void pcie_generic_enable(struct device *dev)
69 {
70  dev->ops = &pcie_generic_ops;
71 }
72 
74  CHIP_NAME("PCIe Device")
75  .enable_dev = pcie_generic_enable
76 };
const char * acpi_device_path(const struct device *dev)
Definition: device.c:144
struct acpi_dp * acpi_dp_add_integer(struct acpi_dp *dp, const char *name, uint64_t value)
Definition: device.c:977
void acpi_dp_write(struct acpi_dp *table)
Definition: device.c:898
const char * acpi_device_name(const struct device *dev)
Definition: device.c:49
struct acpi_dp * acpi_dp_new_table(const char *name)
Definition: device.c:930
void acpigen_write_scope(const char *name)
Definition: acpigen.c:326
void acpigen_write_device(const char *name)
Definition: acpigen.c:769
void acpigen_write_ADR_pci_device(const struct device *dev)
Definition: acpigen_pci.c:22
const char * name
Definition: mmu.c:92
#define printk(level,...)
Definition: stdlib.h:16
bool is_dev_enabled(const struct device *dev)
Definition: device_const.c:369
const char * dev_path(const struct device *dev)
Definition: device_util.c:149
struct chip_operations drivers_pcie_generic_ops
Definition: generic.c:73
struct device_operations pcie_generic_ops
Definition: generic.c:58
static void pcie_generic_enable(struct device *dev)
Definition: generic.c:68
static const char * pcie_generic_acpi_name(const struct device *dev)
Definition: generic.c:10
static void pcie_generic_fill_ssdt(const struct device *dev)
Definition: generic.c:19
void acpigen_write_device_end(void)
Definition: acpigen.h:354
void acpigen_write_scope_end(void)
Definition: acpigen.h:343
#define CHIP_NAME(X)
Definition: device.h:32
#define BIOS_INFO
BIOS_INFO - Expected events.
Definition: loglevel.h:113
enum board_config config
Definition: memory.c:448
void pci_dev_init(struct device *dev)
Default handler: only runs the relevant PCI BIOS.
Definition: pci_device.c:873
void pci_dev_enable_resources(struct device *dev)
Definition: pci_device.c:721
void pci_dev_read_resources(struct device *dev)
Definition: pci_device.c:534
struct pci_operations pci_dev_ops_pci
Default device operation for PCI devices.
Definition: pci_device.c:911
void pci_dev_set_resources(struct device *dev)
Definition: pci_device.c:691
void pci_rom_ssdt(const struct device *device)
DEVTREE_CONST struct device * dev
Definition: device.h:78
const char * name
Definition: device.h:29
void(* read_resources)(struct device *dev)
Definition: device.h:39
Definition: device.h:107
struct chip_operations * chip_ops
Definition: device.h:144
struct device_operations * ops
Definition: device.h:143
DEVTREE_CONST struct bus * bus
Definition: device.h:108
DEVTREE_CONST void * chip_info
Definition: device.h:164