summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/drivers/net/chip.h12
-rw-r--r--src/drivers/net/r8168.c10
2 files changed, 22 insertions, 0 deletions
diff --git a/src/drivers/net/chip.h b/src/drivers/net/chip.h
index 430bc334a5..249b80f740 100644
--- a/src/drivers/net/chip.h
+++ b/src/drivers/net/chip.h
@@ -15,10 +15,22 @@
#define __DRIVERS_R8168_CHIP_H__
#include <stdint.h>
+#include <arch/acpi_device.h>
struct drivers_net_config {
uint16_t customized_leds;
unsigned int wake; /* Wake pin for ACPI _PRW */
+
+ /* Does the device have a power resource? */
+ bool has_power_resource;
+
+ /* GPIO used to stop operation of device. */
+ struct acpi_gpio stop_gpio;
+ /* Delay to be inserted after disabling stop. */
+ unsigned int stop_delay_ms;
+ /* Delay to be inserted after enabling stop. */
+ unsigned int stop_off_delay_ms;
+
/*
* There maybe many NIC cards in a system.
* This parameter is for driver to identify what
diff --git a/src/drivers/net/r8168.c b/src/drivers/net/r8168.c
index 1bca8799aa..07069aa88b 100644
--- a/src/drivers/net/r8168.c
+++ b/src/drivers/net/r8168.c
@@ -317,6 +317,16 @@ static void r8168_net_fill_ssdt(struct device *dev)
if (dev->chip_ops)
acpigen_write_name_string("_DDN", dev->chip_ops->name);
+ /* Power Resource */
+ if (config->has_power_resource) {
+ const struct acpi_power_res_params power_res_params = {
+ .stop_gpio = &config->stop_gpio,
+ .stop_delay_ms = config->stop_delay_ms,
+ .stop_off_delay_ms = config->stop_off_delay_ms
+ };
+ acpi_device_add_power_res(&power_res_params);
+ }
+
/* Address */
address = PCI_SLOT(dev->path.pci.devfn) & 0xffff;
address <<= 16;