Lines Matching +full:max +full:- +full:bitrate
1 // SPDX-License-Identifier: GPL-2.0-only
2 /* Copyright (C) 2005 Marc Kleine-Budde, Pengutronix
4 * Copyright (C) 2008-2009 Wolfgang Grandegger <wg@grandegger.com>
13 #include <linux/can/can-ml.h>
24 if (new_state <= priv->state) in can_update_state_error_stats()
29 priv->can_stats.error_warning++; in can_update_state_error_stats()
32 priv->can_stats.error_passive++; in can_update_state_error_stats()
35 priv->can_stats.bus_off++; in can_update_state_error_stats()
97 enum can_state new_state = max(tx_state, rx_state); in can_change_state()
99 if (unlikely(new_state == priv->state)) { in can_change_state()
105 can_get_state_str(priv->state), priv->state, in can_change_state()
109 priv->state = new_state; in can_change_state()
115 cf->can_id |= CAN_ERR_BUSOFF; in can_change_state()
119 cf->can_id |= CAN_ERR_CRTL; in can_change_state()
120 cf->data[1] |= tx_state >= rx_state ? in can_change_state()
122 cf->data[1] |= tx_state <= rx_state ? in can_change_state()
127 /* CAN device restart for bus-off recovery */
136 netdev_err(dev, "Attempt to restart for bus-off recovery, but carrier is OK?\n"); in can_restart()
138 /* No synchronization needed because the device is bus-off and in can_restart()
148 cf->can_id |= CAN_ERR_RESTARTED; in can_restart()
154 priv->can_stats.restarts++; in can_restart()
158 err = priv->do_set_mode(dev, CAN_MODE_START); in can_restart()
171 can_restart(priv->dev); in can_restart_work()
179 * disabled and the device is in the bus-off state in can_restart_now()
181 if (priv->restart_ms) in can_restart_now()
182 return -EINVAL; in can_restart_now()
183 if (priv->state != CAN_STATE_BUS_OFF) in can_restart_now()
184 return -EBUSY; in can_restart_now()
186 cancel_delayed_work_sync(&priv->restart_work); in can_restart_now()
192 /* CAN bus-off
194 * This functions should be called when the device goes bus-off to
196 * If enabled, a timer is started to trigger bus-off recovery.
202 if (priv->restart_ms) in can_bus_off()
203 netdev_info(dev, "bus-off, scheduling restart in %d ms\n", in can_bus_off()
204 priv->restart_ms); in can_bus_off()
206 netdev_info(dev, "bus-off\n"); in can_bus_off()
210 if (priv->restart_ms) in can_bus_off()
211 schedule_delayed_work(&priv->restart_work, in can_bus_off()
212 msecs_to_jiffies(priv->restart_ms)); in can_bus_off()
218 dev->type = ARPHRD_CAN; in can_setup()
219 dev->mtu = CAN_MTU; in can_setup()
220 dev->hard_header_len = 0; in can_setup()
221 dev->addr_len = 0; in can_setup()
222 dev->tx_queue_len = 10; in can_setup()
224 /* New-style flags. */ in can_setup()
225 dev->flags = IFF_NOARP; in can_setup()
226 dev->features = NETIF_F_HW_CSUM; in can_setup()
242 * +-------------------------+ in alloc_candev_mqs()
244 * +-------------------------+ in alloc_candev_mqs()
246 * +-------------------------+ in alloc_candev_mqs()
248 * +-------------------------+ in alloc_candev_mqs()
263 priv->dev = dev; in alloc_candev_mqs()
269 priv->echo_skb_max = echo_skb_max; in alloc_candev_mqs()
270 priv->echo_skb = (void *)priv + in alloc_candev_mqs()
271 (size - echo_skb_max * sizeof(struct sk_buff *)); in alloc_candev_mqs()
274 priv->state = CAN_STATE_STOPPED; in alloc_candev_mqs()
276 INIT_DELAYED_WORK(&priv->restart_work, can_restart_work); in alloc_candev_mqs()
296 if (dev->flags & IFF_UP) in can_change_mtu()
297 return -EBUSY; in can_change_mtu()
302 /* 'CANFD-only' controllers can not switch to CAN_MTU */ in can_change_mtu()
304 return -EINVAL; in can_change_mtu()
306 priv->ctrlmode &= ~CAN_CTRLMODE_FD; in can_change_mtu()
311 if (!(priv->ctrlmode_supported & CAN_CTRLMODE_FD) && in can_change_mtu()
313 return -EINVAL; in can_change_mtu()
315 priv->ctrlmode |= CAN_CTRLMODE_FD; in can_change_mtu()
319 return -EINVAL; in can_change_mtu()
322 dev->mtu = new_mtu; in can_change_mtu()
336 if (copy_from_user(&hwts_cfg, ifr->ifr_data, sizeof(hwts_cfg))) in can_eth_ioctl_hwts()
337 return -EFAULT; in can_eth_ioctl_hwts()
341 return -ERANGE; in can_eth_ioctl_hwts()
346 if (copy_to_user(ifr->ifr_data, &hwts_cfg, sizeof(hwts_cfg))) in can_eth_ioctl_hwts()
347 return -EFAULT; in can_eth_ioctl_hwts()
351 return -EOPNOTSUPP; in can_eth_ioctl_hwts()
362 info->so_timestamping = in can_ethtool_op_get_ts_info_hwts()
369 info->phc_index = -1; in can_ethtool_op_get_ts_info_hwts()
370 info->tx_types = BIT(HWTSTAMP_TX_ON); in can_ethtool_op_get_ts_info_hwts()
371 info->rx_filters = BIT(HWTSTAMP_FILTER_ALL); in can_ethtool_op_get_ts_info_hwts()
386 if (!priv->bittiming.bitrate) { in open_candev()
387 netdev_err(dev, "bit-timing not yet defined\n"); in open_candev()
388 return -EINVAL; in open_candev()
391 /* For CAN FD the data bitrate has to be >= the arbitration bitrate */ in open_candev()
392 if ((priv->ctrlmode & CAN_CTRLMODE_FD) && in open_candev()
393 (!priv->data_bittiming.bitrate || in open_candev()
394 priv->data_bittiming.bitrate < priv->bittiming.bitrate)) { in open_candev()
395 netdev_err(dev, "incorrect/missing data bit-timing\n"); in open_candev()
396 return -EINVAL; in open_candev()
399 /* Switch carrier on if device was stopped while in bus-off state */ in open_candev()
416 struct device_node *np = dev->dev.parent->of_node; in of_can_transceiver()
419 dn = of_get_child_by_name(np, "can-transceiver"); in of_can_transceiver()
423 ret = of_property_read_u32(dn, "max-bitrate", &priv->bitrate_max); in of_can_transceiver()
425 if ((ret && ret != -EINVAL) || (!ret && !priv->bitrate_max)) in of_can_transceiver()
426 netdev_warn(dev, "Invalid value for transceiver max bitrate. Ignoring bitrate limit.\n"); in of_can_transceiver()
440 cancel_delayed_work_sync(&priv->restart_work); in close_candev()
450 if (term == priv->termination_gpio_ohms[CAN_TERMINATION_GPIO_ENABLED]) in can_set_termination()
455 gpiod_set_value_cansleep(priv->termination_gpio, set); in can_set_termination()
463 struct device *dev = ndev->dev.parent; in can_get_termination()
474 "Cannot get termination-gpios\n"); in can_get_termination()
479 ret = device_property_read_u32(dev, "termination-ohms", &term); in can_get_termination()
481 netdev_err(ndev, "Cannot get termination-ohms: %pe\n", in can_get_termination()
487 netdev_err(ndev, "Invalid termination-ohms value (%u > %u)\n", in can_get_termination()
489 return -EINVAL; in can_get_termination()
492 priv->termination_const_cnt = ARRAY_SIZE(priv->termination_gpio_ohms); in can_get_termination()
493 priv->termination_const = priv->termination_gpio_ohms; in can_get_termination()
494 priv->termination_gpio = gpio; in can_get_termination()
495 priv->termination_gpio_ohms[CAN_TERMINATION_GPIO_DISABLED] = in can_get_termination()
497 priv->termination_gpio_ohms[CAN_TERMINATION_GPIO_ENABLED] = term; in can_get_termination()
498 priv->do_set_termination = can_set_termination; in can_get_termination()
509 if (!btc->sjw_max) in can_bittiming_const_valid()
525 if ((!priv->termination_const != !priv->termination_const_cnt) || in register_candev()
526 (!priv->termination_const != !priv->do_set_termination)) in register_candev()
527 return -EINVAL; in register_candev()
529 if (!priv->bitrate_const != !priv->bitrate_const_cnt) in register_candev()
530 return -EINVAL; in register_candev()
532 if (!priv->data_bitrate_const != !priv->data_bitrate_const_cnt) in register_candev()
533 return -EINVAL; in register_candev()
536 if ((priv->bitrate_const || priv->data_bitrate_const) && in register_candev()
537 (priv->bittiming_const || priv->data_bittiming_const)) in register_candev()
538 return -EINVAL; in register_candev()
540 if (!can_bittiming_const_valid(priv->bittiming_const) || in register_candev()
541 !can_bittiming_const_valid(priv->data_bittiming_const)) in register_candev()
542 return -EINVAL; in register_candev()
544 if (!priv->termination_const) { in register_candev()
550 dev->rtnl_link_ops = &can_link_ops; in register_candev()
569 if (dev->type != ARPHRD_CAN || dev->rtnl_link_ops != &can_link_ops) in safe_candev_priv()