-
-static ssize_t lbs_tlv_size(const u8 *tlv, u16 size)
-{
- ssize_t pos = 0;
- struct mrvlietypesheader *tlv_h;
- while (pos < size) {
- u16 length;
- tlv_h = (struct mrvlietypesheader *) tlv;
- if (tlv_h->len == 0)
- return pos;
- length = le16_to_cpu(tlv_h->len) +
- sizeof(struct mrvlietypesheader);
- pos += length;
- tlv += length;
- }
- return pos;
-}
-
-
-static void lbs_cmd_802_11_subscribe_event(struct lbs_private *priv,
- struct cmd_ds_command *cmd, u16 cmd_action,
- void *pdata_buf)
-{
- struct cmd_ds_802_11_subscribe_event *events =
- (struct cmd_ds_802_11_subscribe_event *) pdata_buf;
-
- /* pdata_buf points to a struct cmd_ds_802_11_subscribe_event and room
- * for various Marvell TLVs */
-
- lbs_deb_enter(LBS_DEB_CMD);
-
- cmd->size = cpu_to_le16(sizeof(*events)
- - sizeof(events->tlv)
- + S_DS_GEN);
- cmd->params.subscribe_event.action = cpu_to_le16(cmd_action);
- if (cmd_action == CMD_ACT_GET) {
- cmd->params.subscribe_event.events = 0;
- } else {
- ssize_t sz = lbs_tlv_size(events->tlv, sizeof(events->tlv));
- cmd->size = cpu_to_le16(le16_to_cpu(cmd->size) + sz);
- cmd->params.subscribe_event.events = events->events;
- memcpy(cmd->params.subscribe_event.tlv, events->tlv, sz);
- }
-
- lbs_deb_leave(LBS_DEB_CMD);
-}
-