Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 126627
b: refs/heads/master
c: 6666446
h: refs/heads/master
i:
  126625: b25f348
  126623: 6040c77
v: v3
  • Loading branch information
Greg Kroah-Hartman committed Jan 6, 2009
1 parent 5fed859 commit ca01c89
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 83 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: ee254f295804fc1f446598303969be0211faa8d4
refs/heads/master: 66664462909d9c62bcff3dceb579b438563f15ee
176 changes: 94 additions & 82 deletions trunk/drivers/staging/at76_usb/at76_usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,18 +91,18 @@

/* Use our own dbg macro */
#define at76_dbg(bits, format, arg...) \
do { \
if (at76_debug & (bits)) \
do { \
if (at76_debug & (bits)) \
printk(KERN_DEBUG DRIVER_NAME ": " format "\n" , ## arg); \
} while (0)
} while (0)

#define at76_dbg_dump(bits, buf, len, format, arg...) \
do { \
if (at76_debug & (bits)) { \
do { \
if (at76_debug & (bits)) { \
printk(KERN_DEBUG DRIVER_NAME ": " format "\n" , ## arg); \
print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, buf, len); \
print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, buf, len); \
} \
} while (0)
} while (0)

static int at76_debug = DBG_DEFAULTS;

Expand Down Expand Up @@ -300,22 +300,30 @@ struct dfu_status {

static inline int at76_is_intersil(enum board_type board)
{
return (board == BOARD_503_ISL3861 || board == BOARD_503_ISL3863);
if (board == BOARD_503_ISL3861 || board == BOARD_503_ISL3863)
return 1;
return 0;
}

static inline int at76_is_503rfmd(enum board_type board)
{
return (board == BOARD_503 || board == BOARD_503_ACC);
if (board == BOARD_503 || board == BOARD_503_ACC)
return 1;
return 0;
}

static inline int at76_is_505(enum board_type board)
{
return (board == BOARD_505 || BOARD_505_2958);
if (board == BOARD_505 || board == BOARD_505_2958)
return 1;
return 0;
}

static inline int at76_is_505a(enum board_type board)
{
return (board == BOARD_505A || board == BOARD_505AMX);
if (board == BOARD_505A || board == BOARD_505AMX)
return 1;
return 0;
}

/* Load a block of the first (internal) part of the firmware */
Expand Down Expand Up @@ -1054,20 +1062,23 @@ static void at76_dump_mib_mac_encryption(struct at76_priv *priv)
int i;
int ret;
/*int key_len;*/
struct mib_mac_encryption *m = kmalloc(sizeof(struct mib_mac_encryption), GFP_KERNEL);
struct mib_mac_encryption *m;

m = kmalloc(sizeof(struct mib_mac_encryption), GFP_KERNEL);
if (!m)
return;

ret = at76_get_mib(priv->udev, MIB_MAC_ENCRYPTION, m,
sizeof(struct mib_mac_encryption));
if (ret < 0) {
printk(KERN_ERR "%s: at76_get_mib (MAC_ENCRYPTION) failed: %d\n",
wiphy_name(priv->hw->wiphy), ret);
dev_err(&priv->udev->dev,
"%s: at76_get_mib (MAC_ENCRYPTION) failed: %d\n",
wiphy_name(priv->hw->wiphy), ret);
goto exit;
}

at76_dbg(DBG_MIB, "%s: MIB MAC_ENCRYPTION: tkip_bssid %s priv_invoked %u "
at76_dbg(DBG_MIB,
"%s: MIB MAC_ENCRYPTION: tkip_bssid %s priv_invoked %u "
"ciph_key_id %u grp_key_id %u excl_unencr %u "
"ckip_key_perm %u wep_icv_err %u wep_excluded %u",
wiphy_name(priv->hw->wiphy), mac2str(m->tkip_bssid),
Expand All @@ -1083,7 +1094,8 @@ static void at76_dump_mib_mac_encryption(struct at76_priv *priv)
for (i = 0; i < CIPHER_KEYS; i++)
at76_dbg(DBG_MIB, "%s: MIB MAC_ENCRYPTION: key %d: %s",
wiphy_name(priv->hw->wiphy), i,
hex2str(m->cipher_default_keyvalue[i], CIPHER_KEY_LEN));
hex2str(m->cipher_default_keyvalue[i],
CIPHER_KEY_LEN));
exit:
kfree(m);
}
Expand Down Expand Up @@ -1622,10 +1634,12 @@ static void at76_rx_tasklet(unsigned long param)

skb_trim(priv->rx_skb, le16_to_cpu(buf->wlength) + AT76_RX_HDRLEN);
at76_dbg_dump(DBG_RX_DATA, &priv->rx_skb->data[AT76_RX_HDRLEN],
priv->rx_skb->len, "RX: len=%d", (int)(priv->rx_skb->len - AT76_RX_HDRLEN));
priv->rx_skb->len, "RX: len=%d",
(int)(priv->rx_skb->len - AT76_RX_HDRLEN));

rx_status.signal = buf->rssi;
rx_status.rate_idx = buf->rx_rate; /* FIXME: is rate_idx still present in structure? */
/* FIXME: is rate_idx still present in structure? */
rx_status.rate_idx = buf->rx_rate;
rx_status.flag |= RX_FLAG_DECRYPTED;
rx_status.flag |= RX_FLAG_IV_STRIPPED;

Expand Down Expand Up @@ -1726,7 +1740,9 @@ static void at76_mac80211_tx_callback(struct urb *urb)
switch (urb->status) {
case 0:
/* success */
info->flags |= IEEE80211_TX_STAT_ACK; /* FIXME: is the frame really ACKed when tx_callback is called ? */
/* FIXME:
* is the frame really ACKed when tx_callback is called ? */
info->flags |= IEEE80211_TX_STAT_ACK;
break;
case -ENOENT:
case -ECONNRESET:
Expand Down Expand Up @@ -1780,8 +1796,10 @@ static int at76_mac80211_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
tx_buffer->tx_rate = ieee80211_get_tx_rate(hw, info)->hw_value;
if (FIRMWARE_IS_WPA(priv->fw_version) && info->control.hw_key) {
tx_buffer->key_id = (info->control.hw_key->keyidx);
tx_buffer->cipher_type = priv->keys[info->control.hw_key->keyidx].cipher;
tx_buffer->cipher_length = priv->keys[info->control.hw_key->keyidx].keylen;
tx_buffer->cipher_type =
priv->keys[info->control.hw_key->keyidx].cipher;
tx_buffer->cipher_length =
priv->keys[info->control.hw_key->keyidx].keylen;
tx_buffer->reserved = 0;
} else {
tx_buffer->key_id = 0;
Expand Down Expand Up @@ -2183,41 +2201,40 @@ static int at76_set_key_newfw(struct ieee80211_hw *hw, enum set_key_cmd cmd,
memcpy(priv->mib_buf.data.data, key->key, key->keylen);

switch (key->alg) {
case ALG_WEP:
if (key->keylen == 5) {
priv->keys[key->keyidx].cipher =
CIPHER_WEP64;
priv->keys[key->keyidx].keylen = 8;
} else if (key->keylen == 13) {
priv->keys[key->keyidx].cipher =
CIPHER_WEP128;
/* Firmware needs this */
priv->keys[key->keyidx].keylen = 8;
} else {
ret = -EOPNOTSUPP;
goto exit;
};
break;
case ALG_TKIP:
key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC;
priv->keys[key->keyidx].cipher = CIPHER_TKIP;
priv->keys[key->keyidx].keylen = 12;
break;

case ALG_CCMP:
if (!at76_is_505a(priv->board_type)) {
ret = -EOPNOTSUPP;
goto exit;
};
key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC;
priv->keys[key->keyidx].cipher = CIPHER_CCMP;
priv->keys[key->keyidx].keylen = 16;
break;
case ALG_WEP:
if (key->keylen == 5) {
priv->keys[key->keyidx].cipher =
CIPHER_WEP64;
priv->keys[key->keyidx].keylen = 8;
} else if (key->keylen == 13) {
priv->keys[key->keyidx].cipher =
CIPHER_WEP128;
/* Firmware needs this */
priv->keys[key->keyidx].keylen = 8;
} else {
ret = -EOPNOTSUPP;
goto exit;
};
break;
case ALG_TKIP:
key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC;
priv->keys[key->keyidx].cipher = CIPHER_TKIP;
priv->keys[key->keyidx].keylen = 12;
break;

default:
case ALG_CCMP:
if (!at76_is_505a(priv->board_type)) {
ret = -EOPNOTSUPP;
goto exit;
};
key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC;
priv->keys[key->keyidx].cipher = CIPHER_CCMP;
priv->keys[key->keyidx].keylen = 16;
break;

default:
ret = -EOPNOTSUPP;
goto exit;
};

priv->mib_buf.data.data[38] = priv->keys[key->keyidx].cipher;
Expand Down Expand Up @@ -2260,8 +2277,8 @@ static int at76_set_key_newfw(struct ieee80211_hw *hw, enum set_key_cmd cmd,
priv->mib_buf.data.data[1] = priv->default_pairwise_key;
priv->mib_buf.data.data[2] = priv->default_group_key;

if ((ret = at76_set_mib(priv, &priv->mib_buf)) !=
CMD_STATUS_COMPLETE)
ret = at76_set_mib(priv, &priv->mib_buf);
if (ret != CMD_STATUS_COMPLETE)
goto exit;

/* second block of settings */
Expand All @@ -2272,8 +2289,8 @@ static int at76_set_key_newfw(struct ieee80211_hw *hw, enum set_key_cmd cmd,
priv->mib_buf.data.data[1] = 0; /* wep_encryption_type */
priv->mib_buf.data.data[2] = 0; /* ckip_key_permutation */

if ((ret = at76_set_mib(priv, &priv->mib_buf)) !=
CMD_STATUS_COMPLETE)
ret = at76_set_mib(priv, &priv->mib_buf);
if (ret != CMD_STATUS_COMPLETE)
goto exit;
ret = 0;
};
Expand All @@ -2289,8 +2306,6 @@ static int at76_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
{
struct at76_priv *priv = hw->priv;

// int i;

at76_dbg(DBG_MAC80211, "%s(): cmd %d key->alg %d key->keyidx %d "
"key->keylen %d",
__func__, cmd, key->alg, key->keyidx, key->keylen);
Expand Down Expand Up @@ -2444,6 +2459,7 @@ static struct ieee80211_supported_band at76_supported_band = {
static int at76_init_new_device(struct at76_priv *priv,
struct usb_interface *interface)
{
struct device *dev = &interface->dev;
int ret;

/* set up the endpoint information */
Expand All @@ -2459,8 +2475,7 @@ static int at76_init_new_device(struct at76_priv *priv,
/* MAC address */
ret = at76_get_hw_config(priv);
if (ret < 0) {
dev_printk(KERN_ERR, &interface->dev,
"cannot get MAC address\n");
dev_err(dev, "cannot get MAC address\n");
goto exit;
}

Expand Down Expand Up @@ -2499,22 +2514,21 @@ static int at76_init_new_device(struct at76_priv *priv,

ret = ieee80211_register_hw(priv->hw);
if (ret) {
printk(KERN_ERR "cannot register mac80211 hw (status %d)!\n",
ret);
dev_err(dev, "cannot register mac80211 hw (status %d)!\n", ret);
goto exit;
}

priv->mac80211_registered = 1;

printk(KERN_INFO "%s: USB %s, MAC %s, firmware %d.%d.%d-%d\n",
wiphy_name(priv->hw->wiphy),
interface->dev.bus_id, mac2str(priv->mac_addr),
priv->fw_version.major, priv->fw_version.minor,
priv->fw_version.patch, priv->fw_version.build);
printk(KERN_INFO "%s: regulatory domain 0x%02x: %s\n",
wiphy_name(priv->hw->wiphy),
priv->regulatory_domain, priv->domain->name);
printk(KERN_INFO "%s: WPA support: ", wiphy_name(priv->hw->wiphy));
dev_info(dev, "%s: USB %s, MAC %s, firmware %d.%d.%d-%d\n",
wiphy_name(priv->hw->wiphy),
interface->dev.bus_id, mac2str(priv->mac_addr),
priv->fw_version.major, priv->fw_version.minor,
priv->fw_version.patch, priv->fw_version.build);
dev_info(dev, "%s: regulatory domain 0x%02x: %s\n",
wiphy_name(priv->hw->wiphy),
priv->regulatory_domain, priv->domain->name);
dev_info(dev, "%s: WPA support: ", wiphy_name(priv->hw->wiphy));
if (!FIRMWARE_IS_WPA(priv->fw_version))
printk("none\n");
else {
Expand Down Expand Up @@ -2595,22 +2609,21 @@ static int at76_probe(struct usb_interface *interface,
we get 204 with 2.4.23, Fiberline FL-WL240u (505A+RFMD2958) ??? */

if (op_mode == OPMODE_HW_CONFIG_MODE) {
dev_printk(KERN_ERR, &interface->dev,
"cannot handle a device in HW_CONFIG_MODE\n");
dev_err(&interface->dev,
"cannot handle a device in HW_CONFIG_MODE\n");
ret = -EBUSY;
goto error;
}

if (op_mode != OPMODE_NORMAL_NIC_WITH_FLASH
&& op_mode != OPMODE_NORMAL_NIC_WITHOUT_FLASH) {
/* download internal firmware part */
dev_printk(KERN_DEBUG, &interface->dev,
"downloading internal firmware\n");
dev_dbg(&interface->dev, "downloading internal firmware\n");
ret = at76_load_internal_fw(udev, fwe);
if (ret < 0) {
dev_printk(KERN_ERR, &interface->dev,
"error %d downloading internal firmware\n",
ret);
dev_err(&interface->dev,
"error %d downloading internal firmware\n",
ret);
goto error;
}
usb_put_dev(udev);
Expand All @@ -2635,8 +2648,7 @@ static int at76_probe(struct usb_interface *interface,
need_ext_fw = 1;

if (need_ext_fw) {
dev_printk(KERN_DEBUG, &interface->dev,
"downloading external firmware\n");
dev_dbg(&interface->dev, "downloading external firmware\n");

ret = at76_load_external_fw(udev, fwe);
if (ret)
Expand All @@ -2645,8 +2657,8 @@ static int at76_probe(struct usb_interface *interface,
/* Re-check firmware version */
ret = at76_get_mib(udev, MIB_FW_VERSION, &fwv, sizeof(fwv));
if (ret < 0) {
dev_printk(KERN_ERR, &interface->dev,
"error %d getting firmware version\n", ret);
dev_err(&interface->dev,
"error %d getting firmware version\n", ret);
goto error;
}
}
Expand Down

0 comments on commit ca01c89

Please sign in to comment.