@@ -90,21 +90,21 @@ MODULE_LICENSE("GPL v2");
90
90
#define ESD_USB_MAX_TX_URBS 16 /* must be power of 2 */
91
91
92
92
struct esd_usb_header_msg {
93
- u8 len ; /* len is always the total message length in 32bit words */
93
+ u8 len ; /* total message length in 32bit words */
94
94
u8 cmd ;
95
95
u8 rsvd [2 ];
96
96
};
97
97
98
98
struct esd_usb_version_msg {
99
- u8 len ;
99
+ u8 len ; /* total message length in 32bit words */
100
100
u8 cmd ;
101
101
u8 rsvd ;
102
102
u8 flags ;
103
103
__le32 drv_version ;
104
104
};
105
105
106
106
struct esd_usb_version_reply_msg {
107
- u8 len ;
107
+ u8 len ; /* total message length in 32bit words */
108
108
u8 cmd ;
109
109
u8 nets ;
110
110
u8 features ;
@@ -115,7 +115,7 @@ struct esd_usb_version_reply_msg {
115
115
};
116
116
117
117
struct esd_usb_rx_msg {
118
- u8 len ;
118
+ u8 len ; /* total message length in 32bit words */
119
119
u8 cmd ;
120
120
u8 net ;
121
121
u8 dlc ;
@@ -133,7 +133,7 @@ struct esd_usb_rx_msg {
133
133
};
134
134
135
135
struct esd_usb_tx_msg {
136
- u8 len ;
136
+ u8 len ; /* total message length in 32bit words */
137
137
u8 cmd ;
138
138
u8 net ;
139
139
u8 dlc ;
@@ -143,7 +143,7 @@ struct esd_usb_tx_msg {
143
143
};
144
144
145
145
struct esd_usb_tx_done_msg {
146
- u8 len ;
146
+ u8 len ; /* total message length in 32bit words */
147
147
u8 cmd ;
148
148
u8 net ;
149
149
u8 status ;
@@ -152,15 +152,15 @@ struct esd_usb_tx_done_msg {
152
152
};
153
153
154
154
struct esd_usb_id_filter_msg {
155
- u8 len ;
155
+ u8 len ; /* total message length in 32bit words */
156
156
u8 cmd ;
157
157
u8 net ;
158
158
u8 option ;
159
- __le32 mask [ESD_USB_MAX_ID_SEGMENT + 1 ];
159
+ __le32 mask [ESD_USB_MAX_ID_SEGMENT + 1 ]; /* +1 for 29bit extended IDs */
160
160
};
161
161
162
162
struct esd_usb_set_baudrate_msg {
163
- u8 len ;
163
+ u8 len ; /* total message length in 32bit words */
164
164
u8 cmd ;
165
165
u8 net ;
166
166
u8 rsvd ;
@@ -438,7 +438,7 @@ static void esd_usb_read_bulk_callback(struct urb *urb)
438
438
break ;
439
439
}
440
440
441
- pos += msg -> hdr .len << 2 ;
441
+ pos += msg -> hdr .len * sizeof ( u32 ); /* convert to # of bytes */
442
442
443
443
if (pos > urb -> actual_length ) {
444
444
dev_err (dev -> udev -> dev .parent , "format error\n" );
@@ -532,7 +532,7 @@ static int esd_usb_send_msg(struct esd_usb *dev, union esd_usb_msg *msg)
532
532
return usb_bulk_msg (dev -> udev ,
533
533
usb_sndbulkpipe (dev -> udev , 2 ),
534
534
msg ,
535
- msg -> hdr .len << 2 ,
535
+ msg -> hdr .len * sizeof ( u32 ), /* convert to # of bytes */
536
536
& actual_length ,
537
537
1000 );
538
538
}
@@ -648,7 +648,7 @@ static int esd_usb_start(struct esd_usb_net_priv *priv)
648
648
* field followed by only some bitmasks.
649
649
*/
650
650
msg -> hdr .cmd = ESD_USB_CMD_IDADD ;
651
- msg -> hdr .len = 2 + ESD_USB_MAX_ID_SEGMENT ;
651
+ msg -> hdr .len = sizeof ( struct esd_usb_id_filter_msg ) / sizeof ( u32 ); /* # of 32bit words */
652
652
msg -> filter .net = priv -> index ;
653
653
msg -> filter .option = ESD_USB_ID_ENABLE ; /* start with segment 0 */
654
654
for (i = 0 ; i < ESD_USB_MAX_ID_SEGMENT ; i ++ )
@@ -759,7 +759,8 @@ static netdev_tx_t esd_usb_start_xmit(struct sk_buff *skb,
759
759
760
760
msg = (union esd_usb_msg * )buf ;
761
761
762
- msg -> hdr .len = 3 ; /* minimal length */
762
+ /* minimal length as # of 32bit words */
763
+ msg -> hdr .len = offsetof(struct esd_usb_tx_msg , data ) / sizeof (u32 );
763
764
msg -> hdr .cmd = ESD_USB_CMD_CAN_TX ;
764
765
msg -> tx .net = priv -> index ;
765
766
msg -> tx .dlc = can_get_cc_dlc (cf , priv -> can .ctrlmode );
@@ -774,7 +775,8 @@ static netdev_tx_t esd_usb_start_xmit(struct sk_buff *skb,
774
775
for (i = 0 ; i < cf -> len ; i ++ )
775
776
msg -> tx .data [i ] = cf -> data [i ];
776
777
777
- msg -> hdr .len += (cf -> len + 3 ) >> 2 ;
778
+ /* round up, then divide by 4 to add the payload length as # of 32bit words */
779
+ msg -> hdr .len += DIV_ROUND_UP (cf -> len , sizeof (u32 ));
778
780
779
781
for (i = 0 ; i < ESD_USB_MAX_TX_URBS ; i ++ ) {
780
782
if (priv -> tx_contexts [i ].echo_index == ESD_USB_MAX_TX_URBS ) {
@@ -797,7 +799,7 @@ static netdev_tx_t esd_usb_start_xmit(struct sk_buff *skb,
797
799
msg -> tx .hnd = 0x80000000 | i ; /* returned in TX done message */
798
800
799
801
usb_fill_bulk_urb (urb , dev -> udev , usb_sndbulkpipe (dev -> udev , 2 ), buf ,
800
- msg -> hdr .len << 2 ,
802
+ msg -> hdr .len * sizeof ( u32 ), /* convert to # of bytes */
801
803
esd_usb_write_bulk_callback , context );
802
804
803
805
urb -> transfer_flags |= URB_NO_TRANSFER_DMA_MAP ;
@@ -860,7 +862,7 @@ static int esd_usb_close(struct net_device *netdev)
860
862
861
863
/* Disable all IDs (see esd_usb_start()) */
862
864
msg -> hdr .cmd = ESD_USB_CMD_IDADD ;
863
- msg -> hdr .len = 2 + ESD_USB_MAX_ID_SEGMENT ;
865
+ msg -> hdr .len = sizeof ( struct esd_usb_id_filter_msg ) / sizeof ( u32 ); /* # of 32bit words */
864
866
msg -> filter .net = priv -> index ;
865
867
msg -> filter .option = ESD_USB_ID_ENABLE ; /* start with segment 0 */
866
868
for (i = 0 ; i <= ESD_USB_MAX_ID_SEGMENT ; i ++ )
@@ -869,7 +871,7 @@ static int esd_usb_close(struct net_device *netdev)
869
871
netdev_err (netdev , "sending idadd message failed\n" );
870
872
871
873
/* set CAN controller to reset mode */
872
- msg -> hdr .len = 2 ;
874
+ msg -> hdr .len = sizeof ( struct esd_usb_set_baudrate_msg ) / sizeof ( u32 ); /* # of 32bit words */
873
875
msg -> hdr .cmd = ESD_USB_CMD_SETBAUD ;
874
876
msg -> setbaud .net = priv -> index ;
875
877
msg -> setbaud .rsvd = 0 ;
@@ -947,7 +949,7 @@ static int esd_usb_2_set_bittiming(struct net_device *netdev)
947
949
if (!msg )
948
950
return - ENOMEM ;
949
951
950
- msg -> hdr .len = 2 ;
952
+ msg -> hdr .len = sizeof ( struct esd_usb_set_baudrate_msg ) / sizeof ( u32 ); /* # of 32bit words */
951
953
msg -> hdr .cmd = ESD_USB_CMD_SETBAUD ;
952
954
msg -> setbaud .net = priv -> index ;
953
955
msg -> setbaud .rsvd = 0 ;
@@ -1086,7 +1088,7 @@ static int esd_usb_probe(struct usb_interface *intf,
1086
1088
1087
1089
/* query number of CAN interfaces (nets) */
1088
1090
msg -> hdr .cmd = ESD_USB_CMD_VERSION ;
1089
- msg -> hdr .len = 2 ;
1091
+ msg -> hdr .len = sizeof ( struct esd_usb_version_msg ) / sizeof ( u32 ); /* # of 32bit words */
1090
1092
msg -> version .rsvd = 0 ;
1091
1093
msg -> version .flags = 0 ;
1092
1094
msg -> version .drv_version = 0 ;
0 commit comments