drivers/net/wireless/microchip/wilc1000/wlan_cfg.c

Source file repositories/reference/linux-study-clean/drivers/net/wireless/microchip/wilc1000/wlan_cfg.c

File Facts

System
Linux kernel
Corpus path
drivers/net/wireless/microchip/wilc1000/wlan_cfg.c
Extension
.c
Size
9043 bytes
Lines
434
Domain
Driver Families
Bucket
drivers/net
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

switch (FIELD_GET(WILC_WID_TYPE, wid)) {
		case WID_CHAR:
			len = 3;
			if (len + 2  > size)
				return;

			while (cfg->b[i].id != WID_NIL && cfg->b[i].id != wid)
				i++;

			if (cfg->b[i].id == wid)
				cfg->b[i].val = info[4];

			break;

		case WID_SHORT:
			len = 4;
			if (len + 2  > size)
				return;

			while (cfg->hw[i].id != WID_NIL && cfg->hw[i].id != wid)
				i++;

			if (cfg->hw[i].id == wid)
				cfg->hw[i].val = get_unaligned_le16(&info[4]);

			break;

		case WID_INT:
			len = 6;
			if (len + 2  > size)
				return;

			while (cfg->w[i].id != WID_NIL && cfg->w[i].id != wid)
				i++;

			if (cfg->w[i].id == wid)
				cfg->w[i].val = get_unaligned_le32(&info[4]);

			break;

		case WID_STR:
			len = 2 + get_unaligned_le16(&info[2]);

			while (cfg->s[i].id != WID_NIL && cfg->s[i].id != wid)
				i++;

			if (cfg->s[i].id == wid) {
				if (len > cfg->s[i].len || (len + 2  > size))
					return;

				memcpy(cfg->s[i].str, &info[2],
				       len);
			}

			break;

		default:
			break;
		}
		size -= (2 + len);
		info += (2 + len);
	}
}

static void wilc_wlan_parse_info_frame(struct wilc *wl, u8 *info)
{
	u32 wid, len;

	wid = get_unaligned_le16(info);

	len = info[2];

	if (len == 1 && wid == WID_STATUS) {
		int i = 0;

		while (wl->cfg.b[i].id != WID_NIL &&
		       wl->cfg.b[i].id != wid)
			i++;

		if (wl->cfg.b[i].id == wid)
			wl->cfg.b[i].val = info[3];
	}
}

/********************************************
 *
 *      Configuration Exported Functions
 *
 ********************************************/

Annotation

Implementation Notes