Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 135e4c61 authored by Franky Lin's avatar Franky Lin Committed by John W. Linville
Browse files

brcmfmac: add support for bus specific data command



brcmfmac need to support data command setting for dongle's bus
core. A list must be placed at brcmf_bus structure before calling
brcmf_bus_start in order to be sent by brcmf_c_preinit_dcmds.

Reviewed-by: default avatarArend van Spriel <arend@broadcom.com>
Signed-off-by: default avatarFranky Lin <frankyl@broadcom.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent d2bb2b9e
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -36,6 +36,13 @@ struct dngl_stats {
	unsigned long multicast;	/* multicast packets received */
};

struct brcmf_bus_dcmd {
	char *name;
	char *param;
	int param_len;
	struct list_head list;
};

/* interface structure between common and bus layer */
struct brcmf_bus {
	u8 type;		/* bus type */
@@ -50,6 +57,7 @@ struct brcmf_bus {
	unsigned long tx_realloc;	/* Tx packets realloced for headroom */
	struct dngl_stats dstats;	/* Stats for dongle-based data */
	u8 align;		/* bus alignment requirement */
	struct list_head dcmd_list;

	/* interface functions pointers */
	/* Stop bus module: clear pending frames, disable data flow */
+16 −0
Original line number Diff line number Diff line
@@ -807,6 +807,8 @@ int brcmf_c_preinit_dcmds(struct brcmf_pub *drvr)
	int scan_assoc_time = 40;
	int scan_unassoc_time = 40;
	int i;
	struct brcmf_bus_dcmd *cmdlst;
	struct list_head *cur, *q;

	mutex_lock(&drvr->proto_block);

@@ -874,6 +876,20 @@ int brcmf_c_preinit_dcmds(struct brcmf_pub *drvr)
						 0, true);
	}

	/* set bus specific command if there is any */
	list_for_each_safe(cur, q, &drvr->bus_if->dcmd_list) {
		cmdlst = list_entry(cur, struct brcmf_bus_dcmd, list);
		if (cmdlst->name && cmdlst->param && cmdlst->param_len) {
			brcmf_c_mkiovar(cmdlst->name, cmdlst->param,
					cmdlst->param_len, iovbuf,
					sizeof(iovbuf));
			brcmf_proto_cdc_set_dcmd(drvr, 0, BRCMF_C_SET_VAR,
						 iovbuf, sizeof(iovbuf));
		}
		list_del(cur);
		kfree(cmdlst);
	}

	mutex_unlock(&drvr->proto_block);

	return 0;
+2 −0
Original line number Diff line number Diff line
@@ -1020,6 +1020,8 @@ int brcmf_attach(uint bus_hdrlen, struct device *dev)
	INIT_WORK(&drvr->setmacaddr_work, _brcmf_set_mac_address);
	INIT_WORK(&drvr->multicast_work, _brcmf_set_multicast_list);

	INIT_LIST_HEAD(&drvr->bus_if->dcmd_list);

	return ret;

fail: