arch/sparc/power/hibernate_asm.S

Source file repositories/reference/linux-study-clean/arch/sparc/power/hibernate_asm.S

File Facts

System
Linux kernel
Corpus path
arch/sparc/power/hibernate_asm.S
Extension
.S
Size
2351 bytes
Lines
133
Domain
Architecture Layer
Bucket
arch/sparc
Inferred role
Architecture Layer: arch/sparc
Status
atlas-only

Why This File Exists

CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.

Dependency Surface

Detected Declarations

Annotated Snippet

#include <linux/linkage.h>

#include <asm/asm-offsets.h>
#include <asm/cpudata.h>
#include <asm/page.h>

ENTRY(swsusp_arch_suspend)
	save	%sp, -128, %sp
	save	%sp, -128, %sp
	flushw

	setuw	saved_context, %g3

	/* Save window regs */
	rdpr	%cwp, %g2
	stx	%g2, [%g3 + SC_REG_CWP]
	rdpr	%wstate, %g2
	stx	%g2, [%g3 + SC_REG_WSTATE]
	stx	%fp, [%g3 + SC_REG_FP]

	/* Save state regs */
	rdpr	%tick, %g2
	stx	%g2, [%g3 + SC_REG_TICK]
	rdpr	%pstate, %g2
	stx	%g2, [%g3 + SC_REG_PSTATE]

	/* Save global regs */
	stx	%g4, [%g3 + SC_REG_G4]
	stx	%g5, [%g3 + SC_REG_G5]
	stx	%g6, [%g3 + SC_REG_G6]

	call	swsusp_save
	 nop

	mov	%o0, %i0
	restore

	mov	%o0, %i0
	ret
	 restore

ENTRY(swsusp_arch_resume)
	/* Write restore_pblist to %l0 */
	sethi	%hi(restore_pblist), %l0
	ldx	[%l0 + %lo(restore_pblist)], %l0

	call	__flush_tlb_all
	 nop

	/* Write PAGE_OFFSET to %g7 */
	sethi	%hi(PAGE_OFFSET), %g7
	ldx	[%g7 + %lo(PAGE_OFFSET)], %g7

	setuw	(PAGE_SIZE-8), %g3

	/* Use MMU Bypass */
	rd	%asi, %g1
	wr	%g0, ASI_PHYS_USE_EC, %asi

	ba	fill_itlb
	 nop

pbe_loop:
	cmp	%l0, %g0
	be	restore_ctx
	 sub	%l0, %g7, %l0

	ldxa	[%l0    ] %asi, %l1 /* address */
	ldxa	[%l0 + 8] %asi, %l2 /* orig_address */

Annotation

Implementation Notes