/* * Description: * Write to TX FIFO * Align write size block size, * and make sure data could be written in one command. * * Parameters: * pintfhdl a pointer of intf_hdl * addr port ID * cnt size to write * wmem data pointer to write * * Return: * _SUCCESS(1) Success * _FAIL(0) Fail */ static u32 sdio_write_port( struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *mem) { PADAPTER padapter; PSDIO_DATA psdio; s32 err; struct xmit_buf *xmitbuf = (struct xmit_buf *)mem; padapter = pintfhdl->padapter; psdio = &adapter_to_dvobj(padapter)->intf_data; if (padapter->hw_init_completed == _FALSE) { DBG_871X("%s [addr=0x%x cnt=%d] padapter->hw_init_completed == _FALSE\n",__func__,addr,cnt); return _FAIL; } cnt = _RND4(cnt); HalSdioGetCmdAddr8723BSdio(padapter, addr, cnt >> 2, &addr); if (cnt > psdio->block_transfer_len) cnt = _RND(cnt, psdio->block_transfer_len); // cnt = sdio_align_size(cnt); err = sd_write(pintfhdl, addr, cnt, xmitbuf->pdata); rtw_sctx_done_err(&xmitbuf->sctx, err ? RTW_SCTX_DONE_WRITE_PORT_ERR : RTW_SCTX_DONE_SUCCESS); if (err) return _FAIL; return _SUCCESS; }
/* * Description: * Read from RX FIFO * Round read size to block size, * and make sure data transfer will be done in one command. * * Parameters: * pintfhdl a pointer of intf_hdl * addr port ID * cnt size to read * rmem address to put data * * Return: * _SUCCESS(1) Success * _FAIL(0) Fail */ static u32 sdio_read_port( struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *mem) { PADAPTER padapter = pintfhdl->padapter; PSDIO_DATA psdio= &adapter_to_dvobj(padapter)->intf_data; HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter); s32 err; HalSdioGetCmdAddr8723ASdio(padapter, addr, pHalData->SdioRxFIFOCnt++, &addr); cnt = _RND4(cnt); if (cnt > psdio->block_transfer_len) cnt = _RND(cnt, psdio->block_transfer_len); // cnt = sdio_align_size(cnt); err = _sd_read(pintfhdl, addr, cnt, mem); //err = sd_read(pintfhdl, addr, cnt, mem); if (err) return _FAIL; return _SUCCESS; }
/* * Description: * Write to TX FIFO * Align write size block size, * and make sure data could be written in one command. * * Parameters: * pintfhdl a pointer of intf_hdl * addr port ID * cnt size to write * wmem data pointer to write * * Return: * _SUCCESS(1) Success * _FAIL(0) Fail */ static u32 sdio_write_port( struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *mem) { PADAPTER padapter; PSDIO_DATA psdio; s32 err; padapter = pintfhdl->padapter; psdio = &padapter->dvobjpriv.intf_data; cnt = _RND4(cnt); HalSdioGetCmdAddr8723ASdio(padapter, addr, cnt >> 2, &addr); if (cnt > psdio->block_transfer_len) cnt = _RND(cnt, psdio->block_transfer_len); // cnt = sdio_align_size(cnt); err = sd_write(psdio, addr, cnt, mem); if (err) return _FAIL; return _SUCCESS; }
/* * Description: * Write to TX FIFO * Align write size block size, * and make sure data could be written in one command. * * Parameters: * pintfhdl a pointer of intf_hdl * addr port ID * cnt size to write * wmem data pointer to write * * Return: * _SUCCESS(1) Success * _FAIL(0) Fail */ u32 chris_sdio_write_port( struct sdio_func *func, u32 addr, u32 cnt, u8 *mem) { s32 err; struct sdio_func *pfunc = func; int i; // struct xmit_buf *xmitbuf = (struct xmit_buf *)mem; printk("%s(): addr is %d\n", __func__, addr); for(i=0;i<(cnt);i++) printk("mem[%d] = 0x%02x\n", i, *(mem+i)); err = chris_sd_write(pfunc, addr, cnt, mem); cnt = _RND4(cnt); printk("%s(): cnt is %d\n", __func__, cnt); chris_HalSdioGetCmdAddr8195ASdio(pfunc, addr, cnt >> 2, &addr); printk("%s(): Get Cmd Addr is 0x%x\n", __func__, addr); if (cnt > pfunc->cur_blksize) cnt = _RND(cnt, pfunc->cur_blksize); // cnt = sdio_align_size(cnt); err = chris_sd_write(pfunc, addr, cnt, mem); // rtw_sctx_done_err(&xmitbuf->sctx, // err ? RTW_SCTX_DONE_WRITE_PORT_ERR : RTW_SCTX_DONE_SUCCESS); if (err) { printk("%s, error=%d\n", __func__, err); return _FAIL; } return _SUCCESS; }