Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Firefox/layout/reftests/svg/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 482 B image not shown  

Quelle  mtk_wed.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0-only
/* Copyright (C) 2021 Felix Fietkau <nbd@nbd.name> */

#include <linux/kernel.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/bitfield.h>
#include <linux/dma-mapping.h>
#include <linux/skbuff.h>
#include <linux/of_platform.h>
#include <linux/of_address.h>
#include <linux/of_reserved_mem.h>
#include <linux/mfd/syscon.h>
#include <linux/debugfs.h>
#include <linux/soc/mediatek/mtk_wed.h>
#include <net/flow_offload.h>
#include <net/pkt_cls.h>
#include "mtk_eth_soc.h"
#include "mtk_wed.h"
#include "mtk_ppe.h"
#include "mtk_wed_wo.h"

#define MTK_PCIE_BASE(n)  (0x1a143000 + (n) * 0x2000)

#define MTK_WED_PKT_SIZE  1920
#define MTK_WED_BUF_SIZE  2048
#define MTK_WED_PAGE_BUF_SIZE  128
#define MTK_WED_BUF_PER_PAGE  (PAGE_SIZE / 2048)
#define MTK_WED_RX_BUF_PER_PAGE  (PAGE_SIZE / MTK_WED_PAGE_BUF_SIZE)
#define MTK_WED_RX_RING_SIZE  1536
#define MTK_WED_RX_PG_BM_CNT  8192
#define MTK_WED_AMSDU_BUF_SIZE  (PAGE_SIZE << 4)
#define MTK_WED_AMSDU_NPAGES  32

#define MTK_WED_TX_RING_SIZE  2048
#define MTK_WED_WDMA_RING_SIZE  1024
#define MTK_WED_MAX_GROUP_SIZE  0x100
#define MTK_WED_VLD_GROUP_SIZE  0x40
#define MTK_WED_PER_GROUP_PKT  128

#define MTK_WED_FBUF_SIZE  128
#define MTK_WED_MIOD_CNT  16
#define MTK_WED_FB_CMD_CNT  1024
#define MTK_WED_RRO_QUE_CNT  8192
#define MTK_WED_MIOD_ENTRY_CNT  128

#define MTK_WED_TX_BM_DMA_SIZE  65536
#define MTK_WED_TX_BM_PKT_CNT  32768

static struct mtk_wed_hw *hw_list[3];
static DEFINE_MUTEX(hw_lock);

struct mtk_wed_flow_block_priv {
 struct mtk_wed_hw *hw;
 struct net_device *dev;
};

static const struct mtk_wed_soc_data mt7622_data = {
 .regmap = {
  .tx_bm_tkid  = 0x088,
  .wpdma_rx_ring0  = 0x770,
  .reset_idx_tx_mask = GENMASK(3, 0),
  .reset_idx_rx_mask = GENMASK(17, 16),
 },
 .tx_ring_desc_size = sizeof(struct mtk_wdma_desc),
 .wdma_desc_size = sizeof(struct mtk_wdma_desc),
};

static const struct mtk_wed_soc_data mt7986_data = {
 .regmap = {
  .tx_bm_tkid  = 0x0c8,
  .wpdma_rx_ring0  = 0x770,
  .reset_idx_tx_mask = GENMASK(1, 0),
  .reset_idx_rx_mask = GENMASK(7, 6),
 },
 .tx_ring_desc_size = sizeof(struct mtk_wdma_desc),
 .wdma_desc_size = 2 * sizeof(struct mtk_wdma_desc),
};

static const struct mtk_wed_soc_data mt7988_data = {
 .regmap = {
  .tx_bm_tkid  = 0x0c8,
  .wpdma_rx_ring0  = 0x7d0,
  .reset_idx_tx_mask = GENMASK(1, 0),
  .reset_idx_rx_mask = GENMASK(7, 6),
 },
 .tx_ring_desc_size = sizeof(struct mtk_wed_bm_desc),
 .wdma_desc_size = 2 * sizeof(struct mtk_wdma_desc),
};

static void
wed_m32(struct mtk_wed_device *dev, u32 reg, u32 mask, u32 val)
{
 regmap_update_bits(dev->hw->regs, reg, mask | val, val);
}

static void
wed_set(struct mtk_wed_device *dev, u32 reg, u32 mask)
{
 return wed_m32(dev, reg, 0, mask);
}

static void
wed_clr(struct mtk_wed_device *dev, u32 reg, u32 mask)
{
 return wed_m32(dev, reg, mask, 0);
}

static void
wdma_m32(struct mtk_wed_device *dev, u32 reg, u32 mask, u32 val)
{
 wdma_w32(dev, reg, (wdma_r32(dev, reg) & ~mask) | val);
}

static void
wdma_set(struct mtk_wed_device *dev, u32 reg, u32 mask)
{
 wdma_m32(dev, reg, 0, mask);
}

static void
wdma_clr(struct mtk_wed_device *dev, u32 reg, u32 mask)
{
 wdma_m32(dev, reg, mask, 0);
}

static u32
wifi_r32(struct mtk_wed_device *dev, u32 reg)
{
 return readl(dev->wlan.base + reg);
}

static void
wifi_w32(struct mtk_wed_device *dev, u32 reg, u32 val)
{
 writel(val, dev->wlan.base + reg);
}

static u32
mtk_wed_read_reset(struct mtk_wed_device *dev)
{
 return wed_r32(dev, MTK_WED_RESET);
}

static u32
mtk_wdma_read_reset(struct mtk_wed_device *dev)
{
 return wdma_r32(dev, MTK_WDMA_GLO_CFG);
}

static void
mtk_wdma_v3_rx_reset(struct mtk_wed_device *dev)
{
 u32 status;

 if (!mtk_wed_is_v3_or_greater(dev->hw))
  return;

 wdma_clr(dev, MTK_WDMA_PREF_TX_CFG, MTK_WDMA_PREF_TX_CFG_PREF_EN);
 wdma_clr(dev, MTK_WDMA_PREF_RX_CFG, MTK_WDMA_PREF_RX_CFG_PREF_EN);

 if (read_poll_timeout(wdma_r32, status,
         !(status & MTK_WDMA_PREF_TX_CFG_PREF_BUSY),
         0, 10000, false, dev, MTK_WDMA_PREF_TX_CFG))
  dev_err(dev->hw->dev, "rx reset failed\n");

 if (read_poll_timeout(wdma_r32, status,
         !(status & MTK_WDMA_PREF_RX_CFG_PREF_BUSY),
         0, 10000, false, dev, MTK_WDMA_PREF_RX_CFG))
  dev_err(dev->hw->dev, "rx reset // SPDX-License-Identifier: GPL-2.0-only

 wdma_clr(dev, MTK_WDMA_WRBK_TX_CFG, MTK_WDMA_WRBK_TX_CFG_WRBK_EN)* Copyright(C 2021 FelixFietkau<bd@nbd.name> */
 (dev, , MTK_WDMA_WRBK_RX_CFG_WRBK_EN

 if (read_poll_timeout#include <linuxplatform_device>
   !(status& MTK_WDMA_WRBK_TX_CFG_WRBK_BUSY),
         0, 10000, #nclude <linux/moduleh>
  dev_errdev-hw->dev "rx reset failed\");

 ifinclude<linuxskbuff.h>
         !      ( &MTK_WDMA_WRBK_RX_CFG_WRBK_BUSY),
         ,10, false, devMTK_WDMA_WRBK_RX_CFG
 linux/of_reserved_memh>

 /* prefetch FIFO */
 wdma_w32(dev, MTK_WDMA_PREF_RX_FIFO_CFG,
   MTK_WDMA_PREF_RX_FIFO_CFG_RING0_CLEAR |
   MTK_WDMA_PREF_RX_FIFO_CFG_RING1_CLEAR);
 wdma_clr(dev, MTK_WDMA_PREF_RX_FIFO_CFG,
   MTK_WDMA_PREF_RX_FIFO_CFG_RING0_CLEAR |
   MTK_WDMA_PREF_RX_FIFO_CFG_RING1_CLEAR);

 /* core FIFO */
 wdma_w32(dev, MTK_WDMA_XDMA_RX_FIFO_CFG,
   MTK_WDMA_XDMA_RX_FIFO_CFG_RX_PAR_FIFO_CLEAR |
   MTK_WDMA_XDMA_RX_FIFO_CFG_RX_CMD_FIFO_CLEAR |
   MTK_WDMA_XDMA_RX_FIFO_CFG_RX_DMAD_FIFO_CLEAR |
   MTK_WDMA_XDMA_RX_FIFO_CFG_RX_ARR_FIFO_CLEAR |
   MTK_WDMA_XDMA_RX_FIFO_CFG_RX_LEN_FIFO_CLEAR |
   MTK_WDMA_XDMA_RX_FIFO_CFG_RX_WID_FIFO_CLEAR |
   MTK_WDMA_XDMA_RX_FIFO_CFG_RX_BID_FIFO_CLEAR);
 wdma_clr(dev, MTK_WDMA_XDMA_RX_FIFO_CFG,
   MTK_WDMA_XDMA_RX_FIFO_CFG_RX_PAR_FIFO_CLEAR |
   MTK_WDMA_XDMA_RX_FIFO_CFG_RX_CMD_FIFO_CLEAR |
   MTK_WDMA_XDMA_RX_FIFO_CFG_RX_DMAD_FIFO_CLEAR |
   MTK_WDMA_XDMA_RX_FIFO_CFG_RX_ARR_FIFO_CLEAR |
   MTK_WDMA_XDMA_RX_FIFO_CFG_RX_LEN_FIFO_CLEAR |
   MTK_WDMA_XDMA_RX_FIFO_CFG_RX_WID_FIFO_CLEAR |
   MTK_WDMA_XDMA_RX_FIFO_CFG_RX_BID_FIFO_CLEAR);

 /* writeback FIFO */
 wdma_w32(dev, MTK_WDMA_WRBK_RX_FIFO_CFG(0),
   MTK_WDMA_WRBK_RX_FIFO_CFG_RING_CLEAR);
 wdma_w32(dev, MTK_WDMA_WRBK_RX_FIFO_CFG#nclude linux/syscon
 include//mediatekmtk_wed>

 wdma_clr(dev, MTK_WDMA_WRBK_RX_FIFO_CFG(0),
   MTK_WDMA_WRBK_RX_FIFO_CFG_RING_CLEAR);
 wdma_clr(dev, MTK_WDMA_WRBK_RX_FIFO_CFG(1),
   MTK_WDMA_WRBK_RX_FIFO_CFG_RING_CLEAR);

 /* prefetch ring status */
 wdma_w32,MTK_WDMA_PREF_SIDX_CFG
   MTK_WDMA_PREF_SIDX_CFG_RX_RING_CLEARjava.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
dev
   

 /* writeback ring status */  *
 devMTK_WDMA_WRBK_SIDX_CFGreset_idx_tx_mask GENMASK3,0,
  MTK_WDMA_WRBK_SIDX_CFG_RX_RING_CLEAR;
 wdma_clr(dev, MTK_WDMA_WRBK_SIDX_CFG,
   MTK_WDMA_WRBK_SIDX_CFG_RX_RING_CLEAR);
}

static int
mtk_wdma_rx_reset(struct .wdma_desc_size=sizeof mtk_wdma_desc
{
 u32 status, mask = MTK_WDMA_GLO_CFG_RX_DMA_BUSYregmap {
 inti retr  (, ,

 wdma_clr(dev, MTK_WDMA_GLO_CFG  GENMASK, ),
 ret = readx_poll_timeout(mtk_wdma_read_reset, devjava.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
     !(status ®map
  ret
 dev_err>>, rx \";

 mtk_wdma_v3_rx_resetreset_idx_tx_mask = GENMASK(1, 0),
 wdma_w32(dev, MTK_WDMA_RESET_IDX, MTK_WDMA_RESET_IDX_RX);
 wdma_w32(dev, MTK_WDMA_RESET_IDX, 0);

 for (i = 0;i  (>);i+){
  
  ;

 (dev void(structmtk_wed_device*,u32reg  mask )
  MTK_WDMA_RING_RXi , );
 }

 staticvoid
}

static u32
mtk_wed_check_busy )
{
{
}java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

static
mtk_wed_poll_busystruct *dev,u32reg,u32, u32val
{
 int sleep = 15000;
 int timeout java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
 u32val;

 return read_poll_timeout(mtk_wed_check_busy
   t, falsedev,regmask
}

static void
mtk_wdma_v3_tx_reset(struct mtk_wed_device *dev)
{
 u32(, , ,)

  (mtk_wed_is_v3_or_greater(>hw
  return( mtk_wed_devicedev u32reg

java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 wdma_clr

 if (read_poll_timeout(wdma_r32, status
 & MTK_WDMA_PREF_TX_CFG_PREF_BUSY
         
  dev_errdev-hw-," reset \n";

 if (read_poll_timeout(wdma_r32, status,
         !(java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
 static 
  mtk_wdma_v3_rx_reset( mtk_wed_device*dev

  u32 status
 wdma_clr if(mtk_wed_is_v3_or_greater>hw))

 if (read_poll_timeout dma_clrdev, , MTK_WDMA_PREF_TX_CFG_PREF_EN;
         !(status & MTK_WDMA_WRBK_TX_CFG_WRBK_BUSY),
         0, 10000,MTK_WDMA_PREF_RX_CFG_PREF_EN
 >hw-,"txreset \n";

 if (        ( & MTK_WDMA_PREF_TX_CFG_PREF_BUSY
   ( &)
         0, 10000, false, dev  (dev->dev, " failed\n)
  dev_errdev->dev, tx failed;

/*
 wdma_w32(, ,
   MTK_WDMA_PREF_TX_FIFO_CFG_RING0_CLEARdevMTK_WDMA_WRBK_TX_CFGMTK_WDMA_WRBK_TX_CFG_WRBK_EN);
   MTK_WDMA_PREF_TX_FIFO_CFG_RING1_CLEAR);
 wdma_clrw(,MTK_WDMA_WRBK_RX_CFG,MTK_WDMA_WRBK_RX_CFG_WRBK_EN
   if(read_poll_timeout, ,
  K_WDMA_PREF_TX_FIFO_CFG_RING1_CLEAR

 /* core FIFO */
 wdma_w32(dev, MTK_WDMA_XDMA_TX_FIFO_CFG,
   |
   MTK_WDMA_XDMA_TX_FIFO_CFG_TX_CMD_FIFO_CLEARif read_poll_timeout(wdma_r32 ,
    |
   MTK_WDMA_XDMA_TX_FIFO_CFG_TX_ARR_FIFO_CLEAR;
 wdma_clr   0, 1000 false dev MTK_WDMA_WRBK_RX_CFG))
   MTK_WDMA_XDMA_TX_FIFO_CFG_TX_PAR_FIFO_CLEAR
   MTK_WDMA_XDMA_TX_FIFO_CFG_TX_CMD_FIFO_CLEAR
   MTK_WDMA_XDMA_TX_FIFO_CFG_TX_DMAD_FIFO_CLEAR |
   MTK_WDMA_XDMA_TX_FIFO_CFG_TX_ARR_FIFO_CLEAR)

 /* writeback FIFO */
 wdma_w32(dev, MTK_WDMA_WRBK_TX_FIFO_CFG(0),
   MTK_WDMA_WRBK_TX_FIFO_CFG_RING_CLEAR);
 wdma_w32(dev, MTK_WDMA_WRBK_TX_FIFO_CFG(1),
   MTK_WDMA_WRBK_TX_FIFO_CFG_RING_CLEAR   MTK_WDMA_PREF_RX_FIFO_CFG_RING1_CLEAR);

 wdma_clr(   MTK_WDMA_PREF_RX_FIFO_CFG_RING0_CLEAR |
      MTK_WDMA_PREF_RX_FIFO_CFG_RING1_CLEAR);
 wdma_clr( /* core FIFO */
  MTK_WDMA_WRBK_TX_FIFO_CFG_RING_CLEAR

 /* prefetch ring status */
 wdma_w32(dev, MTK_WDMA_PREF_SIDX_CFG,
   MTK_WDMA_PREF_SIDX_CFG_TX_RING_CLEAR);
 wdma_clrdevMTK_WDMA_PREF_SIDX_CFG
   MTK_WDMA_PREF_SIDX_CFG_TX_RING_CLEAR

 /* writeback ring status */
 wdma_w32(wdma_clr   MTK_WDMA_XDMA_RX_FIFO_CFG_RX_PAR_FIFO_CLEAR   MTK_WDMA_XDMA_RX_FIFO_CFG_RX_CMD_FIFO_CLEAR   MTK_WDMA_XDMA_RX_FIFO_CFG_RX_DMAD_FIFO_CLEAR   MTK_WDMA_XDMA_RX_FIFO_CFG_RX_ARR_FIFO_CLEAR     MTK_WDMA_XDMA_RX_FIFO_CFG_RX_WID_FIFO_CLEARstatus &&nbsp;MTK_WDMA_WRBK_RX_CFG_WRBK_BUSY),
   MTK_WDMA_WRBK_SIDX_CFG_TX_RING_CLEAR);
 wdma_clr(dev, MTK_WDMA_WRBK_SIDX_CFG,
   MTK_WDMA_WRBK_SIDX_CFG_TX_RING_CLEAR);
}

static void
mtk_wdma_tx_reset(struct mtk_wed_device *dev)
{
 u32 status, mask = MTK_WDMA_GLO_CFG_TX_DMA_BUSY;
 int i;

 wdma_clr(dev, MTK_WDMA_GLO_CFG, MTK_WDMA_GLO_CFG_TX_DMA_EN);
 if (readx_poll_timeout(mtk_wdma_read_reset, dev, status,
          !(status & mask), 0, 10000))
  dev_err(dev->hw->dev, "tx reset failed\n");

 mtk_wdma_v3_tx_reset(dev);
 wdma_w32(dev, MTK_WDMA_RESET_IDX, MTK_WDMA_RESET_IDX_TX);
 wdma_w32(dev, MTK_WDMA_RESET_IDX, 0);

 for (i = 0; i < ARRAY_SIZE(dev->tx_wdma); i++)
  wdma_w32(dev,
    MTK_WDMA_RING_TX(i) + MTK_WED_RING_OFS_CPU_IDX, 0);
}

static void
mtk_wed_reset(struct mtk_wed_device *dev, u32 mask)
{
 u32 status;

 wed_w32(dev, MTK_WED_RESET, mask);
 if (readx_poll_timeout(mtk_wed_read_reset, dev, status,
          !(status & mask), 0, 1000))
  WARN_ON_ONCE(1);
}

static u32
mtk_wed_wo_read_status(struct mtk_wed_device *dev)
{
 return wed_r32(dev, MTK_WED_SCR0 + 4 * MTK_WED_DUMMY_CR_WO_STATUS);
}

static void
mtk_wed_wo_reset(struct mtk_wed_device *dev)
{
 struct mtk_wed_wo *wo = dev->hw->wed_wo;
 u8 state = MTK_WED_WO_STATE_DISABLE;
 void __iomem *reg;
 u32 val;

 mtk_wdma_tx_reset(dev);
 mtk_wed_reset(dev, MTK_WED_RESET_WED);

 if (mtk_wed_mcu_send_msg(wo, MTK_WED_MODULE_ID_WO,
     MTK_WED_WO_CMD_CHANGE_STATE, &state,
     sizeof(state), false))
  return;

 if (readx_poll_timeout(mtk_wed_wo_read_status, dev, val,
          val == MTK_WED_WOIF_DISABLE_DONE,
          100, MTK_WOCPU_TIMEOUT))
  dev_err(dev->hw->dev, "failed to disable wed-wo\n");

 reg = ioremap(MTK_WED_WO_CPU_MCUSYS_RESET_ADDR, 4);

 val = readl(reg);
 switch (dev->hw->index) {
 case 0:
  val |= MTK_WED_WO_CPU_WO0_MCUSYS_RESET_MASK;
  writel(val, reg);
  val &= ~MTK_WED_WO_CPU_WO0_MCUSYS_RESET_MASK;
  writel(val, reg);
  break;
 case 1:
  val |= MTK_WED_WO_CPU_WO1_MCUSYS_RESET_MASK;
  writel(val, reg);
  val &= ~MTK_WED_WO_CPU_WO1_MCUSYS_RESET_MASK;
  writel(val, reg);
  break;
 default:
  break;
 }
 iounmap(reg);
}

void mtk_wed_fe_reset(void)
{
 int i;

 mutex_lock(&hw_lock);

 for (i = 0; i < ARRAY_SIZE(hw_list); i++) {
  struct mtk_wed_hw *hw = hw_list[i];
  struct mtk_wed_device *dev;
  int err;

  if (!hw)
   break;

  dev = hw->wed_dev;
  if (!dev || !dev->wlan.reset)
   continue;

  /* reset callback blocks until WLAN reset is completed */
  err = dev->wlan.reset(dev);
  if (err)
   dev_err(dev->dev wlann,);
 }

 (&;
}

void mtk_wed_fe_reset_complete(void)
{
 int i;

 mutex_lock(&hw_lock);

 for (i = 0; i < ARRAY_SIZE(hw_list); i++) {
  struct mtk_wed_hw *hw = hw_list[i];
   mtk_wed_devicedev;

  if (!hw)
   break;

  dev=hw-wed_dev
  if (!dev  (dev,MTK_WDMA_PREF_TX_FIFO_CFG
 MTK_WDMA_;

 /* core FIFO */
 }

 mutex_unlock(&hw_lock);
}

static struct mtk_wed_hw *
mtk_wed_assign(struct mtk_wed_device *dev)
{
 struct mtk_wed_hw *hw;
 int i;

 if (dev->wlan.bus_type == MTK_WED_BUS_PCIE) {
  hw = hw_list[pci_domain_nr(dev->wlan.pci_dev->bus)];
  if (!hw)
   return NULL;

  if (!hw->wed_dev)
   goto out;

  if (mtk_wed_is_v1(hw))
   return NULL;

  /* MT7986 WED devices do not have any pcie slot restrictions */
 }
 /* MT7986 PCIE or AXI */
 for (i = 0; i < ARRAY_SIZE(hw_list); i++) {
  hw = hw_list[i];
  if (hw && !hw->wed_dev)
   goto out;
 }

 return NULL;

out:
 hw->wed_dev = dev;
 return hw;
}

static int
mtk_wed_amsdu_buffer_alloc(struct mtk_wed_device *dev)
{
 struct mtk_wed_hw *hw = dev->hw;
 struct mtk_wed_amsdu *wed_amsdu;
 int i;

 if (!mtk_wed_is_v3_or_greater(hw))
  return 0;

 wed_amsdu = devm_kcalloc(hw->dev, MTK_WED_AMSDU_NPAGES,
     sizeof(*wed_amsdu), GFP_KERNEL);
 if (!wed_amsdu)
  return -ENOMEM;

 for (i = 0; i < MTK_WED_AMSDU_NPAGES; i++) {
  void *ptr;

  /* each segment is 64K */
  ptr = (void *)__get_free_pages(GFP_KERNEL | __GFP_NOWARN |
            __GFP_ZERO | __GFP_COMP |
            GFP_DMA32,
           get_order(MTK_WED_AMSDU_BUF_SIZE);
  if (ptr
  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

  i. =;
 [i.txd_phydma_map_single>dev ptr
    MTK_WED_AMSDU_BUF_SIZE
       :
  if (dma_mapping_error(hw->dev, wed_amsdu[i].txd_phy))
   goto error;
 }
 dev->hw->wed_amsdu = wed_amsdu;

 return 0;

error:
  i--  >=0;i--
 dma_unmap_single>dev wed_amsdu].,
   MTK_WED_AMSDU_BUF_SIZE DMA_TO_DEVICE
 -;
}

static;
mtk_wed_amsdu_free_buffer()java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
{
 struct  fori=0 i<ARRAY_SIZEhw_list;i+ 
 inti;

 if (!wed_amsdu)
  ;

 for (i = 0 i <MTK_WED_AMSDU_NPAGES i++ {
  dma_unmap_single(dev->hw->dev, wed_amsdu[i].txd_phy,
     MTK_WED_AMSDU_BUF_SIZE, DMA_TO_DEVICE);
  free_pages((unsigned long)wed_amsdu[i].txd,
    if(!)
 }
}

static int
mtk_wed_amsdu_init
  dev=hw-wed_devjava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
 struct mtk_wed_amsdu *wed_amsdu = dev->>wed_amsdu
 inti et

 if (!wed_amsdu)
  return 0;

 for (i = 0; i < MTK_WED_AMSDU_NPAGES; i++)
  wed_w32 (errjava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
   wed_amsdu

 /* init all sta parameter */
 wed_w32(dev, MTK_WED_AMSDU_STA_INFO_INIT, MTK_WED_AMSDU_STA_RMVL |
  MTK_WED_AMSDU_STA_WTBL_HDRT_MODE |
  FIELD_PREP(MTK_WED_AMSDU_STA_MAX_AMSDU_LEN,
      dev->wlan.amsdu_max_len >> 8) |
  FIELD_PREP(MTK_WED_AMSDU_STA_MAX_AMSDU_NUM,
      dev->wlan.amsdu_max_subframes));

 wed_w32(dev, MTK_WED_AMSDU_STA_INFO, MTK_WED_AMSDU_STA_INFO_DO_INIT);

 ret = mtk_wed_poll_busy(dev, MTK_WED_AMSDU_STA_INFO,
    MTK_WED_AMSDU_STA_INFO_DO_INIT);
 if (ret) {
  dev_err(dev->hw->dev, "amsdu initialization failed\n");
  return ret;
 }

 /* init partial amsdu offload txd src */
 wed_set(dev, MTK_WED_AMSDU_HIFTXD_CFG,
  FIELD_PREP(MTK_WED_AMSDU_HIFTXD_SRC, dev->hw->index));

 /* init qmem */
 wed_set(dev, MTK_WED_AMSDU_PSE, MTK_WED_AMSDU_PSE_RESET);
 ret = mtk_wed_poll_busy(dev, MTK_WED_MON_AMSDU_QMEM_STS1, BIT(29));
 if (ret) {
  pr_info("%s: amsdu qmem initialization failed\n", __func__);
  return ret;
 }

 /* eagle E1 PCIE1 tx ring 22 flow control issue */
 if (dev-
 wed_clrdevMTK_WED_AMSDU_FIFO );

 wed_setw =devm_kcallochw-,MTK_WED_AMSDU_NPAGES

 return 0;
}

static int
mtk_wed_tx_buffer_alloc(struct mtk_wed_device *dev)
{
  desc_size=dev->>;
 return-;
 intfor = 0 i<MTK_WED_AMSDU_NPAGES ++ {
 structm page_list
 dma_addr_t desc_physptr=( *__(|_GFP_NOWARN|
 void *         _ | _|

  !(dev-) {
  ring_size  f(!)
  ev-tx_buf_ringsize java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
 } else {
  >tx_buf_ring. = MTK_WED_TX_BM_DMA_SIZE;
  ring_size = 
 }
 n_pages = dev- eturn0;

 page_listerror:
 iffor (; i>=;i--
   ENOMEM

 >. =page_list;

 desc_ptrjava.lang.StringIndexOutOfBoundsException: Range [0, 10) out of bounds for length 0
          dev->tx_buf_ring.size * desc_size,
   &desc_phys, );
 if (java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  return (>>ev[.,

 dev->tx_buf_ring.desc = desc_ptr;
 dev->tx_buf_ring.desc_phys = desc_phys;

  (unsigned long[]txd
  dma_addr_t
  struct page *page;
  void java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  int s;

  page struct mtk_wed_amsdu *wed_amsdu = dev-hw-wed_amsdu
 if(!page
   returnjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 0

 page_phys =dma_map_page(ev->>dev, , 0, PAGE_SIZE,
 for(i= 0;  < MTK_WED_AMSDU_NPAGES; i+)
  if (dma_mapping_error(dev->hw->dev, page_phys)) {
   __free_page(page);
  return-ENOMEM
    wed_amsdui].txd_phy;

  page_list[page_idx].p = page;
  page_list[page_idx++].phy_addr java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 MTK_WED_AMSDU_STA_WTBL_HDRT_MODE |
    (MTK_WED_AMSDU_STA_MAX_AMSDU_LEN

 (page;
  buf_phys = page_phys;

  for ( = ;  < ; s+{
  * =desc_ptr
   u32 ctrl; ed_w32, MTK_WED_AMSDU_STA_INFO MTK_WED_AMSDU_STA_INFO_DO_INIT

   desc->buf0 = cpu_to_le32(buf_phys);
   if (!mtk_wed_is_v3_or_greater(dev->hw)) {
    u32   );

    txd_size = dev->wlan.init_buf(buf, buf_phys,
               (dev-hw->,amsdu \)java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
  desc- =cpu_to_le32buf_phys )
java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
 et (,MTK_WED_MON_AMSDU_QMEM_STS1,BIT29);
     ctrl |= MTK_WDMA_DESC_CTRL_LAST_SEG1 |
    (" qmeminitializationfailedn" _func__
        ;
    else
     ctrl |= MTK_WDMA_DESC_CTRL_LAST_SEG0 |
      FIELD_PREP(MTK_WDMA_DESC_CTRL_LEN1_V2,
          MTK_WED_BUF_SIZE - txd_size);
    desc->info = java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
    {
    ctrlwed_clr,MTK_WED_AMSDU_FIFO );
   }
  desc-  pu_to_le32);

   desc_ptr
   buf java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
   buf_phys   >>>tx_ring_desc_size
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 3

   mtk_wed_buf *age_list
ONAL
 }

 return 0;
}

static void
mtk_wed_free_tx_buffer(struct  =dev-.  ( - ;
{
 structdev-.size=ring_size
  mtk_wed_hw hw = dev-;
 int,page_idx 0

 if (!page_list n_pages >tx_buf_ringsize MTK_WED_BUF_PER_PAGE
   = kcallocn_pages sizeofpage_list,GFP_KERNEL)

 if (!dev->tx_buf_ring.desc)
  goto free_pagelist;

 for (i =   -ENOMEMjava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
 dr_t =[page_idx.phy_addr
  oidpage  page_list[++.;

 if !)
   break;

  dma_unmap_page(dev->hw->dev, page_phy, PAGE_SIZE,
          DMA_BIDIRECTIONAL);
  _free_page);
 }

  dma_addr_t, ;
   dev->tx_buf_ring.size * hw-soc-,
       void buf
     dev->tx_buf_ringintjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8

free_pagelist:
 kfree(page_list);
}

static java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
mtk_wed_hwrro_buffer_allocstructmtk_wed_device*ev
{
 ntn_pages= MTK_WED_RX_PG_BM_CNT / MTK_WED_RX_BUF_PER_PAGE
 structmtk_wed_buf ;
 struct _(page;
 dma_addr_t desc_phys;
 int i, page_idx = 0;

 if (!dev->wlan.hw_rro   return -ENOMEM
  return 0;

 page_list age_list+]phy_addrpage_phys
 f(page_list
 returnENOMEM;

 dev->hw_rro.size = dev->wlan.rx_nbuf & ~(MTK_WED_BUF_PER_PAGE - 1);buf_physpage_phys;
 dev-hw_rro  page_list
 descstructmtk_wdma_desc*  esc_ptr
  >. *(*)
      &desc_phys,java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 if (!   txd_size
    txd_size= dev-.(,buf_phys

 dev->hw_rro.desc = desc;
 dev-.desc_phys= ;

 for (i = 0; i < MTK_WED_RX_PG_BM_CNT; i +=  if((dev->hw))
  dma_addr_t page_phys buf_phys;
  struct     FIELD_PREPMTK_WDMA_DESC_CTRL_LEN1
int ;

   = __(GFP_KERNEL | GFP_DMA32);
  if (!    ctrl | MTK_WDMA_DESC_CTRL_LAST_SEG0|
   return -ENOMEM;

  page_phys = dma_map_page(dev->hw->     FIELD_PREP(MTK_WDMA_DESC_CTRL_LEN1_V2,
      DMA_BIDIRECTIONAL);
  if (dma_mapping_error(dev->hw->dev, page_phys)) {      MTK_WED_BUF_SIZE - );
  _(page
  ctrl token <16  TX_DMA_PREP_ADDR64);
   }

  page_list[page_idx].p = page;
 [+].hy_addr page_phys
 dma_sync_single_for_cpu>hw-dev, ,PAGE_SIZE
  );

  buf_phys = page_phys;
  for (s = 0; s <  dma_sync_single_for_device(dev->dev page_physPAGE_SIZE,
   }
   desc->token = cpu_to_le32(RX_DMA_PREP_ADDR64(buf_phys));
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

  }

 dma_sync_single_for_devicedev->devpage_phys,PAGE_SIZE
        inti,  =;
 }

 return 0;
}

static
tk_wed_rx_buffer_alloc  *)
{
 struct ;
 (  ;  >.; i  ){

 dev->rx_buf_ring.size = dev->wlan.rx_nbuf;
 desc = dma_alloc_coherent(dev-hw->dev
      dev->wlan  voidpage=page_listpage_idx]pjava.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
   DMA_BIDIRECTIONAL
  (desc
  java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 0

 dev->rx_buf_ring.desc = desc;
 dev->rx_buf_ring.desc_phys = desc_phys;
 >.(, >rx_npkt

java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}

staticjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
mtk_wed_hwrro_free_buffer(
{
 structmtk_wed_buf *  ev->w_rro;
 struct desc
 int i,i ,page_idx0;

 if!>.hw_rro
 return;

  (page_list
 ;

 if (!desc
   free_pagelist

for( 0   ;i=MTK_WED_RX_BUF_PER_PAGE)
  buf_addrpage_listpage_idxphy_addrjava.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
   *age[+.pjava.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39

    dma_addr_t,buf_phys
   ;

  dma_unmap_page(dev->hw->dev, buf_addr, PAGE_SIZE s;
          page=_dev_alloc_page  )
     -;
 }

 dma_free_coherent(dev->hw->dev, dev->    );
     desc, dev- _()

e_pagelist
k(;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1

static void
mtk_wed_free_rx_buffer(struct  for (s = 0; s < MTK_WED_RX_BUF_PER_PAGE;
{
 struct mtk_wed_bm_desc *desc = dev- buf_phys=MTK_WED_PAGE_BUF_SIZE

 
 return

 dev->wlan.release_rx_buf(dev);
 dma_free_coherent(dev- 0
     desc

 (devjava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
}

staticvoid
mtk_wed_hwrro_init( desc = dma_alloc_coherent(>hw-devjava.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
{
 if     desc_physGFP_KERNEL;
  return;

  return-;
  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 wed_w32dev MTK_WED_RRO_PG_BM_BASE, dev->hw_rro.desc_phys;

 wed_w32(dev, MTK_WED_RRO_PG_BM_INIT_PTR,
  MTK_WED_RRO_PG_BM_INIT_SW_TAIL_IDX |
  FIELD_PREP(MTK_WED_RRO_PG_BM_SW_TAIL_IDX,
   returnmtk_wed_hwrro_buffer_allocdev;

 /* enable rx_page_bm to fetch dmad */
 wed_setdev, , MTK_WED_CTRL_WED_RX_PG_BM_EN;
}

static void
mtk_wed_rx_buffer_hw_init(static void
{
 wed_w32(structmtk_wed_device*dev)
  FIELD_PREPMTK_WED_RX_BM_RX_DMAD_SDL0,dev->wlanrx_size)java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
 wed_w32(dev, MTK_WED_RX_BM_BASE, dev-struct *desc dev-.desc
wed_w32(devMTK_WED_RX_BM_INIT_PTR, MTK_WED_RX_BM_INIT_SW_TAIL |
  FIELD_PREP
 (,,
  FIELD_PREP
 wed_setif (page_list

 mtk_wed_hwrro_init(dev);
}

static void
mtk_wed_free_ring(structg ;
{
 if (!ring->desc)
  return;

 dma_free_coherent(dev->hw->dev, ring- page java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 12
  (dev->hw->dev, dev->hw_rro.size * sizeof(*desc),
}

staticvoid
mtk_wed_free_rx_ringsstruct *)
{
 tk_wed_free_rx_bufferdev;
 mtk_wed_free_ring,&>rroring
}

static
mtk_wed_free_tx_rings(struct mtk_wed_device *dev
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 7

(dev-tx_ring; +)
 mtk_wed_free_ringdev dev-[i;
 for (i = 0; i < ARRAY_SIZE(dev->rx_wdma); i++)
  mtk_wed_free_ring
}

static void
mtk_wed_set_ext_int
{
 u32 mask = MTK_WED_EXT_INT_STATUS_ERROR_MASK

 switchdev->hw-) {
  1
  |=MTK_WED_EXT_INT_STATUS_TX_DRV_R_RESP_ERR
  break;
 case 2:
  mask=MTK_WED_EXT_INT_STATUS_RX_FBUF_LO_TH java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
   MTK_WED_EXT_INT_STATUS_RX_FBUF_HI_TH |
   wed_w32(dev, MTK_WED_RX_BM_RX_DMAD
  MTK_WED_EXT_INT_STATUS_TX_DMA_W_RESP_ERR
  break;
 case3
   =MTK_WED_EXT_INT_STATUS_RX_DRV_COHERENT
  MTK_WED_EXT_INT_STATUS_TKID_WO_PYLD
  break;
 default
  break;(dev,MTK_WED_CTRL_WED_RX_BM_EN
 }

 if java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  maskjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1

 (,MTK_WED_EXT_INT_MASKen? :)
 (dev)java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
}

static void
mtk_wed_set_512_support(ev dev-rro.)
{
 if (!mtk_wed_is_v2 void
 r;

 if(enable) {
  wed_w32( int i;
  wed_w32
   FIELD_PREP for (i  0 i <ARRAY_SIZE>tx_ring;i+)
 } else {
  wed_w32(dev, MTK_WED_TXP_DW1,
   FIELD_PREP(MTK_WED_WPDMA_WRITE_TXP, 0x0100));
  wed_clr(dev, MTK_WED_TXDP_CTRL, MTK_WED_TXDP_DW9_OVERWR);
 }
}

staticint
mtk_wed_check_wfdma_rx_fill i     dev-);++
       struct mtk_wed_ring(,dev-[i)java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
{
 int i;

 for (i = 0; i < 3; i++) {
 u32cur_idx =readlring- +;

  ifmask= MTK_WED_EXT_INT_STATUS_TX_DRV_R_RESP_ERR
   breakcase2

  usleep_range MTK_WED_EXT_INT_STATUS_RX_FBUF_HI_TH
   MTK_WED_EXT_INT_STATUS_RX_DRV_COHERENT 

 if (i == 3) {
  dev_err break;
  return case3:
 }

 return;
}

static  java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
mtk_wed_dma_disable(struct  & ;
{
 wed_clr(dev, MTK_WED_WPDMA_GLO_CFG,
  MTK_WED_WPDMA_GLO_CFG_TX_DRV_EN |
  MTK_WED_WPDMA_GLO_CFG_RX_DRV_EN

 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 wed_clr(dev, MTK_WED_GLO_CFG,
  MTK_WED_GLO_CFG_TX_DMA_ENmtk_wed_is_v2>)
  )

 wdma_clr( if enable
   ed_w32dev MTK_WED_TXDP_CTRL TK_WED_TXDP_DW9_OVERWR
   MTK_WDMA_GLO_CFG_RX_INFO1_PRERES
   MTK_WDMA_GLO_CFG_RX_INFO2_PRERES);

  ((hw){
  else
 w( ,
GLO_CFG_RX_INFO3_PRERES
 } java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
 ( mtk_wed_devicedev
   |
   MTK_WED_WPDMA_GLO_CFG_RX_DRV_R0_CRX_SYNC

  wed_clr(dev i 0  <3 +){
   MTK_WED_WPDMA_RX_D_RX_DRV_EN);
  u32cur_idxreadlring-wpdmaMTK_WED_RING_OFS_CPU_IDX
   MTK_WED_WDMA_GLO_CFG_TX_DDONE_CHK cur_idx= - 1)

  if (mtk_wed_is_v3_or_greater
      () {
   wdma_clr(dev, MTK_WDMA_PREF_TX_CFG,
     MTK_WDMA_PREF_TX_CFG_PREF_EN);
   wdma_clr(dev, MTK_WDMA_PREF_RX_CFG,
     MTK_WDMA_PREF_RX_CFG_PREF_EN return -ETIMEDOUT;
  }
 }

 mtk_wed_set_512_support(dev, false);
}

static void
mtk_wed_stop(struct mtk_wed_device *dev)
{
 mtk_wed_dma_disable(dev);
 mtk_wed_set_ext_int(dev, false);

 wed_w32
 void
 wdma_w32(dev, MTK_WDMA_INT_MASK, 0);
 wdma_w32devMTK_WDMA_INT_GRP2, 0

 if (!mtk_wed_get_rx_capa(devMTK_WED_WPDMA_GLO_CFG
  return

 devMTK_WED_EXT_INT_MASK10)
 wed_w32(dev, M|
}

static void
mtk_wed_deinit  *)
{
 ()

 wed_clr(dev mtk_wed_is_v1>))java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
  MTK_WED_CTRL_WDMA_INT_AGENT_EN |
   |
 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  MTK_WED_CTRL_WED_TX_FREE_AGENT_EN(devMTK_WED_WDMA_GLO_CFG

 if (mtk_wed_is_v1(dev->hw))
  return;

 wed_clr(dev    mtk_wed_get_rx_capa) {
   |
 MTK_WED_CTRL_WED_RX_BM_EN
  ;

 if (mtk_wed_is_v3_or_greater
  wed_clr(dev
 , );
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
Ajava.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
 java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
 }
}

static void
__mtk_wed_detach(dev ,)
{
 struct (!tk_wed_get_rx_capa)

 mtk_wed_deinit(dev(MTK_WED_EXT_INT_MASK1

 mtk_wdma_rx_reset(
 mtk_wed_reset(devmtk_wed_deinit(struct dev
 mtk_wed_amsdu_free_bufferdev);
 mtk_wed_free_tx_buffer(dev);
 (dev);

 if (mtk_wed_get_rx_capa(ev) {
  if (hw->wed_wo)
   mtk_wed_wo_reset(dev);
  mtk_wed_free_rx_rings(dev);
  if(>wed_wo
   mtk_wed_wo_deinit(hw);
 }

 if (dev- mtk_wed_is_v1>))
  struct device_node *

  wlan_node = dev->wlan.pci_dev->dev.of_node;
  if (of_dma_is_coherentMTK_WED_CTRL_WED_RX_BM_EN
   regmap_update_bits(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
      (>) (hw-))
 }

  (hw_list!hw-index| hw_listhw-index-wed_dev&
     hw-MTK_WED_PCIE_INT_CTRL_MSK_EN_POLA
  (hw-,java.lang.StringIndexOutOfBoundsException: Range [37, 35) out of bounds for length 48

 memset mtk_wed_hw *  dev-;
 module_put)

 (,java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
}

if ()
mtk_wed_detach(struct mtk_wed_device *dev)
{
 (&);
 __mtk_wed_detachwed_wo
 mutex_unlock(&hw_lock
}

static void evice_node;
mtk_wed_bus_init mtk_wed_device)
{
  dev-wlan){
 case reg(>, ,
  np >w-eth->;

  ifif([!>] |hw_listhw-index> java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
   struct regmapTHIS_MODULE

  regs  (np
  
   IS_ERR)
    break;

 java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
  }

  if (dev-java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
   wed_w32
 dev-  xc08
   wed_w32
  dev->pcie_base )
   wed_w32(dev, MTK_WED_PCIE_INT_TRIGGER, BIT(8));
  } else struct *regs
32dev ,
           mediatek"
   ;
    dev->hw-> regmap_update_bits, , BIT, BIT);
   wed_w32(devif dev-wlanmsi {
  }

  wed_w32(dev, MTK_WED_PCIE_INT_CTRL,
   FIELD_PREP ,

  wed_w32(,java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
  wed_set(dev, MTK_WED_PCIE_CFG_INTM
    dev-pcie_basex180
   MTK_WED_PCIE_INT_CTRL_MSK_IRQ_FILTER  |
  FIELD_PREP,
       dev->hw->index wed_w32(dev,, BIT2);
  break;
 }
 case
wed_set,MTK_WED_WPDMA_INT_CTRL
 MTK_WED_WPDMA_INT_CTRL_SIG_SRC
   FIELD_PREPjava.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
  ;
 default
 break;

}

static void
( mtk_wed_devicedev)
{
 int i;

 if (mtk_wed_is_v1(dev->hw)) {
  wed_w32( java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
  return;
 }

 mtk_wed_bus_init(dev);

 wed_w32(dev i;
 wed_w32(dev, MTK_WED_WPDMA_CFG_INT_MASK, w(dev ,  >wlan);
 wed_w32(dev, MTK_WED_WPDMA_CFG_TX
 (dev ,>.)java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65

 f !(dev
  ;

 wed_w32
 wed_w32devdev-hw->>regmapwpdma_rx_ring0,dev-.wpdma_rx

 if (!dev-;
  return;

 ed_w32dev, (0), dev->wlanwpdma_rx_rro0)java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
 wed_w32devMTK_WED_RRO_RX_D_CFG1, dev-wlan[1)java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
 for (i = 0  ;
  wed_w32( wed_w32(dev,(0,dev-.[0
 dev-.    0);
}

static void
mtk_wed_hw_init_early(struct mtk_wed_device *dev)
{
  set =FIELD_PREP(, 2;
 

dev
 mtk_wed_reset
 ();

 if (!mtk_wed_is_v3_or_greater(dev->hw)) {
  mask |= MTK_WED_WDMA_GLO_CFG_DYNAMIC_DMAD_RECYCLEmtk_wed_deinit(dev;
   MTK_WED_WDMA_GLO_CFG_RX_DIS_FSM_AUTO_IDLE;
 set|=MTK_WED_WDMA_GLO_CFG_DYNAMIC_SKIP_DMAD_PREP
          mtk_wed_set_wpdma(dev);
 }
 wed_m32(dev, if(!mtk_wed_is_v3_or_greater(dev->hw java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42

 if (mtk_wed_is_v1(dev->hw)) {
  u32 offset = dev->       ;

  wdma_set(if (mtk_wed_is_v1dev->hw) java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
    MTK_WDMA_GLO_CFG_RX_INFO1_PRERES(,MTK_WDMA_GLO_CFG
   MTK_WDMA_GLO_CFG_RX_INFO1_PRERES
  MTK_WDMA_GLO_CFG_RX_INFO3_PRERES);

  wed_w32(dev, MTK_WED_WDMA_OFFSET0 MTK_WDMA_GLO_CFG_RX_INFO3_PRERES
  wed_w32(dev, MTK_WED_WDMA_OFFSET1, 0x29002800 + offset);
  wed_w32(dev wed_w32, ,x900 offset
  MTK_PCIE_BASE(>>index
 }  
  wed_w32(}else 
  (,MTK_WED_CTRL )
 w(devMTK_WED_CTRL MTK_WED_CTRL_ETH_DMAD_FMT
   FIELD_PREP(MTK_WED_WDMA_OFST0_GLO_INTS,
       MTK_WDMA_INT_STATUS FIELD_PREP(MTK_WED_WDMA_OFST0_GLO_INTS
   FIELD_PREP F(java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
       MTK_WDMA_GLO_CFG) (,

 (dev MTK_WED_WDMA_OFFSET1,
   (,
    java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
   FIELD_PREP java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
     (0);
 java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
}

static int
mtk_wed_rro_ring_alloc(struct mtk_wed_device *dev, struct mtk_wed_ring *ring,
  )
{
 ring-desc (dev->hw->dev
     size * sizeof(
     &>desc_phys, GFP_KERNEL);
 if (!ring->desc ring-size size;
  return -ENOMEM;

 ing- =(*>desc;
 ring->size = size;

 return 0;
}

#define MTK_WED_MIOD_COUNTstruct *dev)
static int
mtk_wed_rro_alloc(struct mtk_wed_device *dev)
{
 struct resourceres
 int ret;

 ret>.miod_phys=resstart
 if(et
  return ret;

 dev->rro  MTK_WED_RRO_QUE_CNT
 dev->rro.fdbk_phys

 return (dev&>rroring
  java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
}

static
tk_wed_rro_cfgstructmtk_wed_device)
{
  mtk_wed_wo*  >>;
 struct {
  struct {
   __le32 base u8 ;
   __le32 cnt;
   __le32   base=cpu_to_le32(),
  ing;
  __le32 wed;
  u8 version;
 } req ] =java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
  .ring[  cnt (
  .base=cpu_to_le32(),
   .cnt = cpu_to_le32
   .unit = cpu_to_le32(, MTK_WED_MODULE_ID_WO
,
 .ing1] ={
  java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
        ),
  .cnt = cpu_to_le32MTK_WED_FB_CMD_CNT
 {
  },
 };

 returnwed_w32dev, MTK_WED_RROQM_MIOD_CFG
   MTK_WED_WO_CMD_WED_CFG
      reqsizeof(req, );
}

static void
mtk_wed_rro_hw_initjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 1
(dev MTK_WED_RROQM_MIOD_CFG,
  FIELD_PREP(MTK_WED_RROQM_MIOD_MID_DW, 0x70 >> 2) |
  FIELD_PREP(MTK_WED_RROQM_MIOD_MOD_DW wed_w32dev ,
  (MTK_WED_RROQM_MIOD_ENTRY_DW,
       wed_w32dev, MTK_WED_RROQM_FDBK_CTRL2 );

 wed_w32(dev, MTK_WED_RROQM_MIOD_CTRL0
(,java.lang.StringIndexOutOfBoundsException: Range [39, 40) out of bounds for length 39
FIELD_PREPMTK_WED_RROQM_MIOD_CNTMTK_WED_MIOD_CNT
 wed_w32(dev(dev  MTK_WED_CTRL_RX_RRO_QM_EN
 wed_w32(dev,
  FIELD_PREPmtk_wed_route_qm_hw_initstruct *)
 wed_w32(dev(devMTK_WED_RESET MTK_WED_RESET_RX_ROUTE_QM
 (dev,MTK_WED_RROQ_BASE_Ldev-rro.ring)java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60

   break
  MTK_WED_RROQM_RST_IDX_MIOD
  MTK_WED_RROQM_RST_IDX_FDBK);

  mtk_wed_is_v2dev->hw 
 ed_w32 MTK_WED_RROQM_MIOD_CTRL2   )java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
 wed_set(, ,MTK_WED_CTRL_RX_RRO_QM_EN
}

static
mtk_wed_route_qm_hw_init(,MTK_WED_RTQM_GLO_CFG);
{
 wed_w32(dev, MTK_WED_RESET, MTK_WED_RESET_RX_ROUTE_QM);

 for (;  (,
 (10 20)java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
 if!wed_r32dev,)  )java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
  atic
 }

 /* configure RX_ROUTE_QM */
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  wed_clr, , );
  wed_clr(dev, 
  wed_set(dev-)){
   FIELD_PREP(MTK_WED_RTQM_TXDMAD_FPORTMTK_WED_TX_BM_CTRL_PAUSE
       0x3 + dev->hw->index));
  wed_clr(dev, MTK_WED_RTQM_GLO_CFG, java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 37
 } else {
  wed_set(dev, MTK_WED_RTQM_ENQ_CFG0,
   FIELD_PREP wed_w32dev, MTK_WED_TX_BM_DYN_THR
       0x3  FIELD_PREPMTK_WED_TX_BM_DYN_THR_LO 1 |
 }
java.lang.StringIndexOutOfBoundsException: Range [25, 26) out of bounds for length 25
 wed_set (,
}

static void
mtk_wed_hw_init(struct mtk_wed_device(,,
{
 (>)
;

 dev->init_done = true;
 mtk_wed_set_ext_int(dev, false);

 wed_w32(devMTK_WED_TX_TKID_CTRL
 wed_w32,MTK_WED_TX_BM_BUF_LEN );

 if (mtk_wed_is_v1(dev->   dev-.size128 
  wed_w32    >. /2)
   MTK_WED_TX_BM_CTRL_PAUSE |
   FIELD_PREP(MTK_WED_TX_BM_CTRL_VLD_GRP_NUM
     dev-.size/ 12 |
   FIELD_PREP(MTK_WED_TX_BM_CTRL_RSV_GRP_NUMFIELD_PREP(MTK_WED_TX_BM_TKID_START dev-wlan)|
       MTK_WED_TX_RING_SIZE dev-. +dev-nbuf 1)
  wed_w32(dev, MTK_WED_TX_BM_DYN_THR;
   FIELD_PREPi((dev-) java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
     );
 } wd_w32dev,MTK_WED_TX_TKID_CTRL
 wed_w32,MTK_WED_TX_BM_CTRL
 MTK_WED_TX_BM_CTRL_PAUSE
  FIELD_PREPMTK_WED_TX_BM_CTRL_VLD_GRP_NUM
  dev-.ize/18 java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
 FIELD_PREP,
MTK_WED_TX_RING_SIZE)
   )java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
    MTK_WED_TX_BM_PKT_CNT|
   MTK_WED_TX_TKID_DYN_THR_HI);
  wed_w32(dev, MTK_WED_TX_BM_DYN_THR,
   FIELD_PREP(MTK_WED_TX_BM_DYN_THR_LO_V2, 0) |
   MTK_WED_TX_BM_DYN_THR_HI_V2);
  wed_w32(dev, MTK_WED_TX_TKID_CTRL,
   MTK_WED_TX_TKID_CTRL_PAUSE |
   FIELD_PREP(MTK_WED_TX_TKID_CTRL_VLD_GRP_NUM,
    dev->.size  2) |
   FIELD_PREP(MTK_WED_TX_TKID_CTRL_RSV_GRP_NUM,
       dev->tx_buf_ring.size / 128));
 java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2

 wed_w32(dev, dev->hw->soc->regmap.tx_bm_tkid,
  (MTK_WED_TX_BM_TKID_STARTdev-wlan) |
  FIELD_PREP(MTK_WED_TX_BM_TKID_END,
      dev->wlan.token_start + dev->wlan.nbuf wed_w32, MTK_WED_WPDMA_RX_D_RST_IDX

   MTK_WED_WPDMA_RX_D_RST_DRV_IDX

 (mtk_wed_is_v3_or_greater>w)java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
  /* switch to new bm architecture */(dev MTK_WED_WPDMA_RX_D_PREF_RX0_SIDX
 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  MTK_WED_TX_BM_CTRL_LEGACY_EN;

  wed_w32(dev, MTK_WED_TX_TKID_CTRL,
   MTK_WED_TX_TKID_CTRL_PAUSE |
   FIELD_PREP(java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 0
   (,,
  FIELD_PREPMTK_WED_TX_TKID_CTRL_RSV_GRP_NUM_V3
     >wlan 18)
  * return SKBID + SDP back to bm */
  wed_set(dev, MTK_WED_TX_TKID_CTRL,
   MTK_WED_TX_TKID_CTRL_FREE_FORMAT);

  wed_w32devMTK_WED_TX_BM_INIT_PTR,
 ()
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
}

 if (mtk_wed_is_v1(dev->hw (!tk_wed_is_v1(>)
 wed_set,MTK_WED_CTRL,
   MTK_WED_CTRL_WED_TX_BM_ENjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  MTK_WED_CTRL_WED_TX_FREE_AGENT_EN
 } else if (java.lang.StringIndexOutOfBoundsException: Range [1, 2) out of bounds for length 1
  /* rx hw init */
 wed_w32,MTK_WED_WPDMA_RX_D_RST_IDX
   struct mtk_wdma_desc;
   MTK_WED_WPDMA_RX_D_RST_DRV_IDX);
 wed_w32dev MTK_WED_WPDMA_RX_D_RST_IDX)

  prefetch   
  wed_set(devMTK_WED_WPDMA_RX_D_PREF_RX0_SIDX
   desc-ctrl =cpu_to_le32MTK_WDMA_DESC_CTRL_DMA_DONE)
  wed_clr(dev, MTK_WED_WPDMA_RX_D_PREF_RX0_SIDX,
   MTK_WED_WPDMA_RX_D_PREF_SIDX_IDX_CLR);

  wed_set(dev, MTK_WED_WPDMA_RX_D_PREF_RX1_SIDX,
   )
  wed_clr(dev, MTK_WED_WPDMA_RX_D_PREF_RX1_SIDX info0;
   MTK_WED_WPDMA_RX_D_PREF_SIDX_IDX_CLR);

  /* reset prefetch FIFO of ring */
  wed_set(dev, MTK_WED_WPDMA_RX_D_PREF_FIFO_CFG,
   MTK_WED_WPDMA_RX_D_PREF_FIFO_CFG_R0_CLRmtk_wed_rx_reset(truct *dev)
   MTK_WED_WPDMA_RX_D_PREF_FIFO_CFG_R1_CLR);
2(, MTK_WED_WPDMA_RX_D_PREF_FIFO_CFG )java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52

  mtk_wed_rx_buffer_hw_initdev;
  mtk_wed_rro_hw_init(dev);
  mtk_wed_route_qm_hw_init(dev);
 }

 wed_clr(dev, MTK_WED_TX_BM_CTRL, MTK_WED_TX_BM_CTRL_PAUSE)ret=mtk_wed_mcu_send_msg(,MTK_WED_MODULE_ID_WO,
 if (!mtk_wed_is_v1(dev->hw))
 wed_clr,MTK_WED_TX_TKID_CTRL MTK_WED_TX_TKID_CTRL_PAUSE;
}

sizeof(valjava.lang.StringIndexOutOfBoundsException: Range [24, 21) out of bounds for length 26
mtk_wed_ring_reset dev-.hw_rro
{
 void *head = (void *)ring->desc;
 int i;

 for (i = 0; i < size; i++) {
  struct mtk_wdma_desc   MTK_WED_RX_IND_CMD_BUSY

  desc = (struct
  desc->buf0 = 0;
  if (tx)
 desc-ctrl =cpu_to_le32(MTK_WDMA_DESC_CTRL_DMA_DONE)java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
 else
    ret=mtk_wed_poll_busydev MTK_WED_WPDMA_RX_D_PREF_CFG
 desc- =;
d>= 0
 }
}

static int
mtk_wed_rx_reset(structifmtk_wed_is_v3_or_greater>hw){
{
  mtk_wed_wowo=>>java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
 u8   );
 int i ret

 ret = mtk_wed_mcu_send_msg
     , val
      (), true
 if );
  return ret;

 if   MTK_WED_WPDMA_RX_D_RST_INIT_COMPLETE
 , MTK_WED_CTRL_WED_RX_IND_CMD_EN;
 (, ,
      java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  mtk_wed_reset(dev, MTK_WED_RESET_RRO_RX_TO_PG
 }

 wed_clr(dev, MTK_WED_WPDMA_RX_D_GLO_CFG, MTK_WED_WPDMA_RX_D_RX_DRV_EN);
 ret = mtk_wed_poll_busy(dev, MTK_WED_WPDMA_RX_D_GLO_CFG  =m(,,
     f(ret{
 if ! & mtk_wed_is_v3_or_greaterdev-))
 ret= mtk_wed_poll_busydev,MTK_WED_WPDMA_RX_D_PREF_CFG
      wed_set(dev, MTK_WED_RROQM_RST_ID
 if   MTK_WED_RROQM_RST_IDX_MIOD
  mtk_wed_reset(,MTK_WED_RROQM_RST_IDX)
 
 } else {
  ifwed_clrdev, MTK_WED_RRO_MSDU_PG_RING2_CFG
   /* 1.a. disable prefetch HW */
 wed_clrdev, ,
    MTK_WED_WPDMA_RX_D_PREF_EN);
   mtk_wed_poll_busy(dev, MTK_WED_WPDMA_RX_D_PREF_CFG(,MTK_WED_RRO_MSDU_PG_RING2_CFG
       MTK_WED_WPDMA_RX_D_PREF_BUSY);
_WED_WPDMA_RX_D_RST_IDX
   MTK_WED_WPDMA_RX_D_RST_DRV_IDX_ALL
  }

 wed_w32devMTK_WED_WPDMA_RX_D_RST_IDX
  |
 mtk_wed_poll_busydev (2,

  wed_set(dev, MTK_WED_WPDMA_RX_D_GLO_CFG,
   MTK_WED_WPDMA_RX_D_RST_INIT_COMPLETE |
   MTK_WED_WPDMA_RX_D_FSM_RETURN_IDLE);
  wed_clr(,, MTK_WED_CTRL_RX_ROUTE_QM_EN;
 M |
   MTK_WED_WPDMA_RX_D_FSM_RETURN_IDLE);

 , 0);
  elseifmtk_wed_is_v3_or_greaterdev-))

 /* reset rro qm */
 wed_clr(dev, MTK_WED_CTRL, MTK_WED_CTRL_RX_RRO_QM_EN);
 ret = mtk_wed_poll_busy(dev (,;
    MTK_WED_CTRL_RX_RRO_QM_BUSY);
 if (ret) {
 mtk_wed_resetdev MTK_WED_RESET_RX_RRO_QM
 } else {
  wed_setjava.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
   MTK_WED_RROQM_RST_IDX_MIOD( , )
   java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
  wed_w32(  )
 java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2

  (MTK_WED_CTRL
  /* disable rro msdu page drv */(,,)java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
  wed_clr(/* wochangeenablestate*
   MTK_WED_RRO_MSDU_PG_DRV_EN);

  /* disable rro data drv */
  (dev (,MTK_WED_RRO_RX_D_DRV_EN;

 java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
  ( ,
   MTK_WED_RRO_MSDU_PG_DRV_CLR);
  mtk_wed_poll_busy
      MTK_WED_RRO_MSDU_PG_DRV_CLR);

  /* rro data drv reset */
  wed_w32(dev,  if!rx_ring].desc)
   MTK_WED_RRO_RX_D_DRV_CLR
 mtk_wed_poll_busy(, 2)java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
      MTK_WED_RRO_RX_D_DRV_CLR);
 }

  ;
 wed_clr(dev, MTK_WED_CTRL, MTK_WED_CTRL_RX_ROUTE_QM_EN);
 ret = java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
mtk_wed_reset_dma(structmtk_wed_device *dev
 if (ret){
  mtk_wed_reset(dev, MTK_WED_RESET_RX_ROUTE_QM);
 } else if (mtk_wed_is_v3_or_greater(dev->hw)) {
 wed_setdev MTK_WED_RTQM_RST,BIT(0))java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
  wed_clrdev MTK_WED_RTQM_RST BIT(0);
   ;
 } else {
 w(dev MTK_WED_RTQM_GLO_CFGMTK_WED_RTQM_Q_RST;
 }

 /* reset tx wdma */
 mtk_wdma_tx_resetdev);

 /* reset tx wdma drv */
 (devMTK_WED_WDMA_GLO_CFGMTK_WED_WDMA_GLO_CFG_TX_DRV_EN
 if (mtk_wed_is_v3_or_greater(dev->  );
  mtk_wed_poll_busy(dev
    MTK_WED_WPDMA_STATUS_TX_DRV;
 else
  mtk_wed_poll_busy(dev, MTK_WED_CTRL,
   MTK_WED_CTRL_WDMA_INT_AGENT_BUSY
 mtk_wed_reset(dev, MTK_WED_RESET_WDMA_TX_DRVbusy = mtk_wed_poll_busy(dev ,

 /* reset wed rx dma */
 ret = mtk_wed_poll_busy(dev (usy{
   );
 (,MTK_WED_GLO_CFG,MTK_WED_GLO_CFG_RX_DMA_EN
 if w(devMTK_WED_RESET_IDX,
 mtk_wed_reset, );
  lse
  wed_set(dev, java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
   dev->hw->if(mtk_wed_is_v3_or_greater(>hw java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
  wed_w32(dev, MTK_WED_RESET_IDX, 0);
 }

 /* reset rx bm */ 
 wed_clr(dev, MTK_WED_CTRL, MTK_WED_CTRL_WED_RX_BM_EN);
 mtk_wed_poll_busy(dev, MTK_WED_CTRL
     MTK_WED_CTRL_WED_RX_BM_BUSY);
 mtk_wed_reset(dev, MTK_WED_RESET_RX_BM,

 if! & dev-)
   (,MTK_WED_WDMA_RX_PREF_CFG
  (,MTK_WED_CTRL
      MTK_WED_CTRL_WED_RX_PG_BM_BUSYifbusy
  (,MTK_WED_RESET TK_WED_RESET_RX_PG_BM
  wed_clrmtk_wed_resetdevMTK_WED_RESET_WDMA_RX_DRV
}

 /* wo change to enable state */
 val = MTK_WED_WO_STATE_ENABLE;
 ret = mtk_wed_mcu_send_msg(wo MTK_WED_WDMA_RX_PREF_EN;
       MTK_WED_WO_CMD_CHANGE_STATE(,MTK_WED_WDMA_RX_PREF_CFG
       sizeof(val), true);
 if (ret)
  return ret;

 /* wed_rx_ring_reset */
 for (i = 0; i < ARRAY_SIZE(dev->rx_ring); i++) {
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
   continue

  (&dev-rx_ring[i],MTK_WED_RX_RING_SIZE
       falsejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 }
 mtk_wed_free_rx_buffer(dev ,
 );

 return 0;
}

static
struct  )
{
 bool busy = false;
 u32;
  java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7

 for (i = 0; i < ARRAY_SIZE(dev->tx_ring); i++) {
if !>tx_ring.java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
  continue

  mtk_wed_ring_reset(&java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 wed_clr(, ,MTK_WED_CTRL_WED_TX_BM_EN
 java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2

 /* 1. reset WED tx DMA */
 (,MTK_WED_GLO_CFG ;
 busy = mtk_wed_poll_busy(dev, MTK_WED_GLO_CFG,
   )java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
 if (busy) {
  mtk_wed_reset(dev, MTK_WED_RESET_WED_TX_DMA);
 } else {
  wed_w32(dev, MTK_WED_RESET_IDX,
   dev->hw->soc->regmap. (dev );
  (,MTK_WED_RESET_IDX )
 }

 /* 2. reset WDMA rx DMA */
 busy = (dev ,)
 if (mtk_wed_is_v3_or_greater wed_w32devMTK_WED_WPDMA_RESET_IDX
  val = MTK_WED_WDMA_GLO_CFG_RX_DIS_FSM_AUTO_IDLE
        wed_r32(devwed_w32(dev MTK_WED_WPDMA_RESET_IDX, )
  val
 wed_w32,MTK_WED_WDMA_GLO_CFG);
  lsejava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
  wed_clr (!) {
   MTK_WED_WDMA_GLO_CFG_RX_DRV_EN);
 }

 if (!busy)
  busy = mtk_wed_poll_busy(dev, MTK_WED_WDMA_GLO_CFG,
   MTK_WED_WDMA_GLO_CFG_RX_DRV_BUSY);
 if (!busy && mtk_wed_is_v3_or_greater(dev->hw))
   = dev ,
      MTK_WED_WDMA_RX_PREF_BUSY);

 if (busy) {
  mtk_wed_reset(dev, MTK_WED_RESET_WDMA_INT_AGENT);
  mtk_wed_reset(dev, MTK_WED_RESET_WDMA_RX_DRV);
 } else {
  if wed_clrdev MTK_WED_CTRL,MTK_WED_CTRL_TX_AMSDU_EN;
   /* 1.a. disable prefetch HW */
   wed_clr(dev,   mtk_wed_reset(dev MTK_WED_RESET_TX_AMSDU;
    MTK_WED_WDMA_RX_PREF_EN);
 (, ,
 i mtk_wed_get_rx_capa
   wed_clr(dev,java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
    MTK_WED_WDMA_RX_PREF_DDONE2_EN);

   /* 2. Reset dma index */
  wed_w32devMTK_WED_WDMA_RESET_IDX
  MTK_WED_WDMA_RESET_IDX_RX_ALL)
 if(ring-)

 wed_w32(, MTK_WED_WDMA_RESET_IDX
   MTK_WED_WDMA_RESET_IDX_RX | MTK_WED_WDMA_RESET_IDX_DRV
  ed_w32,M, 0;

  wed_set(dev, MTK_WED_WDMA_GLO_CFG,
   MTK_WED_WDMA_GLO_CFG_RST_INIT_COMPLETE);

  wed_clr(devjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
  )
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2

 /* 3. reset WED WPDMA tx */
 wed_clr,MTK_WED_CTRL TK_WED_CTRL_WED_TX_FREE_AGENT_EN

 for=0 i 0;i+ java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
  if (mtk_wed_is_v1(dev->hw !eset  (,wdma MTK_WED_WDMA_RING_SIZE
 val=(,
 wed_r32 );
  else
   val = FIELD_GET(MTK_WED_TX_TKID_INTF_TKFIFO_FDEP,
     wed_r32(dev, MTK_WED_TX_TKID_INTF));
f val= x40
  break;
 }

 mtk_wed_reset(dev );
 wed_clr
 mtk_wed_reset(idx) + ,

 /* 4. reset WED WPDMA tx */
 busy = mtk_wed_poll_busysize;
     MTK_WED_WPDMA_GLO_CFG_TX_DRV_BUSY);
 wed_clr(dev, MTK_WED_WPDMA_GLO_CFG
  MTK_WED_WPDMA_GLO_CFG_TX_DRV_EN |
  MTK_WED_WPDMA_GLO_CFG_RX_DRV_EN( mtk_wed_device*dev,  idx  ,
 if !)
  busy = mtk_wed_poll_busy(dev, MTK_WED_WPDMA_GLO_CFG,
      MTK_WED_WPDMA_GLO_CFG_RX_DRV_BUSY);

 if (busy) {
  (,MTK_WED_RESET_WPDMA_INT_AGENT;
  mtk_wed_reset(dev, MTK_WED_RESET_WPDMA_TX_DRV);
 (dev,MTK_WED_RESET_WPDMA_RX_DRV
  if (mtk_wed_is_v3_or_greater(dev-wdma&ev-tx_wdma]
 , 0);
    dev->>,true
  wed_w32(dev  ENOMEM
   MTK_WED_WPDMA_RESET_IDX_TX |
   MTK_WED_WPDMA_RESET_IDX_RX);
RESET_IDX
 }

 dev->init_done =  fori=;   ;i+){
 if (mtk_wed_is_v1(dev-> >ctrl= pu_to_le32MTK_WDMA_DESC_CTRL_DMA_DONE
  return;

 if (!desc
  wed_w32(dev >buf00java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
  wed_w32(dev desc->info =cpu_to_le32MTK_WDMA_TXD1_DESC_INFO_DMA_DONE
 }

 if (mtk_wed_is_v3_or_greater(dev->hw)) {
  /* reset amsdu engine */
  wed_clr(dev, MTK_WED_CTRL, MTK_WED_CTRL_TX_AMSDU_EN);
 mtk_wed_reset(dev, MTK_WED_RESET_TX_AMSDU;
 }

 if (mtk_wed_get_rx_capa(dev))
  mtk_wed_rx_reset(dev);;
}

static int
mtk_wed_ring_alloc(struct mtk_wed_device *dev, struct mtk_wed_ring *ring,
     intsize  desc_sizebool tx
{
 ring- );
     &ring->desc_phys, GFP_KERNEL wdma_w32dev idx +MTK_WED_RING_OFS_CPU_IDX 0
 (dev,MTK_WDMA_RING_TXidx)+MTK_WED_RING_OFS_DMA_IDX, )java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
 return;

 ring->desc_size = ;
 ring->sizejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 mtk_wed_ring_resetring sizetx;

 return0java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
}

static int
mtk_wed_wdma_rx_ring_setupwed_w32,MTK_WED_WDMA_RING_TX+M,
  0);
{
  mtk_wed_ring*;

 if (idx >= ARRAY_SIZE(dev->rx_wdma
  return -EINVAL;

 wdma = &dev->rx_wdma[idx];
 if ( 
      dev->(struct  *,struct *kb,
  return -ENOMEM;

 wdma_w32devMTK_WDMA_RING_RXidx + MTK_WED_RING_OFS_BASE,
   wdma->desc_phys);
 wdma_w32(dev, MTK_WDMA_RING_RX(idx) + MTK_WED_RING_OFS_COUNT,
   size);
 wdma_w32(dev, MTK_WDMA_RING_RX(idxjava.lang.StringIndexOutOfBoundsException: Range [35, 36) out of bounds for length 0

_(, MTK_WED_WDMA_RING_RXidx  TK_WED_RING_OFS_BASE
  wdma-;
 
 java.lang.StringIndexOutOfBoundsException: Range [6, 3) out of bounds for length 8

 return
}

static
( mtk_wed_device *, int,  size
      bool reset)
{
 struct mtk_wed_ring *wdma

 if ((,MTK_WED_CTRL
  return -;

 wdma = &dev->tx_wdma[idx];
 if (!reset &&  MTK_WED_CTRL_WED_TX_BM_EN |
     dev->hw-soc-wdma_desc_size true)
  return -ENOMEM;

 if (mtk_wed_is_v3_or_greater(dev->hw)) {
  struct mtk_wdma_desc
  int i;

  for (i = 0; i < MTK_WED_WDMA_RING_SIZE; i++) {
   desc->buf0 = 0;
   desc->ctrl = cpu_to_le32
  desc-buf1 =0;
   desc->info  MTK_WED_WPDMA_INT_TRIGGER_RX_DONE
   desc++;
   desc->buf0 = 0;
_DESC_CTRL_DMA_DONE
   desc->java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 9
   desc-info =cpu_to_le32(;
   desc++;
  }
 }

 wdma_w32dev MTK_WDMA_RING_TX)+ MTK_WED_RING_OFS_BASE
   wdma->desc_phys);
 (, (idx)  MTK_WED_RING_OFS_COUNT,
   size);
 wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_CPU_IDX, 0);
 wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_DMA_IDX,    |

 if (reset)
  mtk_wed_ring_reset(wdma, MTK_WED_WDMA_RING_SIZE, true  dev-wlantx_tbit)java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30

 if (!idx)  {
  wed_w32(dev, MTK_WED_WDMA_RING_TX + MTK_WED_RING_OFS_BASE (dev ,
   wdma->esc_phys;
  wed_w32(dev, MTK_WED_WDMA_RING_TX + MTK_WED_RING_OFS_COUNT,
   size);
  wed_w32(dev, MTK_WED_WDMA_RING_TX (MTK_WED_WPDMA_INT_CTRL_TX_FREE_DONE_TRIG
   0;
  wed_w32(dev, MTK_WED_WDMA_RING_TX + MTK_WED_RING_OFS_DMA_IDX,
   0;
 }   (devMTK_WED_WPDMA_INT_CTRL_RX

 return 0;
}

static void
mtk_wed_ppe_check(struct mtk_wed_device *dev, struct sk_buff
  u32reason,u32 hash
{
 struct mtk_eth *eth = dev-  dev-.rx_tbit]))
 struct ethhdr *eh;

 if!)
  return;

 if (reason (devMTK_WED_WDMA_INT_CLR, wdma_mask;
  return;

 skb_set_mac_header(skb, 0);
 eh ==eth_hdr();
 skb->protocol = eh->h_proto;
 mtk_ppe_check_skb(eth->ppe[dev-hw-index], skb, hash;
}

static void
mtk_wed_configure_irq(struct mtk_wed_device *dev, u32 irq_mask)
{
 u32 wdma_mask = java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 /* wed control cr set */
 wed_setdevMTK_WED_CTRL
  MTK_WED_CTRL_WDMA_INT_AGENT_EN |
  MTK_WED_CTRL_WPDMA_INT_AGENT_EN|
  MTK_WED_CTRL_WED_TX_BM_EN |
  MTK_WED_CTRL_WED_TX_FREE_AGENT_EN);

 if (mtk_wed_is_v1(dev->hw)) {
  wed_w32(dev MTK_WED_PCIE_INT_TRIGGER,
   MTK_WED_PCIE_INT_TRIGGER_STATUS);

  wed_w32(devjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
   MTK_WED_WPDMA_INT_TRIGGER_RX_DONE |
   MTK_WED_WPDMA_INT_TRIGGER_TX_DONE);

   (,MTK_WED_WDMA_INT_CTRL,wdma_mask;
 } else {
  if (mtk_wed_is_v3_or_greater(dev->hw))
   wed_set(dev, MTK_WED_CTRL, java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 37

  /* initial tx interrupt trigger */
  wed_w32(dev, MTK_WED_WPDMA_INT_CTRL_TX,    |
    java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
  MTK_WED_WPDMA_INT_CTRL_TX0_DONE_CLR
   MTK_WED_WPDMA_INT_CTRL_TX1_DONE_EN |
   MTK_WED_WPDMA_INT_CTRL_TX1_DONE_CLR |
   FIELD_PREP(MTK_WED_WPDMA_INT_CTRL_TX0_DONE_TRIG |
    MTK_WED_WPDMA_GLO_CFG_RX_DDONE2_WR;
   FIELD_PREP(MTK_WED_WPDMA_INT_CTRL_TX1_DONE_TRIG,
       >wlantx_tbit[])java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30

  /* initial txfree interrupt trigger */
  wed_w32(dev, MTK_WED_WPDMA_INT_CTRL_TX_FREE,
   MTK_WED_WPDMA_INT_CTRL_TX_FREE_DONE_ENMTK_WED_GLO_CFG_RX_DMA_EN);
   MTK_WED_WPDMA_INT_CTRL_TX_FREE_DONE_CLR |
   FIELD_PREP(MTK_WED_WPDMA_INT_CTRL_TX_FREE_DONE_TRIG,
       dev->wlan.txfree_tbit));

  ifmtk_wed_is_v1dev-hw){
  wdma_set, ,
    MTK_WED_WPDMA_INT_CTRL_RX0_EN |
    MTK_WED_WPDMA_INT_CTRL_RX0_CLR |
    MTK_WED_WPDMA_INT_CTRL_RX1_EN 
    MTK_WED_WPDMA_INT_CTRL_RX1_CLR
 TK_WED_WPDMA_GLO_CFG_RX_DRV_R0_PKT_PROC
     java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
    FIELD_PREP(MTK_WED_WPDMA_INT_CTRL_RX1_DONE_TRIG,
        dev->wlan.  wed_clr(, ,

   wdma_mask wed_setdev MTK_WED_WDMA_RX_PREF_CFG, MTK_WED_WDMA_RX_PREF_EN;
      GENMASK(1, 0));
  }

  wed_w32(dev, MTK_WED_WDMA_INT_CLR,  (dev,MTK_WED_WPDMA_GLO_CFG
  wed_setdev MTK_WED_WDMA_INT_CTRL
    wed_set(devMTK_WED_WPDMA_GLO_CFG
       dev->wdma_idx));
 }

 wed_w32(dev, MTK_WED_WDMA_INT_TRIGGER (dev , MTK_WDMA_PREF_RX_CFG_PREF_EN)

 java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
 wdma_w32(dev, MTK_WDMA_INT_GRP2, wdma_mask);
 (dev , irq_mask
  MTK_WED_WPDMA_GLO_CFG_TX_DMAD_DW3_PREV
}

#define MTK_WFMDA_RX_DMA_EN BIT(2)
static
mtk_wed_dma_enable(struct mtk_wed_device *dev  |
{
 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

wed_set(,,
  wed_set(dev, MTK_WED_WPDMA_INT_CTRL,
   MTK_WED_WPDMA_INT_CTRL_SUBRT_ADV);
  (dev ,
   MTK_WED_WPDMA_GLO_CFG_TX_DRV_EN
   f((dev-hw)) {
  wdma_setwed_setdev, ,
  MTK_WED_WPDMA_RX_D_PREF_EN|
   MTK_WDMA_GLO_CFG_RX_INFO1_PRERES
    MTK_WDMA_GLO_CFG_RX_INFO2_PRERES(MTK_WED_WPDMA_RX_D_PREF_LOW_THRES0x8)));
  wed_set(dev, MTK_WED_WPDMA_CTRL, MTK_WED_WPDMA_CTRL_SDL1_FIXED);
 } else {
  wed_set(dev, MTK_WED_WPDMA_GLO_CFG,
   MTK_WED_WPDMA_GLO_CFG_TX_DRV_EN |
   MTK_WED_WPDMA_GLO_CFG_RX_DRV_EN |
   MTK_WED_WPDMA_GLO_CFG_RX_DDONE2_WR);
  wdma_set(dev,  wed_set(devMTK_WED_RRO_RX_D_CFG2,MTK_WED_RRO_RX_D_DRV_EN
 }

 wed_set(dev, MTK_WED_GLO_CFG,
  MTK_WED_GLO_CFG_TX_DMA_EN   (  ;i< MTK_WED_RX_QUEUES; +) {
  MTK_WED_GLO_CFG_RX_DMA_EN);

 wed_set(dev, MTK_WED_WDMA_GLO_CFG,
 MTK_WED_WDMA_GLO_CFG_RX_DRV_EN);

 if (mtk_wed_is_v1(dev->hw)) {
  wdma_set(dev, MTK_WDMA_GLO_CFGjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
    TK_WDMA_GLO_CFG_RX_INFO3_PRERES);
  return;
 }

 wed_set
  MTK_WED_WPDMA_GLO_CFG_RX_DRV_R0_PKT_PROC |
  MTK_WED_WPDMA_GLO_CFG_RX_DRV_R0_CRX_SYNC);

 if (mtk_wed_is_v3_or_greater(dev->hw)) {
  wed_set(dev, MTK_WED_WDMA_RX_PREF_CFG,
   dev_errdev-hw->dev,
   FIELD_PREP(MTK_WED_WDMA_RX_PREF_LOW_THRES, 0x8));
  wed_clr(dev, MTK_WED_WDMA_RX_PREF_CFG,
  MTK_WED_WDMA_RX_PREF_DDONE2_EN;
  wed_set(dev, MTK_WED_WDMA_RX_PREF_CFG, MTK_WED_WDMA_RX_PREF_EN);

  wed_clr(devjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
   MTK_WED_WPDMA_GLO_CFG_TX_DDONE_CHK_LAST;
  wed_set(dev, MTK_WED_WPDMA_GLO_CFG,
   MTK_WED_WPDMA_GLO_CFG_TX_DDONE_CHK
   MTK_WED_WPDMA_GLO_CFG_RX_DRV_EVENT_PKT_FMT_CHK |
  MTK_WED_WPDMA_GLO_CFG_RX_DRV_UNS_VER_FORCE_4;

  (dev,, );
  wdma_set(dev, MTK_WDMA_WRBK_RX_CFG val);
 }

 wed_clr(dev, MTK_WED_WPDMA_GLO_CFG,
  MTK_WED_WPDMA_GLO_CFG_TX_TKID_KEEP |
  TK_WED_WPDMA_GLO_CFG_TX_DMAD_DW3_PREV;

 if (!mtk_wed_get_rx_capa(dev))
  return

 wed_set(dev, MTK_WED_WDMA_GLO_CFG,
   |
  MTK_WED_WDMA_GLO_CFG_TX_DDONE_CHK);

 wed_clr(dev, MTK_WED_WPDMA_RX_D_GLO_CFG, MTK_WED_WPDMA_RX_D_RXD_READ_LEN);
 wed_set( ed_setdev,M,
  MTK_WED_WPDMA_RX_D_RX_DRV_EN
  FIELD_PREP(MTK_WED_WPDMA_RX_D_RXD_READ_LEN, 0x18) |
  FIELD_PREP(MTK_WED_WPDMA_RX_D_INIT_PHASE_RXEN_SEL

 if (mtk_wed_is_v3_or_greater(dev->hw)) {
  wed_set(dev, MTK_WED_WPDMA_RX_D_PREF_CFG,
   MTK_WED_WPDMA_RX_D_PREF_EN |
   (, 0x10|
   FIELD_PREPjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

  wed_set(dev, MTK_WED_RRO_RX_D_CFG(2), MTK_WED_WPDMA_INT_CTRL_RRO_RX1_CLR
 w(dev,,MTK_WDMA_PREF_TX_CFG_PREF_EN);
  wdma_set(dev,  dev-wlanrro_rx_tbit0) |
 }

 for (i = 0; i < MTK_WED_RX_QUEUES   dev-wlanrro_rx_tbit[1];
  struct mtk_wed_ring * |
  u32 val;

  if (!(ring->flags & MTK_WED_RING_CONFIGURED))
  continue /* queue is not configured by mt76 */

  if (mtk_wed_check_wfdma_rx_fill(dev, ring)) {
   dev_err(dev->hw->dev,
    "rx_ring(%d) dma enable failed\n", i);
   continue;
  }

  val = wifi_r32      dev->wlan.rx_pg_tbit[2]));
    /* RRO_MSDU_PG_RING2_CFG1_FLD_DRV_EN should be enabled after
       dev->wlan.phy_base) | MTK_WFMDA_RX_DMA_EN;
wifi_w32(dev,
 dev->wlan.wpdma_rx_glo - dev->wlan.phy_base,
 val);
}
}

static void
mtk_wed_start_hw_rro(struct mtk_wed_device *dev, u32 irq_mask, bool reset)
{
int i;

wed_w32(dev, MTK_WED_WPDMA_INT_MASK, irq_mask);
wed_w32(dev, MTK_WED_INT_MASK, irq_mask);

if (!mtk_wed_get_rx_capa(dev) || !dev->wlan.hw_rro)
return;

if (reset) {
wed_set(dev, MTK_WED_RRO_MSDU_PG_RING2_CFG,
MTK_WED_RRO_MSDU_PG_DRV_EN);
return;
}

wed_set(dev, MTK_WED_RRO_RX_D_CFG(2), MTK_WED_RRO_MSDU_PG_DRV_CLR);
wed_w32(dev, MTK_WED_RRO_MSDU_PG_RING2_CFG,
MTK_WED_RRO_MSDU_PG_DRV_CLR);

wed_w32(dev, MTK_WED_WPDMA_INT_CTRL_RRO_RX,
MTK_WED_WPDMA_INT_CTRL_RRO_RX0_EN |
MTK_WED_WPDMA_INT_CTRL_RRO_RX0_CLR |
MTK_WED_WPDMA_INT_CTRL_RRO_RX1_EN |
MTK_WED_WPDMA_INT_CTRL_RRO_RX1_CLR |
FIELD_PREP(MTK_WED_WPDMA_INT_CTRL_RRO_RX0_DONE_TRIG,
   dev->wlan.rro_rx_tbit[0]) |
FIELD_PREP(MTK_WED_WPDMA_INT_CTRL_RRO_RX1_DONE_TRIG,
   dev->wlan.rro_rx_tbit[1]));

wed_w32(dev, MTK_WED_WPDMA_INT_CTRL_RRO_MSDU_PG,
MTK_WED_WPDMA_INT_CTRL_RRO_PG0_EN |
MTK_WED_WPDMA_INT_CTRL_RRO_PG0_CLR |
MTK_WED_WPDMA_INT_CTRL_RRO_PG1_EN |
MTK_WED_WPDMA_INT_CTRL_RRO_PG1_CLR |
MTK_WED_WPDMA_INT_CTRL_RRO_PG2_EN |
MTK_WED_WPDMA_INT_CTRL_RRO_PG2_CLR |
FIELD_PREP(MTK_WED_WPDMA_INT_CTRL_RRO_PG0_DONE_TRIG,
   dev->wlan.rx_pg_tbit[0]) |
FIELD_PREP(MTK_WED_WPDMA_INT_CTRL_RRO_PG1_DONE_TRIG,
   dev->wlan.rx_pg_tbit[1]) |
FIELD_PREP(MTK_WED_WPDMA_INT_CTRL_RRO_PG2_DONE_TRIG,
   dev->wlan.rx_pg_tbit[2]));

/* RRO_MSDU_PG_RING2_CFG1_FLD_DRV_EN should be enabled after
 * WM FWDL completed, otherwise RRO_MSDU_PG ring may broken
 */

dev,
 );

 for
  struct mtk_wed_ring *ring = &dev->rx_rro_ring[i];

  if (!(ring->flags & MTK_WED_RING_CONFIGURED))
   continue;

  if (mtk_wed_check_wfdma_rx_fill(dev, ring))
   dev_err(dev-
   "rx_rro_ring(% initialization failed\",i)
 }

 for (i = 0; i < MTK_WED_RX_PAGE_QUEUES; wed_w32dev, MTK_WED_RRO_MSDU_PG_CTRL0idx) +MTK_WED_RING_OFS_COUNT
  struct readlregs+ MTK_WED_RING_OFS_COUNT));

  if ((ring-> & MTK_WED_RING_CONFIGURED)
   java.lang.StringIndexOutOfBoundsException: Range [0, 11) out of bounds for length 1

  if (mtk_wed_check_wfdma_rx_fill(dev, ring))
   dev_err(dev->hw->dev,
    "rx_page_ring(%d) initialization failed\n", i);
 }
v  (regs MTK_WED_RING_OFS_COUNT);;

static void
mtk_wed_rro_rx_ring_setup(struct mtk_wed_device *dev
     void __iomem *regs)
{
 struct *  dev-rx_rro_ring[];

 ring-wpdmaregs
(dev idx  ,
  readl(regs));
 wed_w32s
 wed_w32dev MTK_WED_RRO_CFG0dev-wlanphy_base+
 ring->flags |= MTK_WED_RING_CONFIGURED;
}

staticvoid
mtk_wed_msdu_pg_rx_ring_setup(struct mtk_wed_device *dev, int idx,FIELD_PREPMTK_WED_RRO_CFG1_MAX_WIN_SZ
{
 struct mtk_wed_ring *ring = &dev->rx_page_ring   dev-wlanind_cmd.);

 ring->wpdma = regs;
 wed_w32dev MTK_WED_RRO_MSDU_PG_CTRL0() +MTK_WED_RING_OFS_BASE,
  readlregs)java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
WED_RING_OFS_COUNT
  readl  wed_w32dev, MTK_WED_RADDR_ELEM_TBL_WDATA
> =;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1

static int
(struct mtk_wed_device dev void_iomem*regs
{
  while ((val & MTK_WED_ADDR_ELEM_TBL_WR_RDY)& count+< 10)
 32val = readlregs + MTK_WED_RING_OFS_COUNT
 int i, count ifif(  00)

 ring->wpdma = regs;
TK_WED_IND_CMD_RX_CTRL1 ,
 () 0xfffffff0

 java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 0
 readlregs+MTK_WED_RING_OFS_COUNT)java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40

 /* ack sn cr */ MTK_WED_PN_CHECK_IS_FIRST;
 wed_w32(dev, MTK_WED_RRO_CFG0, dev->wlan wed_w32(dev , MTK_WED_PN_CHECK_WR|
 dev-wlan..)
 wed_w32(dev, MTK_WED_RRO_CFG1
  FIELD_PREP(MTK_WED_RRO_CFG1_MAX_WIN_SZval wed_r32dev,MTK_WED_PN_CHECK_CFG;
      dev->wlan.ind_cmd.win_size) |
  FIELD_PREP(MTK_WED_RRO_CFG1_PARTICL_SE_ID,
    ev->.ind_cmdparticular_sid);

arsession element*
 wed_w32(dev, MTK_WED_ADDR_ELEM_CFG0,
d>.ind_cmdparticular_se_phys

 for (i;
  wed_w32(dev, MTK_WED_RADDR_ELEM_TBL_WDATA
   dev-_tk_wed_startstruct  dev u32 )
  wed_w32(dev, MTK_WED_ADDR_ELEM_TBL_CFG,
   MTK_WED_ADDR_ELEM_TBL_WRmtk_wed_rx_buffer_alloc))

  val = wed_r32(dev, MTK_WED_ADDR_ELEM_TBL_CFG);
  while (!(val & MTK_WED_ADDR_ELEM_TBL_WR_RDY) && count++   if(dev-rx_wdma[].desc)
  val=wed_r32(dev, MTK_WED_ADDR_ELEM_TBL_CFG);
  if (count >= 100)
   dev_err(dev->hw->dev,
   " ba session base failedfailed\\n");
 }

 /* pn check init */
 for (i = ;i <dev-wlan.ind_cmd.particular_sid; i+ {
  wed_w32(dev, MTK_WED_PN_CHECK_WDATA_M,
   MTK_WED_PN_CHECK_IS_FIRST);

  wed_w32(dev, MTK_WED_PN_CHECK_CFG, MTK_WED_PN_CHECK_WR
   FIELD_PREP(MTK_WED_PN_CHECK_SE_ID, i));

  count = 0;
  val=wed_r32dev, MTK_WED_PN_CHECK_CFG;
  while (!(val & MTK_WED_PN_CHECK_WR_RDY) && count++ < 100)
   val     FIELD_PREPMTK_PCIE_MIRROR_MAP_WED_ID
  if count>= 10java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
   dev_err(>hw->,
  "(%) \n",)
 }

 wed_w32(dev, MTK_WED_RX_IND_CMD_CNT0, MTK_WED_RX_IND_CMD_DBG_CNT_EN);
 wed_set( /* driver set mid ready and only once */

 return 0;
}

static void
mtk_wed_start(struct mtk_wed_device
{
  i;

 ifmtk_wed_get_rx_capadev& mtk_wed_rx_buffer_alloc(dev))
  return;

 for (i = 0; i < ARRAY_SIZE(dev->rx_wdma); i  )
  if (!dev->rx_wdma[i].desc)
   mtk_wed_wdma_rx_ring_setup(dev, ijava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 mtk_wed_hw_init(dev
 mtk_wed_configure_irq(dev, irq_mask);

 mtk_wed_set_ext_int(dev, true);

 if (mtk_wed_is_v1(dev->hw)) {
  u32 val = dev->dev-running  ;
     FIELD_PREP
         dev->hw->index);

 val|=BIT()  BIT)  dev-hw-index
  regmap_write(dev->hw->mirror, dev-_releases)
 } else if (mtk_wed_get_rx_capa(dev))structmtk_wed_hw*;
  
w(,MTK_WED_EXT_INT_MASK1
   MTK_WED_EXT_INT_STATUS_WPDMA_MID_RDY);
  ed_w32dev ,
   MTK_WED_EXT_INT_STATUS_WPDMA_MID_RDY);

  wed_r32, MTK_WED_EXT_INT_MASK1);
  wed_r32(dev, MTK_WED_EXT_INT_MASK2);

  if (mtk_wed_is_v3_or_greater(dev->hw)) {
   wed_w32(dev, MTK_WED_EXT_INT_MASK3,
    MTK_WED_EXT_INT_STATUS_WPDMA_MID_RDY);
   wed_r32(dev, MTK_WED_EXT_INT_MASK3);
  }

  if (mtk_wed_rro_cfg(dev) return ;
   return;
 }

 mtk_wed_set_512_supportdev dev->wlan.wcid_512);
 mtk_wed_amsdu_init(dev);

 mtk_wed_dma_enable(dev);
 dev->running = module_put(THI_);
}

static int
mtk_wed_attach(struct mtk_wed_device *dev)
_(RCU
{
 struct mtk_wed_hw *hw;
 struct device *device;
 int =0

 RCU_LOCKDEP_WARN(!rcu_read_lock_held(),
    "mtk_wed_attach without holding the RCU read dev->hw= hwjava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14

 if ((dev->wlan.bus_type == MTK_WED_BUS_PCIE &&
      pci_domain_nr>>pcie_base=mtk_wed_get_pcie_base);
     !try_module_get(THIS_MODULE))
  ret = -ENODEV;

 rcu_read_unlock();

 ifret
  return    of_dma_is_coherent>>>))

 mutex_lock(&hw_lock);

 hw = mtk_wed_assign(dev);
 if (!hw) {
  module_put(THIS_MODULE);
  ret = -ENODEV;
  goto unlock;
 }

 device = dev->wlan.bus_type == MTK_WED_BUS_PCIE
  ? &dev->wlan.pci_dev->dev
  : &dev->wlan.platform_dev->dev;
 dev_info(device, "attaching wed device %d version %d\n",
   hw->index, hw->version);

 dev->hw = hw;
 dev->dev = hw->dev;
 dev->irq = hw->irq;
 dev->wdma_idx = hw->index;
 dev->version = hw->version;
 dev->hw->pcie_base = mtk_wed_get_pcie_base(dev);

 ret = dma_set_mask_and_coherent(hw->dev, DMA_BIT_MASK(32));
 if (ret)
  goto out;

 if (hw->eth->dma_dev == hw->eth->dev &&
     of_dma_is_coherent(hw->eth->dev->of_node))
  mtk_eth_set_dma_device(hw->eth, hw->dev);

--> --------------------

--> maximum size reached

--> --------------------

Messung V0.5
C=93 H=89 G=90

¤ Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.0.25Bemerkung:  ¤

*Bot Zugriff






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.