/*
 * Copyright (c) 2019 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.
 */

//
// DO NOT EDIT!  This file is automatically generated
//               These definitions are tied to a particular hardware layout


#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

			<legal all>

src_buffer_high

			MSB 8 bits of the 40 Bit Pointer to the source buffer

			<legal all>

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.

			<legal all>

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.

			<legal all>

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.

			<legal all>

gather

			Enables gather of multiple copy engine source
			descriptors to one destination.

			<legal all>

ce_res_0

			Reserved

			<legal all>

length

			Length of the buffer in units of octets of the current
			descriptor

			<legal all>

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.

			<legal all>

ce_res_1

			Reserved

			<legal all>

ce_res_2

			Reserved

			<legal all>

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.

			<legal all>

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.

			<legal all>
*/


/* Description		CE_SRC_DESC_0_SRC_BUFFER_LOW

			LSB 32 bits of the 40 Bit Pointer to the source buffer

			<legal all>
*/
#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

			<legal all>
*/
#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.

			<legal all>
*/
#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.

			<legal all>
*/
#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.

			<legal all>
*/
#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.

			<legal all>
*/
#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

			<legal all>
*/
#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

			<legal all>
*/
#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.

			<legal all>
*/
#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

			<legal all>
*/
#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

			<legal all>
*/
#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.

			<legal all>
*/
#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.

			<legal all>
*/
#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_
