1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Support for Intel Camera Imaging ISP subsystem. 4 * Copyright (c) 2015, Intel Corporation. 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms and conditions of the GNU General Public License, 8 * version 2, as published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 * more details. 14 */ 15 16 #ifndef __IA_CSS_ENV_H 17 #define __IA_CSS_ENV_H 18 19 #include <type_support.h> 20 #include <stdarg.h> /* va_list */ 21 #include "ia_css_types.h" 22 #include "ia_css_acc_types.h" 23 24 /* @file 25 * This file contains prototypes for functions that need to be provided to the 26 * CSS-API host-code by the environment in which the CSS-API code runs. 27 */ 28 29 /* Memory allocation attributes, for use in ia_css_css_mem_env. */ 30 enum ia_css_mem_attr { 31 IA_CSS_MEM_ATTR_CACHED = 1 << 0, 32 IA_CSS_MEM_ATTR_ZEROED = 1 << 1, 33 IA_CSS_MEM_ATTR_PAGEALIGN = 1 << 2, 34 IA_CSS_MEM_ATTR_CONTIGUOUS = 1 << 3, 35 }; 36 37 /* Environment with function pointers for local IA memory allocation. 38 * This provides the CSS code with environment specific functionality 39 * for memory allocation of small local buffers such as local data structures. 40 * This is never expected to allocate more than one page of memory (4K bytes). 41 */ 42 struct ia_css_cpu_mem_env { 43 void (*flush)(struct ia_css_acc_fw *fw); 44 /** Flush function to flush the cache for given accelerator. */ 45 }; 46 47 /* Environment with function pointers to access the CSS hardware. This includes 48 * registers and local memories. 49 */ 50 struct ia_css_hw_access_env { 51 void (*store_8)(hrt_address addr, uint8_t data); 52 /** Store an 8 bit value into an address in the CSS HW address space. 53 The address must be an 8 bit aligned address. */ 54 void (*store_16)(hrt_address addr, uint16_t data); 55 /** Store a 16 bit value into an address in the CSS HW address space. 56 The address must be a 16 bit aligned address. */ 57 void (*store_32)(hrt_address addr, uint32_t data); 58 /** Store a 32 bit value into an address in the CSS HW address space. 59 The address must be a 32 bit aligned address. */ 60 uint8_t (*load_8)(hrt_address addr); 61 /** Load an 8 bit value from an address in the CSS HW address 62 space. The address must be an 8 bit aligned address. */ 63 uint16_t (*load_16)(hrt_address addr); 64 /** Load a 16 bit value from an address in the CSS HW address 65 space. The address must be a 16 bit aligned address. */ 66 uint32_t (*load_32)(hrt_address addr); 67 /** Load a 32 bit value from an address in the CSS HW address 68 space. The address must be a 32 bit aligned address. */ 69 void (*store)(hrt_address addr, const void *data, uint32_t bytes); 70 /** Store a number of bytes into a byte-aligned address in the CSS HW address space. */ 71 void (*load)(hrt_address addr, void *data, uint32_t bytes); 72 /** Load a number of bytes from a byte-aligned address in the CSS HW address space. */ 73 }; 74 75 /* Environment with function pointers to print error and debug messages. 76 */ 77 struct ia_css_print_env { 78 int __printf(1, 0) (*debug_print)(const char *fmt, va_list args); 79 /** Print a debug message. */ 80 int __printf(1, 0) (*error_print)(const char *fmt, va_list args); 81 /** Print an error message.*/ 82 }; 83 84 /* Environment structure. This includes function pointers to access several 85 * features provided by the environment in which the CSS API is used. 86 * This is used to run the camera IP in multiple platforms such as Linux, 87 * Windows and several simulation environments. 88 */ 89 struct ia_css_env { 90 struct ia_css_cpu_mem_env cpu_mem_env; /** local flush. */ 91 struct ia_css_hw_access_env hw_access_env; /** CSS HW access functions */ 92 struct ia_css_print_env print_env; /** Message printing env. */ 93 }; 94 95 #endif /* __IA_CSS_ENV_H */ 96