1 /* 2 * Handling of a sram zone for bestcomm 3 * 4 * 5 * Copyright (C) 2007 Sylvain Munaut <tnt@246tNt.com> 6 * 7 * This file is licensed under the terms of the GNU General Public License 8 * version 2. This program is licensed "as is" without any warranty of any 9 * kind, whether express or implied. 10 */ 11 12 #ifndef __BESTCOMM_SRAM_H__ 13 #define __BESTCOMM_SRAM_H__ 14 15 #include <asm/rheap.h> 16 #include <asm/mmu.h> 17 #include <linux/spinlock.h> 18 19 20 /* Structure used internally */ 21 /* The internals are here for the inline functions 22 * sake, certainly not for the user to mess with ! 23 */ 24 struct bcom_sram { 25 phys_addr_t base_phys; 26 void *base_virt; 27 unsigned int size; 28 rh_info_t *rh; 29 spinlock_t lock; 30 }; 31 32 extern struct bcom_sram *bcom_sram; 33 34 35 /* Public API */ 36 extern int bcom_sram_init(struct device_node *sram_node, char *owner); 37 extern void bcom_sram_cleanup(void); 38 39 extern void* bcom_sram_alloc(int size, int align, phys_addr_t *phys); 40 extern void bcom_sram_free(void *ptr); 41 bcom_sram_va2pa(void * va)42static inline phys_addr_t bcom_sram_va2pa(void *va) { 43 return bcom_sram->base_phys + 44 (unsigned long)(va - bcom_sram->base_virt); 45 } 46 bcom_sram_pa2va(phys_addr_t pa)47static inline void *bcom_sram_pa2va(phys_addr_t pa) { 48 return bcom_sram->base_virt + 49 (unsigned long)(pa - bcom_sram->base_phys); 50 } 51 52 53 #endif /* __BESTCOMM_SRAM_H__ */ 54 55