mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	x86 / ACPI / sleep: Provide registration for acpi_suspend_lowlevel.
Which by default will be x86_acpi_suspend_lowlevel. This registration allows us to register another callback if there is a need to use another platform specific callback. Signed-off-by: Liang Tang <liang.tang@oracle.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Tested-by: Ben Guthro <benjamin.guthro@citrix.com> Acked-by: "H. Peter Anvin" <hpa@linux.intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
		
							parent
							
								
									7d13205581
								
							
						
					
					
						commit
						d6a77ead21
					
				
					 5 changed files with 14 additions and 3 deletions
				
			
		| 
						 | 
					@ -111,7 +111,7 @@ static inline void acpi_disable_pci(void)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Low-level suspend routine. */
 | 
					/* Low-level suspend routine. */
 | 
				
			||||||
extern int acpi_suspend_lowlevel(void);
 | 
					extern int (*acpi_suspend_lowlevel)(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Physical address to resume after wakeup */
 | 
					/* Physical address to resume after wakeup */
 | 
				
			||||||
#define acpi_wakeup_address ((unsigned long)(real_mode_header->wakeup_start))
 | 
					#define acpi_wakeup_address ((unsigned long)(real_mode_header->wakeup_start))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -44,6 +44,7 @@
 | 
				
			||||||
#include <asm/mpspec.h>
 | 
					#include <asm/mpspec.h>
 | 
				
			||||||
#include <asm/smp.h>
 | 
					#include <asm/smp.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "sleep.h" /* To include x86_acpi_suspend_lowlevel */
 | 
				
			||||||
static int __initdata acpi_force = 0;
 | 
					static int __initdata acpi_force = 0;
 | 
				
			||||||
u32 acpi_rsdt_forced;
 | 
					u32 acpi_rsdt_forced;
 | 
				
			||||||
int acpi_disabled;
 | 
					int acpi_disabled;
 | 
				
			||||||
| 
						 | 
					@ -559,6 +560,12 @@ static int acpi_register_gsi_ioapic(struct device *dev, u32 gsi,
 | 
				
			||||||
int (*__acpi_register_gsi)(struct device *dev, u32 gsi,
 | 
					int (*__acpi_register_gsi)(struct device *dev, u32 gsi,
 | 
				
			||||||
			   int trigger, int polarity) = acpi_register_gsi_pic;
 | 
								   int trigger, int polarity) = acpi_register_gsi_pic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef CONFIG_ACPI_SLEEP
 | 
				
			||||||
 | 
					int (*acpi_suspend_lowlevel)(void) = x86_acpi_suspend_lowlevel;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					int (*acpi_suspend_lowlevel)(void);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * success: return IRQ number (>=0)
 | 
					 * success: return IRQ number (>=0)
 | 
				
			||||||
 * failure: return < 0
 | 
					 * failure: return < 0
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,12 +26,12 @@ static char temp_stack[4096];
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * acpi_suspend_lowlevel - save kernel state
 | 
					 * x86_acpi_suspend_lowlevel - save kernel state
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Create an identity mapped page table and copy the wakeup routine to
 | 
					 * Create an identity mapped page table and copy the wakeup routine to
 | 
				
			||||||
 * low memory.
 | 
					 * low memory.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
int acpi_suspend_lowlevel(void)
 | 
					int x86_acpi_suspend_lowlevel(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct wakeup_header *header =
 | 
						struct wakeup_header *header =
 | 
				
			||||||
		(struct wakeup_header *) __va(real_mode_header->wakeup_header);
 | 
							(struct wakeup_header *) __va(real_mode_header->wakeup_header);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,3 +15,5 @@ extern unsigned long acpi_copy_wakeup_routine(unsigned long);
 | 
				
			||||||
extern void wakeup_long64(void);
 | 
					extern void wakeup_long64(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern void do_suspend_lowlevel(void);
 | 
					extern void do_suspend_lowlevel(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern int x86_acpi_suspend_lowlevel(void);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -494,6 +494,8 @@ static int acpi_suspend_enter(suspend_state_t pm_state)
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case ACPI_STATE_S3:
 | 
						case ACPI_STATE_S3:
 | 
				
			||||||
 | 
							if (!acpi_suspend_lowlevel)
 | 
				
			||||||
 | 
								return -ENOSYS;
 | 
				
			||||||
		error = acpi_suspend_lowlevel();
 | 
							error = acpi_suspend_lowlevel();
 | 
				
			||||||
		if (error)
 | 
							if (error)
 | 
				
			||||||
			return error;
 | 
								return error;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue