/* * Copyright (c) 2018 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the * above copyright notice and this permission notice appear in all * copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifndef _CE_SRC_DESC_H_ #define _CE_SRC_DESC_H_ #if !defined(__ASSEMBLER__) #endif // ################ START SUMMARY ################# // // Dword Fields // 0 src_buffer_low[31:0] // 1 src_buffer_high[7:0], toeplitz_en[8], src_swap[9], dest_swap[10], gather[11], ce_res_0[15:12], length[31:16] // 2 fw_metadata[15:0], ce_res_1[31:16] // 3 ce_res_2[19:0], ring_id[27:20], looping_count[31:28] // // ################ END SUMMARY ################# #define NUM_OF_DWORDS_CE_SRC_DESC 4 struct ce_src_desc { uint32_t src_buffer_low : 32; //[31:0] uint32_t src_buffer_high : 8, //[7:0] toeplitz_en : 1, //[8] src_swap : 1, //[9] dest_swap : 1, //[10] gather : 1, //[11] ce_res_0 : 4, //[15:12] length : 16; //[31:16] uint32_t fw_metadata : 16, //[15:0] ce_res_1 : 16; //[31:16] uint32_t ce_res_2 : 20, //[19:0] ring_id : 8, //[27:20] looping_count : 4; //[31:28] }; /* src_buffer_low LSB 32 bits of the 40 Bit Pointer to the source buffer src_buffer_high MSB 8 bits of the 40 Bit Pointer to the source buffer toeplitz_en Enable generation of 32-bit Toeplitz-LFSR hash for the data transfer In case of gather field in first source ring entry of the gather copy cycle in taken into account. src_swap Treats source memory organization as big-endian. For each dword read (4 bytes), the byte 0 is swapped with byte 3 and byte 1 is swapped with byte 2. In case of gather field in first source ring entry of the gather copy cycle in taken into account. dest_swap Treats destination memory organization as big-endian. For each dword write (4 bytes), the byte 0 is swapped with byte 3 and byte 1 is swapped with byte 2. In case of gather field in first source ring entry of the gather copy cycle in taken into account. gather Enables gather of multiple copy engine source descriptors to one destination. ce_res_0 Reserved length Length of the buffer in units of octets of the current descriptor fw_metadata Meta data used by FW In case of gather field in first source ring entry of the gather copy cycle in taken into account. ce_res_1 Reserved ce_res_2 Reserved ring_id The buffer pointer ring ID. 0 refers to the IDLE ring 1 - N refers to other rings Helps with debugging when dumping ring contents. looping_count A count value that indicates the number of times the producer of entries into the Ring has looped around the ring. At initialization time, this value is set to 0. On the first loop, this value is set to 1. After the max value is reached allowed by the number of bits for this field, the count value continues with 0 again. In case SW is the consumer of the ring entries, it can use this field to figure out up to where the producer of entries has created new entries. This eliminates the need to check where the head pointer' of the ring is located once the SW starts processing an interrupt indicating that new entries have been put into this ring... Also note that SW if it wants only needs to look at the LSB bit of this count value. */ /* Description CE_SRC_DESC_0_SRC_BUFFER_LOW LSB 32 bits of the 40 Bit Pointer to the source buffer */ #define CE_SRC_DESC_0_SRC_BUFFER_LOW_OFFSET 0x00000000 #define CE_SRC_DESC_0_SRC_BUFFER_LOW_LSB 0 #define CE_SRC_DESC_0_SRC_BUFFER_LOW_MASK 0xffffffff /* Description CE_SRC_DESC_1_SRC_BUFFER_HIGH MSB 8 bits of the 40 Bit Pointer to the source buffer */ #define CE_SRC_DESC_1_SRC_BUFFER_HIGH_OFFSET 0x00000004 #define CE_SRC_DESC_1_SRC_BUFFER_HIGH_LSB 0 #define CE_SRC_DESC_1_SRC_BUFFER_HIGH_MASK 0x000000ff /* Description CE_SRC_DESC_1_TOEPLITZ_EN Enable generation of 32-bit Toeplitz-LFSR hash for the data transfer In case of gather field in first source ring entry of the gather copy cycle in taken into account. */ #define CE_SRC_DESC_1_TOEPLITZ_EN_OFFSET 0x00000004 #define CE_SRC_DESC_1_TOEPLITZ_EN_LSB 8 #define CE_SRC_DESC_1_TOEPLITZ_EN_MASK 0x00000100 /* Description CE_SRC_DESC_1_SRC_SWAP Treats source memory organization as big-endian. For each dword read (4 bytes), the byte 0 is swapped with byte 3 and byte 1 is swapped with byte 2. In case of gather field in first source ring entry of the gather copy cycle in taken into account. */ #define CE_SRC_DESC_1_SRC_SWAP_OFFSET 0x00000004 #define CE_SRC_DESC_1_SRC_SWAP_LSB 9 #define CE_SRC_DESC_1_SRC_SWAP_MASK 0x00000200 /* Description CE_SRC_DESC_1_DEST_SWAP Treats destination memory organization as big-endian. For each dword write (4 bytes), the byte 0 is swapped with byte 3 and byte 1 is swapped with byte 2. In case of gather field in first source ring entry of the gather copy cycle in taken into account. */ #define CE_SRC_DESC_1_DEST_SWAP_OFFSET 0x00000004 #define CE_SRC_DESC_1_DEST_SWAP_LSB 10 #define CE_SRC_DESC_1_DEST_SWAP_MASK 0x00000400 /* Description CE_SRC_DESC_1_GATHER Enables gather of multiple copy engine source descriptors to one destination. */ #define CE_SRC_DESC_1_GATHER_OFFSET 0x00000004 #define CE_SRC_DESC_1_GATHER_LSB 11 #define CE_SRC_DESC_1_GATHER_MASK 0x00000800 /* Description CE_SRC_DESC_1_CE_RES_0 Reserved */ #define CE_SRC_DESC_1_CE_RES_0_OFFSET 0x00000004 #define CE_SRC_DESC_1_CE_RES_0_LSB 12 #define CE_SRC_DESC_1_CE_RES_0_MASK 0x0000f000 /* Description CE_SRC_DESC_1_LENGTH Length of the buffer in units of octets of the current descriptor */ #define CE_SRC_DESC_1_LENGTH_OFFSET 0x00000004 #define CE_SRC_DESC_1_LENGTH_LSB 16 #define CE_SRC_DESC_1_LENGTH_MASK 0xffff0000 /* Description CE_SRC_DESC_2_FW_METADATA Meta data used by FW In case of gather field in first source ring entry of the gather copy cycle in taken into account. */ #define CE_SRC_DESC_2_FW_METADATA_OFFSET 0x00000008 #define CE_SRC_DESC_2_FW_METADATA_LSB 0 #define CE_SRC_DESC_2_FW_METADATA_MASK 0x0000ffff /* Description CE_SRC_DESC_2_CE_RES_1 Reserved */ #define CE_SRC_DESC_2_CE_RES_1_OFFSET 0x00000008 #define CE_SRC_DESC_2_CE_RES_1_LSB 16 #define CE_SRC_DESC_2_CE_RES_1_MASK 0xffff0000 /* Description CE_SRC_DESC_3_CE_RES_2 Reserved */ #define CE_SRC_DESC_3_CE_RES_2_OFFSET 0x0000000c #define CE_SRC_DESC_3_CE_RES_2_LSB 0 #define CE_SRC_DESC_3_CE_RES_2_MASK 0x000fffff /* Description CE_SRC_DESC_3_RING_ID The buffer pointer ring ID. 0 refers to the IDLE ring 1 - N refers to other rings Helps with debugging when dumping ring contents. */ #define CE_SRC_DESC_3_RING_ID_OFFSET 0x0000000c #define CE_SRC_DESC_3_RING_ID_LSB 20 #define CE_SRC_DESC_3_RING_ID_MASK 0x0ff00000 /* Description CE_SRC_DESC_3_LOOPING_COUNT A count value that indicates the number of times the producer of entries into the Ring has looped around the ring. At initialization time, this value is set to 0. On the first loop, this value is set to 1. After the max value is reached allowed by the number of bits for this field, the count value continues with 0 again. In case SW is the consumer of the ring entries, it can use this field to figure out up to where the producer of entries has created new entries. This eliminates the need to check where the head pointer' of the ring is located once the SW starts processing an interrupt indicating that new entries have been put into this ring... Also note that SW if it wants only needs to look at the LSB bit of this count value. */ #define CE_SRC_DESC_3_LOOPING_COUNT_OFFSET 0x0000000c #define CE_SRC_DESC_3_LOOPING_COUNT_LSB 28 #define CE_SRC_DESC_3_LOOPING_COUNT_MASK 0xf0000000 #endif // _CE_SRC_DESC_H_