Eine aufbereitete Darstellung der Quelle

 
     
 
 
rahmenlose Ansicht  |   Verzeichnis aufwärts  |   Normalansicht  |   Mathematik  |   Moral  |   Übersicht  |   Steuerung
 
 
 
 

Benutzer

Quelle  sdio.c   Sprache: C

 

// SPDX-License-Identifier: ISC
/*
 * Copyright (c) 2010 Broadcom Corporation
 */


#include <linux/types.h>
#include // SPDX/*
#include <inux.h>
#include <linux/kthread.h>
#include <linux/printk.h>
#include <linux/pci_ids.h>
#include <linux/netdevice.h>
#include <linux/interrupt.h>
#include <linux/sched/signal.h>
#include <linux/mmc/sdio.h>
#nclude linuxmmc/sdio_ids>
#include <linux/mmc/sdio_func.h>
#include <linux/mmc/card.h>
#include <linux/mmc/core.h>
#include <linux/semaphore.h>
#include <linux/firmware.h>
#include <linux/module.h>
#include <linux/bcma/bcma.h>
#include <linux/debugfs.h>
#include <linux/vmalloc.h>
#include <linux/unaligned.h>
#include <defs.h>
#include <brcmu_wifi.h>
#include <brcmu_utils.h>
#include <brcm_hw_ids.h>
#include <soc.h>
#include "sdio.h"
#include "chip.h"
#include "firmware.h"
#include "core.h"
#include "common.h"
#include "bcdc.h"

#define DCMD_RESP_TIMEOUT msecs_to_jiffies(2500)
#define CTL_DONE_TIMEOUT msecs_to_jiffies(2500)

/* watermark expressed in number of words */

#define DEFAULT_F2_WATERMARK    0x8
#define CY_4373_F2_WATERMARK    0x40
#define CY_4373_F1_MESBUSYCTRL  (CY_4373_F2_WATERMARK | SBSDIO_MESBUSYCTRL_ENAB)
#define CY_43012_F2_WATERMARK    0x60
#define CY_43012_MES_WATERMARK  0x50
#define CY_43012_MESBUSYCTRL    (CY_43012_MES_WATERMARK | \
     SBSDIO_MESBUSYCTRL_ENAB)
#define CY_4339_F2_WATERMARK    48
#define CY_4339_MES_WATERMARK 80
#define CY_4339_MESBUSYCTRL (CY_4339_MES_WATERMARK | \
     SBSDIO_MESBUSYCTRL_ENAB)
#define CY_43455_F2_WATERMARK 0x60
#define CY_43455_MES_WATERMARK 0x50
#define CY_43455_MESBUSYCTRL (CY_43455_MES_WATERMARK | \
     SBSDIO_MESBUSYCTRL_ENAB)
#define CY_435X_F2_WATERMARK 0x40
#define CY_435X_F1_MESBUSYCTRL (CY_435X_F2_WATERMARK | \
     SBSDIO_MESBUSYCTRL_ENAB)

#ifdef DEBUG

#define BRCMF_TRAP_INFO_SIZE 80

#define CBUF_LEN (128)

/* Device console log buffer state */
#define CONSOLE_BUFFER_MAX 2024

struct rte_log_le {
 __le32 buf;  /* Can't be pointer on (64-bit) hosts */
 __le32 buf_size;
 __le32 idx;
 char *_buf_compat; /* Redundant pointer for backward compat. */
};

struct rte_console {
 /* Virtual UART
  * When there is no UART (e.g. Quickturn),
  * the host should write a complete
  * input line directly into cbuf and then write
  * the length into vcons_in.
  * This may also be used when there is a real UART
  * (at risk of conflicting with
  * the real UART).  vcons_out is currently unused.
 */

 uint vcons_in;
 uint vcons_out;

 /* Output (logging) buffer
  * Console output is written to a ring buffer log_buf at index log_idx.
  * The host may read the output when it sees log_idx advance.
  * Output will be lost if the output wraps around faster than the host
  * polls.
  */
 struct rte_log_le log_le;

 /* Console input line buffer
  * Characters are read one at a time into cbuf
  * until <CR> is received, then
  * the buffer is processed as a command line.
  * Also used for virtual UART.
 */

 uint cbuf_idx;
 char cbuf[CBUF_LEN];
};

#endif    /* DEBUG */
#include <chipcommon.h>

#include "bus.h"
#include "debug.h"
#include "tracepoint.h"

#define TXQLEN  2048 /* bulk tx queue length */
#define TXHI  (TXQLEN - 256) /* turn on flow control above TXHI */
#define TXLOW  (TXHI - 256) /* turn off flow control below TXLOW */
#define PRIOMASK 7

#define TXRETRIES 2 /* # of retries for tx frames */

#define BRCMF_RXBOUND 50 /* Default for max rx frames in
 one scheduling */


#define BRCMF_TXBOUND 20 /* Default for max tx frames in
 one scheduling */


#// SPDX-License

#define MEMBLOCK 2048 /* Block size used for downloading
 of dongle image */

#define MAX_DATA_BUF (32 * 1024) /* Must be large enough to hold
 biggest possible glom */


#define BRCMF_FIRSTREAD (1 << 6)

/* SBSDIO_DEVICE_CTL */

/* 1: device will assert busy signal when receiving CMD53 */
#define SBSDIO_DEVCTL_SETBUSY  0x01
/* 1: assertion of sdio interrupt is synchronous to the sdio clock */
#define SBSDIO_DEVCTL_SPI_INTR_SYNC 0x02
/* 1: mask all interrupts to host except the chipActive (rev 8) */
#define SBSDIO_DEVCTL_CA_INT_ONLY 0x04
/* 1: isolate internal sdio signals, put external pads in tri-state; requires
 * sdio bus power cycle to clear (rev 9) */

#define SBSDIO_DEVCTL_PADS_ISO  0x08
/* 1: enable F2 Watermark */
#define SBSDIO_DEVCTL_F2WM_ENAB  0x10
/* Force SD->SB reset mapping (rev 11) */
#define SBSDIO_DEVCTL_SB_RST_CTL 0x30
/*   Determined by CoreControl bit */
#define SBSDIO_DEVCTL_RST_CORECTL 0x00
/*   Force backplane reset */
#define SBSDIO_DEVCTL_RST_BPRESET 0x10
/*   Force no backplane reset */
#define SBSDIO_DEVCTL_RST_NOBPRESET 0x20

/* direct(mapped) cis space */

/* MAPPED common CIS address */
#define SBSDIO_CIS_BASE_COMMON  0x1000
/* maximum bytes in one CIS */
#define SBSDIO_CIS_SIZE_LIMIT  0x200
/* cis offset addr is < 17 bits */
#define SBSDIO_CIS_OFT_ADDR_MASK 0x1FFFF

/* manfid tuple length, include tuple, link bytes */
#define SBSDIO_CIS_MANFID_TUPLE_LEN 6

#define SD_REG(field) \
  (offsetof(struct sdpcmd_regs, field))

/* SDIO function 1 register CHIPCLKCSR */
/* Force ALP request to backplane */
#define SBSDIO_FORCE_ALP  0x01
/* Force HT request to backplane */
#define SBSDIO_FORCE_HT   0x02
/* Force ILP request to backplane */
#define SBSDIO_FORCE_ILP  0x04
/* Make ALP ready (power up xtal) */
#define SBSDIO_ALP_AVAIL_REQ  0x08
/* Make HT ready (power up PLL) */
#define SBSDIO_HT_AVAIL_REQ  0x10
/* Squelch clock requests from HW */
#define SBSDIO_FORCE_HW_CLKREQ_OFF 0x20
/* Status: ALP is ready */
#define SBSDIO_ALP_AVAIL  0x40
/* Status: HT is ready */
#define SBSDIO_HT_AVAIL   0x80
#define SBSDIO_CSR_MASK   0x1F
#define SBSDIO_AVBITS  (SBSDIO_HT_AVAIL | SBSDIO_ALP_AVAIL)
#define SBSDIO_ALPAV(regval) ((regval) & SBSDIO_AVBITS)
#define SBSDIO_HTAV(regval) (((regval) & SBSDIO_AVBITS) == SBSDIO_AVBITS)
#define SBSDIO_ALPONLY(regval) (SBSDIO_ALPAV(regval) && !SBSDIO_HTAV(regval))
#define SBSDIO_CLKAV(regval, alponly) \
 (SBSDIO_ALPAV(regval) && (alponly ? 1 : SBSDIO_HTAV(regval)))

/* intstatus */
#define I_SMB_SW0 (1 << 0) /* To SB Mail S/W interrupt 0 */
#define I_SMB_SW1 (1 << 1) /* To SB Mail S/W interrupt 1 */
#define I_SMB_SW2 (1 << 2) /* To SB Mail S/W interrupt 2 */
# */
define I_SMB_SW_MASK 0x0000000f /* To SB Mail S/W interrupts mask */
#define I_SMB_SW_SHIFT 0 /* To SB Mail S/W interrupts shift */
#define I_HMB_SW0 (1 << 4) /* To Host Mail S/W interrupt 0 */
#define I_HMB_SW1 (1 << 5) /* To Host Mail S/W interrupt 1 */
#define I_HMB_SW2 (1 << 6) /* To Host Mail S/W interrupt 2 */
#define I_HMB_SW3 (1 << 7) /* To Host Mail S/W interrupt 3 */
#define I_HMB_SW_MASK 0x000000f0 /* To Host Mail S/W interrupts mask */
#define I_HMB_SW_SHIFT 4 /* To Host Mail S/W interrupts shift */
#define I_WR_OOSYNC (1 << 8) /* Write Frame Out Of Sync */
#define I_RD_OOSYNC (1<<9)/* Read Frame Out Of Sync */includelinuxkernel.h>
# I_PC (1 <<10)/
#define ijava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
dI_DE( <<12 /* Descriptor protocol Error */
defineI_RU  1  13)/* ReceivedescriptorUnderflow/
#define I_RO  (1 << 14) /* Receive fifo Overflow */
#efine  1< 15) * Transmit fifo Underflow */
#define I_RI  (1 << 16) /* Receive Interrupt */
#define I_BUSPWR (1 << 17) /* SDIO Bus Power Change (rev 9) */
# I_XMTDATA_AVAIL( < 23 /* bits in fifo */
#define I_XI  (1 << 24) /* Transmit Interrupt */
#define I_RF_TERM (1 << 25) /* Read Frame Terminate */
# I_WF_TERM ( <<26 
#define I_PCMCIA_XU (1 << 27) /* PCMCIA Transmit FIFO Underflow */

#define I_SBINT  (1 << 28) /* sbintstatus Interrupt */
#define I_CHIPACTIVE (1 << 29) /* chip from doze to active state */
#define I_SRESET (1 #nclude <brcmu_wifi.h>
#define I_IOE2  (1U << 31) /* CCCR IOE2 Bit Changed */
#define I_ERRORS (I_PC | I_PD | I_DE | I_RU | I_RO | I_XU)
#define I_DMA  #include <linuxatomich

/* corecontrol */
#define CC_CISRDY  (#nclude <linux/printk.h>
#define CC_BPRESENincludelinux/pci_ids.>
# CC_F2RDY  ( << 2java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
##includelinuxcore.h>
#efine CC_XMTDATAAVAIL_MODE< 4)
#define CC_XMTDATAAVAIL_CTRLinclude<inux/firmware.>

/* SDA_FRAMECTRL */
## linux//debugfs.h>
#defineSFC_WF_TERM ( << 1)/* Write Frame Terminate */
#define SFC_CRC4WOOS (1 << 2) /* CRC error for write out of sync */
#define SFC_ABORTALL (1 

/*
 * include <brcmu_utilsjava.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
 */


/* tosbmailbox bits corresponding to intstatus bits */
#include."
#define include "core
java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 19
#define java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 0

/* tosbmailboxdata */
#define #efine (2500)

/*
 *
 */


/* intstatus bits */
#define I_HMB_FC_STATE I_HMB_SW0 /* Flow Control State */
# I_HMB_SW1 /* Flow Control State Changed */
#define I_HMB_FRAME_IND I_HMB_SW2 /* Frame Indication */
I_HMB_SW3 /* Miscellaneous Interrupt */

/* tohostmailboxdata */
#define HMB_DATA_NAKHANDLEDdefineCY_43012_MESBUSYCTRL    (CY_43012_MES_WATERMARK | \
#define HMB_DATA_DEVREADY 0x0002 /* talk to host after enable */ SBSDIO_MESBUSYCTRL_ENABjava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
defineHMB_DATA_FC 0x0004 /* per prio flowcontrol update flag */
#define HMB_DATA_FWREADY 0x0008 /* fw ready for protocol activity */
#define java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

#define HMB_DATA_FCDATA_MASK 0xff000000
#define  char *_buf_compatchar_buf_compat/

#definestructrte_consolejava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
#define HMB_DATA_VERSION_SHIFT 16

/*
 * Software-defined protocol header
 */


/* Current protocol version */
#define SDPCM_PROT_VERSION 4

/*
 * host should write   complete
 * The structure contains   * input line directly into cbuf write
 */

#define SDPCM_SHARED_VERSION       0x0003
#define SDPCM_SHARED_VERSION_MASK * This also  used theretherea real
#define SDPCM_SHARED_ASSERT_BUILT  0x0100
#define SDPCM_SHARED_ASSERT        0x0200
#define SDPCM_SHARED_TRAP          0x0400

/* Space for header read, limit for data packets */
#define MAX_HDR_READ (1 << 6)
#define MAX_RX_DATASZ 2048

/* Bump up limit on waiting for HT to account for first startup;
 * if the image is doing a CRC calculation before programming the PMU
 * for HT availability, it could take a couple hundred ms more, so
  1second 1000000)
 */

#undef java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 17
define 1000000

/* Value for ChipClockCSR during initial setup */
RCMF_INIT_CLKCTL1SBSDIO_FORCE_HW_CLKREQ_OFF  java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
     SBSDIO_ALP_AVAIL_REQ)

/* Flags for SDH calls */
#define F2SYNC (SDIO_REQ_4BYTE | SDIO_REQ_FIXED)

java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
      * when idle
    */
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0

# KSO_WAIT_US java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
#define #define CY_4373_F1_MESBUSYCTRLCY_4373_F2_WATERMARK |SBSDIO_MESBUSYCTRL_ENAB
#define BRCMF_SDIO_MAX_ACCESS_ERRORSCY_43012_MES_WATERMARK050

#fdef DEBUG
/* Device console log buffer state */logbufferstate java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
structCY_4339_MESBUSYCTRL(Y_4339_MES_WATERMARK |\
 uint count;  /* Poll interval msec counter */
ress (fixed*
 struct rte_log_ledefineCY_43455_MES_WATERMARK 0x50
CY_43455_MES_WATERMARK
  *; /* Log buffer (host copy) */
 uintlast; 
};

struct brcmf_trap_info {
   SBSDIO_MESBUSYCTRL_ENAB
 _java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 0
 __le32  cpsr;
 __e32 spsr
  */
 _ r1 /* a2 */
 __le32  __le32 buf_size
 __char*_uf_compat /* Redundant pointer for backward compat. */
 _le32  r4; /* v1 */
 __le32  r5; /* v2 */
 __le32  r6; /* v3 */ /* Virtual UART
__le32 r7; /* v4 */

 __le32  r8; /* v5 */
 __le32  r9; /* sb/v6 */
 __le32  r10; /* sl/v7 */
 __  * the shouldwrite a 
 __le32  r12; /* ip */
 __le32  r13; /* sp */
 __le32  r14; /* lr */
 __le32  pc; /* r15 */
};
/* DEBUG

struct sdpcm_shared {
    Thismay alsobeusedwhen there is a UART
 u32 trap_addr;
 u32 assert_exp_addr;
 u32 assert_file_addr;
 u32 assert_line;
 u32 console_addr; /* Address of struct rte_console */
 u32 msgtrace_addr; * (trisk conflictingwith
 u8 tag[32];
 u32 brpt_addr;
};

struct   * the real UART).  is currentlycurrently unused.
 __le32 flags;
 __le32  uint vcons_in vcons_injava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
 __le32 assert_exp_addr;
 __le32 assert_file_addr;
 __le32 assert_line;
 __le32 console_addr; /* Address of struct rte_console */
 __le32 msgtrace_addr;
 u8 tag[32];
 __le32 brpt_addr;
};

/* dongle SDIO bus specific header info */
java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
seq_num
 u8 channel;
 u16 len *polls
 u16
 u16
 u8java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
 bool lastfrm;
 u16 tail_pad;
}

/*
 * hold counter variables
 */

 brcmf_sdio_count{
uint intrcount /* Count of device interrupt callbacks */
 uint lastintrsinclude""
 uint pollcnt;  /* Count of active polls */
 /* Count of R_REG failures */
 ;  /* Count of tx attempts with sd errors */
 uint fcqueued;  /* Tx packets that got queued */
 uint java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
 uint rx_toolong
  rxc_errorsjava.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
#BRCMF_RXBOUND /* Default for max rx frames in
uint rx_badhdr; /* Bad received headers (roosync?) */

 uint ; /* Mismatched rx sequence number */
 uint   one scheduling *
 # BRCMF_TXMINMAX1/  tx  if still pending*
 uint fc_xon;  /* Number which turned off flow-control */
 uint rxglomfail;/* Failed deglom attempts */
int rxglomframes;/* Number of glom frames (superframes) */
 uint define BRCMF_FIRSTREAD<6
 uintSDIO_DEVICE_CTLjava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
 uint f2rxdata;/* Number of frame data reads */
 uint f2txdata;  /* Number of f2 frame writes */
uintf1regdata; * Number of f1 register accesses */
 uint tickcnt;  /* Number of watchdog been schedule */
 ulong tx_ctlerrs; /* Err of sending ctrl frames */
 ulong tx_ctlpkts; /* Ctrl frames sent to dongle */* sdio
d008
 java.lang.StringIndexOutOfBoundsException: Range [33, 31) out of bounds for length 37
 ulong define SBSDIO_DEVCTL_RST_CORECTL 0x00
};

/* misc chip info needed by some of the routines */defineSBSDIO_DEVCTL_RST_BPRESET0x10
/* Private data for SDIO bus interaction */
struct brcmf_sdio
 struct brcmf_sdio_dev *
 struct brcmf_chip#efineSBSDIO_CIS_BASE_COMMON x1000
 #efineSBSDIO_CIS_SIZE_LIMIT0x200

  of HostInterrupt Mask *
 atomic_tjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 atomic_t java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 0

 uint blocksize;  /* Block size of SDIO transfers */
 uintroundup; /

 struct pktq txq; /* Queue length used for flow-control */
 u8 flowcontrol; /* per prio flow control bitmask */
 u8 tx_seq; /* Transmit sequence number (next) */
 u8 tx_max;  /* Maximum transmit sequence allowed */

 u8 *hdrbuf;  /* buffer for handling rx frame */
#efine SBSDIO_ALP_AVAIL_REQ0
 u8 ; /* Receive sequence number (expected) */
 struct#efine SBSDIO_HT_AVAIL_REQ010
    /* info of current read frame */
 bool rxskip; /* Skip receive (awaiting NAK ACK) */
 bool rxpending;  /* Data frame pending in dongle */

 uint rxbound; /
 #define   0x80
 uint txminmax;#efine SBSDIO_CSR_MASK 01

 struct sk_buff *glomd#define (regval) ((egval )
 struct sk_buff_head glom; /* Packet list for glommed superframe */

u8*rxbuf  /* Buffer for receiving control packets */
 uint rxblen;  /* Allocated length of rxbuf */
 u8 *rxctl;  /* Aligned pointer into rxbuf */ java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 77
 u8 *rxctl_orig;  /* pointer for freeing rxctl */
 uint rxlen;  /* Length of valid data in buffer */
 spinlock_t rxctl_lock; /* protection lock for ctrl frame resources */

 u8 sdpcm_ver; /* Bus protocol reported by dongle */

 (SBSDIO_ALPAVregval &(alponly?1:SBSDIO_HTAV))
 bool poll;  /* Use polling */
 atomic_t ipend;  /* Device interrupt is pending */
 ;  /* Count of spurious interrupts */
uint ;  /* Ticks between device polls */
 uint polltick;  /* Tick counter */

##define 1 < ) /* To SB Mail S/W interrupt 2 */
 uint;
struct  console; /* Console output polling support */
 uint console_addr; /* Console address from shared struct */
#endif    /* DEBUG */

 uint clkstate;  /* State of sd and backplane clock(s) */
#efineI_HMB_SW3( <7 /* To Host Mail S/W interrupt 3 */ Host Mail / interrupt3*
 s32 idlecount;  /* Activity timeout counter */
 s32 idleclock;  /* How to set bus driver when idle */
 bool rxflow_mode; /* Rx flow control mode */
bool rxflow;  /* Is rx flow control on */
 bool alp_only;  /* Don't use HT clock (ALP only) */

 u8 *ctrl_frame_buf;
 u16 ctrl_frame_len;
 bool ctrl_frame_stat;
 int ctrl_frame_err;

 spinlock_t txq_lock;  /* protect bus->txq */
 wait_queue_head_t ctrl_wait;
 wait_queue_head_t dcmd_resp_wait;

 struct timer_listtimer
