cregit-Linux how code gets into the kernel

Release 4.7 drivers/staging/vt6656/wcmd.c

/*
 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
 * All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 *
 * File: wcmd.c
 *
 * Purpose: Handles the management command interface functions
 *
 * Author: Lyndon Chen
 *
 * Date: May 8, 2003
 *
 * Functions:
 *      vnt_cmd_complete - Command Complete function
 *      vnt_schedule_command - Push Command and wait Command Scheduler to do
 *      vnt_cmd_timer_wait- Call back timer
 *
 * Revision History:
 *
 */

#include "device.h"
#include "mac.h"
#include "wcmd.h"
#include "power.h"
#include "usbpipe.h"
#include "rxtx.h"
#include "rf.h"


static void vnt_cmd_timer_wait(struct vnt_private *priv, unsigned long msecs) { schedule_delayed_work(&priv->run_command_work, msecs_to_jiffies(msecs)); }

Contributors

PersonTokensPropCommitsCommitProp
malcolm priestleymalcolm priestley1864.29%555.56%
forest bondforest bond725.00%111.11%
andres moreandres more310.71%333.33%
Total28100.00%9100.00%


static int vnt_cmd_complete(struct vnt_private *priv) { priv->command_state = WLAN_CMD_IDLE; if (priv->free_cmd_queue == CMD_Q_SIZE) { /* Command Queue Empty */ priv->cmd_running = false; return true; } priv->command = priv->cmd_queue[priv->cmd_dequeue_idx]; ADD_ONE_WITH_WRAP_AROUND(priv->cmd_dequeue_idx, CMD_Q_SIZE); priv->free_cmd_queue++; priv->cmd_running = true; switch (priv->command) { case WLAN_CMD_INIT_MAC80211: priv->command_state = WLAN_CMD_INIT_MAC80211_START; break; case WLAN_CMD_TBTT_WAKEUP: priv->command_state = WLAN_CMD_TBTT_WAKEUP_START; break; case WLAN_CMD_BECON_SEND: priv->command_state = WLAN_CMD_BECON_SEND_START; break; case WLAN_CMD_SETPOWER: priv->command_state = WLAN_CMD_SETPOWER_START; break; case WLAN_CMD_CHANGE_ANTENNA: priv->command_state = WLAN_CMD_CHANGE_ANTENNA_START; break; default: break; } vnt_cmd_timer_wait(priv, 0); return true; }

Contributors

PersonTokensPropCommitsCommitProp
malcolm priestleymalcolm priestley140100.00%2100.00%
Total140100.00%2100.00%


void vnt_run_command(struct work_struct *work) { struct vnt_private *priv = container_of(work, struct vnt_private, run_command_work.work); if (test_bit(DEVICE_FLAGS_DISCONNECTED, &priv->flags)) return; if (!priv->cmd_running) return; switch (priv->command_state) { case WLAN_CMD_INIT_MAC80211_START: if (priv->mac_hw) break; dev_info(&priv->usb->dev, "Starting mac80211\n"); if (vnt_init(priv)) { /* If fail all ends TODO retry */ dev_err(&priv->usb->dev, "failed to start\n"); ieee80211_free_hw(priv->hw); return; } break; case WLAN_CMD_TBTT_WAKEUP_START: vnt_next_tbtt_wakeup(priv); break; case WLAN_CMD_BECON_SEND_START: if (!priv->vif) break; vnt_beacon_make(priv, priv->vif); vnt_mac_reg_bits_on(priv, MAC_REG_TCR, TCR_AUTOBCNTX); break; case WLAN_CMD_SETPOWER_START: vnt_rf_setpower(priv, priv->current_rate, priv->hw->conf.chandef.chan->hw_value); break; case WLAN_CMD_CHANGE_ANTENNA_START: dev_dbg(&priv->usb->dev, "Change from Antenna%d to", priv->rx_antenna_sel); if (priv->rx_antenna_sel == 0) { priv->rx_antenna_sel = 1; if (priv->tx_rx_ant_inv) vnt_set_antenna_mode(priv, ANT_RXA); else vnt_set_antenna_mode(priv, ANT_RXB); } else { priv->rx_antenna_sel = 0; if (priv->tx_rx_ant_inv) vnt_set_antenna_mode(priv, ANT_RXB); else vnt_set_antenna_mode(priv, ANT_RXA); } break; default: break; } vnt_cmd_complete(priv); }

Contributors

PersonTokensPropCommitsCommitProp
malcolm priestleymalcolm priestley15658.43%1789.47%
forest bondforest bond11041.20%15.26%
parth saneparth sane10.37%15.26%
Total267100.00%19100.00%


int vnt_schedule_command(struct vnt_private *priv, enum vnt_cmd command) { if (priv->free_cmd_queue == 0) return false; priv->cmd_queue[priv->cmd_enqueue_idx] = command; ADD_ONE_WITH_WRAP_AROUND(priv->cmd_enqueue_idx, CMD_Q_SIZE); priv->free_cmd_queue--; if (!priv->cmd_running) vnt_cmd_complete(priv); return true; }

Contributors

PersonTokensPropCommitsCommitProp
forest bondforest bond3858.46%18.33%
malcolm priestleymalcolm priestley2335.38%758.33%
andres moreandres more34.62%325.00%
parth saneparth sane11.54%18.33%
Total65100.00%12100.00%


void vnt_reset_command_timer(struct vnt_private *priv) { priv->free_cmd_queue = CMD_Q_SIZE; priv->cmd_dequeue_idx = 0; priv->cmd_enqueue_idx = 0; priv->command_state = WLAN_CMD_IDLE; priv->cmd_running = false; }

Contributors

PersonTokensPropCommitsCommitProp
forest bondforest bond2357.50%112.50%
malcolm priestleymalcolm priestley1435.00%562.50%
andres moreandres more37.50%225.00%
Total40100.00%8100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
malcolm priestleymalcolm priestley35262.63%2877.78%
forest bondforest bond19835.23%12.78%
andres moreandres more91.60%513.89%
parth saneparth sane20.36%12.78%
othmar pastekaothmar pasteka10.18%12.78%
Total562100.00%36100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
{% endraw %}