/*
 * (C) Copyright 2012 Quantenna Communications Inc.
 *
 * See file CREDITS for list of people who contributed to this
 * project.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 * MA 02111-1307 USA
 */

#ifndef __QTN_BUFFERS_H
#define __QTN_BUFFERS_H

#include <common/topaz_config.h>

#if defined(TOPAZ_PLATFORM)
#define QTN_BUF_USE_11AC_SIZE			1
#define TOPAZ_HBM_SKB_ALLOCATOR_DEFAULT		1
#else
#define QTN_BUF_USE_11AC_SIZE			0
#define TOPAZ_HBM_SKB_ALLOCATOR_DEFAULT		0
#endif

#define TOPAZ_HBM_SKB_ALLOCATOR			2

#if !defined(TOPAZ_PLATFORM) && QTN_BUF_USE_11AC_SIZE
	#error Cannot use QTN_BUF_USE_11AC_SIZE on Ruby, insufficient DDR
#elif defined(TOPAZ_PLATFORM) && TOPAZ_HBM_SKB_ALLOCATOR_DEFAULT
	/*
	 * Buffer allocation in Topaz when using the switch must be extremely
	 * careful such that the sum of all possible buffer pileup does not
	 * exceed the number of possible payloads. Otherwise the hardware will
	 * start processing null pointers.
	 */
	#define TOPAZ_HBM_PAYLOAD_COUNT_S	TOPAZ_HBM_BUF_EMAC_RX_COUNT_S
	#define QTN_BUFS_EMAC_TX_RING_S		9
	#define QDRV_MAX_QUEUED_MGMT_FRAMES	256
	#define QTN_BUFS_WMAC_RX_RING_S		10
	#define QTN_BUFS_WMAC_TX_NON_LHOST_S	9
	#define QTN_BUFS_WMAC_TX_QDISC_S	10
	#define QDRV_TX_SCH_RED_MASK		((1 << 7) - 1)
#elif defined(TOPAZ_PLATFORM) && QTN_BUF_USE_11AC_SIZE
	/* Topaz with 11ac buffers, no acceleration */
	#define TOPAZ_HBM_PAYLOAD_COUNT_S	TOPAZ_HBM_BUF_EMAC_RX_COUNT_S
	#define QTN_BUFS_EMAC_TX_RING_S		9
	#define QDRV_MAX_QUEUED_MGMT_FRAMES	256
	#define QTN_BUFS_WMAC_RX_RING_S		10
	#define QTN_BUFS_WMAC_TX_NON_LHOST_S	9
	#define QTN_BUFS_WMAC_TX_QDISC_S	11
	#define QDRV_TX_SCH_RED_MASK		((1 << 7) - 1)
#else
	/* Ruby or Topaz with 11n buffers no acceleration */
	#define TOPAZ_HBM_PAYLOAD_COUNT_S	12
	#define QTN_BUFS_EMAC_TX_RING_S		7
	#define QDRV_MAX_QUEUED_MGMT_FRAMES	512
	#define QTN_BUFS_WMAC_RX_RING_S		11
	#define QTN_BUFS_WMAC_TX_NON_LHOST_S	9
	#define QTN_BUFS_WMAC_TX_QDISC_S	11
	#define QDRV_TX_SCH_RED_MASK		((1 << 7) - 1)
#endif

#define TOPAZ_HBM_PAYLOAD_COUNT		(1 << TOPAZ_HBM_PAYLOAD_COUNT_S)

#ifdef QTN_RC_ENABLE_HDP
#define QTN_BUFS_EMAC_RX_RING_S		12
#else
#define QTN_BUFS_EMAC_RX_RING_S		8
#endif
#define QTN_BUFS_EMAC_TX_QDISC_S	7
#define QTN_BUFS_PCIE_TQE_RX_RING_S	12
#if defined (CONFIG_TOPAZ_PCIE_TARGET)
#define QTN_BUFS_LHOST_TQE_RX_RING_S	8
#elif defined (CONFIG_TOPAZ_PCIE_HOST)
#define QTN_BUFS_LHOST_TQE_RX_RING_S	9
#elif defined (TOPAZ_VB_CONFIG)
#define QTN_BUFS_LHOST_TQE_RX_RING_S	11
#else
#define QTN_BUFS_LHOST_TQE_RX_RING_S	9
#endif

#define QTN_BUFS_LHOST_TQE_RX_RING	(1 << QTN_BUFS_LHOST_TQE_RX_RING_S)
#define QTN_BUFS_EMAC_RX_RING		(1 << QTN_BUFS_EMAC_RX_RING_S)
#define QTN_BUFS_EMAC_TX_RING		(1 << QTN_BUFS_EMAC_TX_RING_S)
#define QTN_BUFS_EMAC_TX_QDISC		(1 << QTN_BUFS_EMAC_TX_QDISC_S)
#define QTN_BUFS_WMAC_RX_RING		(1 << QTN_BUFS_WMAC_RX_RING_S)
#define QTN_BUFS_WMAC_TX_NON_LHOST	(1 << QTN_BUFS_WMAC_TX_NON_LHOST_S)
#define QTN_BUFS_WMAC_TX_QDISC		(1 << QTN_BUFS_WMAC_TX_QDISC_S)
#define QTN_BUFS_PCIE_TQE_RX_RING	(1 << QTN_BUFS_PCIE_TQE_RX_RING_S)

#define QTN_BUFS_CPUS_TOTAL		(1 * (QTN_BUFS_LHOST_TQE_RX_RING))
#define QTN_BUFS_EMAC_TOTAL		(2 * (QTN_BUFS_EMAC_RX_RING + QTN_BUFS_EMAC_TX_RING + QTN_BUFS_EMAC_TX_QDISC))
#define QTN_BUFS_WMAC_TOTAL		(1 * (QTN_BUFS_WMAC_RX_RING + QTN_BUFS_WMAC_TX_NON_LHOST + QTN_BUFS_WMAC_TX_QDISC + QDRV_MAX_QUEUED_MGMT_FRAMES))
#define QTN_BUFS_ALLOC_TOTAL		(QTN_BUFS_CPUS_TOTAL /*+ QTN_BUFS_EMAC_TOTAL*/ + QTN_BUFS_WMAC_TOTAL)

#if defined(TOPAZ_PLATFORM) && TOPAZ_HBM_SKB_ALLOCATOR_DEFAULT && (TOPAZ_HBM_PAYLOAD_COUNT <= QTN_BUFS_ALLOC_TOTAL)
	#error "Payload buffers distribution error"
#endif

#endif	// __QTN_BUFFERS_H

