wpi.c revision d40f4da491abdcae192eb797766f5f44772a832f
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * Use is subject to license terms.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * Copyright (c) 2006
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * Damien Bergamini <damien.bergamini@free.fr>
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * Permission to use, copy, modify, and distribute this software for any
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * purpose with or without fee is hereby granted, provided that the above
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * copyright notice and this permission notice appear in all copies.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * Driver for Intel PRO/Wireless 3945ABG 802.11 network adapters.
#include "wpireg.h"
#include "wpivar.h"
#ifdef DEBUG
#define WPI_DBG(x) \
wpi_dbg x
#define WPI_DBG(x)
#include "fw-wpi/ipw3945.ucode.hex"
const uint32_t *, int);
wpi_rx_data_t *);
wpi_rx_data_t *);
_init(void)
int status;
return (status);
return (status);
_fini(void)
int status;
return (status);
NULL,
NULL,
NULL,
#ifdef DEBUG
switch (cmd) {
case DDI_ATTACH:
case DDI_RESUME:
return (DDI_SUCCESS);
goto attach_fail1;
goto attach_fail1;
goto attach_fail2;
goto attach_fail2;
goto attach_fail3;
goto attach_fail4;
goto attach_fail5;
goto attach_fail6;
goto attach_fail7;
goto attach_fail8;
goto attach_fail9;
goto attach_fail9;
return (DDI_SUCCESS);
return (err);
int err;
switch (cmd) {
case DDI_DETACH:
case DDI_SUSPEND:
return (DDI_SUCCESS);
return (DDI_FAILURE);
return (DDI_FAILURE);
return (err);
return (DDI_SUCCESS);
int err;
return (DDI_FAILURE);
return (DDI_FAILURE);
return (DDI_FAILURE);
return (DDI_SUCCESS);
goto fail;
goto fail;
fail:
return (err);
goto fail;
return (err);
fail:
return (err);
goto fail;
for (i = 0; i < WPI_RX_RING_COUNT; i++) {
goto fail;
return (err);
fail:
return (err);
int ntries;
for (i = 0; i < WPI_RX_RING_COUNT; i++) {
qid));
goto fail;
qid));
goto fail;
goto fail;
for (i = 0; i < count; i++) {
goto fail;
return (err);
fail:
return (err);
int i, ntries;
#ifdef DEBUG
goto fail;
goto fail;
goto fail;
goto fail;
return (err);
fail:
return (err);
static ieee80211_node_t *
switch (nstate) {
case IEEE80211_S_SCAN:
switch (ostate) {
case IEEE80211_S_INIT:
return (err);
return (err);
case IEEE80211_S_SCAN:
return (err);
case IEEE80211_S_AUTH:
return (err);
case IEEE80211_S_RUN:
return (err);
case IEEE80211_S_INIT:
case IEEE80211_S_ASSOC:
int err;
case IEEE80211_CIPHER_WEP:
case IEEE80211_CIPHER_TKIP:
case IEEE80211_CIPHER_AES_CCM:
int ntries;
static uint32_t
static uint16_t
int ntries;
const char *ucode;
int size;
return (EINVAL);
size);
return (WPI_SUCCESS);
const char *fw;
int size;
return (err);
/* ring->desc[ring->cur] = LE_32(data->dma_data.cookie.dmac_address); */
#ifdef WPI_BPF
#ifndef WPI_CURRENT
#ifdef DEBUG
if (mp) {
static uint_t
return (DDI_INTR_UNCLAIMED);
case WPI_RX_DONE:
case WPI_TX_DONE:
case WPI_UC_READY:
case WPI_STATE_CHANGED:
case WPI_START_SCAN:
case WPI_STOP_SCAN:
return (DDI_INTR_CLAIMED);
static uint_t
return (DDI_INTR_UNCLAIMED);
return (DDI_INTR_UNCLAIMED);
return (DDI_INTR_CLAIMED);
return (DDI_INTR_CLAIMED);
return (DDI_INTR_CLAIMED);
static uint8_t
switch (rate) {
static mblk_t *
return (NULL);
return (NULL);
return (mp);
struct ieee80211_key *k;
goto exit;
goto exit;
goto exit;
freemsg(m);
goto exit;
if (k == NULL) {
freemsg(m);
goto exit;
#ifdef DEBUG
#ifdef WPI_BPF
#ifndef WPI_CURRENT
freemsg(m);
exit:
return (err);
int err;
int err = 0;
return (err);
int err;
return (ENXIO);
err = 0;
return (err);
switch (stat) {
case MAC_STAT_IFSPEED:
case MAC_STAT_NOXMTBUF:
case MAC_STAT_NORCVBUF:
case MAC_STAT_IERRORS:
case MAC_STAT_RBYTES:
case MAC_STAT_IPACKETS:
case MAC_STAT_OBYTES:
case MAC_STAT_OPACKETS:
case MAC_STAT_OERRORS:
case WIFI_STAT_TX_FAILED:
case WIFI_STAT_TX_RETRANS:
case WIFI_STAT_FCS_ERRORS:
case WIFI_STAT_WEP_ERRORS:
case WIFI_STAT_TX_FRAGS:
case WIFI_STAT_MCAST_TX:
case WIFI_STAT_RTS_SUCCESS:
case WIFI_STAT_RTS_FAILURE:
case WIFI_STAT_ACK_FAILURE:
case WIFI_STAT_RX_FRAGS:
case WIFI_STAT_MCAST_RX:
case WIFI_STAT_RX_DUPS:
return (ENOTSUP);
return (WPI_SUCCESS);
int err;
if (err) {
return (WPI_SUCCESS);
return (WPI_SUCCESS);
int err;
goto fail;
return (WPI_SUCCESS);
fail:
return (err);
return (WPI_SUCCESS);
return (WPI_SUCCESS);
if (!err)
timeout++;
timeout = 0;
if (async)
return (WPI_SUCCESS);
return (WPI_SUCCESS);
return (WPI_FAIL);
int i, err;
return (err);
return (err);
return (WPI_SUCCESS);
int err;
return (err);
return (err);
return (err);
return (WPI_SUCCESS);
return (WPI_SUCCESS);
essid));
#ifdef WPI_BLUE_COEXISTENCE
int err;
return (err);
return (err);
#ifdef WPI_BLUE_COEXISTENCE
sizeof (bluetooth), 0);
return (err);
case IEEE80211_M_STA:
case IEEE80211_M_IBSS:
case IEEE80211_M_AHDEMO:
case IEEE80211_M_HOSTAP:
case IEEE80211_M_MONITOR:
sizeof (wpi_config_t), 0);
return (err);
return (err);
return (WPI_SUCCESS);
int ntries;
int ntries;
return (ETIMEDOUT);
return (WPI_SUCCESS);
int ntries;
return (ETIMEDOUT);
return (EIO);
return (WPI_SUCCESS);
goto fail1;
goto fail1;
goto fail1;
goto fail1;
goto fail1;
if (err) {
goto fail1;
return (WPI_SUCCESS);
return (err);
return (DDI_FAILURE);
#ifdef DEBUG
wpi_dbg_flags = 0;
return (DDI_SUCCESS);
int ac;
int need_change = 0;