| 
									
										
										
										
											2009-05-02 05:04:19 -04:00
										 |  |  | #include "master.hpp"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-04 02:46:13 -04:00
										 |  |  | namespace factor | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-04 05:50:24 -04:00
										 |  |  | void flush_icache(cell start, cell len) | 
					
						
							| 
									
										
										
										
											2009-05-02 05:04:19 -04:00
										 |  |  | { | 
					
						
							|  |  |  | 	int result; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* XXX: why doesn't this work on Nokia n800? It should behave
 | 
					
						
							|  |  |  | 	identically to the below assembly. */ | 
					
						
							|  |  |  | 	/* result = syscall(__ARM_NR_cacheflush,start,start + len,0); */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* Assembly swiped from
 | 
					
						
							|  |  |  | 	http://lists.arm.linux.org.uk/pipermail/linux-arm/2002-July/003931.html
 | 
					
						
							|  |  |  | 	*/ | 
					
						
							|  |  |  | 	__asm__ __volatile__ ( | 
					
						
							|  |  |  | 		"mov     r0, %1\n" | 
					
						
							|  |  |  | 		"sub     r1, %2, #1\n" | 
					
						
							|  |  |  | 		"mov     r2, #0\n" | 
					
						
							|  |  |  | 		"swi     " __sys1(__ARM_NR_cacheflush) "\n" | 
					
						
							|  |  |  | 		"mov     %0, r0\n" | 
					
						
							|  |  |  | 		: "=r" (result) | 
					
						
							|  |  |  | 		: "r" (start), "r" (start + len) | 
					
						
							|  |  |  | 		: "r0","r1","r2"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if(result < 0) | 
					
						
							|  |  |  | 		critical_error("flush_icache() failed",result); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2009-05-04 02:46:13 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | } |