Exemplo n.º 1
0
static int wpa_driver_tista_config_power_management(void *priv, TPowerMgr_PowerMode *mode, u8 is_set)
{
    struct wpa_driver_ti_data *drv = (struct wpa_driver_ti_data *)priv;

    if(is_set) /* set power mode */
    {
        if((mode->PowerMode) < POWER_MODE_MAX)
        {
            if(0 != wpa_driver_tista_private_send(priv, TIWLN_802_11_POWER_MODE_SET,
                                                  mode, sizeof(TPowerMgr_PowerMode), NULL, 0))
            {
                wpa_printf(MSG_ERROR, "ERROR - Failed to set power mode");
                return -1;
            }
        }
        else
        {
            wpa_printf(MSG_ERROR, "ERROR - Invalid Power Mode");
            return -1;
        }
    }
    else /* get power mode */
    {
        if(0 != wpa_driver_tista_private_send(priv, TIWLN_802_11_POWER_MODE_GET, NULL, 0,
                                              mode, sizeof(TPowerMgr_PowerMode)))
        {
            wpa_printf(MSG_ERROR, "ERROR - Failed to get power mode");
            return -1;
        }
    }
    wpa_printf(MSG_DEBUG, "wpa_driver_tista_config_power_management success");

    return 0;
}
Exemplo n.º 2
0
static int wpa_driver_tista_enable_bt_coe(void *priv, u32 mode)
{
    struct wpa_driver_ti_data *drv = (struct wpa_driver_ti_data *)priv;
    u32 mode_set = mode;

    /* Mapping the mode between UI enum and driver enum */
    switch(mode_set)
    {
    case BLUETOOTH_COEXISTENCE_MODE_ENABLED:
        mode_set = SG_OPPORTUNISTIC;
        break;
    case BLUETOOTH_COEXISTENCE_MODE_SENSE:
        mode_set = SG_PROTECTIVE;
        break;
    case BLUETOOTH_COEXISTENCE_MODE_DISABLED:
        mode_set = SG_DISABLE;
        break;
    default:
        wpa_printf(MSG_DEBUG, "wpa_driver_tista_enable_bt_coe - Unknown Mode");
        return -1;
        break;
    }

    if(0 != wpa_driver_tista_private_send(priv, SOFT_GEMINI_SET_ENABLE,
                                          &mode_set, sizeof(u32), NULL, 0))
    {
        wpa_printf(MSG_ERROR, "ERROR - Failed to enable BtCoe");
        return -1;
    }
    wpa_printf(MSG_DEBUG, "wpa_driver_tista_enable_bt_coe success");

    return 0;
}
Exemplo n.º 3
0
static int wpa_driver_tista_get_rssi(void *priv, int *rssi_data, int *rssi_beacon)
{
    u8 bssid[ETH_ALEN];
    struct wpa_driver_ti_data *drv = (struct wpa_driver_ti_data *)priv;
    TCuCommon_RoamingStatisticsTable buffer;

    os_memset(&buffer, 0, sizeof(TCuCommon_RoamingStatisticsTable));
    *rssi_data = 0;
    *rssi_beacon = 0;
    if (wpa_driver_tista_get_bssid(priv, bssid) == 0 &&
            os_memcmp(bssid, "\x00\x00\x00\x00\x00\x00", ETH_ALEN) != 0) {
        if(0 != wpa_driver_tista_private_send(priv, TIWLN_802_11_RSSI, NULL, 0,
                                              &buffer, sizeof(TCuCommon_RoamingStatisticsTable))) {
            wpa_printf(MSG_ERROR, "ERROR - Failed to get rssi level");
            return -1;
        }
        *rssi_data = (s8)buffer.rssi;
        *rssi_beacon = (s8)buffer.rssiBeacon;
        wpa_printf(MSG_DEBUG, "wpa_driver_tista_get_rssi data %d beacon %d success",
                   *rssi_data, *rssi_beacon);
    }
    else {
        wpa_printf(MSG_DEBUG, "no WiFi link.");
        return -1;
    }
    return 0;
}
Exemplo n.º 4
0
/*-----------------------------------------------------------------------------
Routine Name: wpa_driver_tista_scan
Routine Description: request scan from driver
Arguments: 
   priv - pointer to private data structure
   ssid - ssid buffer
   ssid_len - length of ssid
Return Value: 0 on success, -1 on failure
-----------------------------------------------------------------------------*/
static int wpa_driver_tista_scan( void *priv, const u8 *ssid, size_t ssid_len )
{
	struct wpa_driver_ti_data *drv = (struct wpa_driver_ti_data *)priv;
	struct wpa_supplicant *wpa_s = (struct wpa_supplicant *)(drv->ctx);
	struct wpa_ssid *issid;
	scan_Params_t scanParams;
	int scan_type, res, timeout, scan_probe_flag = 0;

	wpa_printf(MSG_DEBUG, "%s", __func__);
        TI_CHECK_DRIVER( drv->driver_is_loaded, -1 );

#if 1
	os_memset(&scanParams, 0, sizeof(scan_Params_t));
	/* Initialize scan parameters */
	scan_type = drv->scan_type;
	if (wpa_s->prev_scan_ssid != BROADCAST_SSID_SCAN) {
		if (wpa_s->prev_scan_ssid->scan_ssid) {
			scan_type = SCAN_TYPE_NORMAL_ACTIVE;
			scan_probe_flag = 1;
		}
	}

	scanParams.scanType = scan_type;
	scanParams.numOfChannels = drv->scan_channels;
	scanParams.probeReqNumber = SCAN_DEFAULT_PROBE_REQUEST_NUM;
	scanParams.probeRequestRate = RATE_MASK_UNSPECIFIED; /* Let the FW select */;
	scanParams.desiredSsid.len = 0;

	drv->force_merge_flag = 0; /* Set merge flag */

	if ((scan_probe_flag && ssid) &&
	    (ssid_len > 0 && ssid_len <= sizeof(scanParams.desiredSsid.str))) {
		os_memcpy(scanParams.desiredSsid.str, ssid, ssid_len);
		if (ssid_len < sizeof(scanParams.desiredSsid.str))
			scanParams.desiredSsid.str[ssid_len] = '\0';
		scanParams.desiredSsid.len = ssid_len;
		drv->force_merge_flag = 1;
	}

	drv->last_scan = scan_type; /* Remember scan type for last scan */

	res = wpa_driver_tista_private_send(priv, TIWLN_802_11_START_OS_SCAN_SET, &scanParams, sizeof(scanParams), NULL, 0);

	if (0 != res)
		wpa_printf(MSG_ERROR, "ERROR - Failed to do tista scan!");
	else
		wpa_printf(MSG_DEBUG, "wpa_driver_tista_scan OS_SCAN success");

	timeout = 30;
	wpa_printf(MSG_DEBUG, "Scan requested (ret=%d) - scan timeout %d sec",
			res, timeout);
	eloop_cancel_timeout(wpa_driver_wext_scan_timeout, drv->wext, drv->ctx);
	eloop_register_timeout(timeout, 0, wpa_driver_wext_scan_timeout,
				drv->wext, drv->ctx);
	return res;
#else
	return wpa_driver_wext_scan(drv->wext, ssid, ssid_len);
#endif
}
Exemplo n.º 5
0
static int wpa_driver_tista_set_operstate(void *priv, int state)
{
	struct wpa_driver_ti_data *drv = priv;

	wpa_printf(MSG_DEBUG, "%s: operstate %d (%s)",
		   __func__, /*drv->operstate,*/ state, state ? "UP" : "DORMANT");
        TI_CHECK_DRIVER( drv->driver_is_loaded, -1 );		   
	/* Dm: drv->operstate = state; */
    wpa_driver_tista_private_send(priv, RSN_PORT_STATUS_PARAM, &state, sizeof(state), NULL, 0);
	return wpa_driver_wext_set_operstate(drv->wext, state);
}
Exemplo n.º 6
0
static int wpa_driver_tista_driver_rx_data_filter_statistics( void *priv,
        TCuCommon_RxDataFilteringStatistics *stats )
{
    struct wpa_driver_ti_data *drv = (struct wpa_driver_ti_data *)priv;
    int res;

    res = wpa_driver_tista_private_send(priv, TIWLN_GET_RX_DATA_FILTERS_STATISTICS,
                                        NULL, 0, stats, sizeof(TCuCommon_RxDataFilteringStatistics));
    if (0 != res)
        wpa_printf(MSG_ERROR, "ERROR - Failed to get RX data filter statistics!");
    else
        wpa_printf(MSG_DEBUG, "%s success", __func__);
    return res;
}
Exemplo n.º 7
0
static int wpa_driver_tista_driver_disable_rx_data_filter( void *priv )
{
    struct wpa_driver_ti_data *drv = (struct wpa_driver_ti_data *)priv;
    u32 val = FALSE;
    int res;

    res = wpa_driver_tista_private_send(priv, TIWLN_ENABLE_DISABLE_RX_DATA_FILTERS,
                                        &val, sizeof(u32), NULL, 0);
    if (0 != res)
        wpa_printf(MSG_ERROR, "ERROR - Failed to disable RX data filter!");
    else
        wpa_printf(MSG_DEBUG, "%s success", __func__);
    return res;
}
Exemplo n.º 8
0
static u8 wpa_driver_tista_get_rate( void *priv)
{
	struct wpa_driver_ti_data *drv = (struct wpa_driver_ti_data *)priv;
	u8 val=0;
	int res;

	res = wpa_driver_tista_private_send(priv, TIWLN_802_11_CURRENT_RATES_GET,
					    NULL, 0, &val, sizeof(u8));
	if (0 != res)
		wpa_printf(MSG_ERROR, "ERROR - Failed to get current rate");
	else
		wpa_printf(MSG_DEBUG, "%s success: rate=%u", __func__, val);

	return (RATE_2_MBPS(val));
}
Exemplo n.º 9
0
static int wpa_driver_tista_get_bt_coe_status(void *priv, u32 *mode)
{
    struct wpa_driver_ti_data *drv = (struct wpa_driver_ti_data *)priv;
    u32 mode_get = 0;

    if(0 != wpa_driver_tista_private_send(priv, SOFT_GEMINI_GET_CONFIG, NULL, 0,
                                          &mode_get, sizeof(u32)))
    {
        wpa_printf(MSG_ERROR, "ERROR - Failed to get bt coe status");
        return -1;
    }
    *mode = mode_get;
    wpa_printf(MSG_DEBUG, "wpa_driver_tista_get_bt_coe_status mode %d success", *mode);

    return 0;
}
Exemplo n.º 10
0
static int wpa_driver_tista_set_driver_ip(void *priv, u32 ip)
{
	struct wpa_driver_ti_data *drv = (struct wpa_driver_ti_data *)priv;
	u32 staIp;
	int res;

	staIp = ip;
	res = wpa_driver_tista_private_send(priv, SITE_MGR_SET_WLAN_IP_PARAM,
		&ip, 4, NULL, 0);
	if (0 != res)
		wpa_printf(MSG_ERROR, "ERROR - Failed to set driver ip!");
	else
		wpa_printf(MSG_DEBUG, "%s success", __func__);

	return res;
}
Exemplo n.º 11
0
static int wpa_driver_tista_driver_stop( void *priv )
{
    struct wpa_driver_ti_data *drv = (struct wpa_driver_ti_data *)priv;
    u32 uDummyBuf;
    s32 res;

    res = wpa_driver_tista_private_send(priv, DRIVER_STOP_PARAM, &uDummyBuf, sizeof(uDummyBuf), NULL, 0);

    if (0 != res) {
        wpa_printf(MSG_ERROR, "ERROR - Failed to stop driver!");
        wpa_msg(drv->ctx, MSG_INFO, WPA_EVENT_DRIVER_STATE "HANGED");
    }
    else
        wpa_printf(MSG_DEBUG, "wpa_driver_tista_driver_stop success");

    return res;
}
Exemplo n.º 12
0
static int wpa_driver_tista_driver_start( void *priv )
{
    struct wpa_driver_ti_data *drv = (struct wpa_driver_ti_data *)priv;
    u32 uDummyBuf;
    s32 res;

    res = wpa_driver_tista_private_send(priv, DRIVER_START_PARAM, &uDummyBuf, sizeof(uDummyBuf), NULL, 0);

    if (0 != res) {
        wpa_printf(MSG_ERROR, "ERROR - Failed to start driver!");
        wpa_msg(drv->ctx, MSG_INFO, WPA_EVENT_DRIVER_STATE "HANGED");
    }
    else {
        os_sleep(0, WPA_DRIVER_WEXT_WAIT_US); /* delay 400 ms */
        wpa_printf(MSG_DEBUG, "wpa_driver_tista_driver_start success");
    }
    return res;
}
Exemplo n.º 13
0
static int wpa_driver_tista_driver_rx_data_filter( void *priv, TRxDataFilterRequest *dfreq_ptr, u8 is_add )
{
    struct wpa_driver_ti_data *drv = (struct wpa_driver_ti_data *)priv;
    int cmd, res;

    if (is_add) { /* add rx data filter */
        cmd = TIWLN_ADD_RX_DATA_FILTER;
        wpa_printf(MSG_DEBUG, "Add RX data filter");
    }
    else { /* remove rx data filter */
        cmd = TIWLN_REMOVE_RX_DATA_FILTER;
        wpa_printf(MSG_DEBUG, "Remove RX data filter");
    }

    res = wpa_driver_tista_private_send(priv, cmd, dfreq_ptr, sizeof(TRxDataFilterRequest), NULL, 0);
    if (0 != res)
        wpa_printf(MSG_ERROR, "ERROR - Failed to handle rx data filter command!");
    else
        wpa_printf(MSG_DEBUG, "%s success", __func__);
    return res;
}
Exemplo n.º 14
0
/*-----------------------------------------------------------------------------
Routine Name: wpa_driver_tista_get_mac_addr
Routine Description: return WLAN MAC address
Arguments:
   priv - pointer to private data structure
Return Value: pointer to BSSID
-----------------------------------------------------------------------------*/
const u8 *wpa_driver_tista_get_mac_addr( void *priv )
{
    struct wpa_driver_ti_data *drv = (struct wpa_driver_ti_data *)priv;
    u8 mac[ETH_ALEN] = {0};

    TI_CHECK_DRIVER( drv->driver_is_loaded, NULL );
    if(0 != wpa_driver_tista_private_send(priv, CTRL_DATA_MAC_ADDRESS, NULL, 0,
                                          mac, ETH_ALEN))
    {
        wpa_printf(MSG_ERROR, "ERROR - Failed to get mac address!");
        os_memset(drv->own_addr, 0, ETH_ALEN);
    }
    else
    {
        os_memcpy(drv->own_addr, mac, ETH_ALEN);
        wpa_printf(MSG_DEBUG, "Macaddr = " MACSTR, MAC2STR(drv->own_addr));
    }
    wpa_printf(MSG_DEBUG, "wpa_driver_tista_get_mac_addr success");

    return (const u8 *)&drv->own_addr;
}
Exemplo n.º 15
0
/*-----------------------------------------------------------------------------
Routine Name: wpa_driver_tista_set_probe_req_ie
Routine Description: set probe request ie for WSC mode change
Arguments:
   priv - pointer to private data structure
   ies - probe_req_ie data
   ies_len - ie data length
Return Value: actual buffer length - success, -1 - failure
-----------------------------------------------------------------------------*/
static int wpa_driver_tista_set_probe_req_ie(void *priv, const u8* ies, size_t ies_len)
{
    struct wpa_driver_ti_data *drv = (struct wpa_driver_ti_data *)priv;
#ifdef CONFIG_WPS
    TWscMode WscModeStruct;

    TI_CHECK_DRIVER( drv->driver_is_loaded, -1 );

    if ((!ies || (0 == ies_len)) && (NULL == drv->probe_req_ie)) {
        return 0;
    }

    if (ies && drv->probe_req_ie) {
        size_t len = wpabuf_len(drv->probe_req_ie);
        u8* data = (u8*)wpabuf_head(drv->probe_req_ie);
        if ((ies_len == len) && (0 == os_memcmp(ies, data, ies_len))) {
            return 0;
        }
    }

    os_memset(&WscModeStruct, 0, sizeof(TWscMode));

    if (!ies || (0 == ies_len)) {
        WscModeStruct.WSCMode = TIWLN_SIMPLE_CONFIG_OFF;
    } else {
        const size_t head_len = 6; /* probeReqIe head: dd xx 00 50 f2 04 */
        u8 *pos, *end;
        u16 password_id = 0;
        size_t min_len = 0;

        pos = (u8*)ies + head_len; /* Find the WSC mode in probe_req_ie by password_id */
        end = (u8*)ies + ies_len;
        while (pos < end) {
            if (ATTR_DEV_PASSWORD_ID == WPA_GET_BE16(pos)) {
                password_id = WPA_GET_BE16(pos+4);
                break;
            }
            pos += (4 + WPA_GET_BE16(pos+2));
        }
        WscModeStruct.WSCMode = (DEV_PW_PUSHBUTTON == password_id)?TIWLN_SIMPLE_CONFIG_PBC_METHOD:TIWLN_SIMPLE_CONFIG_PIN_METHOD;

        pos = (u8*)ies + head_len;
        min_len = ies_len - head_len;
        if (min_len > sizeof(WscModeStruct.probeReqWSCIE)) {
            min_len = sizeof(WscModeStruct.probeReqWSCIE);
        }
        os_memcpy(WscModeStruct.probeReqWSCIE, pos, min_len);
    }

    wpa_hexdump(MSG_DEBUG, "SetProbeReqIe:WscModeStruct", (u8*)&WscModeStruct, sizeof(TWscMode));
    if(0 == wpa_driver_tista_private_send(priv, SITE_MGR_SIMPLE_CONFIG_MODE, (void*)&WscModeStruct, sizeof(TWscMode), NULL, 0)) {
        /* Update the cached probe req ie */
        wpabuf_free(drv->probe_req_ie);
        drv->probe_req_ie = NULL;

        if (ies && ies_len) {
            drv->probe_req_ie = wpabuf_alloc(sizeof(WscModeStruct.probeReqWSCIE));
            if (drv->probe_req_ie) {
                wpabuf_put_data(drv->probe_req_ie, ies, ies_len);
            }
        }
    } else {
        wpa_printf(MSG_ERROR, "ERROR - Failed to set wsc mode!");
        return -1;
    }
#endif
    return 0;
}