Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Path: blob/next/external/cache/sources/wl/include/bcmsdstd.h
Views: 3959
/*1* 'Standard' SDIO HOST CONTROLLER driver2*3* $ Copyright Open Broadcom Corporation $4*5* $Id: bcmsdstd.h 324979 2012-03-30 23:47:19Z $6*/7#ifndef _BCM_SD_STD_H8#define _BCM_SD_STD_H910/* global msglevel for debug messages - bitvals come from sdiovar.h */11#define sd_err(x) do { if (sd_msglevel & SDH_ERROR_VAL) printf x; } while (0)12#define sd_trace(x)13#define sd_info(x)14#define sd_debug(x)15#define sd_data(x)16#define sd_ctrl(x)17#define sd_dma(x)1819#define sd_sync_dma(sd, read, nbytes)20#define sd_init_dma(sd)21#define sd_ack_intr(sd)22#define sd_wakeup(sd);23/* Allocate/init/free per-OS private data */24extern int sdstd_osinit(sdioh_info_t *sd);25extern void sdstd_osfree(sdioh_info_t *sd);2627#define sd_log(x)2829#define SDIOH_ASSERT(exp) \30do { if (!(exp)) \31printf("!!!ASSERT fail: file %s lines %d", __FILE__, __LINE__); \32} while (0)3334#define BLOCK_SIZE_4318 6435#define BLOCK_SIZE_4328 5123637/* internal return code */38#define SUCCESS 039#define ERROR 14041/* private bus modes */42#define SDIOH_MODE_SPI 043#define SDIOH_MODE_SD1 144#define SDIOH_MODE_SD4 24546#define MAX_SLOTS 6 /* For PCI: Only 6 BAR entries => 6 slots */47#define SDIOH_REG_WINSZ 0x100 /* Number of registers in Standard Host Controller */4849#define SDIOH_TYPE_ARASAN_HDK 150#define SDIOH_TYPE_BCM27XX 251#define SDIOH_TYPE_TI_PCIXX21 4 /* TI PCIxx21 Standard Host Controller */52#define SDIOH_TYPE_RICOH_R5C822 5 /* Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter */53#define SDIOH_TYPE_JMICRON 6 /* JMicron Standard SDIO Host Controller */5455/* For linux, allow yielding for dongle */56#define BCMSDYIELD5758/* Expected card status value for CMD7 */59#define SDIOH_CMD7_EXP_STATUS 0x00001E006061#define RETRIES_LARGE 10000062#define sdstd_os_yield(sd) do {} while (0)63#define RETRIES_SMALL 100646566#define USE_BLOCKMODE 0x2 /* Block mode can be single block or multi */67#define USE_MULTIBLOCK 0x46869#define USE_FIFO 0x8 /* Fifo vs non-fifo */7071#define CLIENT_INTR 0x100 /* Get rid of this! */7273#define HC_INTR_RETUNING 0x1000747576struct sdioh_info {77uint cfg_bar; /* pci cfg address for bar */78uint32 caps; /* cached value of capabilities reg */79uint32 curr_caps; /* max current capabilities reg */8081osl_t *osh; /* osh handler */82volatile char *mem_space; /* pci device memory va */83uint lockcount; /* nest count of sdstd_lock() calls */84bool client_intr_enabled; /* interrupt connnected flag */85bool intr_handler_valid; /* client driver interrupt handler valid */86sdioh_cb_fn_t intr_handler; /* registered interrupt handler */87void *intr_handler_arg; /* argument to call interrupt handler */88bool initialized; /* card initialized */89uint target_dev; /* Target device ID */90uint16 intmask; /* Current active interrupts */91void *sdos_info; /* Pointer to per-OS private data */9293uint32 controller_type; /* Host controller type */94uint8 version; /* Host Controller Spec Compliance Version */95uint irq; /* Client irq */96int intrcount; /* Client interrupts */97int local_intrcount; /* Controller interrupts */98bool host_init_done; /* Controller initted */99bool card_init_done; /* Client SDIO interface initted */100bool polled_mode; /* polling for command completion */101102bool sd_blockmode; /* sd_blockmode == FALSE => 64 Byte Cmd 53s. */103/* Must be on for sd_multiblock to be effective */104bool use_client_ints; /* If this is false, make sure to restore */105/* polling hack in wl_linux.c:wl_timer() */106int adapter_slot; /* Maybe dealing with multiple slots/controllers */107int sd_mode; /* SD1/SD4/SPI */108int client_block_size[SDIOD_MAX_IOFUNCS]; /* Blocksize */109uint32 data_xfer_count; /* Current transfer */110uint16 card_rca; /* Current Address */111int8 sd_dma_mode; /* DMA Mode (PIO, SDMA, ... ADMA2) on CMD53 */112uint8 num_funcs; /* Supported funcs on client */113uint32 com_cis_ptr;114uint32 func_cis_ptr[SDIOD_MAX_FUNCS];115void *dma_buf; /* DMA Buffer virtual address */116ulong dma_phys; /* DMA Buffer physical address */117void *adma2_dscr_buf; /* ADMA2 Descriptor Buffer virtual address */118ulong adma2_dscr_phys; /* ADMA2 Descriptor Buffer physical address */119120/* adjustments needed to make the dma align properly */121void *dma_start_buf;122ulong dma_start_phys;123uint alloced_dma_size;124void *adma2_dscr_start_buf;125ulong adma2_dscr_start_phys;126uint alloced_adma2_dscr_size;127128int r_cnt; /* rx count */129int t_cnt; /* tx_count */130bool got_hcint; /* local interrupt flag */131uint16 last_intrstatus; /* to cache intrstatus */132int host_UHSISupported; /* whether UHSI is supported for HC. */133int card_UHSI_voltage_Supported; /* whether UHSI is supported for134* Card in terms of Voltage [1.8 or 3.3].135*/136int global_UHSI_Supp; /* type of UHSI support in both host and card.137* HOST_SDR_UNSUPP: capabilities not supported/matched138* HOST_SDR_12_25: SDR12 and SDR25 supported139* HOST_SDR_50_104_DDR: one of SDR50/SDR104 or DDR50 supptd140*/141volatile int sd3_dat_state; /* data transfer state used for retuning check */142volatile int sd3_tun_state; /* tuning state used for retuning check */143bool sd3_tuning_reqd; /* tuning requirement parameter */144uint32 caps3; /* cached value of 32 MSbits capabilities reg (SDIO 3.0) */145};146147#define DMA_MODE_NONE 0148#define DMA_MODE_SDMA 1149#define DMA_MODE_ADMA1 2150#define DMA_MODE_ADMA2 3151#define DMA_MODE_ADMA2_64 4152#define DMA_MODE_AUTO -1153154#define USE_DMA(sd) ((bool)((sd->sd_dma_mode > 0) ? TRUE : FALSE))155156/* States for Tuning and corr data */157#define TUNING_IDLE 0158#define TUNING_START 1159#define TUNING_START_AFTER_DAT 2160#define TUNING_ONGOING 3161162#define DATA_TRANSFER_IDLE 0163#define DATA_TRANSFER_ONGOING 1164165#define CHECK_TUNING_PRE_DATA 1166#define CHECK_TUNING_POST_DATA 2167168/************************************************************169* Internal interfaces: per-port references into bcmsdstd.c170*/171172/* Global message bits */173extern uint sd_msglevel;174175/* OS-independent interrupt handler */176extern bool check_client_intr(sdioh_info_t *sd);177178/* Core interrupt enable/disable of device interrupts */179extern void sdstd_devintr_on(sdioh_info_t *sd);180extern void sdstd_devintr_off(sdioh_info_t *sd);181182/* Enable/disable interrupts for local controller events */183extern void sdstd_intrs_on(sdioh_info_t *sd, uint16 norm, uint16 err);184extern void sdstd_intrs_off(sdioh_info_t *sd, uint16 norm, uint16 err);185186/* Wait for specified interrupt and error bits to be set */187extern void sdstd_spinbits(sdioh_info_t *sd, uint16 norm, uint16 err);188189190/**************************************************************191* Internal interfaces: bcmsdstd.c references to per-port code192*/193194/* Register mapping routines */195extern uint32 *sdstd_reg_map(osl_t *osh, int32 addr, int size);196extern void sdstd_reg_unmap(osl_t *osh, int32 addr, int size);197198/* Interrupt (de)registration routines */199extern int sdstd_register_irq(sdioh_info_t *sd, uint irq);200extern void sdstd_free_irq(uint irq, sdioh_info_t *sd);201202/* OS-specific interrupt wrappers (atomic interrupt enable/disable) */203extern void sdstd_lock(sdioh_info_t *sd);204extern void sdstd_unlock(sdioh_info_t *sd);205extern void sdstd_waitlockfree(sdioh_info_t *sd);206207/* OS-specific wait-for-interrupt-or-status */208extern int sdstd_waitbits(sdioh_info_t *sd, uint16 norm, uint16 err, bool yield, uint16 *bits);209210/* used by bcmsdstd_linux [implemented in sdstd] */211extern void sdstd_3_enable_retuning_int(sdioh_info_t *sd);212extern void sdstd_3_disable_retuning_int(sdioh_info_t *sd);213extern bool sdstd_3_is_retuning_int_set(sdioh_info_t *sd);214extern void sdstd_3_check_and_do_tuning(sdioh_info_t *sd, int tuning_param);215extern bool sdstd_3_check_and_set_retuning(sdioh_info_t *sd);216extern int sdstd_3_get_tune_state(sdioh_info_t *sd);217extern int sdstd_3_get_data_state(sdioh_info_t *sd);218extern void sdstd_3_set_tune_state(sdioh_info_t *sd, int state);219extern void sdstd_3_set_data_state(sdioh_info_t *sd, int state);220extern uint8 sdstd_3_get_tuning_exp(sdioh_info_t *sd);221extern uint32 sdstd_3_get_uhsi_clkmode(sdioh_info_t *sd);222extern int sdstd_3_clk_tuning(sdioh_info_t *sd, uint32 sd3ClkMode);223224/* used by sdstd [implemented in bcmsdstd_linux/ndis] */225extern void sdstd_3_start_tuning(sdioh_info_t *sd);226extern void sdstd_3_osinit_tuning(sdioh_info_t *sd);227extern void sdstd_3_osclean_tuning(sdioh_info_t *sd);228229#endif /* _BCM_SD_STD_H */230231232