Ejemplo n.º 1
0
/*
 * 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;
}
Ejemplo n.º 2
0
/*
 * 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;
}
Ejemplo n.º 3
0
/*
 * 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;
}
Ejemplo n.º 4
0
/*
 * 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;
}