1*8585bdadSSean Anderson /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-or-later */ 2e81edc38SIgal Liberman /* 3e81edc38SIgal Liberman * Copyright 2008 - 2015 Freescale Semiconductor Inc. 4e81edc38SIgal Liberman */ 5e81edc38SIgal Liberman 6e81edc38SIgal Liberman #ifndef __FM_SP_H 7e81edc38SIgal Liberman #define __FM_SP_H 8e81edc38SIgal Liberman 9e81edc38SIgal Liberman #include "fman.h" 10e81edc38SIgal Liberman #include <linux/types.h> 11e81edc38SIgal Liberman 12e81edc38SIgal Liberman #define ILLEGAL_BASE (~0) 13e81edc38SIgal Liberman 14e81edc38SIgal Liberman /* defaults */ 15e81edc38SIgal Liberman #define DFLT_FM_SP_BUFFER_PREFIX_CONTEXT_DATA_ALIGN 64 16e81edc38SIgal Liberman 17e81edc38SIgal Liberman /* Registers bit fields */ 18e81edc38SIgal Liberman #define FMAN_SP_EXT_BUF_POOL_EN_COUNTER 0x40000000 19e81edc38SIgal Liberman #define FMAN_SP_EXT_BUF_POOL_VALID 0x80000000 20e81edc38SIgal Liberman #define FMAN_SP_EXT_BUF_POOL_BACKUP 0x20000000 21e81edc38SIgal Liberman #define FMAN_SP_DMA_ATTR_WRITE_OPTIMIZE 0x00100000 22e81edc38SIgal Liberman #define FMAN_SP_SG_DISABLE 0x80000000 23e81edc38SIgal Liberman 24e81edc38SIgal Liberman /* shifts */ 25e81edc38SIgal Liberman #define FMAN_SP_EXT_BUF_MARG_START_SHIFT 16 26e81edc38SIgal Liberman #define FMAN_SP_DMA_ATTR_SWP_SHIFT 30 27e81edc38SIgal Liberman #define FMAN_SP_IC_TO_EXT_SHIFT 16 28e81edc38SIgal Liberman #define FMAN_SP_IC_FROM_INT_SHIFT 8 29e81edc38SIgal Liberman 30e81edc38SIgal Liberman /* structure for defining internal context copying */ 31e81edc38SIgal Liberman struct fman_sp_int_context_data_copy { 32e81edc38SIgal Liberman /* < Offset in External buffer to which internal 33e81edc38SIgal Liberman * context is copied to (Rx) or taken from (Tx, Op). 34e81edc38SIgal Liberman */ 35e81edc38SIgal Liberman u16 ext_buf_offset; 36e81edc38SIgal Liberman /* Offset within internal context to copy from 37e81edc38SIgal Liberman * (Rx) or to copy to (Tx, Op). 38e81edc38SIgal Liberman */ 39e81edc38SIgal Liberman u8 int_context_offset; 40e81edc38SIgal Liberman /* Internal offset size to be copied */ 41e81edc38SIgal Liberman u16 size; 42e81edc38SIgal Liberman }; 43e81edc38SIgal Liberman 44e81edc38SIgal Liberman /* struct for defining external buffer margins */ 45e81edc38SIgal Liberman struct fman_sp_buf_margins { 46e81edc38SIgal Liberman /* Number of bytes to be left at the beginning 47e81edc38SIgal Liberman * of the external buffer (must be divisible by 16) 48e81edc38SIgal Liberman */ 49e81edc38SIgal Liberman u16 start_margins; 50e81edc38SIgal Liberman /* number of bytes to be left at the end 51e81edc38SIgal Liberman * of the external buffer(must be divisible by 16) 52e81edc38SIgal Liberman */ 53e81edc38SIgal Liberman u16 end_margins; 54e81edc38SIgal Liberman }; 55e81edc38SIgal Liberman 56e81edc38SIgal Liberman struct fman_sp_buffer_offsets { 57e81edc38SIgal Liberman u32 data_offset; 58e81edc38SIgal Liberman u32 prs_result_offset; 59e81edc38SIgal Liberman u32 time_stamp_offset; 60e81edc38SIgal Liberman u32 hash_result_offset; 61e81edc38SIgal Liberman }; 62e81edc38SIgal Liberman 63e81edc38SIgal Liberman int fman_sp_build_buffer_struct(struct fman_sp_int_context_data_copy 64e81edc38SIgal Liberman *int_context_data_copy, 65e81edc38SIgal Liberman struct fman_buffer_prefix_content 66e81edc38SIgal Liberman *buffer_prefix_content, 67e81edc38SIgal Liberman struct fman_sp_buf_margins *buf_margins, 68e81edc38SIgal Liberman struct fman_sp_buffer_offsets 69e81edc38SIgal Liberman *buffer_offsets, 70e81edc38SIgal Liberman u8 *internal_buf_offset); 71e81edc38SIgal Liberman 72e81edc38SIgal Liberman void fman_sp_set_buf_pools_in_asc_order_of_buf_sizes(struct fman_ext_pools 73e81edc38SIgal Liberman *fm_ext_pools, 74e81edc38SIgal Liberman u8 *ordered_array, 75e81edc38SIgal Liberman u16 *sizes_array); 76e81edc38SIgal Liberman 77e81edc38SIgal Liberman #endif /* __FM_SP_H */ 78