~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/m68k/mm/hwtest.c

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /arch/m68k/mm/hwtest.c (Version linux-6.12-rc7) and /arch/sparc64/mm/hwtest.c (Version linux-5.10.229)


  1 // SPDX-License-Identifier: GPL-2.0                 1 
  2 /* Tests for presence or absence of hardware r    
  3  * This code was originally in atari/config.c,    
  4  * that it was also in drivers/nubus/nubus.c a    
  5  * use it in hp300/config.c, so it seemed sens    
  6  * out into its own file.                         
  7  *                                                
  8  * The test is for use when trying to read a h    
  9  * that isn't present would cause a bus error.    
 10  * temporary handler so that this doesn't kill    
 11  *                                                
 12  * There is a test-by-reading and a test-by-wr    
 13  * them here complete with the comments from t    
 14  * config.c...                                    
 15  *                -- PMM <pmaydell@chiark.gree    
 16  */                                               
 17                                                   
 18 /* This function tests for the presence of an     
 19  * hardware register address. It is called ver    
 20  * initialization process, when the VBR regist    
 21  * an Atari, it still points to address 0, whi    
 22  * error would cause another bus error while f    
 23  * vector, and the CPU would do nothing at all    
 24  * a temporary VBR and a vector table for the     
 25  */                                               
 26                                                   
 27 #include <linux/module.h>                         
 28                                                   
 29 #include <asm/hwtest.h>                           
 30                                                   
 31 int hwreg_present(volatile void *regp)            
 32 {                                                 
 33         int ret = 0;                              
 34         unsigned long flags;                      
 35         long save_sp, save_vbr;                   
 36         long tmp_vectors[3];                      
 37                                                   
 38         local_irq_save(flags);                    
 39         __asm__ __volatile__ (                    
 40                 "movec %/vbr,%2\n\t"              
 41                 "movel #Lberr1,%4@(8)\n\t"        
 42                 "movec %4,%/vbr\n\t"              
 43                 "movel %/sp,%1\n\t"               
 44                 "moveq #0,%0\n\t"                 
 45                 "tstb %3@\n\t"                    
 46                 "nop\n\t"                         
 47                 "moveq #1,%0\n"                   
 48         "Lberr1:\n\t"                             
 49                 "movel %1,%/sp\n\t"               
 50                 "movec %2,%/vbr"                  
 51                 : "=&d" (ret), "=&r" (save_sp)    
 52                 : "a" (regp), "a" (tmp_vectors    
 53         );                                        
 54         local_irq_restore(flags);                 
 55                                                   
 56         return ret;                               
 57 }                                                 
 58 EXPORT_SYMBOL(hwreg_present);                     
 59                                                   
 60 /* Basically the same, but writes a value into    
 61  * by a bus error handler. Returns 1 if succes    
 62  */                                               
 63                                                   
 64 int hwreg_write(volatile void *regp, unsigned     
 65 {                                                 
 66         int ret;                                  
 67         unsigned long flags;                      
 68         long save_sp, save_vbr;                   
 69         long tmp_vectors[3];                      
 70                                                   
 71         local_irq_save(flags);                    
 72         __asm__ __volatile__ (                    
 73                 "movec %/vbr,%2\n\t"              
 74                 "movel #Lberr2,%4@(8)\n\t"        
 75                 "movec %4,%/vbr\n\t"              
 76                 "movel %/sp,%1\n\t"               
 77                 "moveq #0,%0\n\t"                 
 78                 "movew %5,%3@\n\t"                
 79                 "nop\n\t"                         
 80                 /*                                
 81                  * If this nop isn't present,     
 82                  * with 1 at the time the bus     
 83                  */                               
 84                 "moveq #1,%0\n"                   
 85         "Lberr2:\n\t"                             
 86                 "movel %1,%/sp\n\t"               
 87                 "movec %2,%/vbr"                  
 88                 : "=&d" (ret), "=&r" (save_sp)    
 89                 : "a" (regp), "a" (tmp_vectors    
 90         );                                        
 91         local_irq_restore(flags);                 
 92                                                   
 93         return ret;                               
 94 }                                                 
 95 EXPORT_SYMBOL(hwreg_write);                       
 96                                                   
 97                                                   

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php