drivers/net/wireless/marvell/mwifiex/sta_cmd.c

Source file repositories/reference/linux-study-clean/drivers/net/wireless/marvell/mwifiex/sta_cmd.c

File Facts

System
Linux kernel
Corpus path
drivers/net/wireless/marvell/mwifiex/sta_cmd.c
Extension
.c
Size
78221 bytes
Lines
2531
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

if (txp->mode) {
			pg_tlv = (struct mwifiex_types_power_group
				  *) ((unsigned long) txp +
				     sizeof(struct host_cmd_ds_txpwr_cfg));
			memmove(cmd_txp_cfg, txp,
				sizeof(struct host_cmd_ds_txpwr_cfg) +
				sizeof(struct mwifiex_types_power_group) +
				le16_to_cpu(pg_tlv->length));

			pg_tlv = (struct mwifiex_types_power_group *) ((u8 *)
				  cmd_txp_cfg +
				  sizeof(struct host_cmd_ds_txpwr_cfg));
			cmd->size = cpu_to_le16(le16_to_cpu(cmd->size) +
				  sizeof(struct mwifiex_types_power_group) +
				  le16_to_cpu(pg_tlv->length));
		} else {
			memmove(cmd_txp_cfg, txp, sizeof(*txp));
		}
		cmd_txp_cfg->action = cpu_to_le16(cmd_action);
		break;
	case HostCmd_ACT_GEN_GET:
		cmd_txp_cfg->action = cpu_to_le16(cmd_action);
		break;
	}

	return 0;
}

/*
 * This function prepares command to get RF Tx power.
 */
static int mwifiex_cmd_rf_tx_power(struct mwifiex_private *priv,
				   struct host_cmd_ds_command *cmd,
				   u16 cmd_action, void *data_buf)
{
	struct host_cmd_ds_rf_tx_pwr *txp = &cmd->params.txp;

	cmd->size = cpu_to_le16(sizeof(struct host_cmd_ds_rf_tx_pwr)
				+ S_DS_GEN);
	cmd->command = cpu_to_le16(HostCmd_CMD_RF_TX_PWR);
	txp->action = cpu_to_le16(cmd_action);

	return 0;
}

/*
 * This function prepares command to set rf antenna.
 */
static int mwifiex_cmd_rf_antenna(struct mwifiex_private *priv,
				  struct host_cmd_ds_command *cmd,
				  u16 cmd_action,
				  struct mwifiex_ds_ant_cfg *ant_cfg)
{
	struct host_cmd_ds_rf_ant_mimo *ant_mimo = &cmd->params.ant_mimo;
	struct host_cmd_ds_rf_ant_siso *ant_siso = &cmd->params.ant_siso;

	cmd->command = cpu_to_le16(HostCmd_CMD_RF_ANTENNA);

	switch (cmd_action) {
	case HostCmd_ACT_GEN_SET:
		if (priv->adapter->hw_dev_mcs_support == HT_STREAM_2X2) {
			cmd->size = cpu_to_le16(sizeof(struct
						host_cmd_ds_rf_ant_mimo)
						+ S_DS_GEN);
			ant_mimo->action_tx = cpu_to_le16(HostCmd_ACT_SET_TX);
			ant_mimo->tx_ant_mode = cpu_to_le16((u16)ant_cfg->
							    tx_ant);
			ant_mimo->action_rx = cpu_to_le16(HostCmd_ACT_SET_RX);
			ant_mimo->rx_ant_mode = cpu_to_le16((u16)ant_cfg->
							    rx_ant);
		} else {
			cmd->size = cpu_to_le16(sizeof(struct
						host_cmd_ds_rf_ant_siso) +
						S_DS_GEN);
			ant_siso->action = cpu_to_le16(HostCmd_ACT_SET_BOTH);
			ant_siso->ant_mode = cpu_to_le16((u16)ant_cfg->tx_ant);
		}
		break;
	case HostCmd_ACT_GEN_GET:
		if (priv->adapter->hw_dev_mcs_support == HT_STREAM_2X2) {
			cmd->size = cpu_to_le16(sizeof(struct
						host_cmd_ds_rf_ant_mimo) +
						S_DS_GEN);
			ant_mimo->action_tx = cpu_to_le16(HostCmd_ACT_GET_TX);
			ant_mimo->action_rx = cpu_to_le16(HostCmd_ACT_GET_RX);
		} else {
			cmd->size = cpu_to_le16(sizeof(struct
						host_cmd_ds_rf_ant_siso) +
						S_DS_GEN);
			ant_siso->action = cpu_to_le16(HostCmd_ACT_GET_BOTH);

Annotation

Implementation Notes