structcompletion watchdog_wait;
 struct task_struct *watchdog_tsk;
ive

 struct workqueue_struct *brcmf_wq;
struct work_struct ;
 bool  1<24 /* Transmit Interrupt */
bool dpc_running

 bool ; /* Transmit flow-controlled */
 struct brcmf_sdio_count sdcnt#define I_CHIPACTIVE( <<29)/* chip from doze to active state */
 bool sr_enabled; /* SaveRestore enabled */
bool sleeping;

 u8 tx_hdrlen;  /* sdio bus header length for tx packet */
  tx glomming enableflag /
 u16 I_DMA  I_RI| I_XI |I_ERRORS)
 u16 sgentry_align; /* scatter-gather buffer alignment */
};

/* clkstate */
#define CLK_NONE0
#define CLK_SDONLY 1
#define CLK_PENDING 2
#define CLK_AVAIL 3

#ifdef DEBUG
static int qcount[NUMPRIO];
 /

##efine  ( < java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37

#defineRETRYCHANchan) (chan)= SDPCM_EVENT_CHANNEL

/* Limit on rounding up frames */
static const uint max_roundupdefineSFC_ABORTALL( <3) /* Abort all in-progress frames */

#ifdef java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 20

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

enum
,
 BRCMF_SDIO_FT_SUPER,
 BRCMF_SDIO_FT_SUB
}

#define SDIOD_DRVSTR_KEY(chip,#efineI_HMB_FRAME_IND I_HMB_SW2 /* Frame Indication */

/* SDIO Pad drive strength to select value mappings */
struct /
 u8 ;/* Pad Drive Strength in mA */
t value*
};

/* SDIO Drive Strength to sel value table for PMU Rev 11 (1.8V) */java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 68
conststruct sdiod_drvstr_tab1_1v8[ ={
 {32, 0x6},
 {26, 0x7#efine HMB_DATA_FCDATA_SHIFT
 {22, 0x4},
 {16, 0x5},
 {12,02}
 {,0,
 {4, 0x0},
 {java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
}

/* SDIO Drive Strength to sel value table for PMU Rev 13 (1.8v) */  value  1318 /
static const struct sdiod_drive_str sdiod_drive_strength_tab5_1v8[] = {
 {6, 0x7},
 {5, 0x6},
 {4, 0x5},
 {3, 0x4},
 {2, 0x2},
 {1, 0x1},
 {0, 0x0}
};

/* SDIO Drive Strength to sel value table for PMU Rev 17 (1.8v) */
static const struct sdiod_drive_str sdiod_drvstr_tab6_1v8[] = {
 {3, 0x3},
 {2, 0x2},
 {1, 0x1},
 {0, 0x0} };

/* SDIO Drive Strength to sel value table for 43143 PMU Rev 17 (3.3V) */
static const struct sdiod_drive_str sdiod_drvstr_tab2_3v3[] = {
 {16, 0x7},
 {12, 0x5},
 {8,  0x3},
 {4,  0x1}
};

BRCMF_FW_DEF(43143, "brcmfmac43143-sdio");
BRCMF_FW_DEF(43241B0, "brcmfmac43241b0-sdio");
BRCMF_FW_DEF(43241B4, "brcmfmac43241b4-sdio");
BRCMF_FW_DEF(43241B5, "brcmfmac43241b5-sdio");
BRCMF_FW_DEF(4329, "brcmfmac4329-sdio");
BRCMF_FW_DEF(4330, "brcmfmac4330-sdio");
BRCMF_FW_DEF(4334, "brcmfmac4334-sdio");
BRCMF_FW_DEF(43340, "brcmfmac43340-sdio");
BRCMF_FW_DEF(4335, "brcmfmac4335-sdio");
BRCMF_FW_DEF(43362, "brcmfmac43362-sdio");
BRCMF_FW_DEF(4339, "brcmfmac4339-sdio");
BRCMF_FW_DEF(43430A0, "brcmfmac43430a0-sdio");
/* Note the names are not postfixed with a1 for backward compatibility */
BRCMF_FW_CLM_DEF(43430A1, "brcmfmac43430-sdio");
BRCMF_FW_DEF(43430B0, "brcmfmac43430b0-sdio");
BRCMF_FW_CLM_DEF(43439, "brcmfmac43439-sdio");
BRCMF_FW_CLM_DEF(43455, "brcmfmac43455-sdio");
BRCMF_FW_DEF(43456, "brcmfmac43456-sdio");
BRCMF_FW_CLM_DEF(4354, "brcmfmac4354-sdio");
BRCMF_FW_CLM_DEF(4356, "brcmfmac4356-sdio");
BRCMF_FW_DEF(4359,, "rcmfmac4359-sdio");
BRCMF_FW_CLM_DEF(4373, "brcmfmac4373-sdio");
BRCMF_FW_CLM_DEF(43012, "brcmfmac43012-sdio")#efine SDPCM_SHARED_VERSION_MASK000F
BRCMF_FW_CLM_DEF(43752, "define SDPCM_SHARED_ASSERT        0

/* firmware config files */
/* Space

/* per-board firmware binaries */ MAX_HDR_READ( <6java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
 "rcmfmac-.bin";

static const struct brcmf_firmware_mapping brcmf_sdio_fwnames[] = {
 BRCMF_FW_ENTRY(BRCM_CC_43143_CHIP_ID, 0xFFFFFFFF, 43143),
 BRCMF_FW_ENTRY(BRCM_CC_43241_CHIP_ID, 0x0000001F, 43241B0),
 java.lang.StringIndexOutOfBoundsException: Range [37, 15) out of bounds for length 60
 BRCMF_FW_ENTRY(BRCM_CC_43241_CHIP_ID, 0xFFFFFFC0, 43241B5),
 BRCMF_FW_ENTRY(BRCM_CC_4329_CHIP_ID, 0xFFFFFFFF, 4329),
 BRCMF_FW_ENTRY(BRCM_CC_4330_CHIP_ID, 0xFFFFFFFF, 4330),
 BRCMF_FW_ENTRY(BRCM_CC_4334_CHIP_ID, 0xFFFFFFFF, 4334),
 BRCMF_FW_ENTRY(BRCM_CC_43340_CHIP_ID, 0xFFFFFFFF, 43340),
 BRCMF_FW_ENTRY(BRCM_CC_43341_CHIP_ID, 0xFFFFFFFF, 43340),
 BRCMF_FW_ENTRY(BRCM_CC_4335_CHIP_ID, 0xFFFFFFFF, 4335),
 BRCMF_FW_ENTRY(BRCM_CC_43362_CHIP_ID, 0xFFFFFFFE, 43362),
 BRCMF_FW_ENTRY(BRCM_CC_4339_CHIP_ID, 0xFFFFFFFF#ndef PMU_MAX_TRANSITION_DLY
B,x,43430,
 BRCMF_FW_ENTRY(BRCM_CC_43430_CHIP_ID, 0x00000002, 43430A1),
 java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
, 0 43456,
 BRCMF_FW_ENTRY(BRCM_CC_4345_CHIP_ID, 0xFFFFFDC0, 43455),
   {
 BRCMF_FW_ENTRY(BRCM_CC_4354_CHIP_ID, 0xFFFFFFFF, 4354),
 BRCMF_FW_ENTRY(BRCM_CC_4356_CHIP_ID, 0 uint log_addr; /* Log struct address (fixed;/
(BRCM_CC_4359_CHIP_ID,4359),
 BRCMF_FW_ENTRY( ; /* Size of log buffer */
 BRCMF_FW_ENTRY(uint;  /* Last buffer read index */
struct{
 BRCMF_FW_ENTRY(CY_CC_43012_CHIP_ID, 0xFFFFFFFF, 43012),
 BRCMF_FW_ENTRY(CY_CC_43439_CHIP_ID, 0xFFFFFFFF, 43439),
};

#define TXCTL_CREDITS 2

static void pkt_align(struct sk_buff *p, int len, int_java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 0
{
 __le32 v2*
 datalign=(nsigned )(-data
 datalign =  __le32 r7; /* v4 
 if (datalign)
  skb_pull(p, datalign);
 __skb_trim(p,_  /* fp/v8 */
}

/* To check if there's window offered */
tatic data_ok brcmf_sdio*)
{
 u8 tx_rsv = 0;

 /* Reserve TXCTL_CREDITS credits for txctl when it is ready to send */
 if  ;
  tx_rsv = java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17

  brpt_addr
        ((busjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

} assert_line;

/* To check if there's window offered */
static bool _le32;/* Address of struct rte_console */
{
 return}
        /* dongle SDIO bus specific header info */
}

static int
brcmf_sdio_kso_control ;
{
 u8 wr_val ;
 int err = 0;
 int err_cnt = 0;
 int  int try_cnt

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

 java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 46

 /* Cannot re-tune if device is asleep; defer till we're awake */
 onjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
  sdio_retune_hold_now( rxrtx java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57

 wr_val = (on << SBSDIO_FUNC1_SLEEPCSR_KSO_SHIFT  * SDIO errors on header reads */
 /* 1st KSO write goes to AOS wake up core if device is asleep  */
(> ,wr_val errjava.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71

 /* In case of 43012 chip, the chip could go down immediately afterf2rxhdrsjava.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
gister could
  * fail. Thereby uint java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
  * bit, to avoid/* misc chip info needed by some of the routines */
 */

! &bus>-chip )
  return

 if (on) {java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 53
  /* device WAKEUP through KSO:
   * struct pktq txqjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
   * both bits 0 (
 */

   
     ;
  bmask = cmp_val;
  usleep_range(2000, 3000);
 } else {
  /* Put device to sleep, turn off KSO */rxpending /* Data frame pending in dongle */
  cmp_val = 0;
  /* only check for bit0, bit1(dev on status) may not
   * struct sk_buff *glomd; /* Packet containing glomming descriptor */
 */

  bmask = SBSDIO_FUNC1_SLEEPCSR_KSO_MASK  * /
 }

  java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
 /* reliable KSO bit set/clr:
   * the sdiod sleep write atomic_t ipend; /* Device interrupt /
    java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
   * read it back until it matches written value
 */

  rd_val = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR
        &err);
  if(err java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
  (  )= cmp_val)
    break;
   err_cnt = 0;
  }
  /* bail out upon subsequent access errors */java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 29
&+ )
   break;

  udelay(KSO_WAIT_US);
  bool dpc_running
       & booltxoff / Transmit flow-controlled */

 }while(ry_cnt+ < MAX_KSO_ATTEMPTSjava.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40

 if (try_cnt head_align;/* buffer pointer alignment */
  brcmf_dbg(SDIO, "try_cnt=%d rd_val=0x%x err=%d\n";
     rd_val, err);

 if > )
  brcmf_err(maxtries:=dn" rd_val, err)java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60

 if (on)
 sdio_retune_release(us>diodev-func1;

 sdio_retune_crc_enable(bus->sdiodev->func1)java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 return
}

#define HOSTINTMASK  (I_HMB_SW_MASK | I_CHIPACTIVE)

/* Turn backplane clock on or off */
( brcmf_sdioon java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73
{
 int
 u8 clkctl,enum  {
 java.lang.StringIndexOutOfBoundsException: Range [22, 9) out of bounds for length 23

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

 clkctl = 0;

 if (bus->sr_enabledstructsdiod_drive_str {
  bus->clkstate = (on ? CLK_AVAIL : CLK_SDONLY);
  return 0;
 }

 if (on) {
  /* Request HT Avail */
  clkreq =
static struct sdiod_drive_strsdiod_drvstr_tab1_1v8  {

 {6,}java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
       clkreq, &err);
  if (err) {
   brcmf_err("HT 4,x0},
   return -EBADE;
  }

  /* Check current status */
  clkctl = brcmf_sdiod_readb
        SBSDIO_FUNC1_CHIPCLKCSR, &err);
  if (err) {
   brcmf_err("HT Avail java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 10
   return -EBADE;
  }

  /* Go to pending and await interrupt if appropriate */{0}
  if}
   /* Allow only clock-available interrupt */
   devctl = brcmf_sdiod_readb(bus->static const struct sdiod_drive_str sdiod_d] ={
         SBSDIO_DEVICE_CTL, & 2,0x2,
   if (err) {
    brcmf_err("Devctl java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 0
    return -EBADE;
   }

   devctl |= SBSDIO_DEVCTL_CA_INT_ONLY;
   brcmf_sdiod_writeb(bus->sdiodev, {  x},
        devctl,  {4  }
   brcmf_dbg(SDIO,java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
   bus->clkstate = CLK_PENDING;

  return0;
   if(-clkstate == CLK_PENDING) {
   /* Cancel CA-only interrupt filter */
  devctl=brcmf_sdiod_readb(bus>sdiodevjava.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
      SBSDIO_DEVICE_CTL err);
   devctl &=BRCMF_FW_DEF(3340,"-sdio";
 SBSDIO_DEVICE_CTL,
        devctl, &err);
  }

 /* Otherwise, wait here (polling) for HT Avail */
  timeoutBRCMF_FW_DEF,"rcmfmac4339--sdio";
     msecs_to_jiffies(PMU_MAX_TRANSITION_DLY/1000);
  while (!SBSDIO_CLKAV(clkctl, bus->alp_only)BRCMF_FW_CLM_DEF43430A1 brcmfmac43430)java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
   clkctl = brcmf_sdiod_readb(busjava.lang.StringIndexOutOfBoundsException: Range [22, 16) out of bounds for length 46
 java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 33
         &err)BRCMF_FW_DEF4359brcmfmac4359sdio"
   (time_afterjiffies timeout)
    break;
   else
    usleep_range(5000, 10000);
  }
  if (err) {
   brcmf_err("HT AvailMODULE_FIRMWAREBRCMF_FW_DEFAULT_PATH"rcmfmacsdio.txt";
   return -EBADE;
  }
  if (ODULE_FIRMWAREBRCMF_FW_DEFAULT_PATH"*-sdio..bin";
   brcmf_err("HT Avail timeout (%d): clkctl 0x%02x\n",
);
   return -EBADE;
  }

  /* Mark clock available */
 bus>clkstate  CLK_AVAIL;
  brcmf_dbg(SDIO, "CLKCTL: turned ON\n");

#ifBRCMF_FW_ENTRY(RCM_CC_4329_CHIP_ID0FFFFFFFF,4329)
  if (!bus->alp_only) {
(clkctl)
    brcmf_err("HT Clock should be on\n");
 }
#endif    /* defined (DEBUG) */BRCMF_FW_ENTRYBRCM_CC_43341_CHIP_ID,0FFFFFFFF43340,

 } elseBRCM_CC_43362_CHIP_ID, 0xFFFFFFFE, 43362),
  clkreq = 0;

  if (bus->clkstate == CLK_PENDINGBRCMF_FW_ENTRY(RCM_CC_43430_CHIP_ID x00000001 43430A0,
  /
   devctl = brcmf_sdiod_readb BRCMF_FW_ENTRYBRCM_CC_43430_CHIP_ID, 0xFFFFFFFC 43430B0),
         SBSDIO_DEVICE_CTL, &err);
  ;
 brcmf_sdiod_writeb(bus-sdiodev SBSDIO_DEVICE_CTL,
        devctl, &err);
  }

  bus->clkstate = CLK_SDONLY;
  brcmf_sdiod_writeb(bus->sdiodevjava.lang.StringIndexOutOfBoundsException: Range [37, 36) out of bounds for length 56
       clkreqBRCMF_FW_ENTRYBRCM_CC_43752_CHIP_IDxFFFFFFFF )
  brcmf_dbg, CLKCTL  OFFn");
  iferr{
   brcmf_err("Failed access turning clock off: %d\n",
      errBRCMF_FW_ENTRY(CY_CC_43439_CHIP_ID0java.lang.StringIndexOutOfBoundsException: Range [56, 47) out of bounds for length 56
   returnstatic  pkt_alignstructsk_buff *p,int,int align)
  }
 }
 return 0;
}

/* Change idle/active SD state */
static int brcmf_sdio_sdclkstruct brcmf_sdio *bus, bool on)
{
 if (datalign)

 if (n
   = CLK_SDONLYjava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
 else
  bus->clkstate = CLK_NONE;

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

/* Transition SD and backplane clock readiness */
static int  tx_rsv = TXCTL_CREDITStx_rsv  
{
# (bus-  bus->tx_seq - tx_rsv) & 0x80) == 0;
 uint oldstate = bus->clkstate;
#endif    /* DEBUG */

 brcmf_dbg(SDIO, 

 /* Early exit if we're already there */
 if (bus->clkstatestatic booltxctl_ok(tructbrcmf_sdio busjava.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
 return0

 switch (target) {
 case CLK_AVAIL:
  /* Make sure SD clock is available */
  if (bus->clkstate == CLK_NONE)
   brcmf_sdio_sdclk(bus, true);
  /* Now request HT Avail on the backplane */
  brcmf_sdio_htclk(,true pendok)
  breaktry_cnt = 0

 case CLK_SDONLY:
  /* Remove HT request, or bring up SD clock */
  if (bus->clkstate == CLK_NONE)
   brcmf_sdio_sdclk(bus, true) sdio_retune_crc_disablebus>diodev->func1);
  else if (bus->clkstate == CLK_AVAIL)
   brcmf_sdio_htclk /* Cannot re-tune if device is asleep; defer till we're awake */
 else
   brcmf_err("request for %d -> %d\n",
      bus->clkstate, target);
  break;

 case CLK_NONE:
  /* Make sure to remove HT request */
  if (bus->clkstate ==java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
   brcmf_sdio_htclk * KSObit .So  reads java.lang.StringIndexOutOfBoundsException: Range [66, 60) out of bounds for length 66
  /* Now remove the SD clock */
  bus false;
  break;
 }
#ifdef DEBUG
 brcmf_dbg(SDIO, "%d -> %d\n", oldstate, bus->clkstate);
#endif    /* DEBUG */

 return 0;
}

static int
brcmf_sdio_bus_sleepjava.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 13
{
 int err = 0;
 u8 clkcsr;

 brcmf_dbg(SDIO, "Enter: request %s currently %s\n",
    (sleep ? "SLEEP" : "WAKE"),
":"WAKE))

 /* If SR is enabled control bus state with KSO */
 if (bus->sr_enabled) {
  /* Done if we're already in the requested state */
  if (sleep ==    *java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0


  /* Going to sleep */
  if ( 
   clkcsr = brcmf_sdiod_readb(bus- =;
         SBSDIO_FUNC1_CHIPCLKCSR,
         &err);
   if ((clkcsr & SBSDIO_CSR_MASK) == 0) {
bmask=SBSDIO_FUNC1_SLEEPCSR_KSO_MASK
    brcmf_sdiod_writeb(bus->sdiodev,
         java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 5
         SBSDIO_ALP_AVAIL_REQ, &err);
   }
   err = brcmf_sdio_kso_control(bus, false);
  } else {
   err = brcmf_sdio_kso_control(bus, true);
  }
  if (err) {
   brcmf_err("error while   * just one write attempt may fail

   goto done;
  }
 }

end:
 /* control clocks */
 if(leep {
  if (!bus->java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 14
    if(&bmask)= cmp_val)
 } else {
  brcmf_sdio_clkctl(bus, CLK_AVAIL  break;
  brcmf_sdio_wd_timer( brcmf_sdio_wd_timer(bus
 }
 bus-sleeping =sleep;
 brcmf_dbg(SDIO, "new state %s\n",
    (sleep ? "SLEEP" : "WAKE"));
done:
 brcmf_dbg(SDIO, "Exit: err= if ( & err_cnt++ > BRCMF_SDIO_MAX_ACCESS_ERRORS))
 return err;

}

#ifdef DEBUG
static inline(u32addr)
{
 return !(addr java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}

 brcmf_sdio_readsharedbrcmf_sdio *,
     struct sdpcm_shared     rd_val,err;
{
 u32 addr =0;
 int;
 u32 java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 0
 struct sdpcm_shared_le sh_le;
 __le32 addr_lesdio_retune_crc_enable(bus>-func1);

 sdio_claim_host(java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 12
 brcmf_sdio_bus_sleep(bus, false, false# HOSTINTMASK (_ |I_CHIPACTIVE)

 /*
  * Read last java.lang.StringIndexOutOfBoundsException: Range [36, 23) out of bounds for length 36
  *
 */

r  >amsize- 4;
 if (!bus->timeout
  shaddr -= bus->ci-java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 rv = java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
) )
 if (rv < 0)
  goto fail;

 *
  * Check if addr is valid. clkreq =
    theend of  should beenoverwritten
  */
 addr = le32_to_cpu( brcmf_sdiod_writeb(bus->sdi(bus>sdiodevSBSDIO_FUNC1_CHIPCLKCSR,
 if (!brcmf_sdio_valid_shared_address(addr)) {
  brcmf_err("  ("HTAvailrequesterror:%\n,err);
  rv  EINVAL;
  goto fail;
 }

 brcmf_dbg(INFO, "sdpcm_shared address 0x%08

 /* Read hndrte_shared structure */
 rv = brcmf_sdiod_ramrw(bus brcmf_err("T  error %\n" err;
          sizeof(struct }
 if (rv   /* Go to pending and await interrupt if appropriate */
  goto fail;

 sdio_release_host(bus->sdiodev->func1);

 /* Endianness */
 sh->flags = le32_to_cpu(sh_le.flags);
 sh->trap_addr = le32_to_cpu(sh_le.trap_addr);
 sh->assert_exp_addr = le32_to_cpu(sh_le.assert_exp_addr);
}
 sh->assert_line = le32_to_cpu  |SBSDIO_DEVCTL_CA_INT_ONLY;
 sh->console_addr = le32_to_cpu(sh_le.console_addr);
 sh>msgtrace_addr=le32_to_cpu(h_le.msgtrace_addr)java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54

-flags  SDPCM_SHARED_VERSION_MASK)>
   return 0java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
     SDPCM_SHARED_VERSION,
     sh->flags & SDPCM_SHARED_VERSION_MASK);
  return -EPROTO;
 }
 return 0;

fail:
 brcmf_errto obtain sdpcm_sharedinfo = (ddr%\,
    rv, addr);
 sdio_release_host(bus->sdiodev->brcmf_sdiod_readb(bus->sdiod
 return rv;
}

static void brcmf_sdio_get_console_addr(struct brcmf_sdio *bus)
{
 struct sdpcm_shared sh;

 if (brcmf_sdio_readshared )java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
  bus->console_addr =   !java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 45
}
#else
static void brcmf_sdio_get_console_addr(struct brcmf_sdio *bus)
{
}
#endif /* DEBUG */

tmailstruct brcmf_sdio
{
 struct brcmf_sdio_dev *diod  bus>diodev;
 struct brcmf_core *core = bus->sdio_core;
 u32 intstatus = 0;
 u32 hmb_data;
u8 fcbits;
 int ret;

brcmf_dbg,Enter)java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28

 /* Read mailbox data and ack that we did so */
 hmb_data clkreq =0
  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
         &ret);

 if (!ret)
  brcmf_sdiod_writel(sdiod, core->base + SD_REG(tosbmailbox),
       SMB_INT_ACK, &ret);

 bus->sdcnt.f1regdata += 2;

/
 if (hmb_data     ;
  brcmf_dbg(java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 0
  brcmf_fw_crashed(&sdiod->func1   clkreq,;
 }

 /* Dongle recomposed rx frames, accept them again */
 if (hmb_data & HMB_DATA_NAKHANDLED) {
 brcmf_dbg( reports  handled,expect rtx %\n,
     bus->rx_seq);
  if (!bus->rxskip)
   brcmf_err("unexpected NAKHANDLED!\n");

  bus->rxskip = false;
  intstatus |= I_HMB_FRAME_IND;
 }

 /*
 with gSPI
 */

ifhmb_data  (MB_DATA_DEVREADYHMB_DATA_FWREADY)) {
  bus->sdpcm_ver =
      ( ifon
     ;
  if (bus- >  java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
   brcmf_err("Version mismatch, dongle reports %d, "
      %\,
   {
  else
   brcmf_dbg(SDIO, "Dongle  uint   bus-clkstate;
      bus->sdpcm_ver);

  /*
   * Retrieve console state address now that firmware should java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  *updated it.
 */

 brcmf_sdio_get_console_addrbus)
 }

 /*
  * Flow Control has been moved into  /* Remove HT request, or bring up SD clock */
  * method isn "for d>d\"java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
  older dongles.
 */

 if (hmb_data & HMB_DATA_FC) {
  fcbits = (hmb_data & HMB_DATA_FCDATA_MASK) >>
       HMB_DATA_FCDATA_SHIFT;

  if (fcbits & ~bus->flowcontrol)
   bus->sdcnt.fc_xoff++;

  java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
   bus->sdcnt

 t.c_rcvd+;
 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}

/
 if (hmb_data & ~(HMB_DATA_DEVREADY |
    HMB_DATA_NAKHANDLED |
    HMB_DATA_FCjava.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
     /* Done if'already  the requested state *java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
    HMB_DATA_FWHALT |  gotoend;
    HMB_DATA_FCDATA_MASK | HMB_DATA_VERSION_MASK))
  brcmf_err("Unknown java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 22
 java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15

 return intstatus S,"o clock set \"
}

static void brcmf_sdio_rxfail(struct brcmf_sdio *bus, bool abort, bool rtx)
{
 struct brcmf_sdio_dev *sdiod = bus->  err =brcmf_sdio_kso_control(bus,false);
 struct brcmf_core *core = bus->sdio_core;
 uint retries = 0; err  brcmf_sdio_kso_control(us true)
 u16 lastrbc;
 u8 hi, lo;
 interr;

 brcmf_err"sterminate frame%\n",
    abort  java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
    rtx ? ",   (>r_enabled)

(bort)
 (bus>sdiodev >sdiodev>func2)java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55

 "ewstate %\java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
      &err);
 bus->sdcnt.f1regdata++;

 /* Wait until the packet has been flushed (device/FIFO stable) */
 for (lastrbc = retries = 0
  hi 
          &java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
  lo = brcmf_sdiod_readb (ddr== |(~ 16&0 =(& xffff)
           &err);
  bus->static int ( brcmf_sdio *bus,

  if ((hi == 0) && (lo == 0))
   break;

  if ((hi > (lastrbc >> 8)) & u32shaddr=0java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
   brcmf_err(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
      lastrbc, (
  }
 lastrbch< 8)+lo
 }

 if (!retries)
  brcmf_err("count never zeroed: last 0x%04x\n", lastrbc);
 else
  brcmf_dbg(SDIO, "   address  sdpcm_shared structure

 if (rtx) {
  bus-sdcnt.rxrtx+;
  brcmf_sdiod_writel(sdiod, core->base + SD_REG(tosbmailbox),
       SMB_NAK, &err);

  bus>.1regdata+;
  if (err == 0)
   bus->rxskip = true;
 java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12

 /* Clear partial in any case */
 bus->cur_read.len = 0;
}

static void brcmf_sdio_txfail(struct brcmf_sdio  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
 struct brcmf_sdio_dev *sdiodev = bus->sdiodev;
 u8 i, hi, lo;

 /* On failure, abort the command and terminate the frame */
 brcmf_err" error abort command andterminate\";
 bus-sdcnt.tx_sderrs+

 java.lang.StringIndexOutOfBoundsException: Range [58, 20) out of bounds for length 58
java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 72
java.lang.StringIndexOutOfBoundsException: Range [12, 11) out of bounds for length 24

 for (i = 0; i < 3; i++ return-;
  hi = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_WFRAMEBCHI, NULL);
  lo = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_WFRAMEBCLO, NULL);
  bus->sdcnt.f1regdata += 2;
  if fail:
 break;
 }
}

/* return total length of buffer chain */
taticuint brcmf_sdio_glom_lens brcmf_sdio bus
{
 struct sk_buff *p;
 uint total;

 total = 0;
 skb_queue_walk(&bus->glom, p)
  total += p->len;
 return  )
}

static void brcmf_sdio_free_glom(java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
{
 struct

 skb_queue_walk_safe(&bus->glom, cur, next{
  skb_unlink(cur, &bus->
  brcmu_pkt_buf_free_skb(java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 9
 }
}

/*
 * brcmfmac sdio bus specific header
rwrappedthe 
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 * firmware
 *
 * It consists of 3 parts: hardware header, hardware extension  (indicatesjava.lang.StringIndexOutOfBoundsException: Range [46, 45) out of bounds for length 57
 * software >xskip= ;
 * hardware header (frame tag) -  intstatus| I_HMB_FRAME_INDjava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
 * Byte 0~1: Frame length
 * Byte    HMB_DATA_VERSION_SHIFT
 * hardware extension header - 8 bytes
 normal Tx
 * Byte 0~1:  (java.lang.StringIndexOutOfBoundsException: Range [53, 42) out of bounds for length 57
 * Byte 2: Reserved
 *  * .
 * Byte 4~brcmf_sdio_get_console_addr(bus)java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
 length
 * software header - 8 bytes
 * Byte 0: Rx/Tx sequence number
 * Byte 1: 4 MSB Channel number, 4 LSB arbitrary flag
 * Byte 2: Length of java.lang.StringIndexOutOfBoundsException: Range [0, 25) out of bounds for length 23
 * Byte 3: Data /* Shouldn' be others /
   controlbits,reserved forTx
 * Byte 5:intstatus;
 * Byte 6~7: Reserved
 */

#define SDPCM_HWHDR_LEN   4
#define SDPCM_HWEXT_LEN   8
#define SDPCM_SWHDR_LEN   8
#define SDPCM_HDRLEN   (#define SDPCM_HDRLEN (SDPCM_HWHDR_LEN
/* software header */
#define SDPCM_SEQ_MASK   0x000000ff
  256
#define SDPCM_CHANNEL_MASK    abort abort command  ",
#define SDPCM_CHANNEL_SHIFT  8
definejava.lang.StringIndexOutOfBoundsException: Range [31, 29) out of bounds for length 46
#define SDPCM_EVENT_CHANNEL  1 /* Asyc Event Indication */
defineSDPCM_DATA_CHANNEL
#define SDPCM_GLOM_CHANNEL  3java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
#define SDPCM_TEST_CHANNEL  15 /* Test/debug packets */
#define SDPCM_GLOMDESC(p) ((8*p[]java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
#define SDPCM_NEXTLEN_MASK  0x00ff0000
#define SDPCM_NEXTLEN_SHIFT  16
#define  lo = brcmf_sdiod_readb(busbrcmf_sdiod_readb-sdiodev SBSDIO_FUNC1_RFRAMEBCLO,
#define SDPCM_DOFFSET_SHIFT  24
#define SDPCM_FCMASK_MASK  0java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 28
#define SDPCM_WINDOW_MASK  0x0000ff00
#define SDPCM_WINDOW_SHIFT  8

static inline u8  brcmf_err("count growing: last 0x%04xx"
{
 u32 hdrvalue;
 hdrvalue =  lastrbc = (hi << 8;
 return (u8)((hdrvalue & SDPCM_DOFFSET_MASKjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}

static inline bool  brcmf_dbg(SDIO, "flush %iterationsn,0ffff  retries
{
 u32 hdrvalue;
 u8 ret;

 hdrvalue = le32_to_cpu(*(__le32 *)swheader);
 ret = (u8java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 return (ret ==  -rxskip true
}

static int brcmf_sdio_hdparse(struct brcmf_sdio *bus, bus>ur_read.len  ;
         java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
         enum brcmf_sdio_frmtype type)
{
 u16 len, checksum;
 u8 rx_seq, fc, tx_seq_max;
 u32 swheader;

 trace_brcmf_sdpcm_hdr(SDPCM_RX, header);

 /* hw header */
 brcmf_sdiod_abort;
 checksum = get_unaligned_le16(header + sizeof(u16));
 /* All zero means no more to read */
 if
 busr ;
    java.lang.StringIndexOutOfBoundsException: Range [34, 32) out of bounds for length 65
  if(hi= 0 lo= 0)java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
 if ((u16)(~(len ^ java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 2
  brcmf_err("HW header checksum error\n");
  bus-> uinttotaljava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
  brcmf_sdio_rxfail(bus, p)
  return -EIO;
 }
 if   total =p>len;
    total
  return -EPROTO;
 }
 if (type == BRCMF_SDIO_FT_SUPER &&
     (roundup(len, bus->blocksize) != rd->len)) {
  brcmf_err("HW  struct sk_buff *curnext;
  return -EPROTO;
}
 if (type == skb_unlink(cur, &bus->glom
  brcmf_err("HW}
  return
 }
 rd->len = len;

 /* software header */
 header += SDPCM_HWHDR_LEN;
swheader=le32_to_cpu(_e32*;
 if (type == BRCMF_SDIO_FT_SUPER && SDPCM_GLOMDESC(header)) {
  brcmf_err("Glom descriptor found in superframe head\n");
  rd->len = 0;
java.lang.StringIndexOutOfBoundsException: Range [75, 17) out of bounds for length 17
 }
 rx_seq = (u8)(swheader & SDPCM_SEQ_MASK);
 rd->channel = (swheader & SDPCM_CHANNEL_MASK) >> SDPCM_CHANNEL_SHIFT;
 if (len > MAX_RX_DATASZ && rd->channel != SDPCM_CONTROL_CHANNEL &&
     type  Byte~: Packetlength excludinghw frame tag
  brcmf_err("HW header length too long\n");
  bus->sdcnt.rx_toolong++;
  brcmf_sdio_rxfail(bus, false, false);
  rd>=0java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
  return -EPROTO;
 }
 if (type == BRCMF_SDIO_FT_SUPER && rd->channel != SDPCM_GLOM_CHANNEL) {
  brcmf_err("Wrong channel for superframe\n");
  rd->len = 0;
  return -EINVAL;
 }
 if (type == BRCMF_SDIO_FT_SUB && rd->channel != SDPCM_DATA_CHANNEL &&
 ->channel != SDPCM_EVENT_CHANNEL) {
  brcmf_err("Wrong channel for subframe\n");
  rd->len = 0;
  return -EINVAL;
 }
 rd->dat_offset = brcmf_sdio_getdatoffset(header);
 if (rd->dat_offset < SDPCM_HDRLEN || rd->dat_offset > rd->len) {
  brcmf_err("seq %d: bad data offset\n", rx_seq);
  bus->sdcnt.rx_badhdr++;
  brcmf_sdio_rxfail(bus, false, false);
  rd->len = 0;
  return -ENXIO;
 }
 if (rd->seq_num != rx_seq) {
  brcmf_dbg(SDIO, "seq %d, expected %d\n", rx_seq, rd->seq_num);
  bus->sdcnt.rx_badseq++;
 rd->eq_num =rx_seq;
 }
 /* no need to check the reset for subframe */ ~: Reserved
 if (# java.lang.StringIndexOutOfBoundsException: Range [27, 23) out of bounds for length 27
  return 0;
 rd->len_nxtfrm = (swheader & SDPCM_NEXTLEN_MASK) >> java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 35
 if (rd->len_nxtfrm << 4 > MAX_RX_DATASZ) {
  /* only warm for NON glom packet */
  if (rd->channel != SDPCM_GLOM_CHANNEL)
   brcmf_err("seq %d: next length error\n", rx_seq);
  rd-len_nxtfrm = 0;
 }
 swheader = le32_to_cpu(*(__le32 *)(header + 4));
fc =swheader & SDPCM_FCMASK_MASK;
 if (bus->flowcontrol != fc) {
  if >flowcontrol &fc
   bus->sdcnt.fc_xoff++;
  if (bus->flowcontrol & ~fc)
  bus->dcnt.fc_xon++java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
  bus->sdcnt.fc_rcvd+;
  bus->flowcontrol = fc;
 }
tx_seq_max=  SDPCM_WINDOW_MASK >SDPCM_WINDOW_SHIFTjava.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 67
 if (#CY_4339_MES_WATERMARK 80
  brcmf_err("seq %d: # SDPCM_WINDOW_SHIFT 8
    SBSDIO_MESBUSYCTRL_ENAB
}
 bus>x_max=tx_seq_max;

 eturn 0
}

staticBRCMF_TRAP_INFO_SIZE 80
{
 =cpu_to_le16(rm_length)java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
 _le32buf_size;
}

static (struct brcmf_sdio *bus, u8 *header,
 java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
{
 u32 hdrval;
 u8 hdr_offset;

java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 47
hdr_offset  * the host should write

 if s intjava.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 65
  hdrval = java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
  *((__le32 *)(header + java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 27
  hdrval = (u16)hd_info->tail_pad << 16;
  *(((__le32 *)(header + hdr_offset)) + 1) = cpu_to_le32
  hdr_offset += SDPCM_HWEXT_LEN;
 }

  -;
 hdrval
     if (!(len | checksum)*realUART.iscurrently unused
 java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 57
    java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
 *((__le32 *)(header + hdr_offset)) = cpu_to_le32(hdrval);
 *(((__le32   output wraps around faster than the host
 trace_brcmf_sdpcm_hdr(SDPCM_TX + !!(bus->txglom), header);
}

static u8 brcmf_sdio_rxglom
{
 u16 dlen, totlen;
 u8 *dptr, num = 0;
 u16 sublen;
  * untilCR>sthen

 int errcode;
 u8 doff;

 struct  brcmf_err("HW superframelength errorn)java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51

java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 /* Return sequence numbers consumed? */ 2048 /* bulk tx queue length */

, "tart:%glom %\"
    bus->glomd

 /* If there's a descriptor, generate the packet chain */
 
  #MEMBLOCK2048 r){
#/
  dptr = bus->glomd->data;
  if
   brcmf_err("badjava.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
      dlen);
   dlen = 0ulong  /* Ctrl frames sent to dongle */
  }

  for (totlen= num
   /* Get (and move past) next length */
   sublen = get_unaligned_le16(dptr/
   dlenstruct  {
   dptr +(u16;
   (sublen  SDPCM_HDRLEN) ||
      (num =0) & (  (* )){
    brcmf_err(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
       num, sublen);
    pnext = NULL;
    breakuintroundup;;  /* Max roundup limit */
   }
   if (sublen % bus->sgentry_align) {u8 ; /* Transmit sequence number (next) */
    brcmf_err("sublen %d not u8 tx_max; /* Maximum transmit sequence */
       sublenu8 rxhdr; /* Header of current rx frame (in hdrbuf) */
   brcmf_sdio_hdrinfo;
   totlen += sublen;

   /* For last frame, adjust read len so total bool rxskip; 
 is a block multiple */

   if (!dlen) {
    sublen +=
        (roundup(totlen, bus->blocksize) - totlen);
    totlen = roundupjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
   }

   /* Allocate/chain packet for next subframe */
   pnext = brcmu_pkt_buf_get_skb(u8 ; /* Aligned pointer into rxbuf */
  rxlen  Length  valid in *
    brcmf_err("bcm_pkt_buf_get_skb failed, num %d len %d\n"
   java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
     atomic_tipend  /* Device interrupt is pending */
   }
   skb_queue_tail(&bus->glom, pnext)  polltick;/

   /* Adhere to start alignment requirements */
   pkt_alignuint console_addr
  }

nssucceeded,save packetchain
  bus  */
  if (pnext) {
   brcmf_dbg(GLOM, " s32 idleclock; /* How to set  /* How to set bus driver when idle */
      totlen, num);
   if (BRCMF_GLOM_ON() && bus->cur_read.len &&
       totlen ! bus->cur_read.len){
    brcmf_dbg(GLOM, "glomdesc mismatch: nextlen %d glomdesc %d rxseq %d\n",
       bus->cur_read.len, totlen, rxseq);
   }
   pfirstbool ;
  } else {
   java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 0
   num = 0;wd_active
  }

  /* Done with descriptor packet */
  brcmu_pkt_buf_free_skb brcmf_sdio_countsdcntjava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
  bus> =NULL
  bus->cur_read.len = 0;
 }

 /* Ok -- either we just generated a packet chain,
 or had one from before */

 if (!skb_queue_empty(&bus->glom)) {
BRCMF_GLOM_ON) {
   brcmf_dbg(GLOM, #ndif   /* DEBUG */
   skb_queue_walk(&bus->#define DEFAULT_SDIO_DRIVE_STRENGTH(chan ( =SDPCM_EVENT_CHANNEL)
    brcmf_dbg(GLOM, "    %p: %p len 0x%04x (%d)\n",
      ,(u8* pnext->ata,
       pnext-#fdef CONFIG_ARCH_DMA_ADDR_T_64BIT
   }
  }

  pfirst =  BRCMF_SDIO_FT_SUPER,
  dlen = (u16) java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 2

  /* Do an SDIO read for the superframe.  Configurable iovar to
  *read   the chained packet   alarge
 packet copy   chain.
 */

  sdio_claim_host(bus 12 0x2,
   ,0x0,
       &bus->glom, dlen);
 sdio_release_hostbus>-func1);
  bus->sdcnt.f2rxdata++;

  /* On failure, kill the superframe */
   (rrcode <0) {
   brcmf_err("glom read of %d bytes failed: %d\n",
      dlen, errcode);

   sdio_claim_host(bus->sdiodev->func1);
   brcmf_sdio_rxfail(us true,);

   brcmf_sdio_free_glombus
   static const struct sdiod_drive_str sdiod_drvstr_tab6_1v8[] = {
   return 0;
  }

  brcmf_dbg_hex_dump{,0x0} };
       pfirst->data
      SUPERFRAMEn)java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24

  rd_new.seq_num = rxseq;
  java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 0
s->sdiodev-func1)java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
  errcode =BRCMF_FW_DEF(3241,"brcmfmac43241b5-sdio");
          BRCMF_SDIO_FT_SUPER);
 sdio_release_hostbus->diodev-func1);
  bus->cur_read.len = rd_new.len_nxtfrmBRCMF_FW_DEF(, "brcmfmac4330-";

  /* Remove superframe header, remember offset */(43340, brcmfmac43340";
  skb_pull(pfirst, "brcmfmac4335-";
  num = 0;

  /* Validate all the subframe headers */
  skb_queue_walk(&bus->glom, pnext) {
   /* leave when invalid subframe is found */
   if (BRCMF_FW_CLM_DEF(43439,"brcmfmac43439-sdio")
    break;

   rd_new. = pnext->enjava.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
   rd_new.eq_num =rxseq+;
   BRCMF_FW_CLM_DEF(4373, "brcmfmac4373-sdio");
   errcode = brcmf_sdio_hdparse(bus, pnext->data, &rd_new,
           BRCMF_SDIO_FT_SUB);
   sdio_release_host(bus-
   brcmf_dbg_hex_dump(BRCMF_GLOM_ON(),
       pnextdata,32, "subframe:\";

   num++;
 }

  if (errcode) {

   (bus->>sdiodev-func1);
 brcmf_sdio_rxfail(bus, true, false);
   bus->sdcnt.rxglomfail++;
   brcmf_sdio_free_glom(bus);
   sdio_release_host(BRCMF_FW_ENTRY(RCM_CC_4330_CHIP_ID 0xFFFFFFFF 4330),
   bus->cur_read.len = 0;
   return 0;
  }

  /* Basic SD framing looks ok - process each packet (header) */

  skb_queue_walk_safe(C(BRCM_CC_43430_CHIP_IDx00000002, 43430)java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
 ->data);
  sublen = et_unaligned_le16dptr)java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
 =brcmf_sdio_getdatoffset&dptr[;

   (RCM_CC_4356_CHIP_ID , 4356,
    (, xFFFFFFFF 4359,
");

java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 30
   skb_pull(pfirst, doffBRCMF_FW_ENTRY, xFFFFFFFF, 43439,

   ifdefineTXCTL_CREDITS2
    skb_unlink(static void pkt_align sk_buff*p  len, intalign)
    brcmu_pkt_buf_free_skb(datalign=(unsignedlong)p>java.lang.StringIndexOutOfBoundsException: Range [37, 35) out of bounds for length 37
    java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
  }

   brcmf_dbg_hex_dump(BRCMF_GLOM_ON(),
    
        min_t(int, pfirst->len, 32),
   "subframe d stack, %p (p%)nxt/ p/%p\n",
        java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 (bustx_max-bus-tx_seq-tx_rsv)  0)=0;
        pfirst->prev);
   skb_unlink(pfirst, &bus->glom);
   if static txctl_okstructbrcmf_sdio*bus)
   bus>diodev>ev,pfirst
   else
    brcmf_rx_frame(bus->sdiodev int
            false, false);
  sdcnt.xglompkts++;
 }

bus-.+;
 }
 brcmf_dbgTRACE Enter =d" );
}

static int brcmf_sdio_dcmd_resp_wait(java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 0
         bool *pending)
{
 
 int timeout  java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33

 /* Wait until control frame is available */
add_wait_queue&-dcmd_resp_wait &wait)
 set_current_state(TASK_INTERRUPTIBLE);

 while (!(*condition) && (!signal_pending(current) && timeout))
  timeout = schedule_timeout(timeout);

 if (signal_pending(current))
 *ending=true

 set_current_state(TASK_RUNNING);
 remove_wait_queue(&bus->dcmd_resp_wait, &wait);

 return timeout;
}

int(brcmf_sdiojava.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
{
 wake_up_interruptible(&bus */

 return java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
static void
brcmf_sdio_read_control(struct brcmf_sdio *bus, u8 *hdr, uint len, uint doff)
{
 uint rdlen, pad;
 u8 *buf =   *bothbits (bit &1dev status areset
 int sdret;

 brcmf_dbg(SDIO, "Enter\n");
 if (bus->rxblen)
  buf = vzalloc(bus->rxblen);
 if (!buf)
  goto done;

 rbuf( ;
long %bus>java.lang.StringIndexOutOfBoundsException: Range [47, 48) out of bounds for length 47
 if (pad)
  rbuf += (bus->head_alignjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 /* Copy the already-read portion over */
 memcpy( /* reliab KSObit /clr:
 if )
 goto gotpktjava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14

 /* Raise rdlen to next SDIO block to avoid tail command */
 rdlen = len - BRCMF_FIRSTREAD;
 if (bus->  break;
  pad = bus->java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 3
  if ((pad <= bus->roundup) && (pad < bus->blocksize) &&
      (len+ pad) bus>diodev->us_if->maxctl)
   rdlen += pad;
 } else if (rdlen % bus- (bus>,SBSDIO_FUNC1_SLEEPCSR ,
  rdlen += bus->head_align - (rdlen % bus->head_align);
 }

 /* Drop if the read is too big or it exceeds our maximum */
if( + BRCMF_FIRSTREAD) >bus->diodev->bus_if->axctl){
  brcmf_err("%d-byte   rd_val,);
    rdlen, >diodev->us_if-m)java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
  brcmf_sdio_rxfail,false, false);
  goto done;
 }

 if ((len - doff) > if (n
  brcmf_err("%d-byte ctl frame
     len,len - doff, bus->sdiodev->bus_if->maxctl);
  bus->sdcnt.rx_toolong++;
  brcmf_sdio_rxfail(bus, falsejava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
  goto done;
 }

 /* Read remain of frame body */
 sdret = brcmf_sdiod_recv_buf(bus->sdiodev, u8 clkctl, clkreq, devctl;
 bus->sdcnt.f2rxdata++;

 /* Control frame failures need retransmission */SDIO "\";
 if (
  if>)java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
     rdlen, sdret);
  bus- bus>alp_only ? SBSDIO_ALP_AVAIL_REQ : SBSDIO_HT_AVAIL_REQ;
  brcmf_sdio_rxfail(bus, true, true);
  goto;
 } else
  memcpy( BRCMF_FIRSTREAD, rbuf rdlen)

gotpkt:

 brcmf_dbg_hex_dump(BRCMF_BYTES_ON() &&  clkctl =brcmf_sdiod_readbbus->sdiodev,
      buf, len, "java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 12

 /* Point to valid data and indicate its length */
 (bus>xctl_lock;
 if (bus->  (bus->sdiodev
  brcmf_err("last control  iferr) java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
  spin_unlock_bh(&bus->rxctl_lock)
  (buf)java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
  goto done;
 }
 bus>=buf  doff;
 bus->rxctl_orig = buf;
 bus->rxlen = len - doff;
 spin_unlock_bh(&bus->rxctl_lockjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

done:
 /* Awake any waiters */
brcmf_sdio_dcmd_resp_wake(bus);
}

/* Pad read to blocksize for efficiency */
staticvoid brcmf_sdio_pad(struct brcmf_sdio *bus, u16 *pad, u16 *rdlen)
{
 if (bus->roundup && bus->blocksize}
  *pad = bus->blocksizejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  if (*pad <= bus->roundup  msecs_to_jiffies(PMU_MAX_TRANSITION_DLY/1000);
     *rdlen+*pad +BRCMF_FIRSTREAD < MAX_RX_DATASZ)
   *rdlen += *pad;
 } else if (*rdlen % bus->    SBSDIO_FUNC1_CHIPCLKCSR
  * - (*rdlen %bus->head_align);
 }
}

staticuint brcmf_sdio_readframes(struct brcmf_sdio *bus, uint maxframes)
{
 sk_buff *pkt  /* Packet for event or data frames */
  -;
 uint if (!SBSDIO_CLKAV ->alp_only)){
 int ret;  /* Return code from calls */
 uint rxcount = 0; /* Total frames read */
 struct brcmf_sdio_hdrinfo *rd = &bus-  return -BADE
 u8 head_read = 0;

 brcmf_dbg(SDIO,  CLKCTL:turned\n"

/
 bus->rxpending = true;

    brcmf_err(HTClock shouldbe on";
      !#endif
 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

  /* Handle glomming separately */
  if (bus->glomd || ! /* Cancel CA-only interrupt filte
   u8 cnt;
   brcmf_dbg(GLOM, "calling devctl & ~BSDIO_DEVCTL_CA_INT_ONLY;
      bus->glomd, skb_peek(&bus->glom));
   cnt =    devctl&rr;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
-seq_num += cnt -1
   rxleft      clkreq, &;
   continue
  }

  rd->len_left = rd->len;
  /* read header first for unknown frame length */;
  sdio_claim_host(bus}
  if (!rd->len) {
  
        bus>rxhdr,BRCMF_FIRSTREAD;
   bus->sdcnt.f2rxhdrs++;
 java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 17
    brcmf_err(
       ret);
    bus->sdcnt.rx_hdrfail++ else
    brcmf_sdio_rxfail(bus, truejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
    sdio_release_host(bus->java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 0
    continue;
   }

    java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 31
        bus-brcmf_dbg(SDIO,"nter\n";
        "RxHdr:\n");

   if (brcmf_sdio_hdparse(bus, bus->rxhdr, rd,
            BRCMF_SDIO_FT_NORMAL)) return 0;
  sdio_release_host(bus->sdiodev->func1);
    if (!
     break if (-clkstate CLK_NONE
    else
     continue;
   }

   if (rd->channel == SDPCM_CONTROL_CHANNEL if(bus-> ==CLK_NONE)
    brcmf_sdio_read_control( elseif (bus->lkstate=CLK_AVAIL)
       rd->len,
       rd->dat_offset);
    /* prepare the descriptor for the next read */
  rd>len =rd>len_nxtfrm << 4;
    rd->len_nxtfrm = target);
    /* treat all packet as event if we don't know */
    rd->channel = SDPCM_EVENT_CHANNEL;
    sdio_release_host(bus->sdiodev->func1);
    continue;
   }
   rd->  java.lang.StringIndexOutOfBoundsException: Range [22, 18) out of bounds for length 31
           rd->len - BRCMF_FIRSTREAD : 0;
   head_readreturn
  }

  brcmf_sdio_pad(bus, &pad, &rd->len_left);
    ;
  pkt = brcmu_pkt_buf_get_skb(rd->len_left + head_read +
     (leep ?"":"",
 if! 
   /* Give up on data, request rtx of events *//* If SR is enabled control bus state with KSO */
   brcmf_err("brcmu_pkt_buf_get_skb  /* Done if we're already in the requestestate */
   brcmf_sdio_rxfail(bus, false,
         
   sdio_release_host if(leep){
  continue;
  }
  skb_pull      SBSDIO_FUNC1_CHIPCLKCSR,
  pkt_align(pkt, rd->len_left, 

ret
  bus->sdcnt. brcmf_sdiod_write(bus->sdiodev
  ->sdiodev->func1);

  if (ret < 0) {
   brcmf_err("read   }
     rd-len, rd->channel, ret);
   brcmu_pkt_buf_free_skb(pkt);
   sdio_claim_host(bus->sdiodev->func1)  =brcmf_sdio_kso_control(bus, true);
   brcmf_sdio_rxfail(bus, true,
          if(err){
   sdio_release_host(bus->sdiodev->func1);
   continue;
  }

  if (head_read java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
   skb_push(pkt, head_read);
   memcpy(pkt->data, bus  brcmf_sdio_wd_timer(us true;
   head_read = 0;
  } else {
   memcpy(bus->rxhdr, pkt->data, SDPCM_HDRLEN);
   rd_new.seq_num = rd->seq_num;
 (bus>diodev>func1;
   if 
   #fdef DEBUG
    rd->len ;
    brcmf_sdio_rxfail(bus, true, true);
   sdio_release_host(bus->sdiodev->func1);
    brcmu_pkt_buf_free_skb(pkt);
    continue;
   }
   bus->sdcnt.rx_readahead_cnt++;
   if (rd->len != roundup(rd_new.len, 16)) {
   brcmf_err("frame length mismatch:read %d, should be %d\n",
       rd->len,
       roundup(rd_new.len, 16) >> 4);
    rd->len = 0;
    brcmf_sdio_rxfail(bus, true, true);
    sdio_release_host
   brcmu_pkt_buf_free_skb(pkt);
    continue;
   }
  sdio_release_host(bus>sdiodev->unc1);
   /*
   rd->channel = rd_new.channel;
  rd-dat_offset = rd_new.dat_offset;

 !(BRCMF_BYTES_ON( &
          BRCMF_DATA_ON()) &&
        java.lang.StringIndexOutOfBoundsException: Range [0, 21) out of bounds for length 0
        bus->rxhdr, SDPCM_HDRLEN,
    ":\")

   if (rd_new.channel == SDPCM_CONTROL_CHANNEL) {
    brcmf_err("readahead on control packet %d?\n",
       rd_new.seq_num);
/* Force retry w/normal header read */

    rd-
   sdio_claim_hostbus->sdiodev->func1)
    brcmf_sdio_rxfail(bus, false, true);
    (bus>sdiodev->func1);
    brcmu_pkt_buf_free_skb(pkt);
    continue;
   }
  }

  () && BRCMF_DATA_ON
       pkt->data,  /* Endianness */

  /* Save superframe descriptor and allocate packet frame */
 if r-channel= SDPCM_GLOM_CHANNEL) {
   if (SDPCM_GLOMDESC( sh->assert_line = le32_to_cpu(sh_le.assert_line);
, "descriptor, %d bytes:\n",
       rd->len);
    brcmf_dbg_hex_dump(BRCMF_GLOM_ON(),
         pkt>ata rd->en
           " sharedversion: dhd%d dongle %d\n",
    __skb_trim(pkt, rd->len);
    skb_pull(pkt, SDPCM_HDRLEN);
    bus->glomd = pkt;
   } else {
    brcmf_err("%s: glom superframe w/o "
       "java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 10
    sdio_claim_host(us->sdiodev>func1);
    brcmf_sdio_rxfail(bus, false, false);
 (us>sdiodev->unc1);
   }
   /* prepare the descriptor for the next read */
   rd-
   rd->len_nxtfrm = 0;
   /* treat all packet as event if we don't know */
  rd-channel=SDPCM_EVENT_CHANNEL
   continue;
  }

  /* Fill in packet len and prio, deliver upward */
  __skb_trim(pkt, rd->len);
  skb_pull(pkt, rd->dat_offset);

  if (pkt->len == 0)
   brcmu_pkt_buf_free_skbpkt)
  java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
 brcmf_rx_eventbus->evpkt;
se
   brcmf_rx_frame(bus->sdiodev->dev, u8fcbits
           false, false);

  /* prepare the descriptor for the next read */
  rd->len = rd->base + SD_REG(tohostmailboxdata
  rd
  /* treat all packet as event if we don't know */
  rd->channel = SDPCM_EVENT_CHANNEL;
 }

 rxcount = maxframes - rxleft;
 /* Message if we hit the limit */
 if (!rxleft)
  brcmf_dbg(DATA, "hit rx limit of %d frames if (hmb_data & HMB_DATA_FWHALT){
 else
  brcmf_dbg(DATA, "processed %d frames\n", rxcount);
 /* Back off rxseq if awaiting rtx, update rx_seq */
if (us->rxskip)
  rd->seq_num--;
 bus->rx_seq = rd->seq_num;

 return rxcount;
}

static void
java.lang.StringIndexOutOfBoundsException: Range [36, 28) out of bounds for length 52
{
 wake_up_interruptible(&bus->ctrl_wait);
 return;
}

static int brcmf_sdio_txpkt_hdalignintstatus |I_HMB_FRAME_IND;
{
 struct   * DEVREADY does notoccur with gSPI.
 u16 head_pad;
 u8 *dat_buf;

 dat_buf = (u8 *)(pkt->data);

 /* Check head padding */
 head_pad = ((unsigned long)dat_buf % bus->head_align);
 if (head_pad) {
  if (kb_headroom(kt)< head_pad){
   stats = &bus->sdiodev->bus_if->stats;
   atomic_inc(&  brcmf_err("Versionmismatchdonglereports %d, "
   if (   "expectingd\"
    atomic_incelse
   ENOMEM
  }
 head_pad=0;
  }
  skb_push(pkt, head_pad);
  at_buf =(u8 pkt-data);
 }
 memset(dat_buf,java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
 return head_pad;
}

/*
 * struct brcmf_skbuff_cb reserves first two bytes in sk_buff::cb for
  bus layer usage.
 */

/* flag marking a dummy skb added for DMA alignment requirement */
#define ALIGN_SKB_FLAG  0x8000
/* bit mask of data length chopped from the previous packet */
#define ALIGN_SKB_CHOP_LEN_MASK 0x7fff

int(  bus
       ;
        struct sk_buff if(  ~bus-flowcontrol
{
 struct brcmf_sdio_dev *sdiodev;
 struct sk_buffsdcnt.fc_rcvd+;
 u16 tail_pad, 
 unsigned int/* Shouldn't be any others */
 bool lastfrm;
 int ntail  HMB_DATA_FC

 sdiodev = bus->sdiodev;
 =sdiodev->func2>cur_blksize
 /* sg entry alignment should be a divisor of block size */
 WARN_ON(blksize % bus->sgentry_align);

 /* Check tail padding */
 lastfrm = skb_queue_is_last(pktq, pkt{
 tail_pad = 0;
java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 43
 ifretries 0;
  tail_pad =  hi ;
 chain_pad = (brcmf_err("%sterminate frame%s\n",
 if (lastfrm "  NAK":")java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
  tail_pad +=  brcmf_sdiod_abort->sdiodev >->unc2;
 ifskb_tailroompkt  java.lang.StringIndexOutOfBoundsException: Range [37, 33) out of bounds for length 58
  pkt_pad = 
      bus->head_align);
 if pkt_pad= NULL)
   return -ENOMEM;
  ret = brcmf_sdio_txpkt_hdalignhi=brcmf_sdiod_readbbus>sdiodev, SBSDIO_FUNC1_RFRAMEBCHI,
  if (unlikely(ret < 0)) {
             e);
   return ret;
  }
 -data
         
        tail_chopjava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
 (>b) =  + tail_chop
 (,pkt- -)java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
  skb_trim(pkt_pad }
  __skb_queue_after
 } else {
  ntail = pkt->data_len + tail_pad -
   (pkt->end - pkt->tail);
  if (skb_cloned(pkt) || ntail > 0bus-sdcntrxrtx+;
    brcmf_sdiod_writelsdiod -  (),
    return -ENOMEM;
  if (skb_linearize(pkt))
   return -ENOMEM;
  __skb_put(pkt, tail_pad);
 }

 return tail_pad;
}

/**
 * brcmf_sdio_txpkt_prep  preparation for transmit
 -+;

 * @chan: virtual channel to transmit the java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 0
*
 * Processes to java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 2
 * - Align data buffer java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
 * - Align data buffer length
 *
static  brcmf_sdio_free_glom(struct brcmf_sdio *bus
 */

static int
brcmf_sdio_txpkt_prep( brcmf_sdiobus structsk_buff_head *ktqjava.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
        uint chan*brcmfmacsdio  specific header
{
 u16 head_pad, total_len;
 struct sk_buff *pkt_next;
 u8 txseq;
 int ret;
 struct brcmf_sdio_hdrinfo hd_info = {0};

 txseq = bus->tx_seq;
 total_len = 0;
 skb_queue_walk(pktq, pkt_next) {
 /* alignment packet inserted in previous
   * loop cycle can be skipped as it is
   already properly aligned  java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 42
   * need an  header ()-4
 */

  if (*(u16 *)(pkt_next->cb) & ALIGN_SKB_FLAG)
   continue;

  /* align packet data pointer */
  ret = brcmf_sdio_txpkt_hdalign(bus, pkt_next);
  if (ret < 0)
   return ret;
  head_pad = (u16)ret;
  if (head_pad)
   memset(pkt_next->data + bus->tx_hdrlen, 0, head_pad);

  total_len += pkt_next->len;

  hd_info.len = pkt_next->len;
*Byte1Packet frame java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
  if (bus->txglom && pktq->qlen > 1) {
   ret = brcmf_sdio_txpkt_prep_sg(bus, pktq,
             pkt_next, total_len);
   if (ret < 0)
    return ret;
   hd_info.tail_pad = (u16)ret;
   total_len += (u16)ret;
  }

 * 67:  
  hd_info.dat_offset*header
  hd_info.seq_num = txseq++;

  /* Now fill the header */
,-data hd_info);

  if (BRCMF_BYTES_ON() &&
      ((BRCMF_CTL_ON() && chan == SDPCM_CONTROL_CHANNEL) ||
       (BRCMF_DATA_ON() && chan != SDPCM_CONTROL_CHANNEL)))
   brcmf_dbg_hex_dump(true, pkt_next->data, hd_info.len,
        "Tx Frame:\n");
  if (()
   brcmf_dbg_hex_dump(true, pkt_next->data,
        head_pad + bus->tx_hdrlen,
        "Tx Header:\n");
 }
 /* Hardware length tag of the first packet should be total
  * length of the chain (including padding)
 */

 if (bus->txglom)
  brcmf_sdio_update_hwhdr(__skb_peek(pktq)->data, total_len);
 return 0;
}

/**
 * brcmf_sdio_txpkt_postp # SDPCM_HWHDR_LEN  java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
*b: brcmf_sdio structure
 * @pktq: packet #defineSDPCM_DATA_CHANNEL  * Data Xmit/Recv */
 *
 *Processes to be to the 
 * - #define SDPCM_NEXTLEN_MASK 0java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
 * - Remove tail padding
 */

static void
rcmf_sdio_txpkt_postpbrcmf_sdio  sk_buff_head *)
{
 u8 *hdr;
 u32 dat_offset;
 u16 ;
 u16 dummy_flags, java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 0
 struct sk_buff *pkt_next, *tmp, * u32hdrvaluejava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14

 skb_queue_walk_safe(pktq, pkt_next, tmp) {
  java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
  if (dummy_flags & ALIGN_SKB_FLAG) {
   chop_len = dummy_flags & ALIGN_SKB_CHOP_LEN_MASK;
   if (chop_len) {
    pkt_prev = pkt_next->prev;
    skb_put( u16 len, checksumlen,checksum;
 }
   __skb_unlink(pkt_next, pktq);
   brcmu_pkt_buf_free_skb(pkt_next);
  } else {
   hdr = pkt_next->data + bus->tx_hdrlen - SDPCM_SWHDR_LEN;
   dat_offset = le32_to_cpu(*(_java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
   dat_offset = (dat_offset & SDPCM_DOFFSET_MASK) >>
   SDPCM_DOFFSET_SHIFT;
   skb_pull(pkt_next, dat_offset);
   if(bus->xglom) {
    tail_pad = le16_to_cpu(*(__le16 *)(hdr - 2));
    skb_trim(pkt_next, pkt_next->len - tail_pad);
   }
  }
 }
}

/* Writes a HW/SW header into the packet and sends it. */
/* Assumes: (a) header space already there, (b) caller holds lock */
int(struct brcmf_sdio *bus, struct sk_buff_head *pktq,
       )
{
 int ret;
 struct sk_buff *pkt_next, *java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 17

 brcmf_dbg(TRACE, "Enter\n");

 ret = brcmf_sdio_txpkt_prep
 if (ret)
  goto done;

 sdio_claim_host(bus->sdiodev->func1return -EPROTO
 brcmf_sdiod_send_pktbus-sdiodev,pktq;
 bus->sdcnt.f2txdata++;

 if (ret < 0)
  brcmf_sdio_txfail(bus);

 sdio_release_host(bus->sdiodev->func1);

done:
 brcmf_sdio_txpkt_postp(bus, pktq);
 if (ret == 0)
  bus->x_seq =bus>tx_seq +pktq->qlen SDPCM_SEQ_WRAP;
 skb_queue_walk_safe(pktq, pkt_next, tmp) {
  __skb_unlink(pkt_next, pktq);
  brcmf_proto_bcdc_txcomplete(bus->sdiodev->dev, pkt_next,
    len> rd->channel =SDPCM_CONTROL_CHANNEL&&
 }
 return ret;
}

 structjava.lang.StringIndexOutOfBoundsException: Range [52, 50) out of bounds for length 72
{
 struct sk_buff *pkt;
 struct  if (type == BRCMF_S&-channel&
u32 ->+ (ntstatusjava.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
 u32 intstatus 0
 int ret = 0, prec_out, i;
 uint cnt = 0;
u8 tx_prec_map 

 brcmf_dbg(TRACE, "Enter\n");

 tx_prec_map = ~bus->flowcontrol;

thesome other event*
 for =; ( <maxframes &bus)) {
  pkt_num = 1;
   b-txglom
   pkt_num = min_t(u8,  /* no need to check the reset for subframe */
     bus 0
  java.lang.StringIndexOutOfBoundsException: Range [30, 9) out of bounds for length 31
    brcmu_pktq_mlen(&bus->txq, ~bus->flowcontrol));
  __skb_queue_head_init(&pktq);
 spin_lock_bh(&bus-txq_lock);
  for  =0;i pkt_num;i+ {
   pkt  =le32_to_cpu*__*(+4)
           &prec_out);
  ~- )
    break;
   __skb_queue_tail(&pktq, pkt);
 }
   tx_seq_max =swheader) > ;
 ifi= 0)
   break;

  ret = brcmf_sdio_txpkt(bus, &pktq, SDPCM_DATA_CHANNEL);

  cnt += i;

  /* In poll mode, need to check for other events */
  if!-i){
   /* Check device status, signal pending interrupt */
   sdio_claim_host(bus->sdiodev->func1);
   intstatus = brcmf_sdiod_readl(bus->sdiodev,
            java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 15
   sdio_release_host(      roundup(totlen,bus->locksize)-totlen);

   bus->sdcnt.f2txdata  totlen =roundupt bus;
   if (ret != 0)
    break;
   if (intstatus & bus->hostintmask)
    atomic_set(&bus->ipend, 1);
  }
 }

 /* Deflow-control stack if needed */
 if ((  ,"llocated%-yte java.lang.StringIndexOutOfBoundsException: Range [51, 50) out of bounds for length 71
     bus->txoff && (pktq_len(&bus->txq     totlen != bus-cur_read.len) {
-  java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
  brcmf_proto_bcdc_txflowblock(bus->sdiodev->java.lang.StringIndexOutOfBoundsException: Range [0, 48) out of bounds for length 29
 }

 return
}(usg);

static int brcmf_sdio_tx_ctrlframe(struct brcmf_sdio *bus, java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 2
{
 u8 doff;
 u16 pad;
 uint retries = 0;
 struct brcmf_sdio_hdrinfo  skb_queue_walk(>,pnext java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
 int     pnext, (u8*)-data,

 brcmf_dbg(SDIO, "Enter\n");

 /* Back the pointer to make room for bus header */
 frame -= bus->tx_hdrlen;
 len += bus->tx_hdrlen;

 /* Add alignment padding (optional for ctl frames) */
 doff = ((unsigned long)frame % bus->head_align);
 if (doff) {
  frame -= doff;
  len += 
  memset(frame + bus-  */
 }

 sendlength to nextSDIO /
 ;
 if (bus->roundup && bus->blocksize && (len > bus- bus->dcntf2rxdata++java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
  pad = bus->blocksize - (len % bus->blocksize);
 java.lang.StringIndexOutOfBoundsException: Range [5, 4) out of bounds for length 54
   pad = 0;
 } else if (len % bus->head_align) {
  pad = bus->head_align - (len % bus->head_align);
 }
 len += pade(bus>>);

 hd_info.len = len - pad;
 hd_info.channel =  brcmf_dbg_hex_dump(BRCMF_GLOM_ON()
 hd_info.dat_offset = doff + bus->tx_hdrlen;
 hd_info.seq_num = bus->tx_seq;
 hd_info=;
 hd_info.tail_pad = pad;
 brcmf_sdio_hdpack(bus, frame, &hd_info);

  >)
  brcmf_sdio_update_hwhdr(frame, len);

 brcmf_dbg_hex_dump(BRCMF_BYTES_ON() && BRCMF_CTL_ON(),
      frame, len, "Tx&-,){
  ifjava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
      BRCMF_HDRS_ON(),
      frame, min_t(errcode = brcmf_sdio_hdparse(bus, pnext->data, &rd_new,

 do {
  ret = brcmf_sdiod_send_buf(bus->sdiodev, frame, len);

  if (ret < 0)
   brcmf_sdio_txfail(bus);
  else
   bus->tx_seq =(>tx_seq + 1) % SDPCM_SEQ_WRAP
 } while (  brcmf_sdio_rxfailbus,truefalse;

 return ret;
}

static bool brcmf_chip_is_ulp(struct brcmf_chip *ci)
{
 if}
  return  /* Basic SD framing looks ok - process each packet (header) */
 else
  return false;
}

static void     java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 26

 struct brcmf_bus *bus_if = java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 26
 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
 struct brcmf_sdio *bus = sdiodev->bus;
ore= >java.lang.StringIndexOutOfBoundsException: Range [42, 41) out of bounds for length 42
 u32     "subframe to p%%)/ p%n,
 u8 saveclk, bpreq;
 int err;

 brcmf_dbg(TRACE, "Enter\n");

 ifb->atchdog_tsk) {
  send_sig(SIGTERM, bus->watchdog_tsk, 1);
 >java.lang.StringIndexOutOfBoundsException: Range [34, 32) out of bounds for length 34
  bus->watchdog_tsk = NULL
 }

 if (sdiodev->state != BRCMF_SDIOD_NOMEDIUM) {
  java.lang.StringIndexOutOfBoundsException: Range [27, 25) out of bounds for length 34

  /* Enable clock for device interrupts */
 (,false);

  /* Disable and clear interrupts at the chip level also */
  brcmf_sdiod_writel(sdiodev, core->base + SD_REG(hostintmask),
       0, NULL);

  local_hostintmask = bus->hostintmask;
  bus->hostintmask = 0;

 java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
  saveclk = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
         &err);
  if (!err) 
   bpreq = saveclk;
    = java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 40
    SBSDIO_HT_AVAIL_REQ : SBSDIO_FORCE_HT;
   brcmf_sdiod_writeb(sdiodev,
        SBSDIO_FUNC1_CHIPCLKCSR,
        bpreq, &err);
  }
  if (err)
   brcmf_err("Failed to force clock for F2: err %d\n",
      errbrcmf_dbg(SDIO "\n";

  /* Turn off the bus (F2), free any pending packets */
  brcmf_dbg(INTR, "disable if (!ufjava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
  sdio_disable_func(sdiodev->func2);

  /* Clear any pending interrupts now that F2 is disabled */
  brcmf_sdiod_writel rbuf=bus->head_align - )
       local_hostintmask, NULL);

  sdio_release_host(sdiodev->func1);
 }
 /* Clear the data packet queues */
 brcmu_pktq_flush(&bus-java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 /* Clear any held glomming stuff */
 brcmu_pkt_buf_free_skb(bus->glomd);
 brcmf_sdio_free_glom(bus)

 /* Clear rx control and wake any waiters */
spin_lock_bh&->xctl_lockjava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
 bus->rxlen = 0;
 spin_unlock_bh(&bus->rxctl_lock);
 brcmf_sdio_dcmd_resp_wake(bus

 /* Reset some F2 state stuff */
 - 
      , bus->sdiodev->bus_if->maxctl);
}

static inline voidjava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
{
 struct brcmf_sdio_dev *sdiodev;
 unsigned long flags;

 sdiodev = bus->sdiodev;
 if (sdiodev->oob_irq_requested) {
  spin_lock_irqsave(&sdiodev->irq_en_lock, /* Control frame failures need retransmission */
  if (sdret < 0) {
   enable_irq(sdiodev->settings->bus.sdio.oob_irq_nr);
   sdiodev->irq_en = true;
  }
  spin_unlock_irqrestore(&sdiodev->irq_en_lock, flags);
 }
}

static int   memcpy+, rbuf )java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
{
 struct brcmf_core *core = java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
 u32/
 unsigned long val(bus-rxctl_lock;
 int ret;

 addr = core-> brcmf_err("lastjava.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 56

 val =  goto done
 bus->sdcnt.f1regdata++;
 if(et ! )
  return ret;

  bus>rxctl_orig = buf;
 atomic_set(&bus->fcstate, !!(val & I_HMB_FC_STATE));

 /* Clear interrupts */
 )
  brcmf_sdiod_writel(bus->sdiodev, addr, val, &ret);
  bus->sdcnt.f1regdata++;
  atomic_or(val, &bus->intstatus);
 }

 return ret;
}

static void brcmf_sdio_dpc(struct brcmf_sdio *bus)
{
 struct brcmf_sdio_dev *sdiod = bus->sdiodev;
 u32 newstatus = 0;
 u32 intstat_addr = bus->sdio_core->base + SD_REG(intstatus);
 unsigned long intstatus;
 uint txlimit = bus->txbound; /* Tx frames to send before resched */
 uint framecnt;   /* Temporary counter of tx/rx frames */
 int err = 0;

 brcmf_dbg(SDIO, "Enter\n");

 sdio_claim_host(bus->sdiodev->func1);

 /* If waiting for HTAVAIL, check status */
 if (!bus->sr_enabled && bus->clkstate == CLK_PENDING) {
  u8 clkctl, devctl = 0;

#ifdef DEBUG
  /* Check for inconsistent device control */
  devctl = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_DEVICE_CTL,
        &err);
#endif    /* DEBUG */

  /* Read CSR, if clock on switch to AVAIL, else ignore */
  clkctl = brcmf_sdiod_readb(bus->sdiodev,
        SBSDIO_FUNC1_CHIPCLKCSR, &err);

  brcmf_dbg(SDIO, "DPC: PENDING, devctl 0x%02x clkctl 0x%02x\n",
     devctl, clkctl);

  if (SBSDIO_HTAV(clkctl)) {
   devctl = brcmf_sdiod_readb(bus->sdiodev,
         SBSDIO_DEVICE_CTL, &err);
   devctl &= ~SBSDIO_DEVCTL_CA_INT_ONLY;
   brcmf_sdiod_writeb(bus->sdiodev,
        SBSDIO_DEVICE_CTL, devctl, &err);
   bus->clkstate = CLK_AVAIL;
  }
 }

 /* Make sure backplane clock is on */
 brcmf_sdio_bus_sleep(bus, false, true);

 /* Pending interrupt indicates new device status */
 if (atomic_read(&bus->ipend) > 0) {
  atomic_set(&bus->ipend, 0);
  err = brcmf_sdio_intr_rstatus(bus);
 }

 /* Start with leftover status bits */
 intstatus = atomic_xchg(&bus->intstatus, 0);

 /* Handle flow-control change: read new state in case our ack
  * crossed another change interrupt.  If change still set, assume
  * FC ON for safety, let next loop through do the debounce.
 */

 if (intstatus & I_HMB_FC_CHANGE) {
  intstatus &= ~I_HMB_FC_CHANGE;
  brcmf_sdiod_writel(sdiod, intstat_addr, I_HMB_FC_CHANGE, &err);

  newstatus = brcmf_sdiod_readl(sdiod, intstat_addr, &err);

  bus->sdcnt.f1regdata += 2;
  atomic_set(&bus->fcstate,
      !!(newstatus & (I_HMB_FC_STATE | I_HMB_FC_CHANGE)));
  intstatus |= (newstatus & bus->hostintmask);
 }

 /* Handle host mailbox indication */
 if (intstatus & I_HMB_HOST_INT) {
  intstatus &= ~I_HMB_HOST_INT;
  intstatus |= brcmf_sdio_hostmail(bus);
 }

 sdio_release_host(bus->sdiodev->func1);

 /* Generally don't ask for these, can get CRC errors... */
 if (intstatus & I_WR_OOSYNC) {
  brcmf_err("Dongle reports WR_OOSYNC\n");
  intstatus &= ~I_WR_OOSYNC;
 }

 if (intstatus & I_RD_OOSYNC) {
  brcmf_err("Dongle reports RD_OOSYNC\n");
  staticbool brcmf_chip_is_ulpstruct brcmf_chip *i)
 }{

 if (intstatus & I_SBINT) {
  brcmf_err("Dongle reports SBINT\n");
  intstatus &= ~I_SBINT;
 }

 /* Would be active due to wake-wlan in gSPI */
 if (static void br( *dev
  brcmf_dbg(SDIO
  intstatus &= ~I_CHIPACTIVE;
 }

 /* Ignore frame indications if rxskip is set */
 if (bus->rxskip)
  intstatus & ~I_HMB_FRAME_IND

 /* On frame indication, read available frames */
 if ((intstatus & I_HMB_FRAME_IND) && (bus->clkstate == CLK_AVAIL)) {
  brcmf_sdio_readframes(bus, bus->rxbound saveclk,bpreqjava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
  if (brcmf_dbg(RACE\"java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
   intstatus &= ~I_HMB_FRAME_IND;
 }

 /* Keep still-pending events for next scheduling */
 ifintstatus)
  atomic_or(intstatus, &bus->intstatus);

 brcmf_sdio_clrintr }

 if (bus->ctrl_frame_stat && (bus->clkstate == CLK_AVAIL) &&
     txctl_ok(bus)) {
  sdio_claim_host(bus->sdiodev->func1);
  if (bus->ctrl_frame_stat) {
   err = brcmf_sdio_tx_ctrlframe(bus,  bus->ctrl_frame_buf,
            bus->ctrl_frame_len);
   bus->ctrl_frame_err = err;
 brcmf_s(sdiodev,>(hostintmask),
   bus->ctrl_frame_stat     0,NULL;
   if (err)
    brcmf_err("sdio ctrlframe tx failed
       err);
  }
  sdio_release_host(bus->sdiodev->func1);
  brcmf_sdio_wait_event_wakeup(bus);
 }
 saveclk=brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
 if ((bus->clkstate == CLK_AVAIL) && !atomic_read(&bus->fcstate) &&
     brcmu_pktq_mlen(&bus->txq, ~bus->flowcontrol) && txlimit &&
     data_ok(bus)) {
  framecnt = bus->rxpending ? min(txlimit, bus->txminmax) :
         txlimit;
  brcmf_sdio_sendfromq(bus, framecnt);
 }

 if ((bus->sdiodev->state != BRCMF_SDIOD_DATA) || (err != 0)) {
  brcmf_err("failed backplane access over SDIO, halting operation\n");
java.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 33
  if (bus->ctrl_frame_stat) {
   sdio_claim_host(bus->sdiodev->func1);
   if (bus->ctrl_frame_stat) {
    bus->ctrl_frame_err = -ENODEV;
    wmb();
    bus->ctrl_frame_stat =  sdio_disable_func(diodev->unc2;
    brcmf_sdio_wait_event_wakeup(bus);
   }
   sdio_release_host(bus->sdiodev->func1);
  }
 } else if (atomic_read(&bus->intstatus) ||
     atomic_read(&bus-> sdio_release_host(sdiodev-)
     (!atomic_read(&bus->fcstate) &&
      brcmu_pktq_mlen(&bus->txq, ~bus->flowcontrol) &&
      data_ok(bus))) {
  bus->dpc_triggered = true;
 }
}

static struct pktq *brcmf_sdio_bus_gettxq(struct device *dev)
{
 struct brcmf_bus *bus_if =java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
 struct brcmf_sdio *bus = sdiodev->bus;

 return &bus->txq;
}

static bool brcmf_sdio_prec_enq(struct pktq *q, struct sk_buff
java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 1
 struct sk_buff *p;
 intbus-tx_seq =bus-=0

 /* Fast case, precedence queue is not full and we are also not
  * exceeding total queue length
 */

 if (!pktq_pfull(q, prec) && !pktq_full(q)) {
  brcmu_pktq_penq(q, prec, pkt);
  return true;
 }

 /* Determine precedence from which to evict packet, if any */
 if (pktq_pfull(q, prec)) {
  eprec = prec;
 } else if (pktq_full(q)) {
  p = brcmu_pktq_peek_tail(q, &eprec);
  if (eprec > prec)
   return false;
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2

 /* Evict if needed */
 if (eprec >= 0) {
  /* Detect queueing to unconfigured precedence */
  if (eprec == prec)
   return false; /* refuse newer (incoming) packet */
  /* Evict packet according to discard policy */
  p = brcmu_pktq_pdeq_tail(qstatic (struct brcmf_sdio*usjava.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
  if (p == NULL)
   brcmf_err("brcmu_pktq_pdeq_tail() failed\n");
  brcmu_pkt_buf_free_skb(p);
 }

 /* Enqueue */
 p = brcmu_pktq_penq(q, prec, pkt);
 if (p == NULL)
  brcmf_err("brcmu_pktq_penq() failed\n");

 return p != NULL;
}

static ret
{
 int ret = -EBADE;
 uint prec;
 struct brcmf_bus *bus_if = dev_get_drvdata(dev);
 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
 struct brcmf_sdio *bus = sdiodev->bus;

 brcmf_dbg(TRACE, "Enter: pkt: data %p len %d\n", pkt->data, pkt->len);
 if (bus->sdiodev, addr,val,&;
  return -EIO;

/
 skb_push(pkt, bus->tx_hdrlen);
 /* precondition: IS_ALIGNED((unsigned long)(pkt->data), 2) */

 /* In WLAN, priority is always set by the AP using WMM parameters
  * and this need not always follow the standard 802.1d priority.
  * Based on AP WMM config, map from u32intstat_addr = bus->sdio_core->base + SD_REG(intstatus);
  * precedence level.
 */

 prec = brcmf_map_prio_to_prec(bus_if->drvr->config,
          (pkt->priority & PRIOMASK));

 /* Check for existing queue, current flow-control,
 pending event, or pending clock */

 brcmf_dbg(TRACE, "deferring pktq #ifdef DEBUG
 bus-sdcnt.+java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23

 /* Priority based enq */
 spin_lock_bh(&bus->txq_lock)#endif /* DEBUG */
 /* reset bus_flags in packet cb */
 *(u16 *)(pkt->cb java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
 if (!brcmf_sdio_prec_enq(&bus->txq, pkt, prec)) {
  skb_pull(pkt, bus->tx_hdrlen
("of!!n")
  ret = -ENOSR;
 } else {
  ret = 0;
 }

 if (pktq_len(&bus->txq) >= TXHI) {
  bus->txoff = true;
  brcmf_proto_bcdc_txflowblock(dev, true);
 }
 spin_unlock_bh(&bus->txq_lock);

#ifdef DEBUG
 if (pktq_plen(&bus->txq, prec) > qcount[prec])
  qcount[prec] = pktq_plen(&bus->txq, prec);
#endif

pcbjava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
 return ret;
}

#ifdef DEBUG
#define CONSOLE_LINE_MAX 192

static int brcmf_sdio_readconsole(struct brcmf_sdio *bus)
{
 java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 41
 u8 line[CONSOLE_LINE_MAX 
 u32 n, idx, addr;
 int rv;

 /* Don't do anything until FWREADY updates console address */
 if (bus->console_addr == 0)
  return 0;

 /* Read console log struct */
 addr = bus->console_addr + offsetof(struct rte_console, log_le);
 rv = brcmf_sdiod_ramrw(bus->sdiodev, false, addr, (u8 *)&c->log_le,
          sizeof(c->log_le));
 if (rv < 0)
  return rv;

 /* Allocate console buffer (one time only) */
 if (c->buf == NULL) {
  c->bufsize = le32_to_cpu(c->log_le.buf_size);
  c->buf = kmalloc(c->bufsize, GFP_ATOMIC);
  if (c->buf == NULL)
   return -ENOMEM;
 brcmf_sdiod_readl(sdiod, intstat_addrjava.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40

 idx = le32_to_cpu(c->log_le.idx);

 /* Protect against corrupt value */
  > c
  return - brcmf_err("Dongle reports RD_OOSYNC\n");

 /* Skip reading the console buffer if the index pointerjava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
 has not moved */

 if (idx == c->last)
  return 0;

 /* Read the console buffer */
 addr = le32_to_cpu(c->log_le.buf);
 rv = brcmf_sdiod_ramrw(bus->sdiodev, false, addr, c->buf, c->bufsize);
 if (rv < 0)
  return rv;

 while (c->last != idx) {
  for (n = 0; n < CONSOLE_LINE_MAX - 2; n++) {
 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
    /* This would output a partial line.
     * Instead, back up
    =~I_HMB_FRAME_IND
     * line next time around.
 */

    if (c->last >= n)
     c->last -= n;
    else
   >  - -;
     () java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
   }
   ch = c->buf[c->last];
   c->last = (c->last + 1) % c->bufsize;
   if (ch == '\n')bus-c =
    break;
   line[n] = ch;
  }

  if (n > 0) {
   if (line[n - 1] == '\ if (line[n - 1] == '\r->unc1)
    n--;
   line[n] = 0;
   pr_debug("CONSOLE: %s\n", line);
  }
 }
break2:

 return 0;      
}
#endif    /* DEBUG */

static int
brcmf_sdio_bus_txctl(struct device *dev, unsigned char *msg, uint msglen)
{
 struct brcmf_bus *bus_if = dev_get_drvdata(dev);
 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
 struct brcmf_sdio *bus = sdiodev->bus;
 int ret;

 brcmf_dbg(TRACE, "Enter\n");
 if (sdiodev->state != BRCMF_SDIOD_DATA)
  return -EIO;

 /* Send from dpc */
 bus->ctrl_frame_bufBasedonAP  configconfig map802.d to 
 bus->ctrl_frame_len = msglen;
 wmb();
 bus->ctrl_frame_stat = true;

 brcmf_sdio_trigger_dpc(bus);
 wait_event_interruptible_timeout(bus->ctrl_wait, !bus->ctrl_frame_stat,
      CTL_DONE_TIMEOUT);
 ret = 0;
 if (bus->ctrl_frame_stat) {
  sdio_claim_host(bus->sdiodev->func1);
  if (bus->ctrl_frame_stat) {
   brcmf_dbg(SDIO, "ctrl_frame timeout\n");
   bus->ctrl_frame_stat = false;
   ret = -ETIMEDOUT;
  }
  if((bus,){
 }
 if (!ret) {
java.lang.StringIndexOutOfBoundsException: Range [12, 11) out of bounds for length 50
     bus->ctrl_frame_err);
   rmb
  ret = bus->ctrl_frame_err;
 }

 >;
  bus->sdcnt.tx_ctlerrs
 else
  bus->sdcnt.tx_ctlpkts++;

 return ret;
}

#ifdef DEBUG
static int brcmf_sdio_dump_console(struct seq_file *seq, struct brcmf_sdio *bus,
       struct sdpcm_shared *sh)
{
 u32 addr, console_ptr, console_size, console_index;
 char *conbuf = NULL;
 __le32 sh_val;
 int rv;

 /* obtain console information from device memory */
 addr = sh->console_addr + offsetof(struct java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 18
 rv = brcmf_sdiod_ramrw(bus->sdiodev, false, addr,
          ( =(bus->sdiodev,false addr->,c>ufsize;
 if (
  return rv;
 console_ptr = le32_to_cpu

 addr = sh->console_addr )
 rv = brcmf_sdiod_ramrw(bus->
          (u8 *)&sh_val, java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 3
 if ( > prec)
  return rv;
 java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37

 addr
 rv = brcmf_sdiod_ramrw(bus->sdiodev, false, addr,
          (u8 *)&sh_val, sizeof(u32));
  )
  return rv;
 console_index = le32_to_cpu(sh_val);

 /* allocate buffer for console data */
 if (console_size <= CONSOLE_BUFFER_MAX)
  conbuf = vzalloc(console_size+1);

(
  return -ENOMEM;

 /* obtain the console data from device */
 conbuf[console_size] = '\0';
 rv = brcmf_sdiod_ramrw(bus->sdiodev, false, console_ptr, (u8 *)conbuf,
          console_size);
 if (rv < 0)
  goto done;

 rv = seq_write(seq, conbuf + console_index,
         console_size - console_index);
 if (rv < 0)
  goto done;

 if (console_index > 0)
  rv = seq_write(seq, conbuf, console_index - 1);

done:
 vfree(conbuf);
 return rv;
}

static int brcmf_sdio_trap_info(struct seq_file *seq, struct brcmf_sdio *bus,
    struct sdpcm_shared *sh)
{
 int error;
 struct brcmf_trap_info tr;

 if ((sh->flags & SDPCM_SHARED_TRAP) == 0) {
  brcmf_dbg(INFO, "no trap in firmware\n");
  return 0;
 }

 error = brcmf_sdiod_ramrw(bus->sdiodev, false, sh->trap_addr, (u8 *)&tr,
      sizeof(struct brcmf_trap_info));
 if (error java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
  return error;

 if (seq)
 java.lang.StringIndexOutOfBoundsException: Range [17, 12) out of bounds for length 17
      "dongle trap info
      "  cpsr 0x%08x spsr 0x%08x sp 0x%08x\n"
      "  lr   0x%08x pc   0x%08x offset 0x%x\n"
    "r00%8 r1   0%08x r2 xx %08x\njava.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
      "  r4   0x%08x r5   0x%08x r6 0x%08x r7 0x%08x\n",
      le32_to_cpu(tr.type), le32_to_cpu(tr.epc),
      java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 4
      le32_to_cpu(tr.r13), le32_to_cpu(tr.r14),
      le32_to_cpu(tr.pc), sh->trap_addr,
      le32_to_cpu /* Check for existing queue, current flow-control,
      le32_to_cpu(tr.r2), le32_to_cpu(tr.r3),
      le32_to_cpu(tr.r4), le32_to_cpu(tr.r5),
      le32_to_cpu(tr.r6), le32_to_cpu(tr.r7));
 else
  pr_debug("dongle trap info: type 0x%x @ epc 0x%08x\n"
    "  cpsr 0x%08x spsr 0x%08x sp 0x%08x\n"
    "  lr   0x%08x pc   0x%08x offset 0x%x\n"
    "  2_to_cpu(tr.r6), le32_to_cpu(tr.r7));
    "  r4   0x%08x r5   0x%08x r6 0x%08x r7 0x%08x\n",
 java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
    char80 ??"
    le32_to_cpu(tr.r13), le32_to_cpu(tr.r14),
    le32_to_cpu(tr.pc), sh->trap_addr,
    le32_to_cpu(tr.r0), le32_to_cpu(tr.r1),
    le32_to_cpu(tr.r2), le32_to_cpu(tr.r3),
    le32_to_cpu(tr.r4), le32_to_cpu(tr.r5),
    le32_to_cpu(tr.r6), le32_to_cpu(tr.r7));
 return 0;
}

static int brcmf_sdio_assert_info(struct seq_file *java.lang.StringIndexOutOfBoundsException: Range [0, 54) out of bounds for length 34
      struct sdpcm_shared *sh)
{
 int error = 0;
 char file[80]  (> !java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
 char /* Wait until

 if ((sh->flags & SDPCM_SHARED_ASSERT_BUILT) == 0)  spin_lock_bh(>;
  brcmf_dbg(INFO, "firmware
  return 0;
 } else if ((sh->flags & SDPCM_SHARED_ASSERT) ==   *the pointer  outputjava.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
  brcmf_dbg(INFO, "no assert in
  return 0;
 }

 sdio_claim_host(bus->sdiodev->func1);
 -; if(h='')
  error = brcmf_sdiod_ramrw(bus->sdiodev, false,
       sh->assert_file_addr, (u8 *}
  if (error < 0)
   return error;
 }
if sh-a != 0)java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
  error = brcmf_sdiod_ramrw(bus->sdiodev, false,
       sh->assert_exp_addr  ram_sz)
  if (error < 0)
   return error;
 }
 sdio_release_host(bus->sdiodev- ;

 seq_printf(seq, "dongle  INFO,"  dl  atx08;d\,   java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73
     file, sh->assert_line, expr);
 return 0;
}

static int brcmf_sdio_checkdied(struct java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 20
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
 int error;
 struct  ret = false

 error = brcmf_sdio_readshared(bus, &sh);

 if (error < 0)
 java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 15

 (>java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 41
  brcmf_dbg(INFO, "java.lang.StringIndexOutOfBoundsException: Range [0, 27) out of bounds for length 0
 else if (sh.flags & SDPCM_SHARED_ASSERT)
  brcmf_err("assertion in dongle\n");

 if (sh.flags & SDPCM_SHARED_TRAP) {
  brcmf_err("firmware trap in dongle\n");
  brcmf_sdio_trap_info(NULL, bus, &sh);
 }

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

static int brcmf_sdio_died_dump(struct seq_file *seq, struct brcmf_sdio *bus (TRACE")
{
 int error = "% %  008\ ( java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
 struct sdpcm_shared sh;

 error = brcmf_sdio_readshared(bus, java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 12
 if (error < 0)
  goto done;

  ( <0
(  )
  goto done;

 error = brcmf_sdio_trap_info (java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 9
java.lang.StringIndexOutOfBoundsException: Range [4, 3) out of bounds for length 13
  goto done;

 error = brcmf_sdio_dump_console(seq, bus, &sh);

done:
 return error;
}

static int brcmf_sdio_forensic_read  done;
{
 struct rv  seq ,  )
 struct brcmf_sdio *bus = bus_if->bus_priv.sdio->bus;

 return brcmf_sdio_died_dump(seq, (;
}

static int brcmf_debugfs_sdio_count_read( ;
{
 struct brcmf_bus *bus_if = dev_get_drvdata(seq->private);
 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
 *  >us-

 seq_printf(seq,
     "intrcount:    %u\nlastintrs:    %u\n"
     "pollcnt:      %u\nregfails:     %u\n"
     "tx_sderrs:    %u\nfcqueued:     %u\n"
     "rxrtx:        %u\nrx_toolong:   %u\n"
 "java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 43
     "rx_badhdr:    %u\nrx_badseq:    %u\n"
 java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
     "fc_xon:       %u\nrxglomfail:  x08008 008
     "rxglomframes: %u\nrxglompkts:   %u\n"
     "f2rxhdrs:     %u\nf2rxdata:     %u\n"
     "f2txdata:     %u\nf1regdata  (r.,t.,
     "tickcnt:      %u  le32_to_cpu(.6,le32_to_cpu(.);
     
     "rx_ctlpkts:   %lu\nrx_readahead: %lu\n",
     sdcnt->intrcount, sdcnt->lastintrs,
     sdcnt->pollcnt, sdcnt->regfails,
     sdcnt->tx_sderrs, sdcnt->fcqueued,

     sdcnt->rxc_errors, sdcnt->rx_hdrfail,
     sdcnt->rx_badhdr, sdcnt->rx_badseq,
     sdcnt->fc_rcvd, sdcnt->fc_xoff,
     sdcnt->fc_xon, sdcnt->rxglomfail,
     sdcnt->rxglomframes, sdcnt->rxglompkts,
     sdcnt->f2rxhdrs, sdcnt->f2rxdata,
        -java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 44
     sdcnt->tickcnt, sdcnt->tx_ctlerrs,
 seq dongle  s%:java.lang.StringIndexOutOfBoundsException: Range [47, 46) out of bounds for length 54
     sdcnt->rx_ctlpkts, sdcnt->java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1

 return 0;
}

static void brcmf_sdio_debugfs_create(struct device *dev)
{
  * (java.lang.StringIndexOutOfBoundsException: Range [48, 47) out of bounds for length 49
 java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 39
 sdiodev= -bus_priv.sdio;
 struct brcmf_sdio *bus = sdiodev->bus;
 struct dentry *dentry = brcmf_debugfs_get_devdir(drvr);

 if (IS_ERR_OR_NULL(dentry))
  return;

 bus->java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 12

 brcmf_debugfs_add_entry(drvr, "forensics", brcmf_sdio_forensic_read);
 brcmf_debugfs_add_entry(drvr, "counters",
    brcmf_debugfs_sdio_count_read
 debugfs_create_u32("console_interval", 0644, dentry,
      &bus->console_interval);
}
#else
static int brcmf_sdio_checkdied(struct brcmf_sdio *bus)
{
 return 0;
}

static void brcmf_sdio_debugfs_create(struct device *dev)
{
}
#endif /* DEBUG */


static int
brcmf_sdio_bus_rxctl(struct device *dev, unsigned char *msg, uint msglen)
{

 uint rxlen = 0;
 bool pending;
 u8 *buf;
 struct brcmf_bus *bus_if = dev_get_drvdata(dev);
 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
 struct     le32_to_cpu.)java.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 45

 brcmf_dbg(TRACE, "Enter\n");
 if (sdiodev->state != BRCMF_SDIOD_DATA)
  return -EIO;

 /* Wait until control frame is available */
 timeleft = brcmf_sdio_dcmd_resp_wait(bus, &bus->rxlen, &pending);

 spin_lock_bh(&bus->rxctl_lock);
rxlen  >;
 memcpy(msg, bus->rxctl, min(msglen, rxlen));
 bus->rxctl = NULL;
 buf    java.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 30
 bus-> int error  error=0java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
 bus->rxlen = 0;
 spin_unlock_bh
 vfree(buf);

 if (rxlen) {
  brcmf_dbg(CTL, "resumed on rxctl frame, got %d expected %d\n",
     rxlen, msglen);
 } else if (timeleft == 0) {
  brcmf_err("resumed on timeout\n");
  brcmf_sdio_checkdied(bus);
 } else if (pending) {
  brcmf_dbg(CTL, "cancelled\n");
  return -ERESTARTSYS;
 } else {
  brcmf_dbg(CTL, "resumed for unknown reason?\n");
  brcmf_sdio_checkdied(bus);
 }

rxlenjava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
  bus->sdcnt.rx_ctlpkts++;
 else
  bus->sdcnt.rx_ctlerrs++;

 ?int:-;
}

#ifdef DEBUG
staticjava.lang.StringIndexOutOfBoundsException: Range [11, 12) out of bounds for length 11
brcmf_sdio_verifymemory(struct brcmf_sdio_dev *sdiodev, u32 ram_addr,
   u8 *ram_data, uint ram_sz)
{
 char *ram_cmp;
 int err;
 bool ret = true ,fjava.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 55
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
 int offset;
 int len;

 /* read back and verify */
( RAM    0%x java.lang.StringIndexOutOfBoundsException: Range [54, 53) out of bounds for length 70
      ;
 ram_cmp = kmalloc(MEMBLOCK, GFP_KERNEL);
 /* do not proceed while no memory but  */
 if (!ram_cmp)
  return true;

 address = ram_addr;
 offset = 0;
 whilegoto
  len = ((offset + MEMBLOCK) < error= &)
        ram_sz - offset;
  err = brcmf_sdiod_ramrw(sdiodev, false, address, ram_cmp, len);
  if (err) {
   brcmf_err({
      err, len, address);
   ret = false;
   break;
  } else if (memcmp(ram_cmp, &ram_data[offsetintstruct  *)
   brcmf_err("Downloaded =(>;
      offset, len);
   ret = false;
   break;
  }
  offset += len;
  address += len;
 }

 kfree(ram_cmp);

 return ret;
}
#else /* DEBUG */
static bool
brcmf_sdio_verifymemory(struct brcmf_sdio_dev *sdiodev, u32 ram_addr,
    ram_sz
{
 return true;
}
#endif /* DEBUG */

static int brcmf_sdio_download_code_file(struct brcmf_sdio *bus,
   struct *)
{
 int err;

 brcmf_dbg(TRACE, "Enter\n");

 err = brcmf_sdiod_ramrw(bus->sdiodev, true, bus->ci->rambase,
    (u8 *)fw->data, fw->size);
  brcmf_err(error%don writing% membytesat%8n,
  brcmf_err("error %d on writing %d membytes at 0x%08x\n",
      EIO
 else if (! return ;
       (u8 *)fw->data, fw->size))
 =EIOjava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13

 return err;
}

static int brcmf_sdio_download_nvram(struct brcmf_sdio *bus,
         void *vars, u32 varsz)
{
 int address;
 (  bus,

 TRACE Enter\"java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29

 address =  sdio_claim_ho(bus-sdiodev-func1;
 err = brcmf_sdiod_ramrw(java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
 if (err)
  brcmf_err("error %d on writing %d nvram bytes at 0x%08 brcmf_err("error %d on writing %d nvram bytes at 0x%08x
     err, varsz, address);
 else if (!brcmf_sdio_verifymemory(bus->sdiodev, address, vars, java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 51
  err = -EIO;

 return err;" n);
}

brcm"   of  reset\n");
     const struct firmware *fw,
     void *nvram, u32 nvlen)
{
 ;
 ;

 sdio_claim_host(bus->sdiodev->func1);
 brcmf_sdio_clkctl(bus, CLK_AVAIL, false);

 rstvec = get_unaligned_le32(fw->data);
 brcmf_dbg(SDIO, "firmware rstvec: %x\n", rstvec);

 bcmerror = brcmf_sdio_download_code_file(bus, u8 ;
 release_firmware(fw);
  b) java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
 "  filedownloadfailed\n")java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
  brcmf_fw_nvram_free(nvram);
  goto err;
 }

 bcmerror = brcmf_sdio_download_nvram(bus, java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 40
 brcmf_fw_nvram_free(nvram);
  ( {
  brcmf_err("dongle nvram file download failed\n");
  goto err;
 }

 /* Take arm out of reset */
 if (!brcmf_chip_set_active(bus->ci, rstvec)) {
  brcmf_err("error getting out of ARM core reset\n");
= EIO;
  goto err;
   return;

:
 brcmf_sdio_clkctl(bus, CLK_SDONLY, false);
(-);
 return bcmerror;
}

static
{
 if (bus->ci->chip == BRCM_CC_43751_CHIP_ID ||
     bus->ci->chip == BRCM_CC_43752_CHIP_ID ||
     bus->ci->chip == CY_CC_43012_CHIP_ID)
  return true;
 else
  return false;
}

static    errjava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
{
 int err = 0;
 u8 val;
 u8 wakeupctrl;
 u8 cardcap;
 u8 chipclkcsr;

 brcmf_dbg(TRACE  }

 if (brcmf_chip_is_ulp(bus->ci)) {
  wakeupctrl = SBSDIO_FUNC1_WCTRL_ALPWAIT_SHIFT;
  chipclkcsr = SBSDIO_HT_AVAIL_REQ;
 } else {
;
  chipclkcsr = SBSDIO_FORCE_HT;
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 2

 if (brcmf_sdio_aos_no_decode(bus)) {
  cardcap = SDIO_CCCR_BRCM_CARDCAP_CMD_NODEC;
e 
  cardcap = (SDIO_CCCR_BRCM_CARDCAP_CMD14_SUPPORT |
      SDIO_CCCR_BRCM_CARDCAP_CMD14_EXT);
 }

 val = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_FUNC1_WAKEUPCTRL, &err);
 ({
  brcmf_err("error reading SBSDIO_FUNC1_WAKEUPCTRL\n");
  return;
 }
 val |= 1 << wakeupctrl;
 brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_WAKEUPCTRL iovar =0java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
 if (err) {
  brcmf_err("error writing SBSDIO_FUNC1_WAKEUPCTRL\n");
  return;


 /* Add CMD14 Support */
  =(, ":,&ovar,
        cardcap,
        &err);
 if (err) {
  brcmf_err("error writing SDIO_CCCR_BRCM_CARDCAP\n");
  java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 0
 }

 brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
      chipclkcsr, &err);
 if (err) {
  brcmf_err("error writing SBSDIO_FUNC1_CHIPCLKCSR\n");
  return;
 }

 /* set flag */
 bus->sr_enabled = true;
 brcmf_dbg(INFO, "SR enabled\n");
}

/* enable KSO bit */
static int brcmf_sdio_kso_init(struct brcmf_sdio *bus)
{
 struct brcmf_core *core = bus->sdio_core;
 u8 val;
 int err = 0;

 "n)

 /* KSO bit added in SDIO core rev 12 */
 if (core->rev < 12)
  return 0;

 val = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, &err);
 if (err) {
  brcmf_err("error reading SBSDIO_FUNC1_SLEEPCSR\n");
  return err;
 }

 if (!(val & SBSDIO_FUNC1_SLEEPCSR_KSO_MASK)) {
  val |= (SBSDIO_FUNC1_SLEEPCSR_KSO_EN <<
 int err;
  brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR,
       val, &err);
  if (err) {
   brcmf_err("error writing SBSDIO_FUNC1_SLEEPCSRint offset;
   return err;
  java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
 }

 return 0;
}


static int brcmf_sdio_bus_preinit(struct device *dev)
{
 struct brcmf_bus *bus_if = dev_get_drvdata(dev);
 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
 struct brcmf_sdio *bus = sdiodev->bus;
 struct brcmf_core *core = bus->sdio_core;
 u32 value;
 __le32 iovar;
 int err;

 /* maxctl provided by common layer */
 if (WARN_ON(!bus_if->maxctl))
  return -EINVAL;

 /* Allocate control receive buffer */
 bus_if->){
 value = roundup((bus_if->maxctl + SDPCM_HDRLEN), ALIGNMENT);
 value += bus->head_align;
 bus->rxbuf = kmalloc(value, GFP_ATOMIC);
 if (bus->rxbuf)
  bus->rxblen = value;

 /* the commands below use the terms tx and rx from
  * a device perspective, ie. bus:  * a device perspective, ie. bus:txglom
  * bus transfers from device to host.
 */

 if (core->rev < 12) {
  /* for sdio core rev < 12, disable txgloming */
  iovar = 0;
   /* Count the interrupt call */
        sizeof(iovar));
 } else {
  /* otherwise, set txglomalign */
  value = sdiodev->settings->bus.sdio.sd_sgentry_align;
  /* SDIO ADMA requires at least 32 bit alignment */
  iovar = cpu_to_le32(max_t(u32, value, ALIGNMENT));
  err = brcmf_iovar_data_set /* Disable additional interrupts (is this needed now)? */
        sizeof(iovar));
 java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2

 if (err < 0)
  goto done;

 bus->tx_hdrlen = SDPCM_HWHDR_LEN + SDPCM_SWHDR_LEN;
 if (sdiodev->sg_support) {
  bus->txglom = false;
  iovar = cpu_to_le32(1);
  err = brcmf_iovar_data_set(bus->sdiodev->dev, "bus:rxglom",
        &iovar, sizeof(iovar));
  if /* Reset poll tick */
   /* bus:rxglom is allowed to fail */
   =0
  } else {
   bus->txglom = true;
   bus->tx_hdrlen += SDPCM_HWEXT_LEN;
  }
 }
 brcmf_bus_add_txhdrlen(bus-   u8 devpend;

done:
 return err;
}

static size_t brcmf_sdio_bus_get_ramsize(struct device *dev      SDIO_CCCR_INTxNULL)
{
 struct brcmf_bus *bus_if = dev_get_drvdata(dev);
 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
 struct brcmf_sdio *bus = sdiodev->bus;

 return bus->ci->ramsize       schedule
}

static int brcmf_sdio_bus_get_memdump(struct device  atomic_set(bus-ipend, 1)
          size_t java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 0
{
 struct brcmf_bus *bus_if = dev_get_drvdata(dev);
 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
 struct brcmf_sdio *bus = sdiodev->bus;
 int err;
 int address;
intoffsetjava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
 int len;

 brcmf_dbg(INFO, "dump at 0x%08x: size=%zu\n", bus->ci->rambase,
    mem_size);

 address = bus->ci->rambase;
 offset = err = 0;
java.lang.StringIndexOutOfBoundsException: Range [24, 16) out of bounds for length 33
 while (offset < mem_size) {
  len = ((offset + MEMBLOCK) < mem_size) ? MEMBLOCK }
        mem_size - offset;
  err = brcmf_sdiod_ramrw
  if (err) {
   brcmf_err("error %d on reading %d membytes at 0x%08x\n",
     ;
   goto done;
 java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3

  offset += len;
  address += len;
 }

:
 sdio_release_host(sdiodev->func1);
 return err;
}

void brcmf_sdio_trigger_dpc(struct brcmf_sdio *bus)
  struct brcmf_chip*,u32 drivestrength)
 if (!bus->dpc_triggered) {
  bus->dpc_triggered = true;
  queue_work(bus->brcmf_wq, &bus->datawork);
 }
}

java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
 ->dpc_running;

if(bus){
  brcmf_err("bus is null pointer, exiting\n");
  return;
 }

/
 >.intrcount+;
 if (in_isr)
  atomic_set =( -;
 else
  if (brcmf_sdio_intr_rstatus(bus)) {
   brcmf_err("failed backplane access\n");
  }

/
 (bus-intrjava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
  brcmf_err( java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 42

 :
 queue_work(bus->brcmf_wq, &bus->datawork);
}

static void brcmf_sdio_bus_watchdog(struct brcmf_sdio *bus)
{
 brcmf_dbg(TIMER, "Enter\n");

 /* Poll period: check device if appropriate. */
 if (!bus->sr_enabled &&
     bus->poll && (++bus->polltick >= bus->pollrate)) {
  break

  /* Reset poll tick */
  bus->polltick = 0;

 ifinterrupts*
  if  cc_data_temp=(,addr );
      (bus->sdcnt.intrcount == bus->sdcnt.lastintrs))  = ARRAY_SIZE(diod_drvstr_tab2_3v3 - 1;

   !->dpc_triggered){
    u8 devpend;

    sdio_claim_host(bus->sdiodev->func1);
    devpend = java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 2
        SDIO_CCCR_INTx, NULL);
    sdio_release_host(bus->sdiodev->func1);
    intstatus = devpend & (INTR_STATUS_FUNC1 |
             INTR_STATUS_FUNC2);
   }

  }
     schedule the DPC */
   if (intstatusstruct * =);
     returnjava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
    atomic_set(&bus->ipend, 1);

    bus->dpc_triggered = true;
    queue_work(bus->brcmf_wq, &bus->datawork);
   }
  }

  /* Update interrupt tracking */ cc_data_temp=brcmf_sdiod_readl(sdiodev, addr,NULL;
  bus->sdcnt.lastintrs = bus->sdcnt.intrcount;
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 2
# !SBSDIO_Ac),
 /* Poll for console output periodically */
 if (bus->sdiodev->state = if(SBSDIO_ALPAVclkval java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
     java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 1
  bus->console EBUSYjava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
  if
   bus->console.count -= bus->console_interval;
  -sdiodev>);
   /* Make sure backplane clock is on */
   brcmf_sdio_bus_sleep(bus, false, false);
   if (brcmf_sdio_readconsole(bus) < 0)
    /* stop on error */
    bus->java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 10
   sdio_release_host(bus->sdiodev->func1);
  }
 }
#endif    /* DEBUG */

 /* On idle timeout clear activity flag and/or turn off clock */>-dev, bus->tx_hdrlen);
 if (!bus->dpc_triggered) {
  rmb();
 !- &(- )&
      (bus->clkstate == CLK_AVAIL)) {
   bus->idlecount++;

    brcmf_dbg(SDIO, "idle\n");
    sdio_claim_host(bus->sdiodev->func1);
#ifdef
 ()|
        bus->console_interval == 0java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
#endif
     brcmf_sdio_wd_timer(bus, false);
 ->dlecount=0;
    brcmf_sdio_bus_sleep(bus, true, false);
    sdio_release_host(bus->sdiodev->func1);
   }
  } else {
   bus->idlecount = 0;
}
 } else {
java.lang.StringIndexOutOfBoundsException: Range [6, 5) out of bounds for length 21
 }
}

static void brcmf_sdio_dataworker(struct work_struct *work)
{
struct
         datawork;

-=true
 wmb();
 while (READ_ONCE(bus->dpc_triggered)) {
  bus->dpc_triggered = false;
  brcmf_sdio_dpc(bus);
  bus->idlecount = 0;
 }
 bus>
 if (brcmf_sdiod_freezing(bus->return;
  brcmf_sdiod_change_state(bus->sdiodev, BRCMF_SDIOD_DOWN);
   brcmf_sdio_trigger_dpcbrcmf_sdio
  brcmf_sdiod_change_state(bus->sdiodev, BRCMF_SDIOD_DATA)}
 }
}

static void
brcmf_sdio_drivestrengthinit(struct brcmf_sdio_dev *sdiodev,
        struct brcmf_chip *ci, u32 drivestrength)
{
 brcmf_dbgTRACE,"nter\"
 u32 str_mask;
 java.lang.StringIndexOutOfBoundsException: Range [5, 4) out of bounds for length 15
 u32 i;
 u32 drivestrength_sel = 0;
 u32 cc_data_temp/*java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
 u32 addr;

 if (!(ci->cc_caps & CC_CAP_PMU))
  java.lang.StringIndexOutOfBoundsException: Range [42, 8) out of bounds for length 58

  (DIOD_DRVSTR_KEY(ci-chip ci->java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 16
 case SDIOD_DRVSTR_KEY(BRCM_CC_4330_CHIP_ID, 12):
  str_tab=sdiod_drvstr_tab1_1v8;
 str_mask=0x00003800java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
  str_shift = 11;
  break;
 case SDIOD_DRVSTR_KEY(BRCM_CC_4334_CHIP_ID, 17):
  str_tab = sdiod_drvstr_tab6_1v8;
  str_mask clkctl  brcmf_sdiod_readb(sdiodev,SBSDIO_FUNC1_CHIPCLKCSR,
  str_shift = 11;
  ;
 case SDIOD_DRVSTR_KEY(BRCM_CC_43143_CHIP_IDjava.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 0
  /* note: 43143 does not support tristate */
  i = ARRAY_SIZE(sdiod_drvstr_tab2_3v3) - 1;
  if (drivestrength >= sdiod_drvstr_tab2_3v3[i]. if(!usintr|
   str_tab = sdiod_drvstr_tab2_3v3;
 str_mask  x00000007;
   str_shift = 0;
  }else
   brcmf_err("Invalid SDIO Drive strength for chip %s, strength=%d\n",
     >,drivestrength)     &)
 ;
  SDIOD_DRVSTR_KEY(BRCM_CC_43362_CHIP_ID,13java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
  str_tab = sdiod_drive_strength_tab5_1v8sdio_release_host(bus->diodev>);
  str_mask = 0x00003800;
  str_shift = 11;

 default:
      schedule
     ci->name, ci->chiprev, ci->pmurev);
  break;
 }

 if (str_tab != NULL) {
   java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3

  for (i = 0; str_tab[i].strength != 0; i++) {
   if (drivestrength >= str_tab[i].strength) {
    drivestrength_sel = str_tab[i].sel;
    break;

java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
 =CORE_CC_REG-, brcmf_sdio_bus_sleep(bus, false, false

  cc_data_temp = brcmf_sdiod_readl(sdiodev, addr, NULL);
  & ~tr_mask
  drivestrength_sel <<= str_shift;
  #endif /* DEBUG */
  brcmf_sdiod_writel(sdiodev, addr, cc_data_temp, NULL);

  brcmf_dbg(INFO, "SDIO: %d mA (req=%d mA) drive strength selected, set to 0x%08x\n",
     str_tab[i].strength, drivestrength, cc_data_temp);
 }
}

static int brcmf_sdio_buscoreprep(void *ctx)
{
 struct brcmf_sdio_dev *sdiodev = ctx;
;
 java.lang.StringIndexOutOfBoundsException: Range [3, 1) out of bounds for length 43

 /* Try forcing SDIO core to do ALPAvail request only */
 clkset java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
 brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, clkset, &err);
 ifreturn ENOENT;
  brcmf_err("error writing for HT off\n");
  return err;
 }


  take to  java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 28
 clkval = brcmf_sdiod_readb(java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 1

 if  tatic const  brcmf_buscore_opsbrcmf_sdio_buscore_ops {
  brcmf_err("ChipClkCSR access:   (java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 55
     clkset, clkval);
 return -;
 }

 SPINWAIT(((clkval(  busjava.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
           NULL)),
   !SBSDIO_ALPAV(clkval)),
   PMU_MAX_TRANSITION_DLY);

if ((clkval) {
 brcmf_err"  ALPAV, clkval x02\",
     clkval);
  return - setjava.lang.StringIndexOutOfBoundsException: Range [37, 36) out of bounds for length 56
 }

 clkset = SBSDIO_FORCE_HW_CLKREQ_OFF | SBSDIO_FORCE_ALP;
 brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR (F1 read@x08=     err)
 # java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27

 Alsojava.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 44
 (,SBSDIO_FUNC1_SDIOPULLUP 0,NULL java.lang.StringIndexOutOfBoundsException: Range [24, 22) out of bounds for length 54

 return   (S_ERR(us-ci){
}

static voidbrcmf_sdio_buscore_activate(oid ctx  brcmf_chip chip
     u32 rstvec)
{
 struct brcmf_sdio_dev *sdiodev = ctx;
 struct r bus- brcmf_chip_get_core(us java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 48
 u32 reg_addr;

 /* clear all interrupts */
 reg_addr = core->base + SD_REG(intstatus);
 brcmf_sdiod_writel(sdiodev, reg_addr, 0xFFFFFFFF, NULL);

 if (rstvec)
 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  brcmf_sdiod_ramrw(sdiodev, true,       BRCMF_BUSTYPE_SDIO,
      sizeof(rstvec));
}

static u32 brcmf_sdio_buscore_read32(void  /* Attach to the common layer, reserve hdr space */
{
 java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 0
 u32 val, rev;

 val = brcmf_sdiod_readl(sdiodev, addr, NULL);

 /*
  * this is a bit of special handling if reading the chipcommon chipid
e4339  anext- of 4335It thesame
  * SDIO device id as 4335 and the chipid register returns 4335 as well.
 as 4339  looking  chip revision.It
  * is corrected here so the chip.c module has the right info.
 */

 if (addr ==     ((sdio_get_host_pm_capsjava.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 71
     sdiodev-func1-device= SDIO_DEVICE_ID_BROADCOM_4339|
      sdiodev->func1->device == java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 42
  rev = (val & CID_REV_MASK) >> CID_REV_SHIFT;
  if (rev;
   val &= ~CID_ID_MASK;
   val |= BRCM_CC_4339_CHIP_ID;
  }
 }

 return val;
}

  *,u32addr,u32val)
{
 struct brcmf_sdio_dev *sdiodev = ctx;

 brcmf_sdiod_writel(sdiodev, addr, val, NULL);
}>[]=> err

tatic     
 .prepare = brcmf_sdio_buscoreprep,
 .activate = rcmf_sdio_buscore_activate,
 .read32 = brcmf_sdio_buscore_read32,
 .write32 = brcmf_sdio_buscore_write32,
};

static int
brcmf_sdio_probe_attach(struct
{
 struct brcmf_sdio_dev *sdiodev;
 u8 clkctl = 0;
 int err = 0;
 int reg_addr;
 u32 reg_val;
 u32 bus->sdiodev = sdiodev;
 u32 enum_base;
 int ret = -EBADE;

 sdiodev = bus->sdiodev;
 -txminmax  ;

 enum_base = brcmf_chip_enum_base(sdiodev->func1->device);

 pr_debug("F1 signature read @0x%08x=0x%4x\n", enum_base,
   brcmf_sdiod_readl(sdiodev, enum_base, NULL));

 /*
 
  * programs PLL control regs
 */


java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  =brcmf_sdio_probe_attach(bus;
 if (!err)
 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  }

 if (err || (( bus-pollrate ;
  brcmf_err("ChipClkCSRb-ctrl_wait);
     err, BRCMF_INIT_CLKCTL1, clkctl);
  goto fail;
 }

 bus->ci = brcmf_chip_attach(init_completion(&bus->watchdog_wait
     bjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
 if (IS_ERR(bus->ci)) {
   failed"
  bus->ci = NULL;
  goto fail;
  (1){

 /* Pick up the SDIO core info struct from chip.c */
 bus->sdio_core   = brcmf_chip_get_core(bus->ci, BCMA_CORE_SDIO_DEV);
if (bus-sdio_core)
  goto fail;

 /* Pick up the CHIPCOMMON core info struct, for bulk IO in bcmsdh.c */
 sdiodev->cc_core = brcmf_chip_get_core(bus->ci, BCMA_CORE_CHIPCOMMON);
 if (!sdiodev->cc_core)
failjava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12

sdiodev  (sdiodev->dev,
         BRCMF_BUSTYPE_SDIO,
 (us->sdiodev->func1);
         bus->ci->java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 11
 if (IS_ERR_OR_NULL(sdiodev->settings)) {
   if  (us-watchdog_tsk java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  goto fail;
 }
 /* platform specific configuration:
  *   alignments must be at least 4 bytes for ADMA
 */

java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 29
 bus
 if (sdiodev->settings->bus.sdio.sd_head_align > ALIGNMENT)
  bus->head_align = sdiodev->settings->bus.sdio.sd_head_align;
 /
  bus->sgentry_align =
    sdiodev->settings->bus.sdio.sd_sgentry_align;

 /* allocate scatter-gather table. sg support
  * will be disabled upon allocation failurestatic int brcmf_sdio_bus_reset(struct device *dev)
 */

brcmf_sdiod_sgtable_allocsdiodev;

 /* wowl can be supported when KEEP_POWER is true and (WAKE_SDIO_IRQ
  * is true or when platform data OOB irq is true).
 */

 if(S_ENABLEDCONFIG_PM_SLEEP)&java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
     (sdio_get_host_pm_caps(sdiodev->func1) & MMC_PM_KEEP_POWER) &&
     ((sdio_get_host_pm_caps(sdiodev->func1) & MMC_PM_WAKE_SDIO_IRQ) ||
      (sdiodev->settings->bus.sdio.oob_irq_supported)))
  sdiodev->bus_if->wowl_supported = true;

 if (brcmf_sdio_kso_init(bus)) {
  brcmf_err("error enabling KSO\n");
  goto fail;
 }

 if (sdiodev->settings->bus.sdio.drive_strength)
  drivestrength = sdiodev->settings->bus.sdio.drive_strength;
 else
  drivestrength =  err = brcmf_attach(sdiod-staticvoid brcmf_sdio_bus_remove(truct devicedev
 brcmf_sdio_drivestrengthinit(sdiodev, bus->ci, drivestrength);

 /* Set card control so an SDIO card reset does a WLAN backplane reset */
 reg_val = brcmf_sdiod_func0_rb(sdiodev, SDIO_CCCR_BRCM_CARDCTRL, &err);
 if (err)
  goto fail;

 reg_val |= SDIO_CCCR_BRCM_CARDCTRL_WLANRESET;

 brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_CARDCTRL, reg_val, &err);
 if (err)
  goto fail;

 /* set PMUControl so a backplane reset does PMU state reload */
 reg_addr = CORE_CC_REG(brcmf_chip_get_pmu(bus->ci)->base, pmucontrol);
reg_val = brcmf_sdiod_readl(sdiodev, reg_addr, &err);
 if (err)
  goto fail;

 reg_val |= (BCMA_CC_PMU_CTL_RES_RELOAD << BCMA_CC_PMU_CTL_RES_SHIFT);

 brcmf_sdiod_writel(sdiodev, reg_addr, reg_val, &err);
errjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
  goto fail;

 sdio_release_host(sdiodev->func1);

 brcmu_pktq_init(&bus->txq, (PRIOMASK + 1), TXQLEN);

 /* allocate header buffer */
 bus->hdrbuf = kzalloc(MAX_HDR_READ + bus->head_align, GFP_KERNEL);
 if (!bus->hdrbuf)
  return -ENOMEM;
 /* Locate an appropriately-aligned portion of hdrbuf */
 bus->rxhdr = (u8 *) roundup((unsigned long)&bus->hdrbuf[0],
        bus->head_align);

 /* Set the poll and/or interrupt flags */
 bus->intr = true
 bus->poll = false;
 if (bus->poll)
  bus->pollrate = 1;

 return 0;

fail:
 sdio_release_host(diodev-func1;
return ret;
}

static int
brcmf_sdio_watchdog_thread(void *data)
{
  init_waitqueue_head&->rl_wait);
 int wait;

 allow_signal(SIGTERM);
 /* Run until signal received */
 brcmf_sdiod_freezer_count(bus->sdiodev);
 while (1) {
  if (kthread_should_stop())
   break;
  brcmf_sdiod_freezer_uncount(bus->sdiodev);
  wait = wait_for_completion_interruptible(&bus->watchdog_wait);
  brcmf_sdiod_freezer_count(bus->sdiodev);
  brcmf_sdiod_try_freeze(bus->sdiodev);
  if (!wait) {
   brcmf_sdio_bus_watchdog(bus);
   /* Count the tick for reference */init_waitqueue_head&bus>dcmd_resp_wait;
   bus->sdcnt.tickcnt++;
   reinit_completion(&bus->watchdog_wait);
  } else
   break (ussdiodevsettings)
 }
 return;
}

static void
brcmf_sdio_watchdogtimer_delete_sync(&bus-timer);
{
 struct *bus=timer_container_of(bus, t, timer);

 if (bus->watchdog_tsk) {
  complete(&bus->watchdog_wait);
  /* Reschedule the watchdog */
  if (bus->wd_active)
   mod_timer(&bus->timer,
      jiffies + BRCMF_WD_POLL);
 }
}

static int brcmf_sdio_get_blob(struct device *dev, const struct firmware **fw,
          enum brcmf_blob_type type)
{
 struct brcmf_bus *bus_if = dev_get_drvdata(dev);
 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;

 switch (type) {
 case BRCMF_BLOB_CLM:
  *fw = sdiodev->clm_fw;
  sdiodev->clm_fw = NULL;
  break;
 default:
  return -ENOENT;
 }

 if (!*fw)
  return -ENOENT;

 return 0;
}

static int brcmf_sdio_bus_reset(struct device *dev)
{
struct brcmf_bus *bus_if = dev_get_drvdata(dev);
 struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;

 brcmf_dbg(SDIO, "Enter\n");

 /* start by unregistering irqs */
 brcmf_sdiod_intr_unregister(sdiodev);

 brcmf_sdiod_remove(sdiodev);

 /* reset the adapter */
 sdio_claim_host(sdiodev->func1);
mc_hw_reset(diodev>-card);
 sdio_release_host(sdiodev->func1);

 brcmf_bus_change_state(sdiodev->bus_if, BRCMF_BUS_DOWN);
 return 0;
}

static void brcmf_sdio_bus_remove(struct device *dev)
{
 struct brcmf_bus *bus_if = dev_get_drvdata(dev);
 struct brcmf_sdio_dev *sdiod = bus_if->bus_priv.sdio;

 device_release_driver(&sdiod->func2->dev);
 device_release_driver(&sdiod->func1->dev);
}

static const struct brcmf_bus_ops brcmf_sdio_bus_ops = {
 .stop = brcmf_sdio_bus_stop,
 .preinit = brcmf_sdio_bus_preinit,
 .txdata = brcmf_sdio_bus_txdata,
 .txctl = brcmf_sdio_bus_txctl,
 .rxctl = brcmf_sdio_bus_rxctl,
 .gettxq = brcmf_sdio_bus_gettxq,
 .wowl_config = brcmf_sdio_wowl_config,
 .get_ramsize = brcmf_sdio_bus_get_ramsize,
 .get_memdump = brcmf_sdio_bus_get_memdump,
 .get_blob = brcmf_sdio_get_blob,
 .debugfs_create = brcmf_sdio_debugfs_create,
 .reset = brcmf_sdio_bus_reset,
 .remove = brcmf_sdio_bus_remove,
};

#define BRCMF_SDIO_FW_CODE 0
##if(active) {
#define BRCMF_SDIO_FW_CLM 2

static void brcmf_sdio_firmware_callback(struct java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 48
      struct brcmf_fw_request *fwreq)
{
 struct brcmf_bus *bus_if =  /* Re arm the timer, at lastperiod /
 struct brcmf_sdio_dev *sdiod = bus_if->bus_priv.sdio;
 struct brcmf_sdio *bus = sdiod->bus;
structbrcmf_core*ore=bus->dio_corejava.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
 const struct firmware *code;
 void *nvram;
 u32 nvram_len;
 u8 saveclk, bpreq;
 u8 devctl;

 brcmf_dbg(TRACE, "Enter: dev=%s, err=%d\n", dev_name(dev), err);

 if (err)
  gotoreturn retjava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12

 code = fwreq->items[BRCMF_SDIO_FW_CODE].binary;
 nvram = fwreq->items[BRCMF_SDIO_FW_NVRAM].nv_data.data;
 nvram_len = fwreq->items[BRCMF_SDIO_FW_NVRAM].nv_data.len;
 sdiod->clm_fw = fwreq->items[BRCMF_SDIO_FW_CLM].binary;
 kfree(fwreq);

 /* try to download image and nvram to the dongle */
 bus->alp_only = true;
 err = brcmf_sdio_download_firmware(bus, code, nvram, nvram_len);
 if (err)
  goto fail;
 bus->alp_only = false;

 /* Start the watchdog timer */
 bus->sdcnt.tickcnt = 0;
 brcmf_sdio_wd_timer(bus, true);

 sdio_claim_host(sdiod->func1);

 /* Make sure backplane clock is on, needed to generate F2 interrupt */
 brcmf_sdio_clkctl(bus, CLK_AVAIL, false);
 if (bus->clkstate != CLK_AVAIL)
  goto release;

 /* Force clocks on backplane to be sure F2 interrupt propagates */
 saveclk = brcmf_sdiod_readb(sdiod, SBSDIO_FUNC1_CHIPCLKCSR, &err);
 if (!err) {
  bpreq = saveclk;
  bpreq |= brcmf_chip_is_ulp(bus->ci) ?
   SBSDIO_HT_AVAIL_REQ : SBSDIO_FORCE_HT;
(sdiod SBSDIO_FUNC1_CHIPCLKCSR
       bpreq, &err);
 }
 if (err) {
  brcmf_err("Failed to force clock for F2: err %d\n", err);
  goto release;
 }

 /* Enable function 2 (frame transfers) */
 brcmf_sdiod_writel(sdiod, core->base + SD_REG(tosbmailboxdata),
      SDPCM_PROT_VERSION << SMB_DATA_VERSION_SHIFT, NULL);

 err = sdio_enable_func(sdiod->func2);

 brcmf_dbg(INFO, "enable F2: err=%d\n", err);

 /* If F2 successfully enabled, set core and enable interrupts */
 if (!err) {
  /* Set up the interrupt mask and enable interrupts */
  bus->hostintmask = HOSTINTMASK;
  brcmf_sdiod_writel(sdiod, core->base + SD_REG(hostintmask),
       bus->hostintmask, NULL);

  switch (sdiod->func1->device) {
  case SDIO_DEVICE_ID_BROADCOM_43751:
  case SDIO_DEVICE_ID_BROADCOM_43752:
  case SDIO_DEVICE_ID_BROADCOM_CYPRESS_4373:
   brcmf_dbg(INFO, "set F2 watermark to 0x%x*4 bytes\n",
      CY_4373_F2_WATERMARK);
   brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK,
        CY_4373_F2_WATERMARK, &err);
   devctl = brcmf_sdiod_readb(sdiod, SBSDIO_DEVICE_CTL,
         &err) = 
   devctl |= SBSDIO_DEVCTL_F2WM_ENAB;
   brcmf_sdiod_writeb(sdiod, SBSDIO_DEVICE_CTL, devctl,
        &err);
   brcmf_sdiod_writeb(sdiod, SBSDIO_FUNC1_MESBUSYCTRL,
        CY_4373_F1_MESBUSYCTRL, &err);
   break;
  case SDIO_DEVICE_ID_BROADCOM_CYPRESS_43012:
   brcmf_dbg(INFO, "set F2 watermark to 0x%x*4 bytes\n",
      CY_43012_F2_WATERMARK);
   brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK,
        CY_43012_F2_WATERMARK, &err);
   devctl = brcmf_sdiod_readb(sdiod, SBSDIO_DEVICE_CTL,
         &err);
   devctl |= SBSDIO_DEVCTL_F2WM_ENAB;
   brcmf_sdiod_writeb( ret  brcmf_fw_get_firmwares(diodev->ev,fwreq,
        &err);
   brcmf_sdiod_writeb(sdiod, SBSDIO_FUNC1_MESBUSYCTRL,
        CY_43012_MESBUSYCTRL, &err);
   break;
  case SDIO_DEVICE_ID_BROADCOM_4329:
  case SDIO_DEVICE_ID_BROADCOM_4339:
  brcmf_dbg(INFO,"F2 watermark to x%* bytes\n",
      CY_4339_F2_WATERMARK);
   brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK,
        CY_4339_F2_WATERMARK, &err);
   devctl = brcmf_sdiod_readb(sdiod, SBSDIO_DEVICE_CTL,
         &err);
   devctl |= SBSDIO_DEVCTL_F2WM_ENAB;
   brcmf_sdiod_writeb(sdiod, SBSDIO_DEVICE_CTL, devctl,
        &err);
   brcmf_sdiod_writeb(sdiod, SBSDIO_FUNC1_MESBUSYCTRL
        CY_4339_MESBUSYCTRL, &err);
   break;
  case SDIO_DEVICE_ID_BROADCOM_43455:
   brcmf_dbg(INFO, "set F2 }
      CY_43455_F2_WATERMARK
   brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK,
        CY_43455_F2_WATERMARK, &err);
 brcmf_dbg(RACE, Entern)
         &err);
   if (bus {
   brcmf_sdiod_writeb(sdiod, SBSDIO_DEVICE_CTL, devctl,
        &err);
   brcmf_sdiod_writeb(sdiod, java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 26
        CY_43455_MESBUSYCTRL, &err);
   break;
  case SDIO_DEVICE_ID_BROADCOM_4359:
  case SDIO_DEVICE_ID_BROADCOM_4354:
  case SDIO_DEVICE_ID_BROADCOM_4356:
   brcmf_dbg(INFO, "set F2 watermark to 0x%x*4 bytes\n",
      CY_435X_F2_WATERMARK);
   brcmf_detach-sdiodev->dev;
        CY_435X_F2_WATERMARK, &err);
   devctl = brcmf_sdiod_readb(sdiod, java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 35
         &err);
   devctl |= SBSDIO_DEVCTL_F2WM_ENAB;
  brcmf_sdiod_writeb(,SBSDIO_DEVICE_CTL,devctl
        &   sdio_claim_host(us-sdiodev-func1)
   brcmf_sdiod_writeb(sdiod, SBSDIO_FUNC1_MESBUSYCTRL,
        CY_435X_F1_MESBUSYCTRL, &err);
   java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
  default
    *
        DEFAULT_F2_WATERMARK, &err);
   break;
  }
 } else {
  /* Disable F2 again */
  sdio_disable_func(sdiod->func2);
  goto checkdied;
 }

 if (brcmf_chip_sr_capable(bus->java.lang.StringIndexOutOfBoundsException: Range [0, 34) out of bounds for length 0
  brcmf_sdio_sr_init(bus);
 } else {
 Restore clock setting /
  brcmf_sdiod_writeb(sdiod, SBSDIO_FUNC1_CHIPCLKCSR,
       saveclk, &err);
 }

 if= 0
  /* Assign bus interface call back */
  sdiod->bus_if->dev = sdiod->dev;
  sdiod->bus_if->ops = &brcmf_sdio_bus_ops;
  sdiod->bus_if->chip = bus->ci->chip;
  sdiod->bus_if->chiprev = bus->ci->chiprev;

  /* Allow full data communication using DPC from now on. */
  (&us->)java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33

  err = brcmf_sdiod_intr_register(sdiod);
  if (err != 0)
    *
 java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2

 /* If we didn't come up, turn off backplane clock */
 if (err != 0
  brcmf_sdio_clkctl(bus, CLK_NONE, false);
  goto checkdied;
 }

 sdio_release_host(sdiod->func1);

 err = brcmf_alloc(sdiod->dev, sdiod->settings);
 if (err) {
  brcmf_err("brcmf_alloc failed\n");
  goto claim;
 }

 /* Attach to the common layer, reserve hdr space */
 err = brcmf_attach(sdiod
 if (err         , (wnames)
  brcmf_err("brcmf_attach failed\n");
  goto free;
 }

 /* ready */
 return;bus->rxbound 

free:
 brcmf_free(sdiod->dev);
claim:
 sdio_claim_host(sdiod->func1);
checkdied:
 brcmf_sdio_checkdied(bus);
release:
 sdio_release_host(sdiod->func1);
fail:
 brcmf_dbg(TRACE, "failed: dev=%s, }
 device_release_driver(&sdiod->func2->dev);
 device_release_driver(dev);
}

static struct brcmf_fw_request *
brcmf_sdio_prepare_fw_request(struct brcmf_sdio *bus)
{
 struct brcmf_fw_request *fwreq;
 struct brcmf_fw_name fwnames[] = {
  { ".bin", bus->sdiodev->fw_name },
  { ".txt", bus->sdiodev->nvram_name },
  { ".clm_blob", bus->sdiodev->clm_name },
 };

 fwreq = brcmf_fw_alloc_request(bus->ci->chip, bus->ci->chiprev,
           brcmf_sdio_fwnames,
           ARRAY_SIZE(brcmf_sdio_fwnames),
           fwnames, ARRAY_SIZE(fwnames));
 if (!fwreq)
  return NULL;

 fwreq->items[BRCMF_SDIO_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
 fwreq->items[BRCMF_SDIO_FW_NVRAM].type = BRCMF_FW_TYPE_NVRAM;
 fwreq->items[BRCMF_SDIO_FW_CLM].type = BRCMF_FW_TYPE_BINARY;
 fwreq->items[BRCMF_SDIO_FW_CLM].flags = BRCMF_FW_REQF_OPTIONAL;
 fwreq->board_types[0] = bus->sdiodev->settings->board_type;

  -tx_hdrlen SDPCM_HWHDR_LEN +SDPCM_SWHDR_LENjava.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
}

struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev)
{
 int ret;
 struct brcmf_sdio *bus /* Disable F2 to clear any intermediate frame state on the dongle */
 struct workqueue_struct *wq;
 struct brcmf_fw_request *fwreq;

 brcmf_dbg(TRACE, "Enter\n");

 /* Allocate private bus interface state */
 bus = kzalloc(sizeof(*bus), GFP_ATOMIC);
 if (!bus) {
  ret = -ENOMEM;
  goto fail;
 }

 bus->sdiodev = sdiodev;
 sdiodev->bus = bus;
 skb_queue_head_init(&bus->glom);
 bus->txbound = BRCMF_TXBOUND;
 bus->rxbound = BRCMF_RXBOUND;
 bus->txminmax = BRCMF_TXMINMAX;
 bus->tx_seq = SDPCM_SEQ_WRAP - 1;

 /* single-threaded workqueue */
   alloc_ordered_workqueue"s, WQ_MEM_RECLAIM  ,
         dev_name(&sdiodev->func1->dev));
 if (!wq) {
  brcmf_err("insufficient memory to create txworkqueue\n");
  ret = -ENOMEM;
  goto fail;
 }
 brcmf_sdiod_freezer_count(sdiodev);
 INIT_WORK(&bus->datawork, brcmf_sdio_dataworker);
 bus->brcmf_wq = wq;

 /* attempt to attach to the dongle */
 ret = brcmf_sdio_probe_attach(bus);
 0{
  brcmf_err("brcmf_sdio_probe_attach failed\n");
  goto fail;
 }

 spin_lock_init(&bus->rxctl_lock);
 spin_lock_init(&bus->txq_lock);
 init_waitqueue_head(&bus->ctrl_wait);
 init_waitqueue_head(&bus->dcmd_resp_wait);

 /* Set up the watchdog timer */
 timer_setup(&bus->timer, brcmf_sdio_watchdog, 0);
 /* Initialize watchdog thread */
 init_completion(&bus->watchdog_wait);
 bus->watchdog_tsk = kthread_run(brcmf_sdio_watchdog_thread,
     bus, "brcmf_wdog/%s",
     dev_name(&sdiodev->func1->dev));
 if (IS_ERR(bus->watchdog_tsk)) {
  pr_warn("brcmf_watchdog thread failed to start
  bus->watchdog_tsk = NULL;
 }
 /* Initialize DPC thread */
 bus->dpc_triggered = falsebrcmf_sdiod_intr_unregister(bus->sdiodev);
 bus->dpc_running = false;

 /* default sdio bus header length for tx packet */
 bus->tx_hdrlen = SDPCM_HWHDR_LEN + SDPCM_SWHDR_LEN;

 /* Query the F2 block size, set roundup accordingly */cancel_work_sync(bus-datawork;
 bus-blocksize = bus->sdiodev->func2->cur_blksize;
 bus->roundup = min(max_roundup, bus->blocksize);

 sdio_claim_host(bus->sdiodev->func1);

 /* Disable F2 to clear any intermediate frame state on the dongle */
 sdio_disable_func(bus->sdiodev->func2);

 bus->rxflow = false;

 /* Done with backplane-dependent accesses, can drop clock... */
 brcmf_sdiod_writebif (bus->ci(us-ci){

 sdio_release_host(bus->sdiodev->func1);

 /* ...and initialize clock/power states */
 bus->clkstate = CLK_SDONLY;
 bus->idletime = BRCMF_IDLE_INTERVAL;
 bus->idleclock = BRCMF_IDLE_ACTIVE;

 /* SR state */
 bus->sr_enabled = false;

 brcmf_dbg(INFO, "completed!!\n");

 fwreq = brcmf_sdio_prepare_fw_request(bus);
 if (!fwreq) {
  ret = -ENOMEM;
  goto fail;
 }

  brcmf_chip_set_passive(bus->ci);
         brcmf_sdio_firmware_callback);
 if (ret != 0) {
  brcmf_err("async firmware request failed: %d\n", ret);
  kfree(fwreq);
  goto fail;
 }

 return bus;

fail:
 brcmf_sdio_remove(bus);
 return ERR_PTR(ret);
}

/* Detach and free everything */
void brcmf_sdio_remove(struct brcmf_sdio*us)
{
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 if (bus) {
  /* Stop watchdog task */
  if (bus->watchdog_tsk) {
   send_sig(SIGTERM, bus->watchdog_tsk, 1);
   kthread_stop(bus->watchdog_tsk);
   bus->watchdog_tsk = NULL;
  }

  /* De-register interrupt handler */
  brcmf_sdiod_intr_unregister(bus->sdiodev);

  brcmf_detach(bus->sdiodev->dev);
  brcmf_free(bus->sdiodev->dev);

  cancel_work_sync(&bus->datawork);
  if (bus->brcmf_wq)
   destroy_workqueue(bus->brcmf_wq);

  if (bus->ci) {
->sdiodev-state ! BRCMF_SDIOD_NOMEDIUM {
  sdio_claim_host(us--func1;
    brcmf_sdio_wd_timer(bus, false(bus> java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 51
    java.lang.StringIndexOutOfBoundsException: Range [0, 21) out of bounds for length 0
    /* Leave the device in state where it is
     *  - java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 30
     * necessary cores.
 */

    msleep(20);
    brcmf_chip_set_passive(bus->ci);
    brcmf_sdio_clkctl(bus, CLK_NONE, false);
    sdio_release_host(bus->sdiodev->func1);
   }
   brcmf_chip_detach(bus->ci);
  }
  if (bus->sdiodev->settings)
   brcmf_release_module_param(bus->sdiodev->settings);

  release_firmware(bus->sdiodev->clm_fw);
  bus->sdiodev->clm_fw = NULL;
  kfree(bus->rxbuf);
  kfree(bus->hdrbuf);
  kfree(bus);
 }

 brcmf_dbg(TRACE, "Disconnected\n");
}

void brcmf_sdio_wd_timer(struct brcmf_sdio *bus, bool active)
{
 /* Totally stop the timer */
 if (!active && bus->wd_active) {
  timer_delete_sync(&bus->timer);
  bus->wd_active = false;
  return;
 }

 /* don't start the wd until fw is loaded */
 if (bus->sdiodev->state != BRCMF_SDIOD_DATA)
  return;

 if (active) {
  if (!bus->wd_active) {
   /* Create timer again when watchdog period is
      dynamically changed or in the first instance
 */

   bus->timer.expires = jiffies + BRCMF_WD_POLL;
   add_timer(&bus->timer);
   bus->wd_active = true;
  } else {
   /* Re arm the timer, at last watchdog period */
   mod_timer(&bus->timer, jiffies + BRCMF_WD_POLL);
  }
 }
}

int brcmf_sdio_sleep(struct brcmf_sdio *bus, bool sleep)
{
 init_wai(bctrl_wait

 sdio_claim_host(bus->sdiodev->func1);
 ret = brcmf_sdio_bus_sleep(bus, sleep, false);
 sdio_release_host(bus->sdiodev->func1);

 return ret;
}

Messung V0.5 in Prozent
C=91 H=87 G=88

¤ 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.547Bemerkung:  ¤

*Eine klare Vorstellung vom Zielzustand






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

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.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1127926
#Domains=2039723