drivers/staging/rtl8723bs/os_dep/sdio_ops_linux.c

Source file repositories/reference/linux-study-clean/drivers/staging/rtl8723bs/os_dep/sdio_ops_linux.c

File Facts

System
Linux kernel
Corpus path
drivers/staging/rtl8723bs/os_dep/sdio_ops_linux.c
Extension
.c
Size
10062 bytes
Lines
496
Domain
Driver Families
Bucket
drivers/staging
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

if (*err == 0) {
				rtw_reset_continual_io_error(psdiodev);
				break;
			}

			if ((-ESHUTDOWN == *err) || (-ENODEV == *err))
				padapter->bSurpriseRemoved = true;

			if (rtw_inc_and_chk_continual_io_error(psdiodev) == true) {
				padapter->bSurpriseRemoved = true;
				break;
			}
		}
	}
	return  v;
}

void sd_write8(struct intf_hdl *pintfhdl, u32 addr, u8 v, s32 *err)
{
	struct adapter *padapter;
	struct dvobj_priv *psdiodev;
	struct sdio_data *psdio;
	struct sdio_func *func;
	bool claim_needed;

	padapter = pintfhdl->padapter;
	psdiodev = pintfhdl->pintf_dev;
	psdio = &psdiodev->intf_data;

	if (padapter->bSurpriseRemoved)
		return;

	func = psdio->func;
	claim_needed = rtw_sdio_claim_host_needed(func);

	if (claim_needed)
		sdio_claim_host(func);
	sdio_writeb(func, v, addr, err);
	if (claim_needed)
		sdio_release_host(func);
}

void sd_write32(struct intf_hdl *pintfhdl, u32 addr, u32 v, s32 *err)
{
	struct adapter *padapter;
	struct dvobj_priv *psdiodev;
	struct sdio_data *psdio;
	struct sdio_func *func;
	bool claim_needed;

	padapter = pintfhdl->padapter;
	psdiodev = pintfhdl->pintf_dev;
	psdio = &psdiodev->intf_data;

	if (padapter->bSurpriseRemoved)
		return;

	func = psdio->func;
	claim_needed = rtw_sdio_claim_host_needed(func);

	if (claim_needed)
		sdio_claim_host(func);
	sdio_writel(func, v, addr, err);
	if (claim_needed)
		sdio_release_host(func);

	if (err && *err) {
		int i;

		*err = 0;
		for (i = 0; i < SD_IO_TRY_CNT; i++) {
			if (claim_needed)
				sdio_claim_host(func);
			sdio_writel(func, v, addr, err);
			if (claim_needed)
				sdio_release_host(func);
			if (*err == 0) {
				rtw_reset_continual_io_error(psdiodev);
				break;
			}

			if ((-ESHUTDOWN == *err) || (-ENODEV == *err))
				padapter->bSurpriseRemoved = true;

			if (rtw_inc_and_chk_continual_io_error(psdiodev) == true) {
				padapter->bSurpriseRemoved = true;
				break;
			}
		}
	}

Annotation

Implementation Notes