/*
 * Copyright (c) 2020 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 _REO_FLUSH_TIMEOUT_LIST_H_
#define _REO_FLUSH_TIMEOUT_LIST_H_
#if !defined(__ASSEMBLER__)
#endif

#include "uniform_reo_cmd_header.h"

// ################ START SUMMARY #################
//
//	Dword	Fields
//	0	struct uniform_reo_cmd_header cmd_header;
//	1	ac_timout_list[1:0], reserved_1[31:2]
//	2	minimum_release_desc_count[15:0], minimum_forward_buf_count[31:16]
//	3	reserved_3a[31:0]
//	4	reserved_4a[31:0]
//	5	reserved_5a[31:0]
//	6	reserved_6a[31:0]
//	7	reserved_7a[31:0]
//	8	reserved_8a[31:0]
//
// ################ END SUMMARY #################

#define NUM_OF_DWORDS_REO_FLUSH_TIMEOUT_LIST 9

struct reo_flush_timeout_list {
    struct            uniform_reo_cmd_header                       cmd_header;
             uint32_t ac_timout_list                  :  2, //[1:0]
                      reserved_1                      : 30; //[31:2]
             uint32_t minimum_release_desc_count      : 16, //[15:0]
                      minimum_forward_buf_count       : 16; //[31:16]
             uint32_t reserved_3a                     : 32; //[31:0]
             uint32_t reserved_4a                     : 32; //[31:0]
             uint32_t reserved_5a                     : 32; //[31:0]
             uint32_t reserved_6a                     : 32; //[31:0]
             uint32_t reserved_7a                     : 32; //[31:0]
             uint32_t reserved_8a                     : 32; //[31:0]
};

/*

struct uniform_reo_cmd_header cmd_header
			
			Consumer: REO
			
			Producer: SW
			
			
			
			Details for command execution tracking purposes.

ac_timout_list
			
			Consumer: REO
			
			Producer: SW
			
			
			
			The AC_timeout list to be used for this command
			
			<legal all>

reserved_1
			
			<legal 0>

minimum_release_desc_count
			
			Consumer: REO
			
			Producer: SW
			
			
			
			The minimum number of link descriptors requested to be
			released. If set to 0, only buffer release counts seems to
			be important... When set to very high value, likely the
			entire timeout list will be exhausted before this count is
			reached or maybe this count will not get reached. REO
			however will stop here as it can not do anything else.
			
			
			
			When both this field and field Minimum_forward_buf_count
			are > 0, REO needs to meet both requirements. When both
			entries are 0 (which should be a programming error), REO
			does not need to do anything.
			
			
			
			Note that this includes counts of MPDU link Desc as well
			as MSDU link Desc. Where the count of MSDU link Desc is not
			known to REO it's approximated by deriving from MSDU count
			
			<legal all>

minimum_forward_buf_count
			
			Consumer: REO
			
			Producer: SW
			
			
			
			The minimum number of buffer descriptors requested to be
			passed on to the REO destination rings. 
			
			
			
			If set to 0, only descriptor release counts seems to be
			important... 
			
			
			
			When set to very high value, likely the entire timeout
			list will be exhausted before this count is reached or maybe
			this count will not get reached. REO however will stop here
			as it can not do anything else.
			
			
			
			Note that REO does not know the exact buffer count. This
			can be approximated by using the MSDU_COUNT
			
			<legal all>

reserved_3a
			
			<legal 0>

reserved_4a
			
			<legal 0>

reserved_5a
			
			<legal 0>

reserved_6a
			
			<legal 0>

reserved_7a
			
			<legal 0>

reserved_8a
			
			<legal 0>
*/


 /* EXTERNAL REFERENCE : struct uniform_reo_cmd_header cmd_header */ 


