diff options
author | Holger Schurig <hs4233@mail.mn-solutions.de> | 2008-03-26 04:58:32 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-04-01 17:13:16 -0400 |
commit | 2af9f039a17c0acd9e5b21d10058688687bad86d (patch) | |
tree | 473a0dd553b60d1886cfbb40b40a570d78c3d839 /drivers/net/wireless/libertas/main.c | |
parent | 717ddc0ebdd00c233fcb1ae9a243e69f301cde24 (diff) |
libertas: convert CMD_802_11_MAC_ADDRESS to a direct command
* directly call lbs_cmd_with_response()
* only overwrite priv->current_addr once the firmware call succeeded
Signed-off-by: Holger Schurig <hs4233@mail.mn-solutions.de>
Acked-by: Dan Williams <dcbw@redhat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/libertas/main.c')
-rw-r--r-- | drivers/net/wireless/libertas/main.c | 25 |
1 files changed, 9 insertions, 16 deletions
diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index dac72f7af701..d0e4c3b6deaa 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c | |||
@@ -531,34 +531,27 @@ static int lbs_set_mac_address(struct net_device *dev, void *addr) | |||
531 | int ret = 0; | 531 | int ret = 0; |
532 | struct lbs_private *priv = (struct lbs_private *) dev->priv; | 532 | struct lbs_private *priv = (struct lbs_private *) dev->priv; |
533 | struct sockaddr *phwaddr = addr; | 533 | struct sockaddr *phwaddr = addr; |
534 | struct cmd_ds_802_11_mac_address cmd; | ||
534 | 535 | ||
535 | lbs_deb_enter(LBS_DEB_NET); | 536 | lbs_deb_enter(LBS_DEB_NET); |
536 | 537 | ||
537 | /* In case it was called from the mesh device */ | 538 | /* In case it was called from the mesh device */ |
538 | dev = priv->dev ; | 539 | dev = priv->dev; |
539 | |||
540 | memset(priv->current_addr, 0, ETH_ALEN); | ||
541 | |||
542 | /* dev->dev_addr is 8 bytes */ | ||
543 | lbs_deb_hex(LBS_DEB_NET, "dev->dev_addr", dev->dev_addr, ETH_ALEN); | ||
544 | |||
545 | lbs_deb_hex(LBS_DEB_NET, "addr", phwaddr->sa_data, ETH_ALEN); | ||
546 | memcpy(priv->current_addr, phwaddr->sa_data, ETH_ALEN); | ||
547 | 540 | ||
548 | ret = lbs_prepare_and_send_command(priv, CMD_802_11_MAC_ADDRESS, | 541 | cmd.hdr.size = cpu_to_le16(sizeof(cmd)); |
549 | CMD_ACT_SET, | 542 | cmd.action = cpu_to_le16(CMD_ACT_SET); |
550 | CMD_OPTION_WAITFORRSP, 0, NULL); | 543 | memcpy(cmd.macadd, phwaddr->sa_data, ETH_ALEN); |
551 | 544 | ||
545 | ret = lbs_cmd_with_response(priv, CMD_802_11_MAC_ADDRESS, &cmd); | ||
552 | if (ret) { | 546 | if (ret) { |
553 | lbs_deb_net("set MAC address failed\n"); | 547 | lbs_deb_net("set MAC address failed\n"); |
554 | ret = -1; | ||
555 | goto done; | 548 | goto done; |
556 | } | 549 | } |
557 | 550 | ||
558 | lbs_deb_hex(LBS_DEB_NET, "priv->macaddr", priv->current_addr, ETH_ALEN); | 551 | memcpy(priv->current_addr, phwaddr->sa_data, ETH_ALEN); |
559 | memcpy(dev->dev_addr, priv->current_addr, ETH_ALEN); | 552 | memcpy(dev->dev_addr, phwaddr->sa_data, ETH_ALEN); |
560 | if (priv->mesh_dev) | 553 | if (priv->mesh_dev) |
561 | memcpy(priv->mesh_dev->dev_addr, priv->current_addr, ETH_ALEN); | 554 | memcpy(priv->mesh_dev->dev_addr, phwaddr->sa_data, ETH_ALEN); |
562 | 555 | ||
563 | done: | 556 | done: |
564 | lbs_deb_leave_args(LBS_DEB_NET, "ret %d", ret); | 557 | lbs_deb_leave_args(LBS_DEB_NET, "ret %d", ret); |