1f21fb3edSRaghu Vatsavayi /********************************************************************** 2f21fb3edSRaghu Vatsavayi * Author: Cavium, Inc. 3f21fb3edSRaghu Vatsavayi * 4f21fb3edSRaghu Vatsavayi * Contact: support@cavium.com 5f21fb3edSRaghu Vatsavayi * Please include "LiquidIO" in the subject. 6f21fb3edSRaghu Vatsavayi * 750579d3dSRaghu Vatsavayi * Copyright (c) 2003-2016 Cavium, Inc. 8f21fb3edSRaghu Vatsavayi * 9f21fb3edSRaghu Vatsavayi * This file is free software; you can redistribute it and/or modify 10f21fb3edSRaghu Vatsavayi * it under the terms of the GNU General Public License, Version 2, as 11f21fb3edSRaghu Vatsavayi * published by the Free Software Foundation. 12f21fb3edSRaghu Vatsavayi * 13f21fb3edSRaghu Vatsavayi * This file is distributed in the hope that it will be useful, but 14f21fb3edSRaghu Vatsavayi * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty 15f21fb3edSRaghu Vatsavayi * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or 1650579d3dSRaghu Vatsavayi * NONINFRINGEMENT. See the GNU General Public License for more details. 1750579d3dSRaghu Vatsavayi ***********************************************************************/ 18f21fb3edSRaghu Vatsavayi /*! \file octeon_config.h 19f21fb3edSRaghu Vatsavayi * \brief Host Driver: Configuration data structures for the host driver. 20f21fb3edSRaghu Vatsavayi */ 21f21fb3edSRaghu Vatsavayi 22f21fb3edSRaghu Vatsavayi #ifndef __OCTEON_CONFIG_H__ 23f21fb3edSRaghu Vatsavayi #define __OCTEON_CONFIG_H__ 24f21fb3edSRaghu Vatsavayi 25f21fb3edSRaghu Vatsavayi /*--------------------------CONFIG VALUES------------------------*/ 26f21fb3edSRaghu Vatsavayi 27f21fb3edSRaghu Vatsavayi /* The following macros affect the way the driver data structures 28f21fb3edSRaghu Vatsavayi * are generated for Octeon devices. 29f21fb3edSRaghu Vatsavayi * They can be modified. 30f21fb3edSRaghu Vatsavayi */ 31f21fb3edSRaghu Vatsavayi 32f21fb3edSRaghu Vatsavayi /* Maximum octeon devices defined as MAX_OCTEON_NICIF to support 33f21fb3edSRaghu Vatsavayi * multiple(<= MAX_OCTEON_NICIF) Miniports 34f21fb3edSRaghu Vatsavayi */ 3563da8404SRaghu Vatsavayi #define MAX_OCTEON_NICIF 128 36f21fb3edSRaghu Vatsavayi #define MAX_OCTEON_DEVICES MAX_OCTEON_NICIF 37f21fb3edSRaghu Vatsavayi #define MAX_OCTEON_LINKS MAX_OCTEON_NICIF 38f21fb3edSRaghu Vatsavayi #define MAX_OCTEON_MULTICAST_ADDR 32 39f21fb3edSRaghu Vatsavayi 40c859e21aSIntiyaz Basha #define MAX_OCTEON_FILL_COUNT 8 41c859e21aSIntiyaz Basha 42f21fb3edSRaghu Vatsavayi /* CN6xxx IQ configuration macros */ 43f21fb3edSRaghu Vatsavayi #define CN6XXX_MAX_INPUT_QUEUES 32 44f21fb3edSRaghu Vatsavayi #define CN6XXX_MAX_IQ_DESCRIPTORS 2048 45f21fb3edSRaghu Vatsavayi #define CN6XXX_DB_MIN 1 46f21fb3edSRaghu Vatsavayi #define CN6XXX_DB_MAX 8 47f21fb3edSRaghu Vatsavayi #define CN6XXX_DB_TIMEOUT 1 48f21fb3edSRaghu Vatsavayi 49f21fb3edSRaghu Vatsavayi /* CN6xxx OQ configuration macros */ 50f21fb3edSRaghu Vatsavayi #define CN6XXX_MAX_OUTPUT_QUEUES 32 51f21fb3edSRaghu Vatsavayi #define CN6XXX_MAX_OQ_DESCRIPTORS 2048 52c4ee5d81SPrasad Kanneganti #define CN6XXX_OQ_BUF_SIZE 1664 53f21fb3edSRaghu Vatsavayi #define CN6XXX_OQ_PKTSPER_INTR ((CN6XXX_MAX_OQ_DESCRIPTORS < 512) ? \ 54f21fb3edSRaghu Vatsavayi (CN6XXX_MAX_OQ_DESCRIPTORS / 4) : 128) 55f21fb3edSRaghu Vatsavayi #define CN6XXX_OQ_REFIL_THRESHOLD ((CN6XXX_MAX_OQ_DESCRIPTORS < 512) ? \ 56f21fb3edSRaghu Vatsavayi (CN6XXX_MAX_OQ_DESCRIPTORS / 4) : 128) 57f21fb3edSRaghu Vatsavayi 58f21fb3edSRaghu Vatsavayi #define CN6XXX_OQ_INTR_PKT 64 59f21fb3edSRaghu Vatsavayi #define CN6XXX_OQ_INTR_TIME 100 60f21fb3edSRaghu Vatsavayi #define DEFAULT_NUM_NIC_PORTS_66XX 2 61f21fb3edSRaghu Vatsavayi #define DEFAULT_NUM_NIC_PORTS_68XX 4 62f21fb3edSRaghu Vatsavayi #define DEFAULT_NUM_NIC_PORTS_68XX_210NV 2 63f21fb3edSRaghu Vatsavayi 64e86b1ab6SRaghu Vatsavayi /* CN23xx IQ configuration macros */ 65d13520c7SRaghu Vatsavayi #define CN23XX_MAX_VFS_PER_PF_PASS_1_0 8 66d13520c7SRaghu Vatsavayi #define CN23XX_MAX_VFS_PER_PF_PASS_1_1 31 67d13520c7SRaghu Vatsavayi #define CN23XX_MAX_VFS_PER_PF 63 68d13520c7SRaghu Vatsavayi #define CN23XX_MAX_RINGS_PER_VF 8 69d13520c7SRaghu Vatsavayi 70e86b1ab6SRaghu Vatsavayi #define CN23XX_MAX_RINGS_PER_PF_PASS_1_0 12 71e86b1ab6SRaghu Vatsavayi #define CN23XX_MAX_RINGS_PER_PF_PASS_1_1 32 72e86b1ab6SRaghu Vatsavayi #define CN23XX_MAX_RINGS_PER_PF 64 73d13520c7SRaghu Vatsavayi #define CN23XX_MAX_RINGS_PER_VF 8 74e86b1ab6SRaghu Vatsavayi 75e86b1ab6SRaghu Vatsavayi #define CN23XX_MAX_INPUT_QUEUES CN23XX_MAX_RINGS_PER_PF 76d18ca7dfSIntiyaz Basha #define CN23XX_MAX_IQ_DESCRIPTORS 2048 77d18ca7dfSIntiyaz Basha #define CN23XX_DEFAULT_IQ_DESCRIPTORS 512 78d18ca7dfSIntiyaz Basha #define CN23XX_MIN_IQ_DESCRIPTORS 128 79e86b1ab6SRaghu Vatsavayi #define CN23XX_DB_MIN 1 80e86b1ab6SRaghu Vatsavayi #define CN23XX_DB_MAX 8 81e86b1ab6SRaghu Vatsavayi #define CN23XX_DB_TIMEOUT 1 82e86b1ab6SRaghu Vatsavayi 83e86b1ab6SRaghu Vatsavayi #define CN23XX_MAX_OUTPUT_QUEUES CN23XX_MAX_RINGS_PER_PF 84d18ca7dfSIntiyaz Basha #define CN23XX_MAX_OQ_DESCRIPTORS 2048 85d18ca7dfSIntiyaz Basha #define CN23XX_DEFAULT_OQ_DESCRIPTORS 512 86d18ca7dfSIntiyaz Basha #define CN23XX_MIN_OQ_DESCRIPTORS 128 87c4ee5d81SPrasad Kanneganti #define CN23XX_OQ_BUF_SIZE 1664 88e86b1ab6SRaghu Vatsavayi #define CN23XX_OQ_PKTSPER_INTR 128 89e86b1ab6SRaghu Vatsavayi /*#define CAVIUM_ONLY_CN23XX_RX_PERF*/ 9067e303e0SVSR Burru #define CN23XX_OQ_REFIL_THRESHOLD 16 91e86b1ab6SRaghu Vatsavayi 92e86b1ab6SRaghu Vatsavayi #define CN23XX_OQ_INTR_PKT 64 93e86b1ab6SRaghu Vatsavayi #define CN23XX_OQ_INTR_TIME 100 94e86b1ab6SRaghu Vatsavayi #define DEFAULT_NUM_NIC_PORTS_23XX 1 95e86b1ab6SRaghu Vatsavayi 96e86b1ab6SRaghu Vatsavayi #define CN23XX_CFG_IO_QUEUES CN23XX_MAX_RINGS_PER_PF 97e86b1ab6SRaghu Vatsavayi /* PEMs count */ 98e86b1ab6SRaghu Vatsavayi #define CN23XX_MAX_MACS 4 99e86b1ab6SRaghu Vatsavayi 100e86b1ab6SRaghu Vatsavayi #define CN23XX_DEF_IQ_INTR_THRESHOLD 32 101e86b1ab6SRaghu Vatsavayi #define CN23XX_DEF_IQ_INTR_BYTE_THRESHOLD (64 * 1024) 102f21fb3edSRaghu Vatsavayi /* common OCTEON configuration macros */ 103f21fb3edSRaghu Vatsavayi #define CN6XXX_CFG_IO_QUEUES 32 104f21fb3edSRaghu Vatsavayi #define OCTEON_32BYTE_INSTR 32 105f21fb3edSRaghu Vatsavayi #define OCTEON_64BYTE_INSTR 64 106f21fb3edSRaghu Vatsavayi #define OCTEON_MAX_BASE_IOQ 4 107f21fb3edSRaghu Vatsavayi 108f21fb3edSRaghu Vatsavayi #define OCTEON_DMA_INTR_PKT 64 109f21fb3edSRaghu Vatsavayi #define OCTEON_DMA_INTR_TIME 1000 110f21fb3edSRaghu Vatsavayi 111f21fb3edSRaghu Vatsavayi #define MAX_TXQS_PER_INTF 8 112f21fb3edSRaghu Vatsavayi #define MAX_RXQS_PER_INTF 8 113f21fb3edSRaghu Vatsavayi #define DEF_TXQS_PER_INTF 4 114f21fb3edSRaghu Vatsavayi #define DEF_RXQS_PER_INTF 4 115f21fb3edSRaghu Vatsavayi 116f21fb3edSRaghu Vatsavayi #define INVALID_IOQ_NO 0xff 117f21fb3edSRaghu Vatsavayi 118f21fb3edSRaghu Vatsavayi #define DEFAULT_POW_GRP 0 119f21fb3edSRaghu Vatsavayi 120f21fb3edSRaghu Vatsavayi /* Macros to get octeon config params */ 121f21fb3edSRaghu Vatsavayi #define CFG_GET_IQ_CFG(cfg) ((cfg)->iq) 122f21fb3edSRaghu Vatsavayi #define CFG_GET_IQ_MAX_Q(cfg) ((cfg)->iq.max_iqs) 123f21fb3edSRaghu Vatsavayi #define CFG_GET_IQ_PENDING_LIST_SIZE(cfg) ((cfg)->iq.pending_list_size) 124f21fb3edSRaghu Vatsavayi #define CFG_GET_IQ_INSTR_TYPE(cfg) ((cfg)->iq.instr_type) 125f21fb3edSRaghu Vatsavayi #define CFG_GET_IQ_DB_MIN(cfg) ((cfg)->iq.db_min) 126f21fb3edSRaghu Vatsavayi #define CFG_GET_IQ_DB_TIMEOUT(cfg) ((cfg)->iq.db_timeout) 127f21fb3edSRaghu Vatsavayi 1283451b97cSRaghu Vatsavayi #define CFG_GET_IQ_INTR_PKT(cfg) ((cfg)->iq.iq_intr_pkt) 1293451b97cSRaghu Vatsavayi #define CFG_SET_IQ_INTR_PKT(cfg, val) (cfg)->iq.iq_intr_pkt = val 1303451b97cSRaghu Vatsavayi 131f21fb3edSRaghu Vatsavayi #define CFG_GET_OQ_MAX_Q(cfg) ((cfg)->oq.max_oqs) 132f21fb3edSRaghu Vatsavayi #define CFG_GET_OQ_PKTS_PER_INTR(cfg) ((cfg)->oq.pkts_per_intr) 133f21fb3edSRaghu Vatsavayi #define CFG_GET_OQ_REFILL_THRESHOLD(cfg) ((cfg)->oq.refill_threshold) 134f21fb3edSRaghu Vatsavayi #define CFG_GET_OQ_INTR_PKT(cfg) ((cfg)->oq.oq_intr_pkt) 135f21fb3edSRaghu Vatsavayi #define CFG_GET_OQ_INTR_TIME(cfg) ((cfg)->oq.oq_intr_time) 136f21fb3edSRaghu Vatsavayi #define CFG_SET_OQ_INTR_PKT(cfg, val) (cfg)->oq.oq_intr_pkt = val 137f21fb3edSRaghu Vatsavayi #define CFG_SET_OQ_INTR_TIME(cfg, val) (cfg)->oq.oq_intr_time = val 138f21fb3edSRaghu Vatsavayi 139f21fb3edSRaghu Vatsavayi #define CFG_GET_DMA_INTR_PKT(cfg) ((cfg)->dma.dma_intr_pkt) 140f21fb3edSRaghu Vatsavayi #define CFG_GET_DMA_INTR_TIME(cfg) ((cfg)->dma.dma_intr_time) 141f21fb3edSRaghu Vatsavayi #define CFG_GET_NUM_NIC_PORTS(cfg) ((cfg)->num_nic_ports) 142f21fb3edSRaghu Vatsavayi #define CFG_GET_NUM_DEF_TX_DESCS(cfg) ((cfg)->num_def_tx_descs) 143f21fb3edSRaghu Vatsavayi #define CFG_GET_NUM_DEF_RX_DESCS(cfg) ((cfg)->num_def_rx_descs) 144f21fb3edSRaghu Vatsavayi #define CFG_GET_DEF_RX_BUF_SIZE(cfg) ((cfg)->def_rx_buf_size) 145f21fb3edSRaghu Vatsavayi 146f21fb3edSRaghu Vatsavayi #define CFG_GET_MAX_TXQS_NIC_IF(cfg, idx) \ 147f21fb3edSRaghu Vatsavayi ((cfg)->nic_if_cfg[idx].max_txqs) 148f21fb3edSRaghu Vatsavayi #define CFG_GET_NUM_TXQS_NIC_IF(cfg, idx) \ 149f21fb3edSRaghu Vatsavayi ((cfg)->nic_if_cfg[idx].num_txqs) 150f21fb3edSRaghu Vatsavayi #define CFG_GET_MAX_RXQS_NIC_IF(cfg, idx) \ 151f21fb3edSRaghu Vatsavayi ((cfg)->nic_if_cfg[idx].max_rxqs) 152f21fb3edSRaghu Vatsavayi #define CFG_GET_NUM_RXQS_NIC_IF(cfg, idx) \ 153f21fb3edSRaghu Vatsavayi ((cfg)->nic_if_cfg[idx].num_rxqs) 154f21fb3edSRaghu Vatsavayi #define CFG_GET_NUM_RX_DESCS_NIC_IF(cfg, idx) \ 155f21fb3edSRaghu Vatsavayi ((cfg)->nic_if_cfg[idx].num_rx_descs) 156f21fb3edSRaghu Vatsavayi #define CFG_GET_NUM_TX_DESCS_NIC_IF(cfg, idx) \ 157f21fb3edSRaghu Vatsavayi ((cfg)->nic_if_cfg[idx].num_tx_descs) 158f21fb3edSRaghu Vatsavayi #define CFG_GET_NUM_RX_BUF_SIZE_NIC_IF(cfg, idx) \ 159f21fb3edSRaghu Vatsavayi ((cfg)->nic_if_cfg[idx].rx_buf_size) 160f21fb3edSRaghu Vatsavayi #define CFG_GET_BASE_QUE_NIC_IF(cfg, idx) \ 161f21fb3edSRaghu Vatsavayi ((cfg)->nic_if_cfg[idx].base_queue) 162f21fb3edSRaghu Vatsavayi #define CFG_GET_GMXID_NIC_IF(cfg, idx) \ 163f21fb3edSRaghu Vatsavayi ((cfg)->nic_if_cfg[idx].gmx_port_id) 164f21fb3edSRaghu Vatsavayi 165f21fb3edSRaghu Vatsavayi #define CFG_GET_CTRL_Q_GRP(cfg) ((cfg)->misc.ctrlq_grp) 166f21fb3edSRaghu Vatsavayi #define CFG_GET_HOST_LINK_QUERY_INTERVAL(cfg) \ 167f21fb3edSRaghu Vatsavayi ((cfg)->misc.host_link_query_interval) 168f21fb3edSRaghu Vatsavayi #define CFG_GET_OCT_LINK_QUERY_INTERVAL(cfg) \ 169f21fb3edSRaghu Vatsavayi ((cfg)->misc.oct_link_query_interval) 170f21fb3edSRaghu Vatsavayi #define CFG_GET_IS_SLI_BP_ON(cfg) ((cfg)->misc.enable_sli_oq_bp) 171f21fb3edSRaghu Vatsavayi 172d18ca7dfSIntiyaz Basha #define CFG_SET_NUM_RX_DESCS_NIC_IF(cfg, idx, value) \ 173d18ca7dfSIntiyaz Basha ((cfg)->nic_if_cfg[idx].num_rx_descs = value) 174d18ca7dfSIntiyaz Basha #define CFG_SET_NUM_TX_DESCS_NIC_IF(cfg, idx, value) \ 175d18ca7dfSIntiyaz Basha ((cfg)->nic_if_cfg[idx].num_tx_descs = value) 176d18ca7dfSIntiyaz Basha 177f21fb3edSRaghu Vatsavayi /* Max IOQs per OCTEON Link */ 17863da8404SRaghu Vatsavayi #define MAX_IOQS_PER_NICIF 64 179f21fb3edSRaghu Vatsavayi 180f21fb3edSRaghu Vatsavayi enum lio_card_type { 181f21fb3edSRaghu Vatsavayi LIO_210SV = 0, /* Two port, 66xx */ 182f21fb3edSRaghu Vatsavayi LIO_210NV, /* Two port, 68xx */ 183e86b1ab6SRaghu Vatsavayi LIO_410NV, /* Four port, 68xx */ 184e86b1ab6SRaghu Vatsavayi LIO_23XX /* 23xx */ 185f21fb3edSRaghu Vatsavayi }; 186f21fb3edSRaghu Vatsavayi 187f21fb3edSRaghu Vatsavayi #define LIO_210SV_NAME "210sv" 188f21fb3edSRaghu Vatsavayi #define LIO_210NV_NAME "210nv" 189f21fb3edSRaghu Vatsavayi #define LIO_410NV_NAME "410nv" 190e86b1ab6SRaghu Vatsavayi #define LIO_23XX_NAME "23xx" 191f21fb3edSRaghu Vatsavayi 192f21fb3edSRaghu Vatsavayi /** Structure to define the configuration attributes for each Input queue. 193f21fb3edSRaghu Vatsavayi * Applicable to all Octeon processors 194f21fb3edSRaghu Vatsavayi **/ 195f21fb3edSRaghu Vatsavayi struct octeon_iq_config { 196f21fb3edSRaghu Vatsavayi #ifdef __BIG_ENDIAN_BITFIELD 197e86b1ab6SRaghu Vatsavayi u64 reserved:16; 198e86b1ab6SRaghu Vatsavayi 199e86b1ab6SRaghu Vatsavayi /** Tx interrupt packets. Applicable to 23xx only */ 200e86b1ab6SRaghu Vatsavayi u64 iq_intr_pkt:16; 201f21fb3edSRaghu Vatsavayi 202f21fb3edSRaghu Vatsavayi /** Minimum ticks to wait before checking for pending instructions. */ 203f21fb3edSRaghu Vatsavayi u64 db_timeout:16; 204f21fb3edSRaghu Vatsavayi 205f21fb3edSRaghu Vatsavayi /** Minimum number of commands pending to be posted to Octeon 206f21fb3edSRaghu Vatsavayi * before driver hits the Input queue doorbell. 207f21fb3edSRaghu Vatsavayi */ 208f21fb3edSRaghu Vatsavayi u64 db_min:8; 209f21fb3edSRaghu Vatsavayi 210f21fb3edSRaghu Vatsavayi /** Command size - 32 or 64 bytes */ 211f21fb3edSRaghu Vatsavayi u64 instr_type:32; 212f21fb3edSRaghu Vatsavayi 213f21fb3edSRaghu Vatsavayi /** Pending list size (usually set to the sum of the size of all Input 214f21fb3edSRaghu Vatsavayi * queues) 215f21fb3edSRaghu Vatsavayi */ 216f21fb3edSRaghu Vatsavayi u64 pending_list_size:32; 217f21fb3edSRaghu Vatsavayi 218f21fb3edSRaghu Vatsavayi /* Max number of IQs available */ 219f21fb3edSRaghu Vatsavayi u64 max_iqs:8; 220f21fb3edSRaghu Vatsavayi #else 221f21fb3edSRaghu Vatsavayi /* Max number of IQs available */ 222f21fb3edSRaghu Vatsavayi u64 max_iqs:8; 223f21fb3edSRaghu Vatsavayi 224f21fb3edSRaghu Vatsavayi /** Pending list size (usually set to the sum of the size of all Input 225f21fb3edSRaghu Vatsavayi * queues) 226f21fb3edSRaghu Vatsavayi */ 227f21fb3edSRaghu Vatsavayi u64 pending_list_size:32; 228f21fb3edSRaghu Vatsavayi 229f21fb3edSRaghu Vatsavayi /** Command size - 32 or 64 bytes */ 230f21fb3edSRaghu Vatsavayi u64 instr_type:32; 231f21fb3edSRaghu Vatsavayi 232f21fb3edSRaghu Vatsavayi /** Minimum number of commands pending to be posted to Octeon 233f21fb3edSRaghu Vatsavayi * before driver hits the Input queue doorbell. 234f21fb3edSRaghu Vatsavayi */ 235f21fb3edSRaghu Vatsavayi u64 db_min:8; 236f21fb3edSRaghu Vatsavayi 237f21fb3edSRaghu Vatsavayi /** Minimum ticks to wait before checking for pending instructions. */ 238f21fb3edSRaghu Vatsavayi u64 db_timeout:16; 239f21fb3edSRaghu Vatsavayi 240e86b1ab6SRaghu Vatsavayi /** Tx interrupt packets. Applicable to 23xx only */ 241e86b1ab6SRaghu Vatsavayi u64 iq_intr_pkt:16; 242e86b1ab6SRaghu Vatsavayi 243e86b1ab6SRaghu Vatsavayi u64 reserved:16; 244f21fb3edSRaghu Vatsavayi #endif 245f21fb3edSRaghu Vatsavayi }; 246f21fb3edSRaghu Vatsavayi 247f21fb3edSRaghu Vatsavayi /** Structure to define the configuration attributes for each Output queue. 248f21fb3edSRaghu Vatsavayi * Applicable to all Octeon processors 249f21fb3edSRaghu Vatsavayi **/ 250f21fb3edSRaghu Vatsavayi struct octeon_oq_config { 251f21fb3edSRaghu Vatsavayi #ifdef __BIG_ENDIAN_BITFIELD 252f21fb3edSRaghu Vatsavayi u64 reserved:16; 253f21fb3edSRaghu Vatsavayi 254f21fb3edSRaghu Vatsavayi u64 pkts_per_intr:16; 255f21fb3edSRaghu Vatsavayi 256f21fb3edSRaghu Vatsavayi /** Interrupt Coalescing (Time Interval). Octeon will interrupt the 257f21fb3edSRaghu Vatsavayi * host if atleast one packet was sent in the time interval specified 258f21fb3edSRaghu Vatsavayi * by this field. The driver uses time interval interrupt coalescing 259f21fb3edSRaghu Vatsavayi * by default. The time is specified in microseconds. 260f21fb3edSRaghu Vatsavayi */ 261f21fb3edSRaghu Vatsavayi u64 oq_intr_time:16; 262f21fb3edSRaghu Vatsavayi 263f21fb3edSRaghu Vatsavayi /** Interrupt Coalescing (Packet Count). Octeon will interrupt the host 264f21fb3edSRaghu Vatsavayi * only if it sent as many packets as specified by this field. 265f21fb3edSRaghu Vatsavayi * The driver 266f21fb3edSRaghu Vatsavayi * usually does not use packet count interrupt coalescing. 267f21fb3edSRaghu Vatsavayi */ 268f21fb3edSRaghu Vatsavayi u64 oq_intr_pkt:16; 269f21fb3edSRaghu Vatsavayi 270f21fb3edSRaghu Vatsavayi /** The number of buffers that were consumed during packet processing by 271f21fb3edSRaghu Vatsavayi * the driver on this Output queue before the driver attempts to 272f21fb3edSRaghu Vatsavayi * replenish 273f21fb3edSRaghu Vatsavayi * the descriptor ring with new buffers. 274f21fb3edSRaghu Vatsavayi */ 275f21fb3edSRaghu Vatsavayi u64 refill_threshold:16; 276f21fb3edSRaghu Vatsavayi 277f21fb3edSRaghu Vatsavayi /* Max number of OQs available */ 278f21fb3edSRaghu Vatsavayi u64 max_oqs:8; 279f21fb3edSRaghu Vatsavayi 280f21fb3edSRaghu Vatsavayi #else 281f21fb3edSRaghu Vatsavayi /* Max number of OQs available */ 282f21fb3edSRaghu Vatsavayi u64 max_oqs:8; 283f21fb3edSRaghu Vatsavayi 284f21fb3edSRaghu Vatsavayi /** The number of buffers that were consumed during packet processing by 285f21fb3edSRaghu Vatsavayi * the driver on this Output queue before the driver attempts to 286f21fb3edSRaghu Vatsavayi * replenish 287f21fb3edSRaghu Vatsavayi * the descriptor ring with new buffers. 288f21fb3edSRaghu Vatsavayi */ 289f21fb3edSRaghu Vatsavayi u64 refill_threshold:16; 290f21fb3edSRaghu Vatsavayi 291f21fb3edSRaghu Vatsavayi /** Interrupt Coalescing (Packet Count). Octeon will interrupt the host 292f21fb3edSRaghu Vatsavayi * only if it sent as many packets as specified by this field. 293f21fb3edSRaghu Vatsavayi * The driver 294f21fb3edSRaghu Vatsavayi * usually does not use packet count interrupt coalescing. 295f21fb3edSRaghu Vatsavayi */ 296f21fb3edSRaghu Vatsavayi u64 oq_intr_pkt:16; 297f21fb3edSRaghu Vatsavayi 298f21fb3edSRaghu Vatsavayi /** Interrupt Coalescing (Time Interval). Octeon will interrupt the 299f21fb3edSRaghu Vatsavayi * host if atleast one packet was sent in the time interval specified 300f21fb3edSRaghu Vatsavayi * by this field. The driver uses time interval interrupt coalescing 301f21fb3edSRaghu Vatsavayi * by default. The time is specified in microseconds. 302f21fb3edSRaghu Vatsavayi */ 303f21fb3edSRaghu Vatsavayi u64 oq_intr_time:16; 304f21fb3edSRaghu Vatsavayi 305f21fb3edSRaghu Vatsavayi u64 pkts_per_intr:16; 306f21fb3edSRaghu Vatsavayi 307f21fb3edSRaghu Vatsavayi u64 reserved:16; 308f21fb3edSRaghu Vatsavayi #endif 309f21fb3edSRaghu Vatsavayi 310f21fb3edSRaghu Vatsavayi }; 311f21fb3edSRaghu Vatsavayi 312f21fb3edSRaghu Vatsavayi /** This structure conatins the NIC link configuration attributes, 313f21fb3edSRaghu Vatsavayi * common for all the OCTEON Modles. 314f21fb3edSRaghu Vatsavayi */ 315f21fb3edSRaghu Vatsavayi struct octeon_nic_if_config { 316f21fb3edSRaghu Vatsavayi #ifdef __BIG_ENDIAN_BITFIELD 317f21fb3edSRaghu Vatsavayi u64 reserved:56; 318f21fb3edSRaghu Vatsavayi 319f21fb3edSRaghu Vatsavayi u64 base_queue:16; 320f21fb3edSRaghu Vatsavayi 321f21fb3edSRaghu Vatsavayi u64 gmx_port_id:8; 322f21fb3edSRaghu Vatsavayi 323f21fb3edSRaghu Vatsavayi /* SKB size, We need not change buf size even for Jumbo frames. 324f21fb3edSRaghu Vatsavayi * Octeon can send jumbo frames in 4 consecutive descriptors, 325f21fb3edSRaghu Vatsavayi */ 326f21fb3edSRaghu Vatsavayi u64 rx_buf_size:16; 327f21fb3edSRaghu Vatsavayi 328f21fb3edSRaghu Vatsavayi /* Num of desc for tx rings */ 329f21fb3edSRaghu Vatsavayi u64 num_tx_descs:16; 330f21fb3edSRaghu Vatsavayi 331f21fb3edSRaghu Vatsavayi /* Num of desc for rx rings */ 332f21fb3edSRaghu Vatsavayi u64 num_rx_descs:16; 333f21fb3edSRaghu Vatsavayi 334f21fb3edSRaghu Vatsavayi /* Actual configured value. Range could be: 1...max_rxqs */ 335f21fb3edSRaghu Vatsavayi u64 num_rxqs:16; 336f21fb3edSRaghu Vatsavayi 337f21fb3edSRaghu Vatsavayi /* Max Rxqs: Half for each of the two ports :max_oq/2 */ 338f21fb3edSRaghu Vatsavayi u64 max_rxqs:16; 339f21fb3edSRaghu Vatsavayi 340f21fb3edSRaghu Vatsavayi /* Actual configured value. Range could be: 1...max_txqs */ 341f21fb3edSRaghu Vatsavayi u64 num_txqs:16; 342f21fb3edSRaghu Vatsavayi 343f21fb3edSRaghu Vatsavayi /* Max Txqs: Half for each of the two ports :max_iq/2 */ 344f21fb3edSRaghu Vatsavayi u64 max_txqs:16; 345f21fb3edSRaghu Vatsavayi #else 346f21fb3edSRaghu Vatsavayi /* Max Txqs: Half for each of the two ports :max_iq/2 */ 347f21fb3edSRaghu Vatsavayi u64 max_txqs:16; 348f21fb3edSRaghu Vatsavayi 349f21fb3edSRaghu Vatsavayi /* Actual configured value. Range could be: 1...max_txqs */ 350f21fb3edSRaghu Vatsavayi u64 num_txqs:16; 351f21fb3edSRaghu Vatsavayi 352f21fb3edSRaghu Vatsavayi /* Max Rxqs: Half for each of the two ports :max_oq/2 */ 353f21fb3edSRaghu Vatsavayi u64 max_rxqs:16; 354f21fb3edSRaghu Vatsavayi 355f21fb3edSRaghu Vatsavayi /* Actual configured value. Range could be: 1...max_rxqs */ 356f21fb3edSRaghu Vatsavayi u64 num_rxqs:16; 357f21fb3edSRaghu Vatsavayi 358f21fb3edSRaghu Vatsavayi /* Num of desc for rx rings */ 359f21fb3edSRaghu Vatsavayi u64 num_rx_descs:16; 360f21fb3edSRaghu Vatsavayi 361f21fb3edSRaghu Vatsavayi /* Num of desc for tx rings */ 362f21fb3edSRaghu Vatsavayi u64 num_tx_descs:16; 363f21fb3edSRaghu Vatsavayi 364f21fb3edSRaghu Vatsavayi /* SKB size, We need not change buf size even for Jumbo frames. 365f21fb3edSRaghu Vatsavayi * Octeon can send jumbo frames in 4 consecutive descriptors, 366f21fb3edSRaghu Vatsavayi */ 367f21fb3edSRaghu Vatsavayi u64 rx_buf_size:16; 368f21fb3edSRaghu Vatsavayi 369f21fb3edSRaghu Vatsavayi u64 gmx_port_id:8; 370f21fb3edSRaghu Vatsavayi 371f21fb3edSRaghu Vatsavayi u64 base_queue:16; 372f21fb3edSRaghu Vatsavayi 373f21fb3edSRaghu Vatsavayi u64 reserved:56; 374f21fb3edSRaghu Vatsavayi #endif 375f21fb3edSRaghu Vatsavayi 376f21fb3edSRaghu Vatsavayi }; 377f21fb3edSRaghu Vatsavayi 378f21fb3edSRaghu Vatsavayi /** Structure to define the configuration attributes for meta data. 379f21fb3edSRaghu Vatsavayi * Applicable to all Octeon processors. 380f21fb3edSRaghu Vatsavayi */ 381f21fb3edSRaghu Vatsavayi 382f21fb3edSRaghu Vatsavayi struct octeon_misc_config { 383f21fb3edSRaghu Vatsavayi #ifdef __BIG_ENDIAN_BITFIELD 384f21fb3edSRaghu Vatsavayi /** Host link status polling period */ 385f21fb3edSRaghu Vatsavayi u64 host_link_query_interval:32; 386f21fb3edSRaghu Vatsavayi /** Oct link status polling period */ 387f21fb3edSRaghu Vatsavayi u64 oct_link_query_interval:32; 388f21fb3edSRaghu Vatsavayi 389f21fb3edSRaghu Vatsavayi u64 enable_sli_oq_bp:1; 390f21fb3edSRaghu Vatsavayi /** Control IQ Group */ 391f21fb3edSRaghu Vatsavayi u64 ctrlq_grp:4; 392f21fb3edSRaghu Vatsavayi #else 393f21fb3edSRaghu Vatsavayi /** Control IQ Group */ 394f21fb3edSRaghu Vatsavayi u64 ctrlq_grp:4; 395f21fb3edSRaghu Vatsavayi /** BP for SLI OQ */ 396f21fb3edSRaghu Vatsavayi u64 enable_sli_oq_bp:1; 397f21fb3edSRaghu Vatsavayi /** Host link status polling period */ 398f21fb3edSRaghu Vatsavayi u64 oct_link_query_interval:32; 399f21fb3edSRaghu Vatsavayi /** Oct link status polling period */ 400f21fb3edSRaghu Vatsavayi u64 host_link_query_interval:32; 401f21fb3edSRaghu Vatsavayi #endif 402f21fb3edSRaghu Vatsavayi }; 403f21fb3edSRaghu Vatsavayi 404f21fb3edSRaghu Vatsavayi /** Structure to define the configuration for all OCTEON processors. */ 405f21fb3edSRaghu Vatsavayi struct octeon_config { 406f21fb3edSRaghu Vatsavayi u16 card_type; 407f21fb3edSRaghu Vatsavayi char *card_name; 408f21fb3edSRaghu Vatsavayi 409f21fb3edSRaghu Vatsavayi /** Input Queue attributes. */ 410f21fb3edSRaghu Vatsavayi struct octeon_iq_config iq; 411f21fb3edSRaghu Vatsavayi 412f21fb3edSRaghu Vatsavayi /** Output Queue attributes. */ 413f21fb3edSRaghu Vatsavayi struct octeon_oq_config oq; 414f21fb3edSRaghu Vatsavayi 415f21fb3edSRaghu Vatsavayi /** NIC Port Configuration */ 416f21fb3edSRaghu Vatsavayi struct octeon_nic_if_config nic_if_cfg[MAX_OCTEON_NICIF]; 417f21fb3edSRaghu Vatsavayi 418f21fb3edSRaghu Vatsavayi /** Miscellaneous attributes */ 419f21fb3edSRaghu Vatsavayi struct octeon_misc_config misc; 420f21fb3edSRaghu Vatsavayi 421f21fb3edSRaghu Vatsavayi int num_nic_ports; 422f21fb3edSRaghu Vatsavayi 423f21fb3edSRaghu Vatsavayi int num_def_tx_descs; 424f21fb3edSRaghu Vatsavayi 425f21fb3edSRaghu Vatsavayi /* Num of desc for rx rings */ 426f21fb3edSRaghu Vatsavayi int num_def_rx_descs; 427f21fb3edSRaghu Vatsavayi 428f21fb3edSRaghu Vatsavayi int def_rx_buf_size; 429f21fb3edSRaghu Vatsavayi 430f21fb3edSRaghu Vatsavayi }; 431f21fb3edSRaghu Vatsavayi 432f21fb3edSRaghu Vatsavayi /* The following config values are fixed and should not be modified. */ 433f21fb3edSRaghu Vatsavayi 43415d3afccSFelix Manlunas #define BAR1_INDEX_DYNAMIC_MAP 2 43515d3afccSFelix Manlunas #define BAR1_INDEX_STATIC_MAP 15 436f21fb3edSRaghu Vatsavayi #define OCTEON_BAR1_ENTRY_SIZE (4 * 1024 * 1024) 437f21fb3edSRaghu Vatsavayi 43815d3afccSFelix Manlunas #define MAX_BAR1_IOREMAP_SIZE (16 * OCTEON_BAR1_ENTRY_SIZE) 439f21fb3edSRaghu Vatsavayi 440f21fb3edSRaghu Vatsavayi /* Response lists - 1 ordered, 1 unordered-blocking, 1 unordered-nonblocking 441*64fecd3eSFelix Manlunas * 1 process done list, 1 zombie lists(timeouted sc list) 442f21fb3edSRaghu Vatsavayi * NoResponse Lists are now maintained with each IQ. (Dec' 2007). 443f21fb3edSRaghu Vatsavayi */ 444c9aec052SFelix Manlunas #define MAX_RESPONSE_LISTS 6 445f21fb3edSRaghu Vatsavayi 446f21fb3edSRaghu Vatsavayi /* Opcode hash bits. The opcode is hashed on the lower 6-bits to lookup the 447f21fb3edSRaghu Vatsavayi * dispatch table. 448f21fb3edSRaghu Vatsavayi */ 449f21fb3edSRaghu Vatsavayi #define OPCODE_MASK_BITS 6 450f21fb3edSRaghu Vatsavayi 451f21fb3edSRaghu Vatsavayi /* Mask for the 6-bit lookup hash */ 452f21fb3edSRaghu Vatsavayi #define OCTEON_OPCODE_MASK 0x3f 453f21fb3edSRaghu Vatsavayi 454f21fb3edSRaghu Vatsavayi /* Size of the dispatch table. The 6-bit hash can index into 2^6 entries */ 455f21fb3edSRaghu Vatsavayi #define DISPATCH_LIST_SIZE BIT(OPCODE_MASK_BITS) 456f21fb3edSRaghu Vatsavayi 457f21fb3edSRaghu Vatsavayi /* Maximum number of Octeon Instruction (command) queues */ 458e86b1ab6SRaghu Vatsavayi #define MAX_OCTEON_INSTR_QUEUES(oct) \ 459e86b1ab6SRaghu Vatsavayi (OCTEON_CN23XX_PF(oct) ? CN23XX_MAX_INPUT_QUEUES : \ 460e86b1ab6SRaghu Vatsavayi CN6XXX_MAX_INPUT_QUEUES) 461f21fb3edSRaghu Vatsavayi 462e86b1ab6SRaghu Vatsavayi /* Maximum number of Octeon Instruction (command) queues */ 463e86b1ab6SRaghu Vatsavayi #define MAX_OCTEON_OUTPUT_QUEUES(oct) \ 464e86b1ab6SRaghu Vatsavayi (OCTEON_CN23XX_PF(oct) ? CN23XX_MAX_OUTPUT_QUEUES : \ 465e86b1ab6SRaghu Vatsavayi CN6XXX_MAX_OUTPUT_QUEUES) 466f21fb3edSRaghu Vatsavayi 467e86b1ab6SRaghu Vatsavayi #define MAX_POSSIBLE_OCTEON_INSTR_QUEUES CN23XX_MAX_INPUT_QUEUES 468e86b1ab6SRaghu Vatsavayi #define MAX_POSSIBLE_OCTEON_OUTPUT_QUEUES CN23XX_MAX_OUTPUT_QUEUES 469ca6139ffSRaghu Vatsavayi 470ca6139ffSRaghu Vatsavayi #define MAX_POSSIBLE_VFS 64 471ca6139ffSRaghu Vatsavayi 472f21fb3edSRaghu Vatsavayi #endif /* __OCTEON_CONFIG_H__ */ 473