diff options
Diffstat (limited to 'net/irda/irlan/irlan_common.c')
-rw-r--r-- | net/irda/irlan/irlan_common.c | 46 |
1 files changed, 37 insertions, 9 deletions
diff --git a/net/irda/irlan/irlan_common.c b/net/irda/irlan/irlan_common.c index 7dd0a2fe1d20..9b962f247714 100644 --- a/net/irda/irlan/irlan_common.c +++ b/net/irda/irlan/irlan_common.c | |||
@@ -636,7 +636,8 @@ void irlan_get_provider_info(struct irlan_cb *self) | |||
636 | IRDA_ASSERT(self != NULL, return;); | 636 | IRDA_ASSERT(self != NULL, return;); |
637 | IRDA_ASSERT(self->magic == IRLAN_MAGIC, return;); | 637 | IRDA_ASSERT(self->magic == IRLAN_MAGIC, return;); |
638 | 638 | ||
639 | skb = alloc_skb(64, GFP_ATOMIC); | 639 | skb = alloc_skb(IRLAN_MAX_HEADER + IRLAN_CMD_HEADER, |
640 | GFP_ATOMIC); | ||
640 | if (!skb) | 641 | if (!skb) |
641 | return; | 642 | return; |
642 | 643 | ||
@@ -668,7 +669,10 @@ void irlan_open_data_channel(struct irlan_cb *self) | |||
668 | IRDA_ASSERT(self != NULL, return;); | 669 | IRDA_ASSERT(self != NULL, return;); |
669 | IRDA_ASSERT(self->magic == IRLAN_MAGIC, return;); | 670 | IRDA_ASSERT(self->magic == IRLAN_MAGIC, return;); |
670 | 671 | ||
671 | skb = alloc_skb(64, GFP_ATOMIC); | 672 | skb = alloc_skb(IRLAN_MAX_HEADER + IRLAN_CMD_HEADER + |
673 | IRLAN_STRING_PARAMETER_LEN("MEDIA", "802.3") + | ||
674 | IRLAN_STRING_PARAMETER_LEN("ACCESS_TYPE", "DIRECT"), | ||
675 | GFP_ATOMIC); | ||
672 | if (!skb) | 676 | if (!skb) |
673 | return; | 677 | return; |
674 | 678 | ||
@@ -704,7 +708,9 @@ void irlan_close_data_channel(struct irlan_cb *self) | |||
704 | if (self->client.tsap_ctrl == NULL) | 708 | if (self->client.tsap_ctrl == NULL) |
705 | return; | 709 | return; |
706 | 710 | ||
707 | skb = alloc_skb(64, GFP_ATOMIC); | 711 | skb = alloc_skb(IRLAN_MAX_HEADER + IRLAN_CMD_HEADER + |
712 | IRLAN_BYTE_PARAMETER_LEN("DATA_CHAN"), | ||
713 | GFP_ATOMIC); | ||
708 | if (!skb) | 714 | if (!skb) |
709 | return; | 715 | return; |
710 | 716 | ||
@@ -715,7 +721,7 @@ void irlan_close_data_channel(struct irlan_cb *self) | |||
715 | 721 | ||
716 | /* Build frame */ | 722 | /* Build frame */ |
717 | frame[0] = CMD_CLOSE_DATA_CHAN; | 723 | frame[0] = CMD_CLOSE_DATA_CHAN; |
718 | frame[1] = 0x01; /* Two parameters */ | 724 | frame[1] = 0x01; /* One parameter */ |
719 | 725 | ||
720 | irlan_insert_byte_param(skb, "DATA_CHAN", self->dtsap_sel_data); | 726 | irlan_insert_byte_param(skb, "DATA_CHAN", self->dtsap_sel_data); |
721 | 727 | ||
@@ -739,7 +745,11 @@ static void irlan_open_unicast_addr(struct irlan_cb *self) | |||
739 | IRDA_ASSERT(self != NULL, return;); | 745 | IRDA_ASSERT(self != NULL, return;); |
740 | IRDA_ASSERT(self->magic == IRLAN_MAGIC, return;); | 746 | IRDA_ASSERT(self->magic == IRLAN_MAGIC, return;); |
741 | 747 | ||
742 | skb = alloc_skb(128, GFP_ATOMIC); | 748 | skb = alloc_skb(IRLAN_MAX_HEADER + IRLAN_CMD_HEADER + |
749 | IRLAN_BYTE_PARAMETER_LEN("DATA_CHAN") + | ||
750 | IRLAN_STRING_PARAMETER_LEN("FILTER_TYPE", "DIRECTED") + | ||
751 | IRLAN_STRING_PARAMETER_LEN("FILTER_MODE", "FILTER"), | ||
752 | GFP_ATOMIC); | ||
743 | if (!skb) | 753 | if (!skb) |
744 | return; | 754 | return; |
745 | 755 | ||
@@ -777,7 +787,12 @@ void irlan_set_broadcast_filter(struct irlan_cb *self, int status) | |||
777 | IRDA_ASSERT(self != NULL, return;); | 787 | IRDA_ASSERT(self != NULL, return;); |
778 | IRDA_ASSERT(self->magic == IRLAN_MAGIC, return;); | 788 | IRDA_ASSERT(self->magic == IRLAN_MAGIC, return;); |
779 | 789 | ||
780 | skb = alloc_skb(128, GFP_ATOMIC); | 790 | skb = alloc_skb(IRLAN_MAX_HEADER + IRLAN_CMD_HEADER + |
791 | IRLAN_BYTE_PARAMETER_LEN("DATA_CHAN") + | ||
792 | IRLAN_STRING_PARAMETER_LEN("FILTER_TYPE", "BROADCAST") + | ||
793 | /* We may waste one byte here...*/ | ||
794 | IRLAN_STRING_PARAMETER_LEN("FILTER_MODE", "FILTER"), | ||
795 | GFP_ATOMIC); | ||
781 | if (!skb) | 796 | if (!skb) |
782 | return; | 797 | return; |
783 | 798 | ||
@@ -816,7 +831,12 @@ void irlan_set_multicast_filter(struct irlan_cb *self, int status) | |||
816 | IRDA_ASSERT(self != NULL, return;); | 831 | IRDA_ASSERT(self != NULL, return;); |
817 | IRDA_ASSERT(self->magic == IRLAN_MAGIC, return;); | 832 | IRDA_ASSERT(self->magic == IRLAN_MAGIC, return;); |
818 | 833 | ||
819 | skb = alloc_skb(128, GFP_ATOMIC); | 834 | skb = alloc_skb(IRLAN_MAX_HEADER + IRLAN_CMD_HEADER + |
835 | IRLAN_BYTE_PARAMETER_LEN("DATA_CHAN") + | ||
836 | IRLAN_STRING_PARAMETER_LEN("FILTER_TYPE", "MULTICAST") + | ||
837 | /* We may waste one byte here...*/ | ||
838 | IRLAN_STRING_PARAMETER_LEN("FILTER_MODE", "NONE"), | ||
839 | GFP_ATOMIC); | ||
820 | if (!skb) | 840 | if (!skb) |
821 | return; | 841 | return; |
822 | 842 | ||
@@ -856,7 +876,12 @@ static void irlan_get_unicast_addr(struct irlan_cb *self) | |||
856 | IRDA_ASSERT(self != NULL, return;); | 876 | IRDA_ASSERT(self != NULL, return;); |
857 | IRDA_ASSERT(self->magic == IRLAN_MAGIC, return;); | 877 | IRDA_ASSERT(self->magic == IRLAN_MAGIC, return;); |
858 | 878 | ||
859 | skb = alloc_skb(128, GFP_ATOMIC); | 879 | skb = alloc_skb(IRLAN_MAX_HEADER + IRLAN_CMD_HEADER + |
880 | IRLAN_BYTE_PARAMETER_LEN("DATA_CHAN") + | ||
881 | IRLAN_STRING_PARAMETER_LEN("FILTER_TYPE", "DIRECTED") + | ||
882 | IRLAN_STRING_PARAMETER_LEN("FILTER_OPERATION", | ||
883 | "DYNAMIC"), | ||
884 | GFP_ATOMIC); | ||
860 | if (!skb) | 885 | if (!skb) |
861 | return; | 886 | return; |
862 | 887 | ||
@@ -891,7 +916,10 @@ void irlan_get_media_char(struct irlan_cb *self) | |||
891 | IRDA_ASSERT(self != NULL, return;); | 916 | IRDA_ASSERT(self != NULL, return;); |
892 | IRDA_ASSERT(self->magic == IRLAN_MAGIC, return;); | 917 | IRDA_ASSERT(self->magic == IRLAN_MAGIC, return;); |
893 | 918 | ||
894 | skb = alloc_skb(64, GFP_ATOMIC); | 919 | skb = alloc_skb(IRLAN_MAX_HEADER + IRLAN_CMD_HEADER + |
920 | IRLAN_STRING_PARAMETER_LEN("MEDIA", "802.3"), | ||
921 | GFP_ATOMIC); | ||
922 | |||
895 | if (!skb) | 923 | if (!skb) |
896 | return; | 924 | return; |
897 | 925 | ||