1f5fbb83fSMauro Carvalho Chehab /* SPDX-License-Identifier: GPL-2.0 */ 29d4fa1a1SMauro Carvalho Chehab /* 39d4fa1a1SMauro Carvalho Chehab * Support for Medifield PNW Camera Imaging ISP subsystem. 49d4fa1a1SMauro Carvalho Chehab * 59d4fa1a1SMauro Carvalho Chehab * Copyright (c) 2010 Intel Corporation. All Rights Reserved. 69d4fa1a1SMauro Carvalho Chehab * 79d4fa1a1SMauro Carvalho Chehab * Copyright (c) 2010 Silicon Hive www.siliconhive.com. 89d4fa1a1SMauro Carvalho Chehab * 99d4fa1a1SMauro Carvalho Chehab * This program is free software; you can redistribute it and/or 109d4fa1a1SMauro Carvalho Chehab * modify it under the terms of the GNU General Public License version 119d4fa1a1SMauro Carvalho Chehab * 2 as published by the Free Software Foundation. 129d4fa1a1SMauro Carvalho Chehab * 139d4fa1a1SMauro Carvalho Chehab * This program is distributed in the hope that it will be useful, 149d4fa1a1SMauro Carvalho Chehab * but WITHOUT ANY WARRANTY; without even the implied warranty of 159d4fa1a1SMauro Carvalho Chehab * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 169d4fa1a1SMauro Carvalho Chehab * GNU General Public License for more details. 179d4fa1a1SMauro Carvalho Chehab * 189d4fa1a1SMauro Carvalho Chehab * 199d4fa1a1SMauro Carvalho Chehab */ 209d4fa1a1SMauro Carvalho Chehab 219d4fa1a1SMauro Carvalho Chehab #ifndef __HMM_H__ 229d4fa1a1SMauro Carvalho Chehab #define __HMM_H__ 239d4fa1a1SMauro Carvalho Chehab 249d4fa1a1SMauro Carvalho Chehab #include <linux/kernel.h> 259d4fa1a1SMauro Carvalho Chehab #include <linux/types.h> 269d4fa1a1SMauro Carvalho Chehab #include <linux/slab.h> 279d4fa1a1SMauro Carvalho Chehab #include <linux/mm.h> 289d4fa1a1SMauro Carvalho Chehab 29c35f36b7SHans de Goede #include "hmm_common.h" 30c35f36b7SHans de Goede #include "hmm/hmm_bo.h" 319d4fa1a1SMauro Carvalho Chehab #include "ia_css_types.h" 329d4fa1a1SMauro Carvalho Chehab 3308fef4faSMauro Carvalho Chehab #define mmgr_NULL ((ia_css_ptr)0) 3408fef4faSMauro Carvalho Chehab #define mmgr_EXCEPTION ((ia_css_ptr) - 1) 3508fef4faSMauro Carvalho Chehab 369d4fa1a1SMauro Carvalho Chehab int hmm_init(void); 379d4fa1a1SMauro Carvalho Chehab void hmm_cleanup(void); 389d4fa1a1SMauro Carvalho Chehab 394cc20c9cSHans de Goede ia_css_ptr hmm_alloc(size_t bytes); 40*931d87d2SHans de Goede ia_css_ptr hmm_create_from_vmalloc_buf(size_t bytes, void *vmalloc_addr); 41*931d87d2SHans de Goede 429d4fa1a1SMauro Carvalho Chehab void hmm_free(ia_css_ptr ptr); 439d4fa1a1SMauro Carvalho Chehab int hmm_load(ia_css_ptr virt, void *data, unsigned int bytes); 449d4fa1a1SMauro Carvalho Chehab int hmm_store(ia_css_ptr virt, const void *data, unsigned int bytes); 459d4fa1a1SMauro Carvalho Chehab int hmm_set(ia_css_ptr virt, int c, unsigned int bytes); 469d4fa1a1SMauro Carvalho Chehab int hmm_flush(ia_css_ptr virt, unsigned int bytes); 479d4fa1a1SMauro Carvalho Chehab 489d4fa1a1SMauro Carvalho Chehab /* 499d4fa1a1SMauro Carvalho Chehab * get kernel memory physical address from ISP virtual address. 509d4fa1a1SMauro Carvalho Chehab */ 519d4fa1a1SMauro Carvalho Chehab phys_addr_t hmm_virt_to_phys(ia_css_ptr virt); 529d4fa1a1SMauro Carvalho Chehab 539d4fa1a1SMauro Carvalho Chehab /* 549d4fa1a1SMauro Carvalho Chehab * map ISP memory starts with virt to kernel virtual address 559d4fa1a1SMauro Carvalho Chehab * by using vmap. return NULL if failed. 569d4fa1a1SMauro Carvalho Chehab * 579d4fa1a1SMauro Carvalho Chehab * virt must be the start address of ISP memory (return by hmm_alloc), 589d4fa1a1SMauro Carvalho Chehab * do not pass any other address. 599d4fa1a1SMauro Carvalho Chehab */ 609d4fa1a1SMauro Carvalho Chehab void *hmm_vmap(ia_css_ptr virt, bool cached); 619d4fa1a1SMauro Carvalho Chehab void hmm_vunmap(ia_css_ptr virt); 629d4fa1a1SMauro Carvalho Chehab 639d4fa1a1SMauro Carvalho Chehab /* 649d4fa1a1SMauro Carvalho Chehab * flush the cache for the vmapped buffer. 659d4fa1a1SMauro Carvalho Chehab * if the buffer has not been vmapped, return directly. 669d4fa1a1SMauro Carvalho Chehab */ 679d4fa1a1SMauro Carvalho Chehab void hmm_flush_vmap(ia_css_ptr virt); 689d4fa1a1SMauro Carvalho Chehab 699d4fa1a1SMauro Carvalho Chehab /* 709d4fa1a1SMauro Carvalho Chehab * map ISP memory starts with virt to specific vma. 719d4fa1a1SMauro Carvalho Chehab * 729d4fa1a1SMauro Carvalho Chehab * used for mmap operation. 739d4fa1a1SMauro Carvalho Chehab * 749d4fa1a1SMauro Carvalho Chehab * virt must be the start address of ISP memory (return by hmm_alloc), 759d4fa1a1SMauro Carvalho Chehab * do not pass any other address. 769d4fa1a1SMauro Carvalho Chehab */ 779d4fa1a1SMauro Carvalho Chehab int hmm_mmap(struct vm_area_struct *vma, ia_css_ptr virt); 789d4fa1a1SMauro Carvalho Chehab 799d4fa1a1SMauro Carvalho Chehab extern struct hmm_bo_device bo_device; 809d4fa1a1SMauro Carvalho Chehab 819d4fa1a1SMauro Carvalho Chehab #endif 82