/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-or-later */ /* * Copyright 2008 - 2015 Freescale Semiconductor Inc. */ #ifndef __FM_SP_H #define __FM_SP_H #include "fman.h" #include <linux/types.h> #define ILLEGAL_BASE (~0) /* defaults */ #define DFLT_FM_SP_BUFFER_PREFIX_CONTEXT_DATA_ALIGN 64 /* Registers bit fields */ #define FMAN_SP_EXT_BUF_POOL_EN_COUNTER 0x40000000 #define FMAN_SP_EXT_BUF_POOL_VALID 0x80000000 #define FMAN_SP_EXT_BUF_POOL_BACKUP 0x20000000 #define FMAN_SP_DMA_ATTR_WRITE_OPTIMIZE 0x00100000 #define FMAN_SP_SG_DISABLE 0x80000000 /* shifts */ #define FMAN_SP_EXT_BUF_MARG_START_SHIFT 16 #define FMAN_SP_DMA_ATTR_SWP_SHIFT 30 #define FMAN_SP_IC_TO_EXT_SHIFT 16 #define FMAN_SP_IC_FROM_INT_SHIFT 8 /* structure for defining internal context copying */ struct fman_sp_int_context_data_copy { /* < Offset in External buffer to which internal * context is copied to (Rx) or taken from (Tx, Op). */ u16 ext_buf_offset; /* Offset within internal context to copy from * (Rx) or to copy to (Tx, Op). */ u8 int_context_offset; /* Internal offset size to be copied */ u16 size; }; /* struct for defining external buffer margins */ struct fman_sp_buf_margins { /* Number of bytes to be left at the beginning * of the external buffer (must be divisible by 16) */ u16 start_margins; /* number of bytes to be left at the end * of the external buffer(must be divisible by 16) */ u16 end_margins; }; struct fman_sp_buffer_offsets { u32 data_offset; u32 prs_result_offset; u32 time_stamp_offset; u32 hash_result_offset; }; int fman_sp_build_buffer_struct(struct fman_sp_int_context_data_copy *int_context_data_copy, struct fman_buffer_prefix_content *buffer_prefix_content, struct fman_sp_buf_margins *buf_margins, struct fman_sp_buffer_offsets *buffer_offsets, u8 *internal_buf_offset); void fman_sp_set_buf_pools_in_asc_order_of_buf_sizes(struct fman_ext_pools *fm_ext_pools, u8 *ordered_array, u16 *sizes_array); #endif /* __FM_SP_H */