162306a36Sopenharmony_ci/* 262306a36Sopenharmony_ci * Handling of a sram zone for bestcomm 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2007 Sylvain Munaut <tnt@246tNt.com> 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * This file is licensed under the terms of the GNU General Public License 862306a36Sopenharmony_ci * version 2. This program is licensed "as is" without any warranty of any 962306a36Sopenharmony_ci * kind, whether express or implied. 1062306a36Sopenharmony_ci */ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#ifndef __BESTCOMM_SRAM_H__ 1362306a36Sopenharmony_ci#define __BESTCOMM_SRAM_H__ 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#include <asm/rheap.h> 1662306a36Sopenharmony_ci#include <asm/mmu.h> 1762306a36Sopenharmony_ci#include <linux/spinlock.h> 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci/* Structure used internally */ 2162306a36Sopenharmony_ci /* The internals are here for the inline functions 2262306a36Sopenharmony_ci * sake, certainly not for the user to mess with ! 2362306a36Sopenharmony_ci */ 2462306a36Sopenharmony_cistruct bcom_sram { 2562306a36Sopenharmony_ci phys_addr_t base_phys; 2662306a36Sopenharmony_ci void *base_virt; 2762306a36Sopenharmony_ci unsigned int size; 2862306a36Sopenharmony_ci rh_info_t *rh; 2962306a36Sopenharmony_ci spinlock_t lock; 3062306a36Sopenharmony_ci}; 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ciextern struct bcom_sram *bcom_sram; 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci/* Public API */ 3662306a36Sopenharmony_ciextern int bcom_sram_init(struct device_node *sram_node, char *owner); 3762306a36Sopenharmony_ciextern void bcom_sram_cleanup(void); 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ciextern void* bcom_sram_alloc(int size, int align, phys_addr_t *phys); 4062306a36Sopenharmony_ciextern void bcom_sram_free(void *ptr); 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_cistatic inline phys_addr_t bcom_sram_va2pa(void *va) { 4362306a36Sopenharmony_ci return bcom_sram->base_phys + 4462306a36Sopenharmony_ci (unsigned long)(va - bcom_sram->base_virt); 4562306a36Sopenharmony_ci} 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_cistatic inline void *bcom_sram_pa2va(phys_addr_t pa) { 4862306a36Sopenharmony_ci return bcom_sram->base_virt + 4962306a36Sopenharmony_ci (unsigned long)(pa - bcom_sram->base_phys); 5062306a36Sopenharmony_ci} 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci#endif /* __BESTCOMM_SRAM_H__ */ 5462306a36Sopenharmony_ci 55