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

// $ATH_LICENSE_HW_HDR_C$
//
// 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_