aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/can/dev.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/can/dev.h')
-rw-r--r--include/linux/can/dev.h22
1 files changed, 20 insertions, 2 deletions
diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h
index 735f9f8c4e43..5261751f6bd4 100644
--- a/include/linux/can/dev.h
+++ b/include/linux/can/dev.h
@@ -40,8 +40,11 @@ struct can_priv {
40 struct can_clock clock; 40 struct can_clock clock;
41 41
42 enum can_state state; 42 enum can_state state;
43 u32 ctrlmode; 43
44 u32 ctrlmode_supported; 44 /* CAN controller features - see include/uapi/linux/can/netlink.h */
45 u32 ctrlmode; /* current options setting */
46 u32 ctrlmode_supported; /* options that can be modified by netlink */
47 u32 ctrlmode_static; /* static enabled options for driver/hardware */
45 48
46 int restart_ms; 49 int restart_ms;
47 struct timer_list restart_timer; 50 struct timer_list restart_timer;
@@ -108,6 +111,21 @@ static inline bool can_is_canfd_skb(const struct sk_buff *skb)
108 return skb->len == CANFD_MTU; 111 return skb->len == CANFD_MTU;
109} 112}
110 113
114/* helper to define static CAN controller features at device creation time */
115static inline void can_set_static_ctrlmode(struct net_device *dev,
116 u32 static_mode)
117{
118 struct can_priv *priv = netdev_priv(dev);
119
120 /* alloc_candev() succeeded => netdev_priv() is valid at this point */
121 priv->ctrlmode = static_mode;
122 priv->ctrlmode_static = static_mode;
123
124 /* override MTU which was set by default in can_setup()? */
125 if (static_mode & CAN_CTRLMODE_FD)
126 dev->mtu = CANFD_MTU;
127}
128
111/* get data length from can_dlc with sanitized can_dlc */ 129/* get data length from can_dlc with sanitized can_dlc */
112u8 can_dlc2len(u8 can_dlc); 130u8 can_dlc2len(u8 can_dlc);
113 131