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

TOMOYO Linux Cross Reference
Linux/include/linux/mtd/map.h

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 /include/linux/mtd/map.h (Version linux-6.12-rc7) and /include/linux/mtd/map.h (Version policy-sample)


  1 /* SPDX-License-Identifier: GPL-2.0-or-later *      1 
  2 /*                                                
  3  * Copyright © 2000-2010 David Woodhouse <dwm    
  4  */                                               
  5                                                   
  6 /* Overhauled routines for dealing with differ    
  7                                                   
  8 #ifndef __LINUX_MTD_MAP_H__                       
  9 #define __LINUX_MTD_MAP_H__                       
 10                                                   
 11 #include <linux/types.h>                          
 12 #include <linux/list.h>                           
 13 #include <linux/string.h>                         
 14 #include <linux/bug.h>                            
 15 #include <linux/kernel.h>                         
 16 #include <linux/io.h>                             
 17                                                   
 18 #include <linux/unaligned.h>                      
 19 #include <asm/barrier.h>                          
 20                                                   
 21 #ifdef CONFIG_MTD_MAP_BANK_WIDTH_1                
 22 #define map_bankwidth(map) 1                      
 23 #define map_bankwidth_is_1(map) (map_bankwidth    
 24 #define map_bankwidth_is_large(map) (0)           
 25 #define map_words(map) (1)                        
 26 #define MAX_MAP_BANKWIDTH 1                       
 27 #else                                             
 28 #define map_bankwidth_is_1(map) (0)               
 29 #endif                                            
 30                                                   
 31 #ifdef CONFIG_MTD_MAP_BANK_WIDTH_2                
 32 # ifdef map_bankwidth                             
 33 #  undef map_bankwidth                            
 34 #  define map_bankwidth(map) ((map)->bankwidth    
 35 # else                                            
 36 #  define map_bankwidth(map) 2                    
 37 #  define map_bankwidth_is_large(map) (0)         
 38 #  define map_words(map) (1)                      
 39 # endif                                           
 40 #define map_bankwidth_is_2(map) (map_bankwidth    
 41 #undef MAX_MAP_BANKWIDTH                          
 42 #define MAX_MAP_BANKWIDTH 2                       
 43 #else                                             
 44 #define map_bankwidth_is_2(map) (0)               
 45 #endif                                            
 46                                                   
 47 #ifdef CONFIG_MTD_MAP_BANK_WIDTH_4                
 48 # ifdef map_bankwidth                             
 49 #  undef map_bankwidth                            
 50 #  define map_bankwidth(map) ((map)->bankwidth    
 51 # else                                            
 52 #  define map_bankwidth(map) 4                    
 53 #  define map_bankwidth_is_large(map) (0)         
 54 #  define map_words(map) (1)                      
 55 # endif                                           
 56 #define map_bankwidth_is_4(map) (map_bankwidth    
 57 #undef MAX_MAP_BANKWIDTH                          
 58 #define MAX_MAP_BANKWIDTH 4                       
 59 #else                                             
 60 #define map_bankwidth_is_4(map) (0)               
 61 #endif                                            
 62                                                   
 63 /* ensure we never evaluate anything shorted t    
 64  * to zero, and ensure we'll never miss the en    
 65                                                   
 66 #define map_calc_words(map) ((map_bankwidth(ma    
 67                                                   
 68 #ifdef CONFIG_MTD_MAP_BANK_WIDTH_8                
 69 # ifdef map_bankwidth                             
 70 #  undef map_bankwidth                            
 71 #  define map_bankwidth(map) ((map)->bankwidth    
 72 #  if BITS_PER_LONG < 64                          
 73 #   undef map_bankwidth_is_large                  
 74 #   define map_bankwidth_is_large(map) (map_ba    
 75 #   undef map_words                               
 76 #   define map_words(map) map_calc_words(map)     
 77 #  endif                                          
 78 # else                                            
 79 #  define map_bankwidth(map) 8                    
 80 #  define map_bankwidth_is_large(map) (BITS_PE    
 81 #  define map_words(map) map_calc_words(map)      
 82 # endif                                           
 83 #define map_bankwidth_is_8(map) (map_bankwidth    
 84 #undef MAX_MAP_BANKWIDTH                          
 85 #define MAX_MAP_BANKWIDTH 8                       
 86 #else                                             
 87 #define map_bankwidth_is_8(map) (0)               
 88 #endif                                            
 89                                                   
 90 #ifdef CONFIG_MTD_MAP_BANK_WIDTH_16               
 91 # ifdef map_bankwidth                             
 92 #  undef map_bankwidth                            
 93 #  define map_bankwidth(map) ((map)->bankwidth    
 94 #  undef map_bankwidth_is_large                   
 95 #  define map_bankwidth_is_large(map) (map_ban    
 96 #  undef map_words                                
 97 #  define map_words(map) map_calc_words(map)      
 98 # else                                            
 99 #  define map_bankwidth(map) 16                   
100 #  define map_bankwidth_is_large(map) (1)         
101 #  define map_words(map) map_calc_words(map)      
102 # endif                                           
103 #define map_bankwidth_is_16(map) (map_bankwidt    
104 #undef MAX_MAP_BANKWIDTH                          
105 #define MAX_MAP_BANKWIDTH 16                      
106 #else                                             
107 #define map_bankwidth_is_16(map) (0)              
108 #endif                                            
109                                                   
110 #ifdef CONFIG_MTD_MAP_BANK_WIDTH_32               
111 /* always use indirect access for 256-bit to p    
112 # undef map_bankwidth                             
113 # define map_bankwidth(map) ((map)->bankwidth)    
114 # undef map_bankwidth_is_large                    
115 # define map_bankwidth_is_large(map) (map_bank    
116 # undef map_words                                 
117 # define map_words(map) map_calc_words(map)       
118 #define map_bankwidth_is_32(map) (map_bankwidt    
119 #undef MAX_MAP_BANKWIDTH                          
120 #define MAX_MAP_BANKWIDTH 32                      
121 #else                                             
122 #define map_bankwidth_is_32(map) (0)              
123 #endif                                            
124                                                   
125 #ifndef map_bankwidth                             
126 #ifdef CONFIG_MTD                                 
127 #warning "No CONFIG_MTD_MAP_BANK_WIDTH_xx sele    
128 #endif                                            
129 static inline int map_bankwidth(void *map)        
130 {                                                 
131         BUG();                                    
132         return 0;                                 
133 }                                                 
134 #define map_bankwidth_is_large(map) (0)           
135 #define map_words(map) (0)                        
136 #define MAX_MAP_BANKWIDTH 1                       
137 #endif                                            
138                                                   
139 static inline int map_bankwidth_supported(int     
140 {                                                 
141         switch (w) {                              
142 #ifdef CONFIG_MTD_MAP_BANK_WIDTH_1                
143         case 1:                                   
144 #endif                                            
145 #ifdef CONFIG_MTD_MAP_BANK_WIDTH_2                
146         case 2:                                   
147 #endif                                            
148 #ifdef CONFIG_MTD_MAP_BANK_WIDTH_4                
149         case 4:                                   
150 #endif                                            
151 #ifdef CONFIG_MTD_MAP_BANK_WIDTH_8                
152         case 8:                                   
153 #endif                                            
154 #ifdef CONFIG_MTD_MAP_BANK_WIDTH_16               
155         case 16:                                  
156 #endif                                            
157 #ifdef CONFIG_MTD_MAP_BANK_WIDTH_32               
158         case 32:                                  
159 #endif                                            
160                 return 1;                         
161                                                   
162         default:                                  
163                 return 0;                         
164         }                                         
165 }                                                 
166                                                   
167 #define MAX_MAP_LONGS (((MAX_MAP_BANKWIDTH * 8    
168                                                   
169 typedef union {                                   
170         unsigned long x[MAX_MAP_LONGS];           
171 } map_word;                                       
172                                                   
173 /* The map stuff is very simple. You fill in y    
174    a handful of routines for accessing the dev    
175    paging etc. correctly if your device needs     
176    to a chip probe routine -- either JEDEC or     
177    do_map_probe(). If a chip is recognised, th    
178    appropriate chip driver (if present) and re    
179    At which point, you fill in the mtd->module    
180    address, and register it with the MTD core     
181    it and register the partitions instead, or     
182    use; whatever.                                 
183                                                   
184    The mtd->priv field will point to the struc    
185    private data required by the chip driver is    
186    mtd->priv->fldrv_priv field. This allows th    
187    the destructor function map->fldrv_destroy(    
188    of living.                                     
189 */                                                
190                                                   
191 struct map_info {                                 
192         const char *name;                         
193         unsigned long size;                       
194         resource_size_t phys;                     
195 #define NO_XIP (-1UL)                             
196                                                   
197         void __iomem *virt;                       
198         void *cached;                             
199                                                   
200         int swap; /* this mapping's byte-swapp    
201         int bankwidth; /* in octets. This isn'    
202                        of actual bus cycles --    
203                       in bytes, before you are    
204                       */                          
205                                                   
206 #ifdef CONFIG_MTD_COMPLEX_MAPPINGS                
207         map_word (*read)(struct map_info *, un    
208         void (*copy_from)(struct map_info *, v    
209                                                   
210         void (*write)(struct map_info *, const    
211         void (*copy_to)(struct map_info *, uns    
212                                                   
213         /* We can perhaps put in 'point' and '    
214            want to enable XIP for non-linear m    
215 #endif                                            
216         /* It's possible for the map driver to    
217            copy_from implementation (and _only    
218            when the chip driver knows some fla    
219            it will signal it to the map driver    
220            the map driver invalidate the corre    
221            If there is no cache to care about     
222         void (*inval_cache)(struct map_info *,    
223                                                   
224         /* This will be called with 1 as param    
225          * needs VPP, and called with 0 when t    
226          * core maintains a reference counter,    
227          * global resource applying to all map    
228          */                                       
229         void (*set_vpp)(struct map_info *, int    
230                                                   
231         unsigned long pfow_base;                  
232         unsigned long map_priv_1;                 
233         unsigned long map_priv_2;                 
234         struct device_node *device_node;          
235         void *fldrv_priv;                         
236         struct mtd_chip_driver *fldrv;            
237 };                                                
238                                                   
239 struct mtd_chip_driver {                          
240         struct mtd_info *(*probe)(struct map_i    
241         void (*destroy)(struct mtd_info *);       
242         struct module *module;                    
243         char *name;                               
244         struct list_head list;                    
245 };                                                
246                                                   
247 void register_mtd_chip_driver(struct mtd_chip_    
248 void unregister_mtd_chip_driver(struct mtd_chi    
249                                                   
250 struct mtd_info *do_map_probe(const char *name    
251 void map_destroy(struct mtd_info *mtd);           
252                                                   
253 #define ENABLE_VPP(map) do { if (map->set_vpp)    
254 #define DISABLE_VPP(map) do { if (map->set_vpp    
255                                                   
256 #define INVALIDATE_CACHED_RANGE(map, from, siz    
257         do { if (map->inval_cache) map->inval_    
258                                                   
259 #define map_word_equal(map, val1, val2)           
260 ({                                                
261         int i, ret = 1;                           
262         for (i = 0; i < map_words(map); i++)      
263                 if ((val1).x[i] != (val2).x[i]    
264                         ret = 0;                  
265                         break;                    
266                 }                                 
267         ret;                                      
268 })                                                
269                                                   
270 #define map_word_and(map, val1, val2)             
271 ({                                                
272         map_word r;                               
273         int i;                                    
274         for (i = 0; i < map_words(map); i++)      
275                 r.x[i] = (val1).x[i] & (val2).    
276         r;                                        
277 })                                                
278                                                   
279 #define map_word_clr(map, val1, val2)             
280 ({                                                
281         map_word r;                               
282         int i;                                    
283         for (i = 0; i < map_words(map); i++)      
284                 r.x[i] = (val1).x[i] & ~(val2)    
285         r;                                        
286 })                                                
287                                                   
288 #define map_word_or(map, val1, val2)              
289 ({                                                
290         map_word r;                               
291         int i;                                    
292         for (i = 0; i < map_words(map); i++)      
293                 r.x[i] = (val1).x[i] | (val2).    
294         r;                                        
295 })                                                
296                                                   
297 #define map_word_andequal(map, val1, val2, val    
298 ({                                                
299         int i, ret = 1;                           
300         for (i = 0; i < map_words(map); i++) {    
301                 if (((val1).x[i] & (val2).x[i]    
302                         ret = 0;                  
303                         break;                    
304                 }                                 
305         }                                         
306         ret;                                      
307 })                                                
308                                                   
309 #define map_word_bitsset(map, val1, val2)         
310 ({                                                
311         int i, ret = 0;                           
312         for (i = 0; i < map_words(map); i++) {    
313                 if ((val1).x[i] & (val2).x[i])    
314                         ret = 1;                  
315                         break;                    
316                 }                                 
317         }                                         
318         ret;                                      
319 })                                                
320                                                   
321 static inline map_word map_word_load(struct ma    
322 {                                                 
323         map_word r;                               
324                                                   
325         if (map_bankwidth_is_1(map))              
326                 r.x[0] = *(unsigned char *)ptr    
327         else if (map_bankwidth_is_2(map))         
328                 r.x[0] = get_unaligned((uint16    
329         else if (map_bankwidth_is_4(map))         
330                 r.x[0] = get_unaligned((uint32    
331 #if BITS_PER_LONG >= 64                           
332         else if (map_bankwidth_is_8(map))         
333                 r.x[0] = get_unaligned((uint64    
334 #endif                                            
335         else if (map_bankwidth_is_large(map))     
336                 memcpy(r.x, ptr, map->bankwidt    
337         else                                      
338                 BUG();                            
339                                                   
340         return r;                                 
341 }                                                 
342                                                   
343 static inline map_word map_word_load_partial(s    
344 {                                                 
345         int i;                                    
346                                                   
347         if (map_bankwidth_is_large(map)) {        
348                 char *dest = (char *)&orig;       
349                                                   
350                 memcpy(dest+start, buf, len);     
351         } else {                                  
352                 for (i = start; i < start+len;    
353                         int bitpos;               
354                                                   
355 #ifdef __LITTLE_ENDIAN                            
356                         bitpos = i * 8;           
357 #else /* __BIG_ENDIAN */                          
358                         bitpos = (map_bankwidt    
359 #endif                                            
360                         orig.x[0] &= ~(0xff <<    
361                         orig.x[0] |= (unsigned    
362                 }                                 
363         }                                         
364         return orig;                              
365 }                                                 
366                                                   
367 #if BITS_PER_LONG < 64                            
368 #define MAP_FF_LIMIT 4                            
369 #else                                             
370 #define MAP_FF_LIMIT 8                            
371 #endif                                            
372                                                   
373 static inline map_word map_word_ff(struct map_    
374 {                                                 
375         map_word r;                               
376         int i;                                    
377                                                   
378         if (map_bankwidth(map) < MAP_FF_LIMIT)    
379                 int bw = 8 * map_bankwidth(map    
380                                                   
381                 r.x[0] = (1UL << bw) - 1;         
382         } else {                                  
383                 for (i = 0; i < map_words(map)    
384                         r.x[i] = ~0UL;            
385         }                                         
386         return r;                                 
387 }                                                 
388                                                   
389 static inline map_word inline_map_read(struct     
390 {                                                 
391         map_word r;                               
392                                                   
393         if (map_bankwidth_is_1(map))              
394                 r.x[0] = __raw_readb(map->virt    
395         else if (map_bankwidth_is_2(map))         
396                 r.x[0] = __raw_readw(map->virt    
397         else if (map_bankwidth_is_4(map))         
398                 r.x[0] = __raw_readl(map->virt    
399 #if BITS_PER_LONG >= 64                           
400         else if (map_bankwidth_is_8(map))         
401                 r.x[0] = __raw_readq(map->virt    
402 #endif                                            
403         else if (map_bankwidth_is_large(map))     
404                 memcpy_fromio(r.x, map->virt +    
405         else                                      
406                 BUG();                            
407                                                   
408         return r;                                 
409 }                                                 
410                                                   
411 static inline void inline_map_write(struct map    
412 {                                                 
413         if (map_bankwidth_is_1(map))              
414                 __raw_writeb(datum.x[0], map->    
415         else if (map_bankwidth_is_2(map))         
416                 __raw_writew(datum.x[0], map->    
417         else if (map_bankwidth_is_4(map))         
418                 __raw_writel(datum.x[0], map->    
419 #if BITS_PER_LONG >= 64                           
420         else if (map_bankwidth_is_8(map))         
421                 __raw_writeq(datum.x[0], map->    
422 #endif                                            
423         else if (map_bankwidth_is_large(map))     
424                 memcpy_toio(map->virt+ofs, dat    
425         else                                      
426                 BUG();                            
427         mb();                                     
428 }                                                 
429                                                   
430 static inline void inline_map_copy_from(struct    
431 {                                                 
432         if (map->cached)                          
433                 memcpy(to, (char *)map->cached    
434         else                                      
435                 memcpy_fromio(to, map->virt +     
436 }                                                 
437                                                   
438 static inline void inline_map_copy_to(struct m    
439 {                                                 
440         memcpy_toio(map->virt + to, from, len)    
441 }                                                 
442                                                   
443 #ifdef CONFIG_MTD_COMPLEX_MAPPINGS                
444 #define map_read(map, ofs) (map)->read(map, of    
445 #define map_copy_from(map, to, from, len) (map    
446 #define map_write(map, datum, ofs) (map)->writ    
447 #define map_copy_to(map, to, from, len) (map)-    
448                                                   
449 extern void simple_map_init(struct map_info *)    
450 #define map_is_linear(map) (map->phys != NO_XI    
451                                                   
452 #else                                             
453 #define map_read(map, ofs) inline_map_read(map    
454 #define map_copy_from(map, to, from, len) inli    
455 #define map_write(map, datum, ofs) inline_map_    
456 #define map_copy_to(map, to, from, len) inline    
457                                                   
458                                                   
459 #define simple_map_init(map) BUG_ON(!map_bankw    
460 #define map_is_linear(map) ({ (void)(map); 1;     
461                                                   
462 #endif /* !CONFIG_MTD_COMPLEX_MAPPINGS */         
463                                                   
464 #endif /* __LINUX_MTD_MAP_H__ */                  
465                                                   

~ [ 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