Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b1f00de6 authored by Toshi Kani's avatar Toshi Kani Committed by Len Brown
Browse files

ACPI: Add _OST support for ACPI memory hotplug



Changed acpi_memory_device_notify() to call ACPI _OST method
when ACPI memory hotplug operation has completed.

Signed-off-by: default avatarToshi Kani <toshi.kani@hp.com>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent 51af3b92
Loading
Loading
Loading
Loading
+32 −11
Original line number Diff line number Diff line
@@ -341,7 +341,7 @@ static void acpi_memory_device_notify(acpi_handle handle, u32 event, void *data)
{
	struct acpi_memory_device *mem_device;
	struct acpi_device *device;

	u32 ost_code = ACPI_OST_SC_NON_SPECIFIC_FAILURE; /* default */

	switch (event) {
	case ACPI_NOTIFY_BUS_CHECK:
@@ -354,15 +354,20 @@ static void acpi_memory_device_notify(acpi_handle handle, u32 event, void *data)
					  "\nReceived DEVICE CHECK notification for device\n"));
		if (acpi_memory_get_device(handle, &mem_device)) {
			printk(KERN_ERR PREFIX "Cannot find driver data\n");
			return;
			break;
		}

		if (!acpi_memory_check_device(mem_device)) {
			if (acpi_memory_enable_device(mem_device))
				printk(KERN_ERR PREFIX
					    "Cannot enable memory device\n");
		if (acpi_memory_check_device(mem_device))
			break;

		if (acpi_memory_enable_device(mem_device)) {
			printk(KERN_ERR PREFIX "Cannot enable memory device\n");
			break;
		}

		ost_code = ACPI_OST_SC_SUCCESS;
		break;

	case ACPI_NOTIFY_EJECT_REQUEST:
		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
				  "\nReceived EJECT REQUEST notification for device\n"));
@@ -383,19 +388,35 @@ static void acpi_memory_device_notify(acpi_handle handle, u32 event, void *data)
		 * TBD: Can also be disabled by Callback registration
		 *      with generic sysfs driver
		 */
		if (acpi_memory_disable_device(mem_device))
			printk(KERN_ERR PREFIX
				    "Disable memory device\n");
		if (acpi_memory_disable_device(mem_device)) {
			printk(KERN_ERR PREFIX "Disable memory device\n");
			/*
		 * TBD: Invoke acpi_bus_remove to cleanup data structures
			 * If _EJ0 was called but failed, _OST is not
			 * necessary.
			 */
			if (mem_device->state == MEMORY_INVALID_STATE)
				return;

			break;
		}

		/*
		 * TBD: Invoke acpi_bus_remove to cleanup data structures
		 */

		/* _EJ0 succeeded; _OST is not necessary */
		return;

	default:
		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
				  "Unsupported event [0x%x]\n", event));
		break;

		/* non-hotplug event; possibly handled by other handler */
		return;
	}

	/* Inform firmware that the hotplug operation has completed */
	(void) acpi_evaluate_hotplug_ost(handle, event, ost_code, NULL);
	return;
}