aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorArend van Spriel <arend@broadcom.com>2011-10-12 14:51:16 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-10-14 14:48:17 -0400
commitf7264adb9a0ec492c3f6ee2a476a9ad9027317f9 (patch)
tree37e420a10ab199cc25b75eab1c9aa8d2fc1f56c4 /drivers
parentdf4492f89499fa5ba45f8fdfe1f100b4112f5368 (diff)
brcm80211: add endian annotation to packet filter structures
The packet filter structures were byte copied and transferred over the host bus to the device. As such they are little endian and have been annotated accordingly. Reported-by: Johannes Berg <johannes@sipsolutions.net> Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com> Reviewed-by: Roland Vossen <rvossen@broadcom.com> Signed-off-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/dhd.h22
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c34
2 files changed, 29 insertions, 27 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd.h b/drivers/net/wireless/brcm80211/brcmfmac/dhd.h
index f58c0ebc2f1..951910e7ead 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/dhd.h
+++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd.h
@@ -330,14 +330,14 @@ enum brcmf_bus_state {
330 * start matching, the pattern to match, the size of the pattern, and a bitmask 330 * start matching, the pattern to match, the size of the pattern, and a bitmask
331 * that indicates which bits within the pattern should be matched. 331 * that indicates which bits within the pattern should be matched.
332 */ 332 */
333struct brcmf_pkt_filter_pattern { 333struct brcmf_pkt_filter_pattern_le {
334 /* 334 /*
335 * Offset within received packet to start pattern matching. 335 * Offset within received packet to start pattern matching.
336 * Offset '0' is the first byte of the ethernet header. 336 * Offset '0' is the first byte of the ethernet header.
337 */ 337 */
338 u32 offset; 338 __le32 offset;
339 /* Size of the pattern. Bitmask must be the same size.*/ 339 /* Size of the pattern. Bitmask must be the same size.*/
340 u32 size_bytes; 340 __le32 size_bytes;
341 /* 341 /*
342 * Variable length mask and pattern data. mask starts at offset 0. 342 * Variable length mask and pattern data. mask starts at offset 0.
343 * Pattern immediately follows mask. 343 * Pattern immediately follows mask.
@@ -346,19 +346,19 @@ struct brcmf_pkt_filter_pattern {
346}; 346};
347 347
348/* IOVAR "pkt_filter_add" parameter. Used to install packet filters. */ 348/* IOVAR "pkt_filter_add" parameter. Used to install packet filters. */
349struct brcmf_pkt_filter { 349struct brcmf_pkt_filter_le {
350 u32 id; /* Unique filter id, specified by app. */ 350 __le32 id; /* Unique filter id, specified by app. */
351 u32 type; /* Filter type (WL_PKT_FILTER_TYPE_xxx). */ 351 __le32 type; /* Filter type (WL_PKT_FILTER_TYPE_xxx). */
352 u32 negate_match; /* Negate the result of filter matches */ 352 __le32 negate_match; /* Negate the result of filter matches */
353 union { /* Filter definitions */ 353 union { /* Filter definitions */
354 struct brcmf_pkt_filter_pattern pattern; /* Filter pattern */ 354 struct brcmf_pkt_filter_pattern_le pattern; /* Filter pattern */
355 } u; 355 } u;
356}; 356};
357 357
358/* IOVAR "pkt_filter_enable" parameter. */ 358/* IOVAR "pkt_filter_enable" parameter. */
359struct brcmf_pkt_filter_enable { 359struct brcmf_pkt_filter_enable_le {
360 u32 id; /* Unique filter id */ 360 __le32 id; /* Unique filter id */
361 u32 enable; /* Enable/disable bool */ 361 __le32 enable; /* Enable/disable bool */
362}; 362};
363 363
364/* BSS info structure 364/* BSS info structure
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c
index 4075fd74dd9..a43b3daa76a 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c
@@ -36,9 +36,9 @@ int brcmf_msg_level;
36 36
37#define MSGTRACE_VERSION 1 37#define MSGTRACE_VERSION 1
38 38
39#define BRCMF_PKT_FILTER_FIXED_LEN offsetof(struct brcmf_pkt_filter, u) 39#define BRCMF_PKT_FILTER_FIXED_LEN offsetof(struct brcmf_pkt_filter_le, u)
40#define BRCMF_PKT_FILTER_PATTERN_FIXED_LEN \ 40#define BRCMF_PKT_FILTER_PATTERN_FIXED_LEN \
41 offsetof(struct brcmf_pkt_filter_pattern, mask_and_pattern) 41 offsetof(struct brcmf_pkt_filter_pattern_le, mask_and_pattern)
42 42
43#ifdef BCMDBG 43#ifdef BCMDBG
44static const char brcmf_version[] = 44static const char brcmf_version[] =
@@ -558,8 +558,9 @@ brcmf_c_pktfilter_offload_enable(struct brcmf_pub *drvr, char *arg, int enable,
558 char *arg_save = NULL, *arg_org = NULL; 558 char *arg_save = NULL, *arg_org = NULL;
559 int rc; 559 int rc;
560 char buf[128]; 560 char buf[128];
561 struct brcmf_pkt_filter_enable enable_parm; 561 struct brcmf_pkt_filter_enable_le enable_parm;
562 struct brcmf_pkt_filter_enable *pkt_filterp; 562 struct brcmf_pkt_filter_enable_le *pkt_filterp;
563 __le32 mmode_le;
563 564
564 arg_save = kmalloc(strlen(arg) + 1, GFP_ATOMIC); 565 arg_save = kmalloc(strlen(arg) + 1, GFP_ATOMIC);
565 if (!arg_save) 566 if (!arg_save)
@@ -582,15 +583,15 @@ brcmf_c_pktfilter_offload_enable(struct brcmf_pub *drvr, char *arg, int enable,
582 buf[str_len] = '\0'; 583 buf[str_len] = '\0';
583 buf_len = str_len + 1; 584 buf_len = str_len + 1;
584 585
585 pkt_filterp = (struct brcmf_pkt_filter_enable *) (buf + str_len + 1); 586 pkt_filterp = (struct brcmf_pkt_filter_enable_le *) (buf + str_len + 1);
586 587
587 /* Parse packet filter id. */ 588 /* Parse packet filter id. */
588 enable_parm.id = 0; 589 enable_parm.id = 0;
589 if (!kstrtoul(argv[i], 0, &res)) 590 if (!kstrtoul(argv[i], 0, &res))
590 enable_parm.id = (u32)res; 591 enable_parm.id = cpu_to_le32((u32)res);
591 592
592 /* Parse enable/disable value. */ 593 /* Parse enable/disable value. */
593 enable_parm.enable = enable; 594 enable_parm.enable = cpu_to_le32(enable);
594 595
595 buf_len += sizeof(enable_parm); 596 buf_len += sizeof(enable_parm);
596 memcpy((char *)pkt_filterp, &enable_parm, sizeof(enable_parm)); 597 memcpy((char *)pkt_filterp, &enable_parm, sizeof(enable_parm));
@@ -605,7 +606,8 @@ brcmf_c_pktfilter_offload_enable(struct brcmf_pub *drvr, char *arg, int enable,
605 brcmf_dbg(TRACE, "successfully added pktfilter %s\n", arg); 606 brcmf_dbg(TRACE, "successfully added pktfilter %s\n", arg);
606 607
607 /* Contorl the master mode */ 608 /* Contorl the master mode */
608 brcmu_mkiovar("pkt_filter_mode", (char *)&master_mode, 4, buf, 609 mmode_le = cpu_to_le32(master_mode);
610 brcmu_mkiovar("pkt_filter_mode", (char *)&mmode_le, 4, buf,
609 sizeof(buf)); 611 sizeof(buf));
610 rc = brcmf_proto_cdc_set_dcmd(drvr, 0, BRCMF_C_SET_VAR, buf, 612 rc = brcmf_proto_cdc_set_dcmd(drvr, 0, BRCMF_C_SET_VAR, buf,
611 sizeof(buf)); 613 sizeof(buf));
@@ -621,8 +623,8 @@ fail:
621void brcmf_c_pktfilter_offload_set(struct brcmf_pub *drvr, char *arg) 623void brcmf_c_pktfilter_offload_set(struct brcmf_pub *drvr, char *arg)
622{ 624{
623 const char *str; 625 const char *str;
624 struct brcmf_pkt_filter pkt_filter; 626 struct brcmf_pkt_filter_le pkt_filter;
625 struct brcmf_pkt_filter *pkt_filterp; 627 struct brcmf_pkt_filter_le *pkt_filterp;
626 unsigned long res; 628 unsigned long res;
627 int buf_len; 629 int buf_len;
628 int str_len; 630 int str_len;
@@ -658,12 +660,12 @@ void brcmf_c_pktfilter_offload_set(struct brcmf_pub *drvr, char *arg)
658 str_len = strlen(str); 660 str_len = strlen(str);
659 buf_len = str_len + 1; 661 buf_len = str_len + 1;
660 662
661 pkt_filterp = (struct brcmf_pkt_filter *) (buf + str_len + 1); 663 pkt_filterp = (struct brcmf_pkt_filter_le *) (buf + str_len + 1);
662 664
663 /* Parse packet filter id. */ 665 /* Parse packet filter id. */
664 pkt_filter.id = 0; 666 pkt_filter.id = 0;
665 if (!kstrtoul(argv[i], 0, &res)) 667 if (!kstrtoul(argv[i], 0, &res))
666 pkt_filter.id = (u32)res; 668 pkt_filter.id = cpu_to_le32((u32)res);
667 669
668 if (NULL == argv[++i]) { 670 if (NULL == argv[++i]) {
669 brcmf_dbg(ERROR, "Polarity not provided\n"); 671 brcmf_dbg(ERROR, "Polarity not provided\n");
@@ -673,7 +675,7 @@ void brcmf_c_pktfilter_offload_set(struct brcmf_pub *drvr, char *arg)
673 /* Parse filter polarity. */ 675 /* Parse filter polarity. */
674 pkt_filter.negate_match = 0; 676 pkt_filter.negate_match = 0;
675 if (!kstrtoul(argv[i], 0, &res)) 677 if (!kstrtoul(argv[i], 0, &res))
676 pkt_filter.negate_match = (u32)res; 678 pkt_filter.negate_match = cpu_to_le32((u32)res);
677 679
678 if (NULL == argv[++i]) { 680 if (NULL == argv[++i]) {
679 brcmf_dbg(ERROR, "Filter type not provided\n"); 681 brcmf_dbg(ERROR, "Filter type not provided\n");
@@ -683,7 +685,7 @@ void brcmf_c_pktfilter_offload_set(struct brcmf_pub *drvr, char *arg)
683 /* Parse filter type. */ 685 /* Parse filter type. */
684 pkt_filter.type = 0; 686 pkt_filter.type = 0;
685 if (!kstrtoul(argv[i], 0, &res)) 687 if (!kstrtoul(argv[i], 0, &res))
686 pkt_filter.type = (u32)res; 688 pkt_filter.type = cpu_to_le32((u32)res);
687 689
688 if (NULL == argv[++i]) { 690 if (NULL == argv[++i]) {
689 brcmf_dbg(ERROR, "Offset not provided\n"); 691 brcmf_dbg(ERROR, "Offset not provided\n");
@@ -693,7 +695,7 @@ void brcmf_c_pktfilter_offload_set(struct brcmf_pub *drvr, char *arg)
693 /* Parse pattern filter offset. */ 695 /* Parse pattern filter offset. */
694 pkt_filter.u.pattern.offset = 0; 696 pkt_filter.u.pattern.offset = 0;
695 if (!kstrtoul(argv[i], 0, &res)) 697 if (!kstrtoul(argv[i], 0, &res))
696 pkt_filter.u.pattern.offset = (u32)res; 698 pkt_filter.u.pattern.offset = cpu_to_le32((u32)res);
697 699
698 if (NULL == argv[++i]) { 700 if (NULL == argv[++i]) {
699 brcmf_dbg(ERROR, "Bitmask not provided\n"); 701 brcmf_dbg(ERROR, "Bitmask not provided\n");
@@ -721,7 +723,7 @@ void brcmf_c_pktfilter_offload_set(struct brcmf_pub *drvr, char *arg)
721 goto fail; 723 goto fail;
722 } 724 }
723 725
724 pkt_filter.u.pattern.size_bytes = mask_size; 726 pkt_filter.u.pattern.size_bytes = cpu_to_le32(mask_size);
725 buf_len += BRCMF_PKT_FILTER_FIXED_LEN; 727 buf_len += BRCMF_PKT_FILTER_FIXED_LEN;
726 buf_len += (BRCMF_PKT_FILTER_PATTERN_FIXED_LEN + 2 * mask_size); 728 buf_len += (BRCMF_PKT_FILTER_PATTERN_FIXED_LEN + 2 * mask_size);
727 729