aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/can/dev.c24
-rw-r--r--include/linux/can/dev.h2
2 files changed, 26 insertions, 0 deletions
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
index 13a909822e25..cb584ea00331 100644
--- a/drivers/net/can/dev.c
+++ b/drivers/net/can/dev.c
@@ -521,6 +521,30 @@ struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf)
521} 521}
522EXPORT_SYMBOL_GPL(alloc_can_skb); 522EXPORT_SYMBOL_GPL(alloc_can_skb);
523 523
524struct sk_buff *alloc_canfd_skb(struct net_device *dev,
525 struct canfd_frame **cfd)
526{
527 struct sk_buff *skb;
528
529 skb = netdev_alloc_skb(dev, sizeof(struct can_skb_priv) +
530 sizeof(struct canfd_frame));
531 if (unlikely(!skb))
532 return NULL;
533
534 skb->protocol = htons(ETH_P_CANFD);
535 skb->pkt_type = PACKET_BROADCAST;
536 skb->ip_summed = CHECKSUM_UNNECESSARY;
537
538 can_skb_reserve(skb);
539 can_skb_prv(skb)->ifindex = dev->ifindex;
540
541 *cfd = (struct canfd_frame *)skb_put(skb, sizeof(struct canfd_frame));
542 memset(*cfd, 0, sizeof(struct canfd_frame));
543
544 return skb;
545}
546EXPORT_SYMBOL_GPL(alloc_canfd_skb);
547
524struct sk_buff *alloc_can_err_skb(struct net_device *dev, struct can_frame **cf) 548struct sk_buff *alloc_can_err_skb(struct net_device *dev, struct can_frame **cf)
525{ 549{
526 struct sk_buff *skb; 550 struct sk_buff *skb;
diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h
index fb0ab651a041..dc5f9026b67f 100644
--- a/include/linux/can/dev.h
+++ b/include/linux/can/dev.h
@@ -124,6 +124,8 @@ unsigned int can_get_echo_skb(struct net_device *dev, unsigned int idx);
124void can_free_echo_skb(struct net_device *dev, unsigned int idx); 124void can_free_echo_skb(struct net_device *dev, unsigned int idx);
125 125
126struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf); 126struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf);
127struct sk_buff *alloc_canfd_skb(struct net_device *dev,
128 struct canfd_frame **cfd);
127struct sk_buff *alloc_can_err_skb(struct net_device *dev, 129struct sk_buff *alloc_can_err_skb(struct net_device *dev,
128 struct can_frame **cf); 130 struct can_frame **cf);
129 131