Index: kernel/arch/ppc32/include/asm.h
===================================================================
--- kernel/arch/ppc32/include/asm.h	(revision c55515574bc591ba52d9f94a2bbf91debeb5943e)
+++ kernel/arch/ppc32/include/asm.h	(revision 6e2bf292018603bfc698dec43b84ec2c0ede62f8)
@@ -39,4 +39,5 @@
 #include <config.h>
 #include <arch/cpu.h>
+#include <arch/mm/asid.h>
 
 static inline uint32_t msr_read(void)
@@ -58,4 +59,38 @@
 		:: [msr] "r" (msr)
 	);
+}
+
+static inline void sr_set(uint32_t flags, asid_t asid, uint32_t sr)
+{
+	asm volatile (
+		"mtsrin %[value], %[sr]\n"
+		:: [value] "r" ((flags << 16) + (asid << 4) + sr),
+		   [sr] "r" (sr << 28)
+	);
+}
+
+static inline uint32_t sr_get(uint32_t vaddr)
+{
+	uint32_t vsid;
+	
+	asm volatile (
+		"mfsrin %[vsid], %[vaddr]\n"
+		: [vsid] "=r" (vsid)
+		: [vaddr] "r" (vaddr)
+	);
+	
+	return vsid;
+}
+
+static inline uint32_t sdr1_get(void)
+{
+	uint32_t sdr1;
+	
+	asm volatile (
+		"mfsdr1 %[sdr1]\n"
+		: [sdr1] "=r" (sdr1)
+	);
+	
+	return sdr1;
 }
 
Index: kernel/arch/ppc32/include/mm/frame.h
===================================================================
--- kernel/arch/ppc32/include/mm/frame.h	(revision c55515574bc591ba52d9f94a2bbf91debeb5943e)
+++ kernel/arch/ppc32/include/mm/frame.h	(revision 6e2bf292018603bfc698dec43b84ec2c0ede62f8)
@@ -46,4 +46,16 @@
 extern uintptr_t last_frame;
 
+static inline uint32_t physmem_top(void)
+{
+	uint32_t physmem;
+	
+	asm volatile (
+		"mfsprg3 %[physmem]\n"
+		: [physmem] "=r" (physmem)
+	);
+	
+	return physmem;
+}
+
 extern void frame_arch_init(void);
 extern void physmem_print(void);