/* Description		REO_FLUSH_TIMEOUT_LIST_0_CMD_HEADER_REO_CMD_NUMBER
			
			Consumer: REO/SW/DEBUG
			
			Producer: SW 
			
			
			
			This number can be used by SW to track, identify and
			link the created commands with the command statusses
			
			
			
			
			
			<legal all> 
*/
#define REO_FLUSH_TIMEOUT_LIST_0_CMD_HEADER_REO_CMD_NUMBER_OFFSET    0x00000000
#define REO_FLUSH_TIMEOUT_LIST_0_CMD_HEADER_REO_CMD_NUMBER_LSB       0
#define REO_FLUSH_TIMEOUT_LIST_0_CMD_HEADER_REO_CMD_NUMBER_MASK      0x0000ffff

/* Description		REO_FLUSH_TIMEOUT_LIST_0_CMD_HEADER_REO_STATUS_REQUIRED
			
			Consumer: REO
			
			Producer: SW 
			
			
			
			<enum 0 NoStatus> REO does not need to generate a status
			TLV for the execution of this command
			
			<enum 1 StatusRequired> REO shall generate a status TLV
			for the execution of this command
			
			
			
			<legal all>
*/
#define REO_FLUSH_TIMEOUT_LIST_0_CMD_HEADER_REO_STATUS_REQUIRED_OFFSET 0x00000000
#define REO_FLUSH_TIMEOUT_LIST_0_CMD_HEADER_REO_STATUS_REQUIRED_LSB  16
#define REO_FLUSH_TIMEOUT_LIST_0_CMD_HEADER_REO_STATUS_REQUIRED_MASK 0x00010000

/* Description		REO_FLUSH_TIMEOUT_LIST_0_CMD_HEADER_RESERVED_0A
			
			<legal 0>
*/
#define REO_FLUSH_TIMEOUT_LIST_0_CMD_HEADER_RESERVED_0A_OFFSET       0x00000000
#define REO_FLUSH_TIMEOUT_LIST_0_CMD_HEADER_RESERVED_0A_LSB          17
#define REO_FLUSH_TIMEOUT_LIST_0_CMD_HEADER_RESERVED_0A_MASK         0xfffe0000

/* Description		REO_FLUSH_TIMEOUT_LIST_1_AC_TIMOUT_LIST
			
			Consumer: REO
			
			Producer: SW
			
			
			
			The AC_timeout list to be used for this command
			
			<legal all>
*/
#define REO_FLUSH_TIMEOUT_LIST_1_AC_TIMOUT_LIST_OFFSET               0x00000004
#define REO_FLUSH_TIMEOUT_LIST_1_AC_TIMOUT_LIST_LSB                  0
#define REO_FLUSH_TIMEOUT_LIST_1_AC_TIMOUT_LIST_MASK                 0x00000003

/* Description		REO_FLUSH_TIMEOUT_LIST_1_RESERVED_1
			
			<legal 0>
*/
#define REO_FLUSH_TIMEOUT_LIST_1_RESERVED_1_OFFSET                   0x00000004
#define REO_FLUSH_TIMEOUT_LIST_1_RESERVED_1_LSB                      2
#define REO_FLUSH_TIMEOUT_LIST_1_RESERVED_1_MASK                     0xfffffffc

/* Description		REO_FLUSH_TIMEOUT_LIST_2_MINIMUM_RELEASE_DESC_COUNT
			
			Consumer: REO
			
			Producer: SW
			
			
			
			The minimum number of link descriptors requested to be
			released. If set to 0, only buffer release counts seems to
			be important... When set to very high value, likely the
			entire timeout list will be exhausted before this count is
			reached or maybe this count will not get reached. REO
			however will stop here as it can not do anything else.
			
			
			
			When both this field and field Minimum_forward_buf_count
			are > 0, REO needs to meet both requirements. When both
			entries are 0 (which should be a programming error), REO
			does not need to do anything.
			
			
			
			Note that this includes counts of MPDU link Desc as well
			as MSDU link Desc. Where the count of MSDU link Desc is not
			known to REO it's approximated by deriving from MSDU count
			
			<legal all>
*/
#define REO_FLUSH_TIMEOUT_LIST_2_MINIMUM_RELEASE_DESC_COUNT_OFFSET   0x00000008
#define REO_FLUSH_TIMEOUT_LIST_2_MINIMUM_RELEASE_DESC_COUNT_LSB      0
#define REO_FLUSH_TIMEOUT_LIST_2_MINIMUM_RELEASE_DESC_COUNT_MASK     0x0000ffff

