diff options
Diffstat (limited to 'drivers/net/can/usb/ems_usb.c')
| -rw-r--r-- | drivers/net/can/usb/ems_usb.c | 33 | 
1 files changed, 12 insertions, 21 deletions
diff --git a/drivers/net/can/usb/ems_usb.c b/drivers/net/can/usb/ems_usb.c index 9012e0abc62..591eb0eb1c2 100644 --- a/drivers/net/can/usb/ems_usb.c +++ b/drivers/net/can/usb/ems_usb.c @@ -232,7 +232,7 @@ MODULE_DEVICE_TABLE(usb, ems_usb_table);  #define INTR_IN_BUFFER_SIZE 4  #define MAX_RX_URBS 10 -#define MAX_TX_URBS CAN_ECHO_SKB_MAX +#define MAX_TX_URBS 10  struct ems_usb; @@ -311,23 +311,19 @@ static void ems_usb_rx_can_msg(struct ems_usb *dev, struct ems_cpc_msg *msg)  	int i;  	struct net_device_stats *stats = &dev->netdev->stats; -	skb = netdev_alloc_skb(dev->netdev, sizeof(struct can_frame)); +	skb = alloc_can_skb(dev->netdev, &cf);  	if (skb == NULL)  		return; -	skb->protocol = htons(ETH_P_CAN); - -	cf = (struct can_frame *)skb_put(skb, sizeof(struct can_frame)); - -	cf->can_id = msg->msg.can_msg.id; +	cf->can_id = le32_to_cpu(msg->msg.can_msg.id);  	cf->can_dlc = min_t(u8, msg->msg.can_msg.length, 8); -	if (msg->type == CPC_MSG_TYPE_EXT_CAN_FRAME -	    || msg->type == CPC_MSG_TYPE_EXT_RTR_FRAME) +	if (msg->type == CPC_MSG_TYPE_EXT_CAN_FRAME || +	    msg->type == CPC_MSG_TYPE_EXT_RTR_FRAME)  		cf->can_id |= CAN_EFF_FLAG; -	if (msg->type == CPC_MSG_TYPE_RTR_FRAME -	    || msg->type == CPC_MSG_TYPE_EXT_RTR_FRAME) { +	if (msg->type == CPC_MSG_TYPE_RTR_FRAME || +	    msg->type == CPC_MSG_TYPE_EXT_RTR_FRAME) {  		cf->can_id |= CAN_RTR_FLAG;  	} else {  		for (i = 0; i < cf->can_dlc; i++) @@ -346,18 +342,10 @@ static void ems_usb_rx_err(struct ems_usb *dev, struct ems_cpc_msg *msg)  	struct sk_buff *skb;  	struct net_device_stats *stats = &dev->netdev->stats; -	skb = netdev_alloc_skb(dev->netdev, sizeof(struct can_frame)); +	skb = alloc_can_err_skb(dev->netdev, &cf);  	if (skb == NULL)  		return; -	skb->protocol = htons(ETH_P_CAN); - -	cf = (struct can_frame *)skb_put(skb, sizeof(struct can_frame)); -	memset(cf, 0, sizeof(struct can_frame)); - -	cf->can_id = CAN_ERR_FLAG; -	cf->can_dlc = CAN_ERR_DLC; -  	if (msg->type == CPC_MSG_TYPE_CAN_STATE) {  		u8 state = msg->msg.can_state; @@ -813,6 +801,9 @@ static netdev_tx_t ems_usb_start_xmit(struct sk_buff *skb, struct net_device *ne  		msg->length = CPC_CAN_MSG_MIN_SIZE + cf->can_dlc;  	} +	/* Respect byte order */ +	msg->msg.can_msg.id = cpu_to_le32(msg->msg.can_msg.id); +  	for (i = 0; i < MAX_TX_URBS; i++) {  		if (dev->tx_contexts[i].echo_index == MAX_TX_URBS) {  			context = &dev->tx_contexts[i]; @@ -1012,7 +1003,7 @@ static int ems_usb_probe(struct usb_interface *intf,  	struct ems_usb *dev;  	int i, err = -ENOMEM; -	netdev = alloc_candev(sizeof(struct ems_usb)); +	netdev = alloc_candev(sizeof(struct ems_usb), MAX_TX_URBS);  	if (!netdev) {  		dev_err(netdev->dev.parent, "Couldn't alloc candev\n");  		return -ENOMEM;  |