Skip to content

Commit

Permalink
[PATCH] libertas: convert libertas_mpp into anycast_mask
Browse files Browse the repository at this point in the history
With firmware 5.220.11.p5, this allows to specify the anycast addresses the
device will listen to.

The anycast address range is C0:27:C0:27:C0:XX where XX goes from 00 to 1F (or
0 to 31 in dec). The value to write on anycast_mask will specify which
addresses the device listens to. Bits in a 32 bit int are numbered from 0
(least significative bit) to 31. A specific address ending in YY will be
listened to if bit YY in the value is set to one.

Examples:

0x00000000 : do not listen to any anycast address
0xFFFFFFFF : listen to every anycast address from :00 to :1F
0x00000013 : listen to anycast addresses :00, :01 and :04

Signed-off-by: Luis Carlos Cobo <luisca@cozybit.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Luis Carlos authored and John W. Linville committed Jun 12, 2007
1 parent 2fb3bd6 commit 82fde74
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 15 deletions.
4 changes: 2 additions & 2 deletions drivers/net/wireless/libertas/host.h
Original file line number Diff line number Diff line change
Expand Up @@ -310,8 +310,8 @@ enum cmd_mesh_access_opts {
cmd_act_mesh_get_ttl = 1,
cmd_act_mesh_set_ttl,
cmd_act_mesh_get_stats,
cmd_act_mesh_get_mpp,
cmd_act_mesh_set_mpp,
cmd_act_mesh_get_anycast,
cmd_act_mesh_set_anycast,
};

/** Card Event definition */
Expand Down
26 changes: 13 additions & 13 deletions drivers/net/wireless/libertas/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,45 +178,45 @@ u16 libertas_region_code_to_index[MRVDRV_MAX_REGION_CODE] =
*/

/**
* @brief Get function for sysfs attribute libertas_mpp
* @brief Get function for sysfs attribute anycast_mask
*/
static ssize_t libertas_mpp_get(struct device * dev,
static ssize_t libertas_anycast_get(struct device * dev,
struct device_attribute *attr, char * buf) {
struct cmd_ds_mesh_access mesh_access;

memset(&mesh_access, 0, sizeof(mesh_access));
libertas_prepare_and_send_command(to_net_dev(dev)->priv,
cmd_mesh_access,
cmd_act_mesh_get_mpp,
cmd_act_mesh_get_anycast,
cmd_option_waitforrsp, 0, (void *)&mesh_access);

return snprintf(buf, 3, "%d\n", le32_to_cpu(mesh_access.data[0]));
return snprintf(buf, 12, "0x%X\n", le32_to_cpu(mesh_access.data[0]));
}

/**
* @brief Set function for sysfs attribute libertas_mpp
* @brief Set function for sysfs attribute anycast_mask
*/
static ssize_t libertas_mpp_set(struct device * dev,
static ssize_t libertas_anycast_set(struct device * dev,
struct device_attribute *attr, const char * buf, size_t count) {
struct cmd_ds_mesh_access mesh_access;
uint32_t datum;

memset(&mesh_access, 0, sizeof(mesh_access));
sscanf(buf, "%d", &datum);
sscanf(buf, "%x", &datum);
mesh_access.data[0] = cpu_to_le32(datum);

libertas_prepare_and_send_command((to_net_dev(dev))->priv,
cmd_mesh_access,
cmd_act_mesh_set_mpp,
cmd_act_mesh_set_anycast,
cmd_option_waitforrsp, 0, (void *)&mesh_access);
return strlen(buf);
}

/**
* libertas_mpp attribute to be exported per mshX interface
* through sysfs (/sys/class/net/mshX/libertas-mpp)
* anycast_mask attribute to be exported per mshX interface
* through sysfs (/sys/class/net/mshX/anycast_mask)
*/
static DEVICE_ATTR(libertas_mpp, 0644, libertas_mpp_get, libertas_mpp_set );
static DEVICE_ATTR(anycast_mask, 0644, libertas_anycast_get, libertas_anycast_set);

/**
* @brief Check if the device can be open and wait if necessary.
Expand Down Expand Up @@ -939,7 +939,7 @@ int libertas_add_mesh(wlan_private *priv, struct device *dev)
goto err_free;
}

ret = device_create_file(&(mesh_dev->dev), &dev_attr_libertas_mpp);
ret = device_create_file(&(mesh_dev->dev), &dev_attr_anycast_mask);
if (ret)
goto err_unregister;

Expand Down Expand Up @@ -1049,7 +1049,7 @@ void libertas_remove_mesh(wlan_private *priv)
netif_stop_queue(mesh_dev);
netif_carrier_off(priv->mesh_dev);

device_remove_file(&(mesh_dev->dev), &dev_attr_libertas_mpp);
device_remove_file(&(mesh_dev->dev), &dev_attr_anycast_mask);
unregister_netdev(mesh_dev);

priv->mesh_dev = NULL ;
Expand Down

0 comments on commit 82fde74

Please sign in to comment.