Lines Matching refs:priv

176 static inline int at91_is_sam##_model(const struct at91_priv *priv) \
178 return priv->devtype_data.type == AT91_DEVTYPE_SAM##_model; \
184 static inline unsigned int get_mb_rx_first(const struct at91_priv *priv) in get_mb_rx_first() argument
186 return priv->devtype_data.rx_first; in get_mb_rx_first()
189 static inline unsigned int get_mb_rx_last(const struct at91_priv *priv) in get_mb_rx_last() argument
191 return priv->devtype_data.rx_last; in get_mb_rx_last()
194 static inline unsigned int get_mb_rx_split(const struct at91_priv *priv) in get_mb_rx_split() argument
196 return priv->devtype_data.rx_split; in get_mb_rx_split()
199 static inline unsigned int get_mb_rx_num(const struct at91_priv *priv) in get_mb_rx_num() argument
201 return get_mb_rx_last(priv) - get_mb_rx_first(priv) + 1; in get_mb_rx_num()
204 static inline unsigned int get_mb_rx_low_last(const struct at91_priv *priv) in get_mb_rx_low_last() argument
206 return get_mb_rx_split(priv) - 1; in get_mb_rx_low_last()
209 static inline unsigned int get_mb_rx_low_mask(const struct at91_priv *priv) in get_mb_rx_low_mask() argument
211 return AT91_MB_MASK(get_mb_rx_split(priv)) & in get_mb_rx_low_mask()
212 ~AT91_MB_MASK(get_mb_rx_first(priv)); in get_mb_rx_low_mask()
215 static inline unsigned int get_mb_tx_shift(const struct at91_priv *priv) in get_mb_tx_shift() argument
217 return priv->devtype_data.tx_shift; in get_mb_tx_shift()
220 static inline unsigned int get_mb_tx_num(const struct at91_priv *priv) in get_mb_tx_num() argument
222 return 1 << get_mb_tx_shift(priv); in get_mb_tx_num()
225 static inline unsigned int get_mb_tx_first(const struct at91_priv *priv) in get_mb_tx_first() argument
227 return get_mb_rx_last(priv) + 1; in get_mb_tx_first()
230 static inline unsigned int get_mb_tx_last(const struct at91_priv *priv) in get_mb_tx_last() argument
232 return get_mb_tx_first(priv) + get_mb_tx_num(priv) - 1; in get_mb_tx_last()
235 static inline unsigned int get_next_prio_shift(const struct at91_priv *priv) in get_next_prio_shift() argument
237 return get_mb_tx_shift(priv); in get_next_prio_shift()
240 static inline unsigned int get_next_prio_mask(const struct at91_priv *priv) in get_next_prio_mask() argument
242 return 0xf << get_mb_tx_shift(priv); in get_next_prio_mask()
245 static inline unsigned int get_next_mb_mask(const struct at91_priv *priv) in get_next_mb_mask() argument
247 return AT91_MB_MASK(get_mb_tx_shift(priv)); in get_next_mb_mask()
250 static inline unsigned int get_next_mask(const struct at91_priv *priv) in get_next_mask() argument
252 return get_next_mb_mask(priv) | get_next_prio_mask(priv); in get_next_mask()
255 static inline unsigned int get_irq_mb_rx(const struct at91_priv *priv) in get_irq_mb_rx() argument
257 return AT91_MB_MASK(get_mb_rx_last(priv) + 1) & in get_irq_mb_rx()
258 ~AT91_MB_MASK(get_mb_rx_first(priv)); in get_irq_mb_rx()
261 static inline unsigned int get_irq_mb_tx(const struct at91_priv *priv) in get_irq_mb_tx() argument
263 return AT91_MB_MASK(get_mb_tx_last(priv) + 1) & in get_irq_mb_tx()
264 ~AT91_MB_MASK(get_mb_tx_first(priv)); in get_irq_mb_tx()
267 static inline unsigned int get_tx_next_mb(const struct at91_priv *priv) in get_tx_next_mb() argument
269 return (priv->tx_next & get_next_mb_mask(priv)) + get_mb_tx_first(priv); in get_tx_next_mb()
272 static inline unsigned int get_tx_next_prio(const struct at91_priv *priv) in get_tx_next_prio() argument
274 return (priv->tx_next >> get_next_prio_shift(priv)) & 0xf; in get_tx_next_prio()
277 static inline unsigned int get_tx_echo_mb(const struct at91_priv *priv) in get_tx_echo_mb() argument
279 return (priv->tx_echo & get_next_mb_mask(priv)) + get_mb_tx_first(priv); in get_tx_echo_mb()
282 static inline u32 at91_read(const struct at91_priv *priv, enum at91_reg reg) in at91_read() argument
284 return readl_relaxed(priv->reg_base + reg); in at91_read()
287 static inline void at91_write(const struct at91_priv *priv, enum at91_reg reg, in at91_write() argument
290 writel_relaxed(value, priv->reg_base + reg); in at91_write()
293 static inline void set_mb_mode_prio(const struct at91_priv *priv, in set_mb_mode_prio() argument
296 at91_write(priv, AT91_MMR(mb), (mode << 24) | (prio << 16)); in set_mb_mode_prio()
299 static inline void set_mb_mode(const struct at91_priv *priv, unsigned int mb, in set_mb_mode() argument
302 set_mb_mode_prio(priv, mb, mode, 0); in set_mb_mode()
319 struct at91_priv *priv = netdev_priv(dev); in at91_setup_mailboxes() local
330 reg_mid = at91_can_id_to_reg_mid(priv->mb0_id); in at91_setup_mailboxes()
331 for (i = 0; i < get_mb_rx_first(priv); i++) { in at91_setup_mailboxes()
332 set_mb_mode(priv, i, AT91_MB_MODE_DISABLED); in at91_setup_mailboxes()
333 at91_write(priv, AT91_MID(i), reg_mid); in at91_setup_mailboxes()
334 at91_write(priv, AT91_MCR(i), 0x0); /* clear dlc */ in at91_setup_mailboxes()
337 for (i = get_mb_rx_first(priv); i < get_mb_rx_last(priv); i++) in at91_setup_mailboxes()
338 set_mb_mode(priv, i, AT91_MB_MODE_RX); in at91_setup_mailboxes()
339 set_mb_mode(priv, get_mb_rx_last(priv), AT91_MB_MODE_RX_OVRWR); in at91_setup_mailboxes()
342 for (i = get_mb_rx_first(priv); i <= get_mb_rx_last(priv); i++) { in at91_setup_mailboxes()
343 at91_write(priv, AT91_MAM(i), 0x0); in at91_setup_mailboxes()
344 at91_write(priv, AT91_MID(i), AT91_MID_MIDE); in at91_setup_mailboxes()
348 for (i = get_mb_tx_first(priv); i <= get_mb_tx_last(priv); i++) in at91_setup_mailboxes()
349 set_mb_mode_prio(priv, i, AT91_MB_MODE_TX, 0); in at91_setup_mailboxes()
352 priv->tx_next = priv->tx_echo = 0; in at91_setup_mailboxes()
353 priv->rx_next = get_mb_rx_first(priv); in at91_setup_mailboxes()
358 const struct at91_priv *priv = netdev_priv(dev); in at91_set_bittiming() local
359 const struct can_bittiming *bt = &priv->can.bittiming; in at91_set_bittiming()
362 reg_br = ((priv->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES) ? 1 << 24 : 0) | in at91_set_bittiming()
369 at91_write(priv, AT91_BR, reg_br); in at91_set_bittiming()
377 const struct at91_priv *priv = netdev_priv(dev); in at91_get_berr_counter() local
378 u32 reg_ecr = at91_read(priv, AT91_ECR); in at91_get_berr_counter()
388 struct at91_priv *priv = netdev_priv(dev); in at91_chip_start() local
392 at91_write(priv, AT91_IDR, AT91_IRQ_ALL); in at91_chip_start()
395 reg_mr = at91_read(priv, AT91_MR); in at91_chip_start()
396 at91_write(priv, AT91_MR, reg_mr & ~AT91_MR_CANEN); in at91_chip_start()
402 if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY) in at91_chip_start()
406 at91_write(priv, AT91_MR, reg_mr); in at91_chip_start()
408 priv->can.state = CAN_STATE_ERROR_ACTIVE; in at91_chip_start()
411 reg_ier = get_irq_mb_rx(priv) | AT91_IRQ_ERRP | AT91_IRQ_ERR_FRAME; in at91_chip_start()
412 at91_write(priv, AT91_IDR, AT91_IRQ_ALL); in at91_chip_start()
413 at91_write(priv, AT91_IER, reg_ier); in at91_chip_start()
418 struct at91_priv *priv = netdev_priv(dev); in at91_chip_stop() local
422 at91_write(priv, AT91_IDR, AT91_IRQ_ALL); in at91_chip_stop()
424 reg_mr = at91_read(priv, AT91_MR); in at91_chip_stop()
425 at91_write(priv, AT91_MR, reg_mr & ~AT91_MR_CANEN); in at91_chip_stop()
427 priv->can.state = state; in at91_chip_stop()
455 struct at91_priv *priv = netdev_priv(dev); in at91_start_xmit() local
464 mb = get_tx_next_mb(priv); in at91_start_xmit()
465 prio = get_tx_next_prio(priv); in at91_start_xmit()
467 if (unlikely(!(at91_read(priv, AT91_MSR(mb)) & AT91_MSR_MRDY))) { in at91_start_xmit()
478 set_mb_mode(priv, mb, AT91_MB_MODE_DISABLED); in at91_start_xmit()
479 at91_write(priv, AT91_MID(mb), reg_mid); in at91_start_xmit()
480 set_mb_mode_prio(priv, mb, AT91_MB_MODE_TX, prio); in at91_start_xmit()
482 at91_write(priv, AT91_MDL(mb), *(u32 *)(cf->data + 0)); in at91_start_xmit()
483 at91_write(priv, AT91_MDH(mb), *(u32 *)(cf->data + 4)); in at91_start_xmit()
486 at91_write(priv, AT91_MCR(mb), reg_mcr); in at91_start_xmit()
491 can_put_echo_skb(skb, dev, mb - get_mb_tx_first(priv)); in at91_start_xmit()
501 priv->tx_next++; in at91_start_xmit()
502 if (!(at91_read(priv, AT91_MSR(get_tx_next_mb(priv))) & in at91_start_xmit()
504 (priv->tx_next & get_next_mask(priv)) == 0) in at91_start_xmit()
508 at91_write(priv, AT91_IER, 1 << mb); in at91_start_xmit()
519 static inline void at91_activate_rx_low(const struct at91_priv *priv) in at91_activate_rx_low() argument
521 u32 mask = get_mb_rx_low_mask(priv); in at91_activate_rx_low()
522 at91_write(priv, AT91_TCR, mask); in at91_activate_rx_low()
532 static inline void at91_activate_rx_mb(const struct at91_priv *priv, in at91_activate_rx_mb() argument
536 at91_write(priv, AT91_TCR, mask); in at91_activate_rx_mb()
577 const struct at91_priv *priv = netdev_priv(dev); in at91_read_mb() local
580 reg_mid = at91_read(priv, AT91_MID(mb)); in at91_read_mb()
586 reg_msr = at91_read(priv, AT91_MSR(mb)); in at91_read_mb()
592 *(u32 *)(cf->data + 0) = at91_read(priv, AT91_MDL(mb)); in at91_read_mb()
593 *(u32 *)(cf->data + 4) = at91_read(priv, AT91_MDH(mb)); in at91_read_mb()
597 at91_write(priv, AT91_MID(mb), AT91_MID_MIDE); in at91_read_mb()
599 if (unlikely(mb == get_mb_rx_last(priv) && reg_msr & AT91_MSR_MMI)) in at91_read_mb()
683 struct at91_priv *priv = netdev_priv(dev); in at91_poll_rx() local
684 u32 reg_sr = at91_read(priv, AT91_SR); in at91_poll_rx()
689 if (priv->rx_next > get_mb_rx_low_last(priv) && in at91_poll_rx()
690 reg_sr & get_mb_rx_low_mask(priv)) in at91_poll_rx()
695 for (mb = find_next_bit(addr, get_mb_tx_first(priv), priv->rx_next); in at91_poll_rx()
696 mb < get_mb_tx_first(priv) && quota > 0; in at91_poll_rx()
697 reg_sr = at91_read(priv, AT91_SR), in at91_poll_rx()
698 mb = find_next_bit(addr, get_mb_tx_first(priv), ++priv->rx_next)) { in at91_poll_rx()
702 if (mb == get_mb_rx_low_last(priv)) in at91_poll_rx()
704 at91_activate_rx_low(priv); in at91_poll_rx()
705 else if (mb > get_mb_rx_low_last(priv)) in at91_poll_rx()
707 at91_activate_rx_mb(priv, mb); in at91_poll_rx()
714 if (priv->rx_next > get_mb_rx_low_last(priv) && in at91_poll_rx()
715 quota > 0 && mb > get_mb_rx_last(priv)) { in at91_poll_rx()
716 priv->rx_next = get_mb_rx_first(priv); in at91_poll_rx()
726 struct at91_priv *priv = netdev_priv(dev); in at91_poll_err_frame() local
732 priv->can.can_stats.bus_error++; in at91_poll_err_frame()
740 priv->can.can_stats.bus_error++; in at91_poll_err_frame()
756 priv->can.can_stats.bus_error++; in at91_poll_err_frame()
765 priv->can.can_stats.bus_error++; in at91_poll_err_frame()
795 const struct at91_priv *priv = netdev_priv(dev); in at91_poll() local
796 u32 reg_sr = at91_read(priv, AT91_SR); in at91_poll()
799 if (reg_sr & get_irq_mb_rx(priv)) in at91_poll()
806 reg_sr |= priv->reg_sr; in at91_poll()
813 reg_ier |= get_irq_mb_rx(priv) & ~AT91_MB_MASK(priv->rx_next); in at91_poll()
816 at91_write(priv, AT91_IER, reg_ier); in at91_poll()
836 struct at91_priv *priv = netdev_priv(dev); in at91_irq_tx() local
842 for (/* nix */; (priv->tx_next - priv->tx_echo) > 0; priv->tx_echo++) { in at91_irq_tx()
843 mb = get_tx_echo_mb(priv); in at91_irq_tx()
850 at91_write(priv, AT91_IDR, 1 << mb); in at91_irq_tx()
858 reg_msr = at91_read(priv, AT91_MSR(mb)); in at91_irq_tx()
862 can_get_echo_skb(dev, mb - get_mb_tx_first(priv)); in at91_irq_tx()
873 if ((priv->tx_next & get_next_mask(priv)) != 0 || in at91_irq_tx()
874 (priv->tx_echo & get_next_mask(priv)) == 0) in at91_irq_tx()
881 struct at91_priv *priv = netdev_priv(dev); in at91_irq_err_state() local
887 switch (priv->can.state) { in at91_irq_err_state()
897 priv->can.can_stats.error_warning++; in at91_irq_err_state()
913 priv->can.can_stats.error_passive++; in at91_irq_err_state()
930 priv->can.can_stats.restarts++; in at91_irq_err_state()
970 priv->can.can_stats.bus_off++; in at91_irq_err_state()
973 if (!priv->can.restart_ms) { in at91_irq_err_state()
982 at91_write(priv, AT91_IDR, reg_idr); in at91_irq_err_state()
983 at91_write(priv, AT91_IER, reg_ier); in at91_irq_err_state()
1011 struct at91_priv *priv = netdev_priv(dev); in at91_irq_err() local
1018 if (at91_is_sam9263(priv)) { in at91_irq_err()
1019 reg_sr = at91_read(priv, AT91_SR); in at91_irq_err()
1041 if (likely(new_state == priv->can.state)) in at91_irq_err()
1054 priv->can.state = new_state; in at91_irq_err()
1063 struct at91_priv *priv = netdev_priv(dev); in at91_irq() local
1067 reg_sr = at91_read(priv, AT91_SR); in at91_irq()
1068 reg_imr = at91_read(priv, AT91_IMR); in at91_irq()
1078 if (reg_sr & (get_irq_mb_rx(priv) | AT91_IRQ_ERR_FRAME)) { in at91_irq()
1083 priv->reg_sr = reg_sr; in at91_irq()
1084 at91_write(priv, AT91_IDR, in at91_irq()
1085 get_irq_mb_rx(priv) | AT91_IRQ_ERR_FRAME); in at91_irq()
1086 napi_schedule(&priv->napi); in at91_irq()
1090 if (reg_sr & get_irq_mb_tx(priv)) in at91_irq()
1101 struct at91_priv *priv = netdev_priv(dev); in at91_open() local
1104 err = clk_prepare_enable(priv->clk); in at91_open()
1124 napi_enable(&priv->napi); in at91_open()
1132 clk_disable_unprepare(priv->clk); in at91_open()
1142 struct at91_priv *priv = netdev_priv(dev); in at91_close() local
1145 napi_disable(&priv->napi); in at91_close()
1149 clk_disable_unprepare(priv->clk); in at91_close()
1183 struct at91_priv *priv = netdev_priv(to_net_dev(dev)); in at91_sysfs_show_mb0_id() local
1185 if (priv->mb0_id & CAN_EFF_FLAG) in at91_sysfs_show_mb0_id()
1186 return snprintf(buf, PAGE_SIZE, "0x%08x\n", priv->mb0_id); in at91_sysfs_show_mb0_id()
1188 return snprintf(buf, PAGE_SIZE, "0x%03x\n", priv->mb0_id); in at91_sysfs_show_mb0_id()
1195 struct at91_priv *priv = netdev_priv(ndev); in at91_sysfs_set_mb0_id() local
1218 priv->mb0_id = can_id; in at91_sysfs_set_mb0_id()
1273 struct at91_priv *priv; in at91_can_probe() local
1324 priv = netdev_priv(dev); in at91_can_probe()
1325 priv->can.clock.freq = clk_get_rate(clk); in at91_can_probe()
1326 priv->can.bittiming_const = &at91_bittiming_const; in at91_can_probe()
1327 priv->can.do_set_mode = at91_set_mode; in at91_can_probe()
1328 priv->can.do_get_berr_counter = at91_get_berr_counter; in at91_can_probe()
1329 priv->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES | in at91_can_probe()
1331 priv->reg_base = addr; in at91_can_probe()
1332 priv->devtype_data = *devtype_data; in at91_can_probe()
1333 priv->clk = clk; in at91_can_probe()
1334 priv->pdata = dev_get_platdata(&pdev->dev); in at91_can_probe()
1335 priv->mb0_id = 0x7ff; in at91_can_probe()
1337 netif_napi_add(dev, &priv->napi, at91_poll, get_mb_rx_num(priv)); in at91_can_probe()
1339 if (at91_is_sam9263(priv)) in at91_can_probe()
1354 priv->reg_base, dev->irq); in at91_can_probe()
1373 struct at91_priv *priv = netdev_priv(dev); in at91_can_remove() local
1378 iounmap(priv->reg_base); in at91_can_remove()
1383 clk_put(priv->clk); in at91_can_remove()