/* Description		REO_FLUSH_TIMEOUT_LIST_2_MINIMUM_FORWARD_BUF_COUNT
			
			Consumer: REO
			
			Producer: SW
			
			
			
			The minimum number of buffer descriptors requested to be
			passed on to the REO destination rings. 
			
			
			
			If set to 0, only descriptor release counts seems to be
			important... 
			
			
			
			When set to very high value, likely the entire timeout
			list will be exhausted before this count is reached or maybe
			this count will not get reached. REO however will stop here
			as it can not do anything else.
			
			
			
			Note that REO does not know the exact buffer count. This
			can be approximated by using the MSDU_COUNT
			
			<legal all>
*/
#define REO_FLUSH_TIMEOUT_LIST_2_MINIMUM_FORWARD_BUF_COUNT_OFFSET    0x00000008
#define REO_FLUSH_TIMEOUT_LIST_2_MINIMUM_FORWARD_BUF_COUNT_LSB       16
#define REO_FLUSH_TIMEOUT_LIST_2_MINIMUM_FORWARD_BUF_COUNT_MASK      0xffff0000

/* Description		REO_FLUSH_TIMEOUT_LIST_3_RESERVED_3A
			
			<legal 0>
*/
#define REO_FLUSH_TIMEOUT_LIST_3_RESERVED_3A_OFFSET                  0x0000000c
#define REO_FLUSH_TIMEOUT_LIST_3_RESERVED_3A_LSB                     0
#define REO_FLUSH_TIMEOUT_LIST_3_RESERVED_3A_MASK                    0xffffffff

/* Description		REO_FLUSH_TIMEOUT_LIST_4_RESERVED_4A
			
			<legal 0>
*/
#define REO_FLUSH_TIMEOUT_LIST_4_RESERVED_4A_OFFSET                  0x00000010
#define REO_FLUSH_TIMEOUT_LIST_4_RESERVED_4A_LSB                     0
#define REO_FLUSH_TIMEOUT_LIST_4_RESERVED_4A_MASK                    0xffffffff

/* Description		REO_FLUSH_TIMEOUT_LIST_5_RESERVED_5A
			
			<legal 0>
*/
#define REO_FLUSH_TIMEOUT_LIST_5_RESERVED_5A_OFFSET                  0x00000014
#define REO_FLUSH_TIMEOUT_LIST_5_RESERVED_5A_LSB                     0
#define REO_FLUSH_TIMEOUT_LIST_5_RESERVED_5A_MASK                    0xffffffff

/* Description		REO_FLUSH_TIMEOUT_LIST_6_RESERVED_6A
			
			<legal 0>
*/
#define REO_FLUSH_TIMEOUT_LIST_6_RESERVED_6A_OFFSET                  0x00000018
#define REO_FLUSH_TIMEOUT_LIST_6_RESERVED_6A_LSB                     0
#define REO_FLUSH_TIMEOUT_LIST_6_RESERVED_6A_MASK                    0xffffffff

/* Description		REO_FLUSH_TIMEOUT_LIST_7_RESERVED_7A
			
			<legal 0>
*/
#define REO_FLUSH_TIMEOUT_LIST_7_RESERVED_7A_OFFSET                  0x0000001c
#define REO_FLUSH_TIMEOUT_LIST_7_RESERVED_7A_LSB                     0
#define REO_FLUSH_TIMEOUT_LIST_7_RESERVED_7A_MASK                    0xffffffff

/* Description		REO_FLUSH_TIMEOUT_LIST_8_RESERVED_8A
			
			<legal 0>
*/
#define REO_FLUSH_TIMEOUT_LIST_8_RESERVED_8A_OFFSET                  0x00000020
#define REO_FLUSH_TIMEOUT_LIST_8_RESERVED_8A_LSB                     0
#define REO_FLUSH_TIMEOUT_LIST_8_RESERVED_8A_MASK                    0xffffffff


#endif // _REO_FLUSH_TIMEOUT_LIST_H_
