| /* |
| * Linux network driver for Brocade Converged Network Adapter. |
| * |
| * This program is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License (GPL) Version 2 as |
| * published by the Free Software Foundation |
| * |
| * 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. |
| */ |
| /* |
| * Copyright (c) 2005-2010 Brocade Communications Systems, Inc. |
| * All rights reserved |
| * www.brocade.com |
| */ |
| |
| /** |
| * File for interrupt macros and functions |
| */ |
| |
| #ifndef __BNA_HW_H__ |
| #define __BNA_HW_H__ |
| |
| #include "bfi_reg.h" |
| |
| /** |
| * |
| * SW imposed limits |
| * |
| */ |
| |
| #ifndef BNA_BIOS_BUILD |
| |
| #define BFI_MAX_TXQ 64 |
| #define BFI_MAX_RXQ 64 |
| #define BFI_MAX_RXF 64 |
| #define BFI_MAX_IB 128 |
| #define BFI_MAX_RIT_SIZE 256 |
| #define BFI_RSS_RIT_SIZE 64 |
| #define BFI_NONRSS_RIT_SIZE 1 |
| #define BFI_MAX_UCMAC 256 |
| #define BFI_MAX_MCMAC 512 |
| #define BFI_IBIDX_SIZE 4 |
| #define BFI_MAX_VLAN 4095 |
| |
| /** |
| * There are 2 free IB index pools: |
| * pool1: 120 segments of 1 index each |
| * pool8: 1 segment of 8 indexes |
| */ |
| #define BFI_IBIDX_POOL1_SIZE 116 |
| #define BFI_IBIDX_POOL1_ENTRY_SIZE 1 |
| #define BFI_IBIDX_POOL2_SIZE 2 |
| #define BFI_IBIDX_POOL2_ENTRY_SIZE 2 |
| #define BFI_IBIDX_POOL8_SIZE 1 |
| #define BFI_IBIDX_POOL8_ENTRY_SIZE 8 |
| #define BFI_IBIDX_TOTAL_POOLS 3 |
| #define BFI_IBIDX_TOTAL_SEGS 119 /* (POOL1 + POOL2 + POOL8)_SIZE */ |
| #define BFI_IBIDX_MAX_SEGSIZE 8 |
| #define init_ibidx_pool(name) \ |
| static struct bna_ibidx_pool name[BFI_IBIDX_TOTAL_POOLS] = \ |
| { \ |
| { BFI_IBIDX_POOL1_SIZE, BFI_IBIDX_POOL1_ENTRY_SIZE }, \ |
| { BFI_IBIDX_POOL2_SIZE, BFI_IBIDX_POOL2_ENTRY_SIZE }, \ |
| { BFI_IBIDX_POOL8_SIZE, BFI_IBIDX_POOL8_ENTRY_SIZE } \ |
| } |
| |
| /** |
| * There are 2 free RIT segment pools: |
| * Pool1: 192 segments of 1 RIT entry each |
| * Pool2: 1 segment of 64 RIT entry |
| */ |
| #define BFI_RIT_SEG_POOL1_SIZE 192 |
| #define BFI_RIT_SEG_POOL1_ENTRY_SIZE 1 |
| #define BFI_RIT_SEG_POOLRSS_SIZE 1 |
| #define BFI_RIT_SEG_POOLRSS_ENTRY_SIZE 64 |
| #define BFI_RIT_SEG_TOTAL_POOLS 2 |
| #define BFI_RIT_TOTAL_SEGS 193 /* POOL1_SIZE + POOLRSS_SIZE */ |
| #define init_ritseg_pool(name) \ |
| static struct bna_ritseg_pool_cfg name[BFI_RIT_SEG_TOTAL_POOLS] = \ |
| { \ |
| { BFI_RIT_SEG_POOL1_SIZE, BFI_RIT_SEG_POOL1_ENTRY_SIZE }, \ |
| { BFI_RIT_SEG_POOLRSS_SIZE, BFI_RIT_SEG_POOLRSS_ENTRY_SIZE } \ |
| } |
| |
| #else /* BNA_BIOS_BUILD */ |
| |
| #define BFI_MAX_TXQ 1 |
| #define BFI_MAX_RXQ 1 |
| #define BFI_MAX_RXF 1 |
| #define BFI_MAX_IB 2 |
| #define BFI_MAX_RIT_SIZE 2 |
| #define BFI_RSS_RIT_SIZE 64 |
| #define BFI_NONRSS_RIT_SIZE 1 |
| #define BFI_MAX_UCMAC 1 |
| #define BFI_MAX_MCMAC 8 |
| #define BFI_IBIDX_SIZE 4 |
| #define BFI_MAX_VLAN 4095 |
| /* There is one free pool: 2 segments of 1 index each */ |
| #define BFI_IBIDX_POOL1_SIZE 2 |
| #define BFI_IBIDX_POOL1_ENTRY_SIZE 1 |
| #define BFI_IBIDX_TOTAL_POOLS 1 |
| #define BFI_IBIDX_TOTAL_SEGS 2 /* POOL1_SIZE */ |
| #define BFI_IBIDX_MAX_SEGSIZE 1 |
| #define init_ibidx_pool(name) \ |
| static struct bna_ibidx_pool name[BFI_IBIDX_TOTAL_POOLS] = \ |
| { \ |
| { BFI_IBIDX_POOL1_SIZE, BFI_IBIDX_POOL1_ENTRY_SIZE } \ |
| } |
| |
| #define BFI_RIT_SEG_POOL1_SIZE 1 |
| #define BFI_RIT_SEG_POOL1_ENTRY_SIZE 1 |
| #define BFI_RIT_SEG_TOTAL_POOLS 1 |
| #define BFI_RIT_TOTAL_SEGS 1 /* POOL1_SIZE */ |
| #define init_ritseg_pool(name) \ |
| static struct bna_ritseg_pool_cfg name[BFI_RIT_SEG_TOTAL_POOLS] = \ |
| { \ |
| { BFI_RIT_SEG_POOL1_SIZE, BFI_RIT_SEG_POOL1_ENTRY_SIZE } \ |
| } |
| |
| #endif /* BNA_BIOS_BUILD */ |
| |
| #define BFI_RSS_HASH_KEY_LEN 10 |
| |
| #define BFI_COALESCING_TIMER_UNIT 5 /* 5us */ |
| #define BFI_MAX_COALESCING_TIMEO 0xFF /* in 5us units */ |
| #define BFI_MAX_INTERPKT_COUNT 0xFF |
| #define BFI_MAX_INTERPKT_TIMEO 0xF /* in 0.5us units */ |
| #define BFI_TX_COALESCING_TIMEO 20 /* 20 * 5 = 100us */ |
| #define BFI_TX_INTERPKT_COUNT 32 |
| #define BFI_RX_COALESCING_TIMEO 12 /* 12 * 5 = 60us */ |
| #define BFI_RX_INTERPKT_COUNT 6 /* Pkt Cnt = 6 */ |
| #define BFI_RX_INTERPKT_TIMEO 3 /* 3 * 0.5 = 1.5us */ |
| |
| #define BFI_TXQ_WI_SIZE 64 /* bytes */ |
| #define BFI_RXQ_WI_SIZE 8 /* bytes */ |
| #define BFI_CQ_WI_SIZE 16 /* bytes */ |
| #define BFI_TX_MAX_WRR_QUOTA 0xFFF |
| |
| #define BFI_TX_MAX_VECTORS_PER_WI 4 |
| #define BFI_TX_MAX_VECTORS_PER_PKT 0xFF |
| #define BFI_TX_MAX_DATA_PER_VECTOR 0xFFFF |
| #define BFI_TX_MAX_DATA_PER_PKT 0xFFFFFF |
| |
| /* Small Q buffer size */ |
| #define BFI_SMALL_RXBUF_SIZE 128 |
| |
| /* Defined separately since BFA_FLASH_DMA_BUF_SZ is in bfa_flash.c */ |
| #define BFI_FLASH_DMA_BUF_SZ 0x010000 /* 64K DMA */ |
| #define BFI_HW_STATS_SIZE 0x4000 /* 16K DMA */ |
| |
| /** |
| * |
| * HW register offsets, macros |
| * |
| */ |
| |
| /* DMA Block Register Host Window Start Address */ |
| #define DMA_BLK_REG_ADDR 0x00013000 |
| |
| /* DMA Block Internal Registers */ |
| #define DMA_CTRL_REG0 (DMA_BLK_REG_ADDR + 0x000) |
| #define DMA_CTRL_REG1 (DMA_BLK_REG_ADDR + 0x004) |
| #define DMA_ERR_INT_STATUS (DMA_BLK_REG_ADDR + 0x008) |
| #define DMA_ERR_INT_ENABLE (DMA_BLK_REG_ADDR + 0x00c) |
| #define DMA_ERR_INT_STATUS_SET (DMA_BLK_REG_ADDR + 0x010) |
| |
| /* APP Block Register Address Offset from BAR0 */ |
| #define APP_BLK_REG_ADDR 0x00014000 |
| |
| /* Host Function Interrupt Mask Registers */ |
| #define HOSTFN0_INT_MASK (APP_BLK_REG_ADDR + 0x004) |
| #define HOSTFN1_INT_MASK (APP_BLK_REG_ADDR + 0x104) |
| #define HOSTFN2_INT_MASK (APP_BLK_REG_ADDR + 0x304) |
| #define HOSTFN3_INT_MASK (APP_BLK_REG_ADDR + 0x404) |
| |
| /** |
| * Host Function PCIe Error Registers |
| * Duplicates "Correctable" & "Uncorrectable" |
| * registers in PCIe Config space. |
| */ |
| #define FN0_PCIE_ERR_REG (APP_BLK_REG_ADDR + 0x014) |
| #define FN1_PCIE_ERR_REG (APP_BLK_REG_ADDR + 0x114) |
| #define FN2_PCIE_ERR_REG (APP_BLK_REG_ADDR + 0x314) |
| #define FN3_PCIE_ERR_REG (APP_BLK_REG_ADDR + 0x414) |
| |
| /* Host Function Error Type Status Registers */ |
| #define FN0_ERR_TYPE_STATUS_REG (APP_BLK_REG_ADDR + 0x018) |
| #define FN1_ERR_TYPE_STATUS_REG (APP_BLK_REG_ADDR + 0x118) |
| #define FN2_ERR_TYPE_STATUS_REG (APP_BLK_REG_ADDR + 0x318) |
| #define FN3_ERR_TYPE_STATUS_REG (APP_BLK_REG_ADDR + 0x418) |
| |
| /* Host Function Error Type Mask Registers */ |
| #define FN0_ERR_TYPE_MSK_STATUS_REG (APP_BLK_REG_ADDR + 0x01c) |
| #define FN1_ERR_TYPE_MSK_STATUS_REG (APP_BLK_REG_ADDR + 0x11c) |
| #define FN2_ERR_TYPE_MSK_STATUS_REG (APP_BLK_REG_ADDR + 0x31c) |
| #define FN3_ERR_TYPE_MSK_STATUS_REG (APP_BLK_REG_ADDR + 0x41c) |
| |
| /* Catapult Host Semaphore Status Registers (App block) */ |
| #define HOST_SEM_STS0_REG (APP_BLK_REG_ADDR + 0x630) |
| #define HOST_SEM_STS1_REG (APP_BLK_REG_ADDR + 0x634) |
| #define HOST_SEM_STS2_REG (APP_BLK_REG_ADDR + 0x638) |
| #define HOST_SEM_STS3_REG (APP_BLK_REG_ADDR + 0x63c) |
| #define HOST_SEM_STS4_REG (APP_BLK_REG_ADDR + 0x640) |
| #define HOST_SEM_STS5_REG (APP_BLK_REG_ADDR + 0x644) |
| #define HOST_SEM_STS6_REG (APP_BLK_REG_ADDR + 0x648) |
| #define HOST_SEM_STS7_REG (APP_BLK_REG_ADDR + 0x64c) |
| |
| /* PCIe Misc Register */ |
| #define PCIE_MISC_REG (APP_BLK_REG_ADDR + 0x200) |
| |
| /* Temp Sensor Control Registers */ |
| #define TEMPSENSE_CNTL_REG (APP_BLK_REG_ADDR + 0x250) |
| #define TEMPSENSE_STAT_REG (APP_BLK_REG_ADDR + 0x254) |
| |
| /* APP Block local error registers */ |
| #define APP_LOCAL_ERR_STAT (APP_BLK_REG_ADDR + 0x258) |
| #define APP_LOCAL_ERR_MSK (APP_BLK_REG_ADDR + 0x25c) |
| |
| /* PCIe Link Error registers */ |
| #define PCIE_LNK_ERR_STAT (APP_BLK_REG_ADDR + 0x260) |
| #define PCIE_LNK_ERR_MSK (APP_BLK_REG_ADDR + 0x264) |
| |
| /** |
| * FCoE/FIP Ethertype Register |
| * 31:16 -- Chip wide value for FIP type |
| * 15:0 -- Chip wide value for FCoE type |
| */ |
| #define FCOE_FIP_ETH_TYPE (APP_BLK_REG_ADDR + 0x280) |
| |
| /** |
| * Reserved Ethertype Register |
| * 31:16 -- Reserved |
| * 15:0 -- Other ethertype |
| */ |
| #define RESV_ETH_TYPE (APP_BLK_REG_ADDR + 0x284) |
| |
| /** |
| * Host Command Status Registers |
| * Each set consists of 3 registers : |
| * clear, set, cmd |
| * 16 such register sets in all |
| * See catapult_spec.pdf for detailed functionality |
| * Put each type in a single macro accessed by _num ? |
| */ |
| #define HOST_CMDSTS0_CLR_REG (APP_BLK_REG_ADDR + 0x500) |
| #define HOST_CMDSTS0_SET_REG (APP_BLK_REG_ADDR + 0x504) |
| #define HOST_CMDSTS0_REG (APP_BLK_REG_ADDR + 0x508) |
| #define HOST_CMDSTS1_CLR_REG (APP_BLK_REG_ADDR + 0x510) |
| #define HOST_CMDSTS1_SET_REG (APP_BLK_REG_ADDR + 0x514) |
| #define HOST_CMDSTS1_REG (APP_BLK_REG_ADDR + 0x518) |
| #define HOST_CMDSTS2_CLR_REG (APP_BLK_REG_ADDR + 0x520) |
| #define HOST_CMDSTS2_SET_REG (APP_BLK_REG_ADDR + 0x524) |
| #define HOST_CMDSTS2_REG (APP_BLK_REG_ADDR + 0x528) |
| #define HOST_CMDSTS3_CLR_REG (APP_BLK_REG_ADDR + 0x530) |
| #define HOST_CMDSTS3_SET_REG (APP_BLK_REG_ADDR + 0x534) |
| #define HOST_CMDSTS3_REG (APP_BLK_REG_ADDR + 0x538) |
| #define HOST_CMDSTS4_CLR_REG (APP_BLK_REG_ADDR + 0x540) |
| #define HOST_CMDSTS4_SET_REG (APP_BLK_REG_ADDR + 0x544) |
| #define HOST_CMDSTS4_REG (APP_BLK_REG_ADDR + 0x548) |
| #define HOST_CMDSTS5_CLR_REG (APP_BLK_REG_ADDR + 0x550) |
| #define HOST_CMDSTS5_SET_REG (APP_BLK_REG_ADDR + 0x554) |
| #define HOST_CMDSTS5_REG (APP_BLK_REG_ADDR + 0x558) |
| #define HOST_CMDSTS6_CLR_REG (APP_BLK_REG_ADDR + 0x560) |
| #define HOST_CMDSTS6_SET_REG (APP_BLK_REG_ADDR + 0x564) |
| #define HOST_CMDSTS6_REG (APP_BLK_REG_ADDR + 0x568) |
| #define HOST_CMDSTS7_CLR_REG (APP_BLK_REG_ADDR + 0x570) |
| #define HOST_CMDSTS7_SET_REG (APP_BLK_REG_ADDR + 0x574) |
| #define HOST_CMDSTS7_REG (APP_BLK_REG_ADDR + 0x578) |
| #define HOST_CMDSTS8_CLR_REG (APP_BLK_REG_ADDR + 0x580) |
| #define HOST_CMDSTS8_SET_REG (APP_BLK_REG_ADDR + 0x584) |
| #define HOST_CMDSTS8_REG (APP_BLK_REG_ADDR + 0x588) |
| #define HOST_CMDSTS9_CLR_REG (APP_BLK_REG_ADDR + 0x590) |
| #define HOST_CMDSTS9_SET_REG (APP_BLK_REG_ADDR + 0x594) |
| #define HOST_CMDSTS9_REG (APP_BLK_REG_ADDR + 0x598) |
| #define HOST_CMDSTS10_CLR_REG (APP_BLK_REG_ADDR + 0x5A0) |
| #define HOST_CMDSTS10_SET_REG (APP_BLK_REG_ADDR + 0x5A4) |
| #define HOST_CMDSTS10_REG (APP_BLK_REG_ADDR + 0x5A8) |
| #define HOST_CMDSTS11_CLR_REG (APP_BLK_REG_ADDR + 0x5B0) |
| #define HOST_CMDSTS11_SET_REG (APP_BLK_REG_ADDR + 0x5B4) |
| #define HOST_CMDSTS11_REG (APP_BLK_REG_ADDR + 0x5B8) |
| #define HOST_CMDSTS12_CLR_REG (APP_BLK_REG_ADDR + 0x5C0) |
| #define HOST_CMDSTS12_SET_REG (APP_BLK_REG_ADDR + 0x5C4) |
| #define HOST_CMDSTS12_REG (APP_BLK_REG_ADDR + 0x5C8) |
| #define HOST_CMDSTS13_CLR_REG (APP_BLK_REG_ADDR + 0x5D0) |
| #define HOST_CMDSTS13_SET_REG (APP_BLK_REG_ADDR + 0x5D4) |
| #define HOST_CMDSTS13_REG (APP_BLK_REG_ADDR + 0x5D8) |
| #define HOST_CMDSTS14_CLR_REG (APP_BLK_REG_ADDR + 0x5E0) |
| #define HOST_CMDSTS14_SET_REG (APP_BLK_REG_ADDR + 0x5E4) |
| #define HOST_CMDSTS14_REG (APP_BLK_REG_ADDR + 0x5E8) |
| #define HOST_CMDSTS15_CLR_REG (APP_BLK_REG_ADDR + 0x5F0) |
| #define HOST_CMDSTS15_SET_REG (APP_BLK_REG_ADDR + 0x5F4) |
| #define HOST_CMDSTS15_REG (APP_BLK_REG_ADDR + 0x5F8) |
| |
| /** |
| * LPU0 Block Register Address Offset from BAR0 |
| * Range 0x18000 - 0x18033 |
| */ |
| #define LPU0_BLK_REG_ADDR 0x00018000 |
| |
| /** |
| * LPU0 Registers |
| * Should they be directly used from host, |
| * except for diagnostics ? |
| * CTL_REG : Control register |
| * CMD_REG : Triggers exec. of cmd. in |
| * Mailbox memory |
| */ |
| #define LPU0_MBOX_CTL_REG (LPU0_BLK_REG_ADDR + 0x000) |
| #define LPU0_MBOX_CMD_REG (LPU0_BLK_REG_ADDR + 0x004) |
| #define LPU0_MBOX_LINK_0REG (LPU0_BLK_REG_ADDR + 0x008) |
| #define LPU1_MBOX_LINK_0REG (LPU0_BLK_REG_ADDR + 0x00c) |
| #define LPU0_MBOX_STATUS_0REG (LPU0_BLK_REG_ADDR + 0x010) |
| #define LPU1_MBOX_STATUS_0REG (LPU0_BLK_REG_ADDR + 0x014) |
| #define LPU0_ERR_STATUS_REG (LPU0_BLK_REG_ADDR + 0x018) |
| #define LPU0_ERR_SET_REG (LPU0_BLK_REG_ADDR + 0x020) |
| |
| /** |
| * LPU1 Block Register Address Offset from BAR0 |
| * Range 0x18400 - 0x18433 |
| */ |
| #define LPU1_BLK_REG_ADDR 0x00018400 |
| |
| /** |
| * LPU1 Registers |
| * Same as LPU0 registers above |
| */ |
| #define LPU1_MBOX_CTL_REG (LPU1_BLK_REG_ADDR + 0x000) |
| #define LPU1_MBOX_CMD_REG (LPU1_BLK_REG_ADDR + 0x004) |
| #define LPU0_MBOX_LINK_1REG (LPU1_BLK_REG_ADDR + 0x008) |
| #define LPU1_MBOX_LINK_1REG (LPU1_BLK_REG_ADDR + 0x00c) |
| #define LPU0_MBOX_STATUS_1REG (LPU1_BLK_REG_ADDR + 0x010) |
| #define LPU1_MBOX_STATUS_1REG (LPU1_BLK_REG_ADDR + 0x014) |
| #define LPU1_ERR_STATUS_REG (LPU1_BLK_REG_ADDR + 0x018) |
| #define LPU1_ERR_SET_REG (LPU1_BLK_REG_ADDR + 0x020) |
| |
| /** |
| * PSS Block Register Address Offset from BAR0 |
| * Range 0x18800 - 0x188DB |
| */ |
| #define PSS_BLK_REG_ADDR 0x00018800 |
| |
| /** |
| * PSS Registers |
| * For details, see catapult_spec.pdf |
| * ERR_STATUS_REG : Indicates error in PSS module |
| * RAM_ERR_STATUS_REG : Indicates RAM module that detected error |
| */ |
| #define ERR_STATUS_SET (PSS_BLK_REG_ADDR + 0x018) |
| #define PSS_RAM_ERR_STATUS_REG (PSS_BLK_REG_ADDR + 0x01C) |
| |
| /** |
| * PSS Semaphore Lock Registers, total 16 |
| * First read when unlocked returns 0, |
| * and is set to 1, atomically. |
| * Subsequent reads returns 1. |
| * To clear set the value to 0. |
| * Range : 0x20 to 0x5c |
| */ |
| #define PSS_SEM_LOCK_REG(_num) \ |
| (PSS_BLK_REG_ADDR + 0x020 + ((_num) << 2)) |
| |
| /** |
| * PSS Semaphore Status Registers, |
| * corresponding to the lock registers above |
| */ |
| #define PSS_SEM_STATUS_REG(_num) \ |
| (PSS_BLK_REG_ADDR + 0x060 + ((_num) << 2)) |
| |
| /** |
| * Catapult CPQ Registers |
| * Defines for Mailbox Registers |
| * Used to send mailbox commands to firmware from |
| * host. The data part is written to the MBox |
| * memory, registers are used to indicate that |
| * a commnad is resident in memory. |
| * |
| * Note : LPU0<->LPU1 mailboxes are not listed here |
| */ |
| #define CPQ_BLK_REG_ADDR 0x00019000 |
| |
| #define HOSTFN0_LPU0_MBOX1_CMD_STAT (CPQ_BLK_REG_ADDR + 0x130) |
| #define HOSTFN0_LPU1_MBOX1_CMD_STAT (CPQ_BLK_REG_ADDR + 0x134) |
| #define LPU0_HOSTFN0_MBOX1_CMD_STAT (CPQ_BLK_REG_ADDR + 0x138) |
| #define LPU1_HOSTFN0_MBOX1_CMD_STAT (CPQ_BLK_REG_ADDR + 0x13C) |
| |
| #define HOSTFN1_LPU0_MBOX1_CMD_STAT (CPQ_BLK_REG_ADDR + 0x140) |
| #define HOSTFN1_LPU1_MBOX1_CMD_STAT (CPQ_BLK_REG_ADDR + 0x144) |
| #define LPU0_HOSTFN1_MBOX1_CMD_STAT (CPQ_BLK_REG_ADDR + 0x148) |
| #define LPU1_HOSTFN1_MBOX1_CMD_STAT (CPQ_BLK_REG_ADDR + 0x14C) |
| |
| #define HOSTFN2_LPU0_MBOX1_CMD_STAT (CPQ_BLK_REG_ADDR + 0x170) |
| #define HOSTFN2_LPU1_MBOX1_CMD_STAT (CPQ_BLK_REG_ADDR + 0x174) |
| #define LPU0_HOSTFN2_MBOX1_CMD_STAT (CPQ_BLK_REG_ADDR + 0x178) |
| #define LPU1_HOSTFN2_MBOX1_CMD_STAT (CPQ_BLK_REG_ADDR + 0x17C) |
| |
| #define HOSTFN3_LPU0_MBOX1_CMD_STAT (CPQ_BLK_REG_ADDR + 0x180) |
| #define HOSTFN3_LPU1_MBOX1_CMD_STAT (CPQ_BLK_REG_ADDR + 0x184) |
| #define LPU0_HOSTFN3_MBOX1_CMD_STAT (CPQ_BLK_REG_ADDR + 0x188) |
| #define LPU1_HOSTFN3_MBOX1_CMD_STAT (CPQ_BLK_REG_ADDR + 0x18C) |
| |
| /* Host Function Force Parity Error Registers */ |
| #define HOSTFN0_LPU_FORCE_PERR (CPQ_BLK_REG_ADDR + 0x120) |
| #define HOSTFN1_LPU_FORCE_PERR (CPQ_BLK_REG_ADDR + 0x124) |
| #define HOSTFN2_LPU_FORCE_PERR (CPQ_BLK_REG_ADDR + 0x128) |
| #define HOSTFN3_LPU_FORCE_PERR (CPQ_BLK_REG_ADDR + 0x12C) |
| |
| /* LL Port[0|1] Halt Mask Registers */ |
| #define LL_HALT_MSK_P0 (CPQ_BLK_REG_ADDR + 0x1A0) |
| #define LL_HALT_MSK_P1 (CPQ_BLK_REG_ADDR + 0x1B0) |
| |
| /* LL Port[0|1] Error Mask Registers */ |
| #define LL_ERR_MSK_P0 (CPQ_BLK_REG_ADDR + 0x1D0) |
| #define LL_ERR_MSK_P1 (CPQ_BLK_REG_ADDR + 0x1D4) |
| |
| /* EMC FLI (Flash Controller) Block Register Address Offset from BAR0 */ |
| #define FLI_BLK_REG_ADDR 0x0001D000 |
| |
| /* EMC FLI Registers */ |
| #define FLI_CMD_REG (FLI_BLK_REG_ADDR + 0x000) |
| #define FLI_ADDR_REG (FLI_BLK_REG_ADDR + 0x004) |
| #define FLI_CTL_REG (FLI_BLK_REG_ADDR + 0x008) |
| #define FLI_WRDATA_REG (FLI_BLK_REG_ADDR + 0x00C) |
| #define FLI_RDDATA_REG (FLI_BLK_REG_ADDR + 0x010) |
| #define FLI_DEV_STATUS_REG (FLI_BLK_REG_ADDR + 0x014) |
| #define FLI_SIG_WD_REG (FLI_BLK_REG_ADDR + 0x018) |
| |
| /** |
| * RO register |
| * 31:16 -- Vendor Id |
| * 15:0 -- Device Id |
| */ |
| #define FLI_DEV_VENDOR_REG (FLI_BLK_REG_ADDR + 0x01C) |
| #define FLI_ERR_STATUS_REG (FLI_BLK_REG_ADDR + 0x020) |
| |
| /** |
| * RAD (RxAdm) Block Register Address Offset from BAR0 |
| * RAD0 Range : 0x20000 - 0x203FF |
| * RAD1 Range : 0x20400 - 0x207FF |
| */ |
| #define RAD0_BLK_REG_ADDR 0x00020000 |
| #define RAD1_BLK_REG_ADDR 0x00020400 |
| |
| /* RAD0 Registers */ |
| #define RAD0_CTL_REG (RAD0_BLK_REG_ADDR + 0x000) |
| #define RAD0_PE_PARM_REG (RAD0_BLK_REG_ADDR + 0x004) |
| #define RAD0_BCN_REG (RAD0_BLK_REG_ADDR + 0x008) |
| |
| /* Default function ID register */ |
| #define RAD0_DEFAULT_REG (RAD0_BLK_REG_ADDR + 0x00C) |
| |
| /* Default promiscuous ID register */ |
| #define RAD0_PROMISC_REG (RAD0_BLK_REG_ADDR + 0x010) |
| |
| #define RAD0_BCNQ_REG (RAD0_BLK_REG_ADDR + 0x014) |
| |
| /* |
| * This register selects 1 of 8 PM Q's using |
| * VLAN pri, for non-BCN packets without a VLAN tag |
| */ |
| #define RAD0_DEFAULTQ_REG (RAD0_BLK_REG_ADDR + 0x018) |
| |
| #define RAD0_ERR_STS (RAD0_BLK_REG_ADDR + 0x01C) |
| #define RAD0_SET_ERR_STS (RAD0_BLK_REG_ADDR + 0x020) |
| #define RAD0_ERR_INT_EN (RAD0_BLK_REG_ADDR + 0x024) |
| #define RAD0_FIRST_ERR (RAD0_BLK_REG_ADDR + 0x028) |
| #define RAD0_FORCE_ERR (RAD0_BLK_REG_ADDR + 0x02C) |
| |
| #define RAD0_IF_RCVD (RAD0_BLK_REG_ADDR + 0x030) |
| #define RAD0_IF_RCVD_OCTETS_HIGH (RAD0_BLK_REG_ADDR + 0x034) |
| #define RAD0_IF_RCVD_OCTETS_LOW (RAD0_BLK_REG_ADDR + 0x038) |
| #define RAD0_IF_RCVD_VLAN (RAD0_BLK_REG_ADDR + 0x03C) |
| #define RAD0_IF_RCVD_UCAST (RAD0_BLK_REG_ADDR + 0x040) |
| #define RAD0_IF_RCVD_UCAST_OCTETS_HIGH (RAD0_BLK_REG_ADDR + 0x044) |
| #define RAD0_IF_RCVD_UCAST_OCTETS_LOW (RAD0_BLK_REG_ADDR + 0x048) |
| #define RAD0_IF_RCVD_UCAST_VLAN (RAD0_BLK_REG_ADDR + 0x04C) |
| #define RAD0_IF_RCVD_MCAST (RAD0_BLK_REG_ADDR + 0x050) |
| #define RAD0_IF_RCVD_MCAST_OCTETS_HIGH (RAD0_BLK_REG_ADDR + 0x054) |
| #define RAD0_IF_RCVD_MCAST_OCTETS_LOW (RAD0_BLK_REG_ADDR + 0x058) |
| #define RAD0_IF_RCVD_MCAST_VLAN (RAD0_BLK_REG_ADDR + 0x05C) |
| #define RAD0_IF_RCVD_BCAST (RAD0_BLK_REG_ADDR + 0x060) |
| #define RAD0_IF_RCVD_BCAST_OCTETS_HIGH (RAD0_BLK_REG_ADDR + 0x064) |
| #define RAD0_IF_RCVD_BCAST_OCTETS_LOW (RAD0_BLK_REG_ADDR + 0x068) |
| #define RAD0_IF_RCVD_BCAST_VLAN (RAD0_BLK_REG_ADDR + 0x06C) |
| #define RAD0_DROPPED_FRAMES (RAD0_BLK_REG_ADDR + 0x070) |
| |
| #define RAD0_MAC_MAN_1H (RAD0_BLK_REG_ADDR + 0x080) |
| #define RAD0_MAC_MAN_1L (RAD0_BLK_REG_ADDR + 0x084) |
| #define RAD0_MAC_MAN_2H (RAD0_BLK_REG_ADDR + 0x088) |
| #define RAD0_MAC_MAN_2L (RAD0_BLK_REG_ADDR + 0x08C) |
| #define RAD0_MAC_MAN_3H (RAD0_BLK_REG_ADDR + 0x090) |
| #define RAD0_MAC_MAN_3L (RAD0_BLK_REG_ADDR + 0x094) |
| #define RAD0_MAC_MAN_4H (RAD0_BLK_REG_ADDR + 0x098) |
| #define RAD0_MAC_MAN_4L (RAD0_BLK_REG_ADDR + 0x09C) |
| |
| #define RAD0_LAST4_IP (RAD0_BLK_REG_ADDR + 0x100) |
| |
| /* RAD1 Registers */ |
| #define RAD1_CTL_REG (RAD1_BLK_REG_ADDR + 0x000) |
| #define RAD1_PE_PARM_REG (RAD1_BLK_REG_ADDR + 0x004) |
| #define RAD1_BCN_REG (RAD1_BLK_REG_ADDR + 0x008) |
| |
| /* Default function ID register */ |
| #define RAD1_DEFAULT_REG (RAD1_BLK_REG_ADDR + 0x00C) |
| |
| /* Promiscuous function ID register */ |
| #define RAD1_PROMISC_REG (RAD1_BLK_REG_ADDR + 0x010) |
| |
| #define RAD1_BCNQ_REG (RAD1_BLK_REG_ADDR + 0x014) |
| |
| /* |
| * This register selects 1 of 8 PM Q's using |
| * VLAN pri, for non-BCN packets without a VLAN tag |
| */ |
| #define RAD1_DEFAULTQ_REG (RAD1_BLK_REG_ADDR + 0x018) |
| |
| #define RAD1_ERR_STS (RAD1_BLK_REG_ADDR + 0x01C) |
| #define RAD1_SET_ERR_STS (RAD1_BLK_REG_ADDR + 0x020) |
| #define RAD1_ERR_INT_EN (RAD1_BLK_REG_ADDR + 0x024) |
| |
| /** |
| * TXA Block Register Address Offset from BAR0 |
| * TXA0 Range : 0x21000 - 0x213FF |
| * TXA1 Range : 0x21400 - 0x217FF |
| */ |
| #define TXA0_BLK_REG_ADDR 0x00021000 |
| #define TXA1_BLK_REG_ADDR 0x00021400 |
| |
| /* TXA Registers */ |
| #define TXA0_CTRL_REG (TXA0_BLK_REG_ADDR + 0x000) |
| #define TXA1_CTRL_REG (TXA1_BLK_REG_ADDR + 0x000) |
| |
| /** |
| * TSO Sequence # Registers (RO) |
| * Total 8 (for 8 queues) |
| * Holds the last seq.# for TSO frames |
| * See catapult_spec.pdf for more details |
| */ |
| #define TXA0_TSO_TCP_SEQ_REG(_num) \ |
| (TXA0_BLK_REG_ADDR + 0x020 + ((_num) << 2)) |
| |
| #define TXA1_TSO_TCP_SEQ_REG(_num) \ |
| (TXA1_BLK_REG_ADDR + 0x020 + ((_num) << 2)) |
| |
| /** |
| * TSO IP ID # Registers (RO) |
| * Total 8 (for 8 queues) |
| * Holds the last IP ID for TSO frames |
| * See catapult_spec.pdf for more details |
| */ |
| #define TXA0_TSO_IP_INFO_REG(_num) \ |
| (TXA0_BLK_REG_ADDR + 0x040 + ((_num) << 2)) |
| |
| #define TXA1_TSO_IP_INFO_REG(_num) \ |
| (TXA1_BLK_REG_ADDR + 0x040 + ((_num) << 2)) |
| |
| /** |
| * RXA Block Register Address Offset from BAR0 |
| * RXA0 Range : 0x21800 - 0x21BFF |
| * RXA1 Range : 0x21C00 - 0x21FFF |
| */ |
| #define RXA0_BLK_REG_ADDR 0x00021800 |
| #define RXA1_BLK_REG_ADDR 0x00021C00 |
| |
| /* RXA Registers */ |
| #define RXA0_CTL_REG (RXA0_BLK_REG_ADDR + 0x040) |
| #define RXA1_CTL_REG (RXA1_BLK_REG_ADDR + 0x040) |
| |
| /** |
| * PPLB Block Register Address Offset from BAR0 |
| * PPLB0 Range : 0x22000 - 0x223FF |
| * PPLB1 Range : 0x22400 - 0x227FF |
| */ |
| #define PLB0_BLK_REG_ADDR 0x00022000 |
| #define PLB1_BLK_REG_ADDR 0x00022400 |
| |
| /** |
| * PLB Registers |
| * Holds RL timer used time stamps in RLT tagged frames |
| */ |
| #define PLB0_ECM_TIMER_REG (PLB0_BLK_REG_ADDR + 0x05C) |
| #define PLB1_ECM_TIMER_REG (PLB1_BLK_REG_ADDR + 0x05C) |
| |
| /* Controls the rate-limiter on each of the priority class */ |
| #define PLB0_RL_CTL (PLB0_BLK_REG_ADDR + 0x060) |
| #define PLB1_RL_CTL (PLB1_BLK_REG_ADDR + 0x060) |
| |
| /** |
| * Max byte register, total 8, 0-7 |
| * see catapult_spec.pdf for details |
| */ |
| #define PLB0_RL_MAX_BC(_num) \ |
| (PLB0_BLK_REG_ADDR + 0x064 + ((_num) << 2)) |
| #define PLB1_RL_MAX_BC(_num) \ |
| (PLB1_BLK_REG_ADDR + 0x064 + ((_num) << 2)) |
| |
| /** |
| * RL Time Unit Register for priority 0-7 |
| * 4 bits per priority |
| * (2^rl_unit)*1us is the actual time period |
| */ |
| #define PLB0_RL_TU_PRIO (PLB0_BLK_REG_ADDR + 0x084) |
| #define PLB1_RL_TU_PRIO (PLB1_BLK_REG_ADDR + 0x084) |
| |
| /** |
| * RL byte count register, |
| * bytes transmitted in (rl_unit*1)us time period |
| * 1 per priority, 8 in all, 0-7. |
| */ |
| #define PLB0_RL_BYTE_CNT(_num) \ |
| (PLB0_BLK_REG_ADDR + 0x088 + ((_num) << 2)) |
| #define PLB1_RL_BYTE_CNT(_num) \ |
| (PLB1_BLK_REG_ADDR + 0x088 + ((_num) << 2)) |
| |
| /** |
| * RL Min factor register |
| * 2 bits per priority, |
| * 4 factors possible: 1, 0.5, 0.25, 0 |
| * 2'b00 - 0; 2'b01 - 0.25; 2'b10 - 0.5; 2'b11 - 1 |
| */ |
| #define PLB0_RL_MIN_REG (PLB0_BLK_REG_ADDR + 0x0A8) |
| #define PLB1_RL_MIN_REG (PLB1_BLK_REG_ADDR + 0x0A8) |
| |
| /** |
| * RL Max factor register |
| * 2 bits per priority, |
| * 4 factors possible: 1, 0.5, 0.25, 0 |
| * 2'b00 - 0; 2'b01 - 0.25; 2'b10 - 0.5; 2'b11 - 1 |
| */ |
| #define PLB0_RL_MAX_REG (PLB0_BLK_REG_ADDR + 0x0AC) |
| #define PLB1_RL_MAX_REG (PLB1_BLK_REG_ADDR + 0x0AC) |
| |
| /* MAC SERDES Address Paging register */ |
| #define PLB0_EMS_ADD_REG (PLB0_BLK_REG_ADDR + 0xD0) |
| #define PLB1_EMS_ADD_REG (PLB1_BLK_REG_ADDR + 0xD0) |
| |
| /* LL EMS Registers */ |
| #define LL_EMS0_BLK_REG_ADDR 0x00026800 |
| #define LL_EMS1_BLK_REG_ADDR 0x00026C00 |
| |
| /** |
| * BPC Block Register Address Offset from BAR0 |
| * BPC0 Range : 0x23000 - 0x233FF |
| * BPC1 Range : 0x23400 - 0x237FF |
| */ |
| #define BPC0_BLK_REG_ADDR 0x00023000 |
| #define BPC1_BLK_REG_ADDR 0x00023400 |
| |
| /** |
| * PMM Block Register Address Offset from BAR0 |
| * PMM0 Range : 0x23800 - 0x23BFF |
| * PMM1 Range : 0x23C00 - 0x23FFF |
| */ |
| #define PMM0_BLK_REG_ADDR 0x00023800 |
| #define PMM1_BLK_REG_ADDR 0x00023C00 |
| |
| /** |
| * HQM Block Register Address Offset from BAR0 |
| * HQM0 Range : 0x24000 - 0x243FF |
| * HQM1 Range : 0x24400 - 0x247FF |
| */ |
| #define HQM0_BLK_REG_ADDR 0x00024000 |
| #define HQM1_BLK_REG_ADDR 0x00024400 |
| |
| /** |
| * HQM Control Register |
| * Controls some aspects of IB |
| * See catapult_spec.pdf for details |
| */ |
| #define HQM0_CTL_REG (HQM0_BLK_REG_ADDR + 0x000) |
| #define HQM1_CTL_REG (HQM1_BLK_REG_ADDR + 0x000) |
| |
| /** |
| * HQM Stop Q Semaphore Registers. |
| * Only one Queue resource can be stopped at |
| * any given time. This register controls access |
| * to the single stop Q resource. |
| * See catapult_spec.pdf for details |
| */ |
| #define HQM0_RXQ_STOP_SEM (HQM0_BLK_REG_ADDR + 0x028) |
| #define HQM0_TXQ_STOP_SEM (HQM0_BLK_REG_ADDR + 0x02C) |
| #define HQM1_RXQ_STOP_SEM (HQM1_BLK_REG_ADDR + 0x028) |
| #define HQM1_TXQ_STOP_SEM (HQM1_BLK_REG_ADDR + 0x02C) |
| |
| /** |
| * LUT Block Register Address Offset from BAR0 |
| * LUT0 Range : 0x25800 - 0x25BFF |
| * LUT1 Range : 0x25C00 - 0x25FFF |
| */ |
| #define LUT0_BLK_REG_ADDR 0x00025800 |
| #define LUT1_BLK_REG_ADDR 0x00025C00 |
| |
| /** |
| * LUT Registers |
| * See catapult_spec.pdf for details |
| */ |
| #define LUT0_ERR_STS (LUT0_BLK_REG_ADDR + 0x000) |
| #define LUT1_ERR_STS (LUT1_BLK_REG_ADDR + 0x000) |
| #define LUT0_SET_ERR_STS (LUT0_BLK_REG_ADDR + 0x004) |
| #define LUT1_SET_ERR_STS (LUT1_BLK_REG_ADDR + 0x004) |
| |
| /** |
| * TRC (Debug/Trace) Register Offset from BAR0 |
| * Range : 0x26000 -- 0x263FFF |
| */ |
| #define TRC_BLK_REG_ADDR 0x00026000 |
| |
| /** |
| * TRC Registers |
| * See catapult_spec.pdf for details of each |
| */ |
| #define TRC_CTL_REG (TRC_BLK_REG_ADDR + 0x000) |
| #define TRC_MODS_REG (TRC_BLK_REG_ADDR + 0x004) |
| #define TRC_TRGC_REG (TRC_BLK_REG_ADDR + 0x008) |
| #define TRC_CNT1_REG (TRC_BLK_REG_ADDR + 0x010) |
| #define TRC_CNT2_REG (TRC_BLK_REG_ADDR + 0x014) |
| #define TRC_NXTS_REG (TRC_BLK_REG_ADDR + 0x018) |
| #define TRC_DIRR_REG (TRC_BLK_REG_ADDR + 0x01C) |
| |
| /** |
| * TRC Trigger match filters, total 10 |
| * Determines the trigger condition |
| */ |
| #define TRC_TRGM_REG(_num) \ |
| (TRC_BLK_REG_ADDR + 0x040 + ((_num) << 2)) |
| |
| /** |
| * TRC Next State filters, total 10 |
| * Determines the next state conditions |
| */ |
| #define TRC_NXTM_REG(_num) \ |
| (TRC_BLK_REG_ADDR + 0x080 + ((_num) << 2)) |
| |
| /** |
| * TRC Store Match filters, total 10 |
| * Determines the store conditions |
| */ |
| #define TRC_STRM_REG(_num) \ |
| (TRC_BLK_REG_ADDR + 0x0C0 + ((_num) << 2)) |
| |
| /* DOORBELLS ACCESS */ |
| |
| /** |
| * Catapult doorbells |
| * Each doorbell-queue set has |
| * 1 RxQ, 1 TxQ, 2 IBs in that order |
| * Size of each entry in 32 bytes, even though only 1 word |
| * is used. For Non-VM case each doorbell-q set is |
| * separated by 128 bytes, for VM case it is separated |
| * by 4K bytes |
| * Non VM case Range : 0x38000 - 0x39FFF |
| * VM case Range : 0x100000 - 0x11FFFF |
| * The range applies to both HQMs |
| */ |
| #define HQM_DOORBELL_BLK_BASE_ADDR 0x00038000 |
| #define HQM_DOORBELL_VM_BLK_BASE_ADDR 0x00100000 |
| |
| /* MEMORY ACCESS */ |
| |
| /** |
| * Catapult H/W Block Memory Access Address |
| * To the host a memory space of 32K (page) is visible |
| * at a time. The address range is from 0x08000 to 0x0FFFF |
| */ |
| #define HW_BLK_HOST_MEM_ADDR 0x08000 |
| |
| /** |
| * Catapult LUT Memory Access Page Numbers |
| * Range : LUT0 0xa0-0xa1 |
| * LUT1 0xa2-0xa3 |
| */ |
| #define LUT0_MEM_BLK_BASE_PG_NUM 0x000000A0 |
| #define LUT1_MEM_BLK_BASE_PG_NUM 0x000000A2 |
| |
| /** |
| * Catapult RxFn Database Memory Block Base Offset |
| * |
| * The Rx function database exists in LUT block. |
| * In PCIe space this is accessible as a 256x32 |
| * bit block. Each entry in this database is 4 |
| * (4 byte) words. Max. entries is 64. |
| * Address of an entry corresponding to a function |
| * = base_addr + (function_no. * 16) |
| */ |
| #define RX_FNDB_RAM_BASE_OFFSET 0x0000B400 |
| |
| /** |
| * Catapult TxFn Database Memory Block Base Offset Address |
| * |
| * The Tx function database exists in LUT block. |
| * In PCIe space this is accessible as a 64x32 |
| * bit block. Each entry in this database is 1 |
| * (4 byte) word. Max. entries is 64. |
| * Address of an entry corresponding to a function |
| * = base_addr + (function_no. * 4) |
| */ |
| #define TX_FNDB_RAM_BASE_OFFSET 0x0000B800 |
| |
| /** |
| * Catapult Unicast CAM Base Offset Address |
| * |
| * Exists in LUT memory space. |
| * Shared by both the LL & FCoE driver. |
| * Size is 256x48 bits; mapped to PCIe space |
| * 512x32 bit blocks. For each address, bits |
| * are written in the order : [47:32] and then |
| * [31:0]. |
| */ |
| #define UCAST_CAM_BASE_OFFSET 0x0000A800 |
| |
| /** |
| * Catapult Unicast RAM Base Offset Address |
| * |
| * Exists in LUT memory space. |
| * Shared by both the LL & FCoE driver. |
| * Size is 256x9 bits. |
| */ |
| #define UCAST_RAM_BASE_OFFSET 0x0000B000 |
| |
| /** |
| * Catapult Mulicast CAM Base Offset Address |
| * |
| * Exists in LUT memory space. |
| * Shared by both the LL & FCoE driver. |
| * Size is 256x48 bits; mapped to PCIe space |
| * 512x32 bit blocks. For each address, bits |
| * are written in the order : [47:32] and then |
| * [31:0]. |
| */ |
| #define MCAST_CAM_BASE_OFFSET 0x0000A000 |
| |
| /** |
| * Catapult VLAN RAM Base Offset Address |
| * |
| * Exists in LUT memory space. |
| * Size is 4096x66 bits; mapped to PCIe space as |
| * 8192x32 bit blocks. |
| * All the 4K entries are within the address range |
| * 0x0000 to 0x8000, so in the first LUT page. |
| */ |
| #define VLAN_RAM_BASE_OFFSET 0x00000000 |
| |
| /** |
| * Catapult Tx Stats RAM Base Offset Address |
| * |
| * Exists in LUT memory space. |
| * Size is 1024x33 bits; |
| * Each Tx function has 64 bytes of space |
| */ |
| #define TX_STATS_RAM_BASE_OFFSET 0x00009000 |
| |
| /** |
| * Catapult Rx Stats RAM Base Offset Address |
| * |
| * Exists in LUT memory space. |
| * Size is 1024x33 bits; |
| * Each Rx function has 64 bytes of space |
| */ |
| #define RX_STATS_RAM_BASE_OFFSET 0x00008000 |
| |
| /* Catapult RXA Memory Access Page Numbers */ |
| #define RXA0_MEM_BLK_BASE_PG_NUM 0x0000008C |
| #define RXA1_MEM_BLK_BASE_PG_NUM 0x0000008D |
| |
| /** |
| * Catapult Multicast Vector Table Base Offset Address |
| * |
| * Exists in RxA memory space. |
| * Organized as 512x65 bit block. |
| * However for each entry 16 bytes allocated (power of 2) |
| * Total size 512*16 bytes. |
| * There are two logical divisions, 256 entries each : |
| * a) Entries 0x00 to 0xff (256) -- Approx. MVT |
| * Offset 0x000 to 0xFFF |
| * b) Entries 0x100 to 0x1ff (256) -- Exact MVT |
| * Offsets 0x1000 to 0x1FFF |
| */ |
| #define MCAST_APPROX_MVT_BASE_OFFSET 0x00000000 |
| #define MCAST_EXACT_MVT_BASE_OFFSET 0x00001000 |
| |
| /** |
| * Catapult RxQ Translate Table (RIT) Base Offset Address |
| * |
| * Exists in RxA memory space |
| * Total no. of entries 64 |
| * Each entry is 1 (4 byte) word. |
| * 31:12 -- Reserved |
| * 11:0 -- Two 6 bit RxQ Ids |
| */ |
| #define FUNCTION_TO_RXQ_TRANSLATE 0x00002000 |
| |
| /* Catapult RxAdm (RAD) Memory Access Page Numbers */ |
| #define RAD0_MEM_BLK_BASE_PG_NUM 0x00000086 |
| #define RAD1_MEM_BLK_BASE_PG_NUM 0x00000087 |
| |
| /** |
| * Catapult RSS Table Base Offset Address |
| * |
| * Exists in RAD memory space. |
| * Each entry is 352 bits, but aligned on |
| * 64 byte (512 bit) boundary. Accessed |
| * 4 byte words, the whole entry can be |
| * broken into 11 word accesses. |
| */ |
| #define RSS_TABLE_BASE_OFFSET 0x00000800 |
| |
| /** |
| * Catapult CPQ Block Page Number |
| * This value is written to the page number registers |
| * to access the memory associated with the mailboxes. |
| */ |
| #define CPQ_BLK_PG_NUM 0x00000005 |
| |
| /** |
| * Clarification : |
| * LL functions are 2 & 3; can HostFn0/HostFn1 |
| * <-> LPU0/LPU1 memories be used ? |
| */ |
| /** |
| * Catapult HostFn0/HostFn1 to LPU0/LPU1 Mbox memory |
| * Per catapult_spec.pdf, the offset of the mbox |
| * memory is in the register space at an offset of 0x200 |
| */ |
| #define CPQ_BLK_REG_MBOX_ADDR (CPQ_BLK_REG_ADDR + 0x200) |
| |
| #define HOSTFN_LPU_MBOX (CPQ_BLK_REG_MBOX_ADDR + 0x000) |
| |
| /* Catapult LPU0/LPU1 to HostFn0/HostFn1 Mbox memory */ |
| #define LPU_HOSTFN_MBOX (CPQ_BLK_REG_MBOX_ADDR + 0x080) |
| |
| /** |
| * Catapult HQM Block Page Number |
| * This is written to the page number register for |
| * the appropriate function to access the memory |
| * associated with HQM |
| */ |
| #define HQM0_BLK_PG_NUM 0x00000096 |
| #define HQM1_BLK_PG_NUM 0x00000097 |
| |
| /** |
| * Note that TxQ and RxQ entries are interlaced |
| * the HQM memory, i.e RXQ0, TXQ0, RXQ1, TXQ1.. etc. |
| */ |
| |
| #define HQM_RXTX_Q_RAM_BASE_OFFSET 0x00004000 |
| |
| /** |
| * CQ Memory |
| * Exists in HQM Memory space |
| * Each entry is 16 (4 byte) words of which |
| * only 12 words are used for configuration |
| * Total 64 entries per HQM memory space |
| */ |
| #define HQM_CQ_RAM_BASE_OFFSET 0x00006000 |
| |
| /** |
| * Interrupt Block (IB) Memory |
| * Exists in HQM Memory space |
| * Each entry is 8 (4 byte) words of which |
| * only 5 words are used for configuration |
| * Total 128 entries per HQM memory space |
| */ |
| #define HQM_IB_RAM_BASE_OFFSET 0x00001000 |
| |
| /** |
| * Index Table (IT) Memory |
| * Exists in HQM Memory space |
| * Each entry is 1 (4 byte) word which |
| * is used for configuration |
| * Total 128 entries per HQM memory space |
| */ |
| #define HQM_INDX_TBL_RAM_BASE_OFFSET 0x00002000 |
| |
| /** |
| * PSS Block Memory Page Number |
| * This is written to the appropriate page number |
| * register to access the CPU memory. |
| * Also known as the PSS secondary memory (SMEM). |
| * Range : 0x180 to 0x1CF |
| * See catapult_spec.pdf for details |
| */ |
| #define PSS_BLK_PG_NUM 0x00000180 |
| |
| /** |
| * Offsets of different instances of PSS SMEM |
| * 2.5M of continuous 1T memory space : 2 blocks |
| * of 1M each (32 pages each, page=32KB) and 4 smaller |
| * blocks of 128K each (4 pages each, page=32KB) |
| * PSS_LMEM_INST0 is used for firmware download |
| */ |
| #define PSS_LMEM_INST0 0x00000000 |
| #define PSS_LMEM_INST1 0x00100000 |
| #define PSS_LMEM_INST2 0x00200000 |
| #define PSS_LMEM_INST3 0x00220000 |
| #define PSS_LMEM_INST4 0x00240000 |
| #define PSS_LMEM_INST5 0x00260000 |
| |
| #define BNA_PCI_REG_CT_ADDRSZ (0x40000) |
| |
| #define BNA_GET_PAGE_NUM(_base_page, _offset) \ |
| ((_base_page) + ((_offset) >> 15)) |
| |
| #define BNA_GET_PAGE_OFFSET(_offset) \ |
| ((_offset) & 0x7fff) |
| |
| #define BNA_GET_MEM_BASE_ADDR(_bar0, _base_offset) \ |
| ((_bar0) + HW_BLK_HOST_MEM_ADDR \ |
| + BNA_GET_PAGE_OFFSET((_base_offset))) |
| |
| #define BNA_GET_VLAN_MEM_ENTRY_ADDR(_bar0, _fn_id, _vlan_id)\ |
| (_bar0 + (HW_BLK_HOST_MEM_ADDR) \ |
| + (BNA_GET_PAGE_OFFSET(VLAN_RAM_BASE_OFFSET)) \ |
| + (((_fn_id) & 0x3f) << 9) \ |
| + (((_vlan_id) & 0xfe0) >> 3)) |
| |
| /** |
| * |
| * Interrupt related bits, flags and macros |
| * |
| */ |
| |
| #define __LPU02HOST_MBOX0_STATUS_BITS 0x00100000 |
| #define __LPU12HOST_MBOX0_STATUS_BITS 0x00200000 |
| #define __LPU02HOST_MBOX1_STATUS_BITS 0x00400000 |
| #define __LPU12HOST_MBOX1_STATUS_BITS 0x00800000 |
| |
| #define __LPU02HOST_MBOX0_MASK_BITS 0x00100000 |
| #define __LPU12HOST_MBOX0_MASK_BITS 0x00200000 |
| #define __LPU02HOST_MBOX1_MASK_BITS 0x00400000 |
| #define __LPU12HOST_MBOX1_MASK_BITS 0x00800000 |
| |
| #define __LPU2HOST_MBOX_MASK_BITS \ |
| (__LPU02HOST_MBOX0_MASK_BITS | __LPU02HOST_MBOX1_MASK_BITS | \ |
| __LPU12HOST_MBOX0_MASK_BITS | __LPU12HOST_MBOX1_MASK_BITS) |
| |
| #define __LPU2HOST_IB_STATUS_BITS 0x0000ffff |
| |
| #define BNA_IS_LPU0_MBOX_INTR(_intr_status) \ |
| ((_intr_status) & (__LPU02HOST_MBOX0_STATUS_BITS | \ |
| __LPU02HOST_MBOX1_STATUS_BITS)) |
| |
| #define BNA_IS_LPU1_MBOX_INTR(_intr_status) \ |
| ((_intr_status) & (__LPU12HOST_MBOX0_STATUS_BITS | \ |
| __LPU12HOST_MBOX1_STATUS_BITS)) |
| |
| #define BNA_IS_MBOX_INTR(_intr_status) \ |
| ((_intr_status) & \ |
| (__LPU02HOST_MBOX0_STATUS_BITS | \ |
| __LPU02HOST_MBOX1_STATUS_BITS | \ |
| __LPU12HOST_MBOX0_STATUS_BITS | \ |
| __LPU12HOST_MBOX1_STATUS_BITS)) |
| |
| #define __EMC_ERROR_STATUS_BITS 0x00010000 |
| #define __LPU0_ERROR_STATUS_BITS 0x00020000 |
| #define __LPU1_ERROR_STATUS_BITS 0x00040000 |
| #define __PSS_ERROR_STATUS_BITS 0x00080000 |
| |
| #define __HALT_STATUS_BITS 0x01000000 |
| |
| #define __EMC_ERROR_MASK_BITS 0x00010000 |
| #define __LPU0_ERROR_MASK_BITS 0x00020000 |
| #define __LPU1_ERROR_MASK_BITS 0x00040000 |
| #define __PSS_ERROR_MASK_BITS 0x00080000 |
| |
| #define __HALT_MASK_BITS 0x01000000 |
| |
| #define __ERROR_MASK_BITS \ |
| (__EMC_ERROR_MASK_BITS | __LPU0_ERROR_MASK_BITS | \ |
| __LPU1_ERROR_MASK_BITS | __PSS_ERROR_MASK_BITS | \ |
| __HALT_MASK_BITS) |
| |
| #define BNA_IS_ERR_INTR(_intr_status) \ |
| ((_intr_status) & \ |
| (__EMC_ERROR_STATUS_BITS | \ |
| __LPU0_ERROR_STATUS_BITS | \ |
| __LPU1_ERROR_STATUS_BITS | \ |
| __PSS_ERROR_STATUS_BITS | \ |
| __HALT_STATUS_BITS)) |
| |
| #define BNA_IS_MBOX_ERR_INTR(_intr_status) \ |
| (BNA_IS_MBOX_INTR((_intr_status)) | \ |
| BNA_IS_ERR_INTR((_intr_status))) |
| |
| #define BNA_IS_INTX_DATA_INTR(_intr_status) \ |
| ((_intr_status) & __LPU2HOST_IB_STATUS_BITS) |
| |
| #define BNA_INTR_STATUS_MBOX_CLR(_intr_status) \ |
| do { \ |
| (_intr_status) &= ~(__LPU02HOST_MBOX0_STATUS_BITS | \ |
| __LPU02HOST_MBOX1_STATUS_BITS | \ |
| __LPU12HOST_MBOX0_STATUS_BITS | \ |
| __LPU12HOST_MBOX1_STATUS_BITS); \ |
| } while (0) |
| |
| #define BNA_INTR_STATUS_ERR_CLR(_intr_status) \ |
| do { \ |
| (_intr_status) &= ~(__EMC_ERROR_STATUS_BITS | \ |
| __LPU0_ERROR_STATUS_BITS | \ |
| __LPU1_ERROR_STATUS_BITS | \ |
| __PSS_ERROR_STATUS_BITS | \ |
| __HALT_STATUS_BITS); \ |
| } while (0) |
| |
| #define bna_intx_disable(_bna, _cur_mask) \ |
| { \ |
| (_cur_mask) = readl((_bna)->regs.fn_int_mask);\ |
| writel(0xffffffff, (_bna)->regs.fn_int_mask);\ |
| } |
| |
| #define bna_intx_enable(bna, new_mask) \ |
| writel((new_mask), (bna)->regs.fn_int_mask) |
| |
| #define bna_mbox_intr_disable(bna) \ |
| writel((readl((bna)->regs.fn_int_mask) | \ |
| (__LPU2HOST_MBOX_MASK_BITS | __ERROR_MASK_BITS)), \ |
| (bna)->regs.fn_int_mask) |
| |
| #define bna_mbox_intr_enable(bna) \ |
| writel((readl((bna)->regs.fn_int_mask) & \ |
| ~(__LPU2HOST_MBOX_MASK_BITS | __ERROR_MASK_BITS)), \ |
| (bna)->regs.fn_int_mask) |
| |
| #define bna_intr_status_get(_bna, _status) \ |
| { \ |
| (_status) = readl((_bna)->regs.fn_int_status); \ |
| if ((_status)) { \ |
| writel((_status) & ~(__LPU02HOST_MBOX0_STATUS_BITS |\ |
| __LPU02HOST_MBOX1_STATUS_BITS |\ |
| __LPU12HOST_MBOX0_STATUS_BITS |\ |
| __LPU12HOST_MBOX1_STATUS_BITS), \ |
| (_bna)->regs.fn_int_status);\ |
| } \ |
| } |
| |
| #define bna_intr_status_get_no_clr(_bna, _status) \ |
| (_status) = readl((_bna)->regs.fn_int_status) |
| |
| #define bna_intr_mask_get(bna, mask) \ |
| (*mask) = readl((bna)->regs.fn_int_mask) |
| |
| #define bna_intr_ack(bna, intr_bmap) \ |
| writel((intr_bmap), (bna)->regs.fn_int_status) |
| |
| #define bna_ib_intx_disable(bna, ib_id) \ |
| writel(readl((bna)->regs.fn_int_mask) | \ |
| (1 << (ib_id)), \ |
| (bna)->regs.fn_int_mask) |
| |
| #define bna_ib_intx_enable(bna, ib_id) \ |
| writel(readl((bna)->regs.fn_int_mask) & \ |
| ~(1 << (ib_id)), \ |
| (bna)->regs.fn_int_mask) |
| |
| #define bna_mbox_msix_idx_set(_device) \ |
| do {\ |
| writel(((_device)->vector & 0x000001FF), \ |
| (_device)->bna->pcidev.pci_bar_kva + \ |
| reg_offset[(_device)->bna->pcidev.pci_func].msix_idx);\ |
| } while (0) |
| |
| /** |
| * |
| * TxQ, RxQ, CQ related bits, offsets, macros |
| * |
| */ |
| |
| #define BNA_Q_IDLE_STATE 0x00008001 |
| |
| #define BNA_GET_DOORBELL_BASE_ADDR(_bar0) \ |
| ((_bar0) + HQM_DOORBELL_BLK_BASE_ADDR) |
| |
| #define BNA_GET_DOORBELL_ENTRY_OFFSET(_entry) \ |
| ((HQM_DOORBELL_BLK_BASE_ADDR) \ |
| + (_entry << 7)) |
| |
| #define BNA_DOORBELL_IB_INT_ACK(_timeout, _events) \ |
| (0x80000000 | ((_timeout) << 16) | (_events)) |
| |
| #define BNA_DOORBELL_IB_INT_DISABLE (0x40000000) |
| |
| /* TxQ Entry Opcodes */ |
| #define BNA_TXQ_WI_SEND (0x402) /* Single Frame Transmission */ |
| #define BNA_TXQ_WI_SEND_LSO (0x403) /* Multi-Frame Transmission */ |
| #define BNA_TXQ_WI_EXTENSION (0x104) /* Extension WI */ |
| |
| /* TxQ Entry Control Flags */ |
| #define BNA_TXQ_WI_CF_FCOE_CRC (1 << 8) |
| #define BNA_TXQ_WI_CF_IPID_MODE (1 << 5) |
| #define BNA_TXQ_WI_CF_INS_PRIO (1 << 4) |
| #define BNA_TXQ_WI_CF_INS_VLAN (1 << 3) |
| #define BNA_TXQ_WI_CF_UDP_CKSUM (1 << 2) |
| #define BNA_TXQ_WI_CF_TCP_CKSUM (1 << 1) |
| #define BNA_TXQ_WI_CF_IP_CKSUM (1 << 0) |
| |
| #define BNA_TXQ_WI_L4_HDR_N_OFFSET(_hdr_size, _offset) \ |
| (((_hdr_size) << 10) | ((_offset) & 0x3FF)) |
| |
| /* |
| * Completion Q defines |
| */ |
| /* CQ Entry Flags */ |
| #define BNA_CQ_EF_MAC_ERROR (1 << 0) |
| #define BNA_CQ_EF_FCS_ERROR (1 << 1) |
| #define BNA_CQ_EF_TOO_LONG (1 << 2) |
| #define BNA_CQ_EF_FC_CRC_OK (1 << 3) |
| |
| #define BNA_CQ_EF_RSVD1 (1 << 4) |
| #define BNA_CQ_EF_L4_CKSUM_OK (1 << 5) |
| #define BNA_CQ_EF_L3_CKSUM_OK (1 << 6) |
| #define BNA_CQ_EF_HDS_HEADER (1 << 7) |
| |
| #define BNA_CQ_EF_UDP (1 << 8) |
| #define BNA_CQ_EF_TCP (1 << 9) |
| #define BNA_CQ_EF_IP_OPTIONS (1 << 10) |
| #define BNA_CQ_EF_IPV6 (1 << 11) |
| |
| #define BNA_CQ_EF_IPV4 (1 << 12) |
| #define BNA_CQ_EF_VLAN (1 << 13) |
| #define BNA_CQ_EF_RSS (1 << 14) |
| #define BNA_CQ_EF_RSVD2 (1 << 15) |
| |
| #define BNA_CQ_EF_MCAST_MATCH (1 << 16) |
| #define BNA_CQ_EF_MCAST (1 << 17) |
| #define BNA_CQ_EF_BCAST (1 << 18) |
| #define BNA_CQ_EF_REMOTE (1 << 19) |
| |
| #define BNA_CQ_EF_LOCAL (1 << 20) |
| |
| /** |
| * |
| * Data structures |
| * |
| */ |
| |
| enum txf_flags { |
| BFI_TXF_CF_ENABLE = 1 << 0, |
| BFI_TXF_CF_VLAN_FILTER = 1 << 8, |
| BFI_TXF_CF_VLAN_ADMIT = 1 << 9, |
| BFI_TXF_CF_VLAN_INSERT = 1 << 10, |
| BFI_TXF_CF_RSVD1 = 1 << 11, |
| BFI_TXF_CF_MAC_SA_CHECK = 1 << 12, |
| BFI_TXF_CF_VLAN_WI_BASED = 1 << 13, |
| BFI_TXF_CF_VSWITCH_MCAST = 1 << 14, |
| BFI_TXF_CF_VSWITCH_UCAST = 1 << 15, |
| BFI_TXF_CF_RSVD2 = 0x7F << 1 |
| }; |
| |
| enum ib_flags { |
| BFI_IB_CF_MASTER_ENABLE = (1 << 0), |
| BFI_IB_CF_MSIX_MODE = (1 << 1), |
| BFI_IB_CF_COALESCING_MODE = (1 << 2), |
| BFI_IB_CF_INTER_PKT_ENABLE = (1 << 3), |
| BFI_IB_CF_INT_ENABLE = (1 << 4), |
| BFI_IB_CF_INTER_PKT_DMA = (1 << 5), |
| BFI_IB_CF_ACK_PENDING = (1 << 6), |
| BFI_IB_CF_RESERVED1 = (1 << 7) |
| }; |
| |
| enum rss_hash_type { |
| BFI_RSS_T_V4_TCP = (1 << 11), |
| BFI_RSS_T_V4_IP = (1 << 10), |
| BFI_RSS_T_V6_TCP = (1 << 9), |
| BFI_RSS_T_V6_IP = (1 << 8) |
| }; |
| enum hds_header_type { |
| BNA_HDS_T_V4_TCP = (1 << 11), |
| BNA_HDS_T_V4_UDP = (1 << 10), |
| BNA_HDS_T_V6_TCP = (1 << 9), |
| BNA_HDS_T_V6_UDP = (1 << 8), |
| BNA_HDS_FORCED = (1 << 7), |
| }; |
| enum rxf_flags { |
| BNA_RXF_CF_SM_LG_RXQ = (1 << 15), |
| BNA_RXF_CF_DEFAULT_VLAN = (1 << 14), |
| BNA_RXF_CF_DEFAULT_FUNCTION_ENABLE = (1 << 13), |
| BNA_RXF_CF_VLAN_STRIP = (1 << 12), |
| BNA_RXF_CF_RSS_ENABLE = (1 << 8) |
| }; |
| struct bna_chip_regs_offset { |
| u32 page_addr; |
| u32 fn_int_status; |
| u32 fn_int_mask; |
| u32 msix_idx; |
| }; |
| |
| struct bna_chip_regs { |
| void __iomem *page_addr; |
| void __iomem *fn_int_status; |
| void __iomem *fn_int_mask; |
| }; |
| |
| struct bna_txq_mem { |
| u32 pg_tbl_addr_lo; |
| u32 pg_tbl_addr_hi; |
| u32 cur_q_entry_lo; |
| u32 cur_q_entry_hi; |
| u32 reserved1; |
| u32 reserved2; |
| u32 pg_cnt_n_prd_ptr; /* 31:16->total page count */ |
| /* 15:0 ->producer pointer (index?) */ |
| u32 entry_n_pg_size; /* 31:16->entry size */ |
| /* 15:0 ->page size */ |
| u32 int_blk_n_cns_ptr; /* 31:24->Int Blk Id; */ |
| /* 23:16->Int Blk Offset */ |
| /* 15:0 ->consumer pointer(index?) */ |
| u32 cns_ptr2_n_q_state; /* 31:16->cons. ptr 2; 15:0-> Q state */ |
| u32 nxt_qid_n_fid_n_pri; /* 17:10->next */ |
| /* QId;9:3->FID;2:0->Priority */ |
| u32 wvc_n_cquota_n_rquota; /* 31:24->WI Vector Count; */ |
| /* 23:12->Cfg Quota; */ |
| /* 11:0 ->Run Quota */ |
| u32 reserved3[4]; |
| }; |
| |
| struct bna_rxq_mem { |
| u32 pg_tbl_addr_lo; |
| u32 pg_tbl_addr_hi; |
| u32 cur_q_entry_lo; |
| u32 cur_q_entry_hi; |
| u32 reserved1; |
| u32 reserved2; |
| u32 pg_cnt_n_prd_ptr; /* 31:16->total page count */ |
| /* 15:0 ->producer pointer (index?) */ |
| u32 entry_n_pg_size; /* 31:16->entry size */ |
| /* 15:0 ->page size */ |
| u32 sg_n_cq_n_cns_ptr; /* 31:28->reserved; 27:24->sg count */ |
| /* 23:16->CQ; */ |
| /* 15:0->consumer pointer(index?) */ |
| u32 buf_sz_n_q_state; /* 31:16->buffer size; 15:0-> Q state */ |
| u32 next_qid; /* 17:10->next QId */ |
| u32 reserved3; |
| u32 reserved4[4]; |
| }; |
| |
| struct bna_rxtx_q_mem { |
| struct bna_rxq_mem rxq; |
| struct bna_txq_mem txq; |
| }; |
| |
| struct bna_cq_mem { |
| u32 pg_tbl_addr_lo; |
| u32 pg_tbl_addr_hi; |
| u32 cur_q_entry_lo; |
| u32 cur_q_entry_hi; |
| |
| u32 reserved1; |
| u32 reserved2; |
| u32 pg_cnt_n_prd_ptr; /* 31:16->total page count */ |
| /* 15:0 ->producer pointer (index?) */ |
| u32 entry_n_pg_size; /* 31:16->entry size */ |
| /* 15:0 ->page size */ |
| u32 int_blk_n_cns_ptr; /* 31:24->Int Blk Id; */ |
| /* 23:16->Int Blk Offset */ |
| /* 15:0 ->consumer pointer(index?) */ |
| u32 q_state; /* 31:16->reserved; 15:0-> Q state */ |
| u32 reserved3[2]; |
| u32 reserved4[4]; |
| }; |
| |
| struct bna_ib_blk_mem { |
| u32 host_addr_lo; |
| u32 host_addr_hi; |
| u32 clsc_n_ctrl_n_msix; /* 31:24->coalescing; */ |
| /* 23:16->coalescing cfg; */ |
| /* 15:8 ->control; */ |
| /* 7:0 ->msix; */ |
| u32 ipkt_n_ent_n_idxof; |
| u32 ipkt_cnt_cfg_n_unacked; |
| |
| u32 reserved[3]; |
| }; |
| |
| struct bna_idx_tbl_mem { |
| u32 idx; /* !< 31:16->res;15:0->idx; */ |
| }; |
| |
| struct bna_doorbell_qset { |
| u32 rxq[0x20 >> 2]; |
| u32 txq[0x20 >> 2]; |
| u32 ib0[0x20 >> 2]; |
| u32 ib1[0x20 >> 2]; |
| }; |
| |
| struct bna_rx_fndb_ram { |
| u32 rss_prop; |
| u32 size_routing_props; |
| u32 rit_hds_mcastq; |
| u32 control_flags; |
| }; |
| |
| struct bna_tx_fndb_ram { |
| u32 vlan_n_ctrl_flags; |
| }; |
| |
| /** |
| * @brief |
| * Structure which maps to RxFn Indirection Table (RIT) |
| * Size : 1 word |
| * See catapult_spec.pdf, RxA for details |
| */ |
| struct bna_rit_mem { |
| u32 rxq_ids; /* !< 31:12->res;11:0->two 6 bit RxQ Ids */ |
| }; |
| |
| /** |
| * @brief |
| * Structure which maps to RSS Table entry |
| * Size : 16 words |
| * See catapult_spec.pdf, RAD for details |
| */ |
| struct bna_rss_mem { |
| /* |
| * 31:12-> res |
| * 11:8 -> protocol type |
| * 7:0 -> hash index |
| */ |
| u32 type_n_hash; |
| u32 hash_key[10]; /* !< 40 byte Toeplitz hash key */ |
| u32 reserved[5]; |
| }; |
| |
| /* TxQ Vector (a.k.a. Tx-Buffer Descriptor) */ |
| struct bna_dma_addr { |
| u32 msb; |
| u32 lsb; |
| }; |
| |
| struct bna_txq_wi_vector { |
| u16 reserved; |
| u16 length; /* Only 14 LSB are valid */ |
| struct bna_dma_addr host_addr; /* Tx-Buf DMA addr */ |
| }; |
| |
| typedef u16 bna_txq_wi_opcode_t; |
| |
| typedef u16 bna_txq_wi_ctrl_flag_t; |
| |
| /** |
| * TxQ Entry Structure |
| * |
| * BEWARE: Load values into this structure with correct endianess. |
| */ |
| struct bna_txq_entry { |
| union { |
| struct { |
| u8 reserved; |
| u8 num_vectors; /* number of vectors present */ |
| bna_txq_wi_opcode_t opcode; /* Either */ |
| /* BNA_TXQ_WI_SEND or */ |
| /* BNA_TXQ_WI_SEND_LSO */ |
| bna_txq_wi_ctrl_flag_t flags; /* OR of all the flags */ |
| u16 l4_hdr_size_n_offset; |
| u16 vlan_tag; |
| u16 lso_mss; /* Only 14 LSB are valid */ |
| u32 frame_length; /* Only 24 LSB are valid */ |
| } wi; |
| |
| struct { |
| u16 reserved; |
| bna_txq_wi_opcode_t opcode; /* Must be */ |
| /* BNA_TXQ_WI_EXTENSION */ |
| u32 reserved2[3]; /* Place holder for */ |
| /* removed vector (12 bytes) */ |
| } wi_ext; |
| } hdr; |
| struct bna_txq_wi_vector vector[4]; |
| }; |
| #define wi_hdr hdr.wi |
| #define wi_ext_hdr hdr.wi_ext |
| |
| /* RxQ Entry Structure */ |
| struct bna_rxq_entry { /* Rx-Buffer */ |
| struct bna_dma_addr host_addr; /* Rx-Buffer DMA address */ |
| }; |
| |
| typedef u32 bna_cq_e_flag_t; |
| |
| /* CQ Entry Structure */ |
| struct bna_cq_entry { |
| bna_cq_e_flag_t flags; |
| u16 vlan_tag; |
| u16 length; |
| u32 rss_hash; |
| u8 valid; |
| u8 reserved1; |
| u8 reserved2; |
| u8 rxq_id; |
| }; |
| |
| #endif /* __BNA_HW_H__ */ |