Lines Matching refs:priv
186 static inline int at91_is_sam##_model(const struct at91_priv *priv) \
188 return priv->devtype_data.type == AT91_DEVTYPE_SAM##_model; \
194 static inline unsigned int get_mb_rx_first(const struct at91_priv *priv) in get_mb_rx_first() argument
196 return priv->devtype_data.rx_first; in get_mb_rx_first()
199 static inline unsigned int get_mb_rx_last(const struct at91_priv *priv) in get_mb_rx_last() argument
201 return priv->devtype_data.rx_last; in get_mb_rx_last()
204 static inline unsigned int get_mb_rx_split(const struct at91_priv *priv) in get_mb_rx_split() argument
206 return priv->devtype_data.rx_split; in get_mb_rx_split()
209 static inline unsigned int get_mb_rx_num(const struct at91_priv *priv) in get_mb_rx_num() argument
211 return get_mb_rx_last(priv) - get_mb_rx_first(priv) + 1; in get_mb_rx_num()
214 static inline unsigned int get_mb_rx_low_last(const struct at91_priv *priv) in get_mb_rx_low_last() argument
216 return get_mb_rx_split(priv) - 1; in get_mb_rx_low_last()
219 static inline unsigned int get_mb_rx_low_mask(const struct at91_priv *priv) in get_mb_rx_low_mask() argument
221 return AT91_MB_MASK(get_mb_rx_split(priv)) & in get_mb_rx_low_mask()
222 ~AT91_MB_MASK(get_mb_rx_first(priv)); in get_mb_rx_low_mask()
225 static inline unsigned int get_mb_tx_shift(const struct at91_priv *priv) in get_mb_tx_shift() argument
227 return priv->devtype_data.tx_shift; in get_mb_tx_shift()
230 static inline unsigned int get_mb_tx_num(const struct at91_priv *priv) in get_mb_tx_num() argument
232 return 1 << get_mb_tx_shift(priv); in get_mb_tx_num()
235 static inline unsigned int get_mb_tx_first(const struct at91_priv *priv) in get_mb_tx_first() argument
237 return get_mb_rx_last(priv) + 1; in get_mb_tx_first()
240 static inline unsigned int get_mb_tx_last(const struct at91_priv *priv) in get_mb_tx_last() argument
242 return get_mb_tx_first(priv) + get_mb_tx_num(priv) - 1; in get_mb_tx_last()
245 static inline unsigned int get_next_prio_shift(const struct at91_priv *priv) in get_next_prio_shift() argument
247 return get_mb_tx_shift(priv); in get_next_prio_shift()
250 static inline unsigned int get_next_prio_mask(const struct at91_priv *priv) in get_next_prio_mask() argument
252 return 0xf << get_mb_tx_shift(priv); in get_next_prio_mask()
255 static inline unsigned int get_next_mb_mask(const struct at91_priv *priv) in get_next_mb_mask() argument
257 return AT91_MB_MASK(get_mb_tx_shift(priv)); in get_next_mb_mask()
260 static inline unsigned int get_next_mask(const struct at91_priv *priv) in get_next_mask() argument
262 return get_next_mb_mask(priv) | get_next_prio_mask(priv); in get_next_mask()
265 static inline unsigned int get_irq_mb_rx(const struct at91_priv *priv) in get_irq_mb_rx() argument
267 return AT91_MB_MASK(get_mb_rx_last(priv) + 1) & in get_irq_mb_rx()
268 ~AT91_MB_MASK(get_mb_rx_first(priv)); in get_irq_mb_rx()
271 static inline unsigned int get_irq_mb_tx(const struct at91_priv *priv) in get_irq_mb_tx() argument
273 return AT91_MB_MASK(get_mb_tx_last(priv) + 1) & in get_irq_mb_tx()
274 ~AT91_MB_MASK(get_mb_tx_first(priv)); in get_irq_mb_tx()
277 static inline unsigned int get_tx_next_mb(const struct at91_priv *priv) in get_tx_next_mb() argument
279 return (priv->tx_next & get_next_mb_mask(priv)) + get_mb_tx_first(priv); in get_tx_next_mb()
282 static inline unsigned int get_tx_next_prio(const struct at91_priv *priv) in get_tx_next_prio() argument
284 return (priv->tx_next >> get_next_prio_shift(priv)) & 0xf; in get_tx_next_prio()
287 static inline unsigned int get_tx_echo_mb(const struct at91_priv *priv) in get_tx_echo_mb() argument
289 return (priv->tx_echo & get_next_mb_mask(priv)) + get_mb_tx_first(priv); in get_tx_echo_mb()
292 static inline u32 at91_read(const struct at91_priv *priv, enum at91_reg reg) in at91_read() argument
294 return readl_relaxed(priv->reg_base + reg); in at91_read()
297 static inline void at91_write(const struct at91_priv *priv, enum at91_reg reg, in at91_write() argument
300 writel_relaxed(value, priv->reg_base + reg); in at91_write()
303 static inline void set_mb_mode_prio(const struct at91_priv *priv, in set_mb_mode_prio() argument
306 at91_write(priv, AT91_MMR(mb), (mode << 24) | (prio << 16)); in set_mb_mode_prio()
309 static inline void set_mb_mode(const struct at91_priv *priv, unsigned int mb, in set_mb_mode() argument
312 set_mb_mode_prio(priv, mb, mode, 0); in set_mb_mode()
330 static void at91_transceiver_switch(const struct at91_priv *priv, int on) in at91_transceiver_switch() argument
332 if (priv->pdata && priv->pdata->transceiver_switch) in at91_transceiver_switch()
333 priv->pdata->transceiver_switch(on); in at91_transceiver_switch()
338 struct at91_priv *priv = netdev_priv(dev); in at91_setup_mailboxes() local
349 reg_mid = at91_can_id_to_reg_mid(priv->mb0_id); in at91_setup_mailboxes()
350 for (i = 0; i < get_mb_rx_first(priv); i++) { in at91_setup_mailboxes()
351 set_mb_mode(priv, i, AT91_MB_MODE_DISABLED); in at91_setup_mailboxes()
352 at91_write(priv, AT91_MID(i), reg_mid); in at91_setup_mailboxes()
353 at91_write(priv, AT91_MCR(i), 0x0); /* clear dlc */ in at91_setup_mailboxes()
356 for (i = get_mb_rx_first(priv); i < get_mb_rx_last(priv); i++) in at91_setup_mailboxes()
357 set_mb_mode(priv, i, AT91_MB_MODE_RX); in at91_setup_mailboxes()
358 set_mb_mode(priv, get_mb_rx_last(priv), AT91_MB_MODE_RX_OVRWR); in at91_setup_mailboxes()
361 for (i = get_mb_rx_first(priv); i <= get_mb_rx_last(priv); i++) { in at91_setup_mailboxes()
362 at91_write(priv, AT91_MAM(i), 0x0); in at91_setup_mailboxes()
363 at91_write(priv, AT91_MID(i), AT91_MID_MIDE); in at91_setup_mailboxes()
367 for (i = get_mb_tx_first(priv); i <= get_mb_tx_last(priv); i++) in at91_setup_mailboxes()
368 set_mb_mode_prio(priv, i, AT91_MB_MODE_TX, 0); in at91_setup_mailboxes()
371 priv->tx_next = priv->tx_echo = 0; in at91_setup_mailboxes()
372 priv->rx_next = get_mb_rx_first(priv); in at91_setup_mailboxes()
377 const struct at91_priv *priv = netdev_priv(dev); in at91_set_bittiming() local
378 const struct can_bittiming *bt = &priv->can.bittiming; in at91_set_bittiming()
381 reg_br = ((priv->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES) ? 1 << 24 : 0) | in at91_set_bittiming()
388 at91_write(priv, AT91_BR, reg_br); in at91_set_bittiming()
396 const struct at91_priv *priv = netdev_priv(dev); in at91_get_berr_counter() local
397 u32 reg_ecr = at91_read(priv, AT91_ECR); in at91_get_berr_counter()
407 struct at91_priv *priv = netdev_priv(dev); in at91_chip_start() local
411 at91_write(priv, AT91_IDR, AT91_IRQ_ALL); in at91_chip_start()
414 reg_mr = at91_read(priv, AT91_MR); in at91_chip_start()
415 at91_write(priv, AT91_MR, reg_mr & ~AT91_MR_CANEN); in at91_chip_start()
419 at91_transceiver_switch(priv, 1); in at91_chip_start()
422 if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY) in at91_chip_start()
426 at91_write(priv, AT91_MR, reg_mr); in at91_chip_start()
428 priv->can.state = CAN_STATE_ERROR_ACTIVE; in at91_chip_start()
431 reg_ier = get_irq_mb_rx(priv) | AT91_IRQ_ERRP | AT91_IRQ_ERR_FRAME; in at91_chip_start()
432 at91_write(priv, AT91_IDR, AT91_IRQ_ALL); in at91_chip_start()
433 at91_write(priv, AT91_IER, reg_ier); in at91_chip_start()
438 struct at91_priv *priv = netdev_priv(dev); in at91_chip_stop() local
442 at91_write(priv, AT91_IDR, AT91_IRQ_ALL); in at91_chip_stop()
444 reg_mr = at91_read(priv, AT91_MR); in at91_chip_stop()
445 at91_write(priv, AT91_MR, reg_mr & ~AT91_MR_CANEN); in at91_chip_stop()
447 at91_transceiver_switch(priv, 0); in at91_chip_stop()
448 priv->can.state = state; in at91_chip_stop()
476 struct at91_priv *priv = netdev_priv(dev); in at91_start_xmit() local
485 mb = get_tx_next_mb(priv); in at91_start_xmit()
486 prio = get_tx_next_prio(priv); in at91_start_xmit()
488 if (unlikely(!(at91_read(priv, AT91_MSR(mb)) & AT91_MSR_MRDY))) { in at91_start_xmit()
499 set_mb_mode(priv, mb, AT91_MB_MODE_DISABLED); in at91_start_xmit()
500 at91_write(priv, AT91_MID(mb), reg_mid); in at91_start_xmit()
501 set_mb_mode_prio(priv, mb, AT91_MB_MODE_TX, prio); in at91_start_xmit()
503 at91_write(priv, AT91_MDL(mb), *(u32 *)(cf->data + 0)); in at91_start_xmit()
504 at91_write(priv, AT91_MDH(mb), *(u32 *)(cf->data + 4)); in at91_start_xmit()
507 at91_write(priv, AT91_MCR(mb), reg_mcr); in at91_start_xmit()
512 can_put_echo_skb(skb, dev, mb - get_mb_tx_first(priv)); in at91_start_xmit()
522 priv->tx_next++; in at91_start_xmit()
523 if (!(at91_read(priv, AT91_MSR(get_tx_next_mb(priv))) & in at91_start_xmit()
525 (priv->tx_next & get_next_mask(priv)) == 0) in at91_start_xmit()
529 at91_write(priv, AT91_IER, 1 << mb); in at91_start_xmit()
540 static inline void at91_activate_rx_low(const struct at91_priv *priv) in at91_activate_rx_low() argument
542 u32 mask = get_mb_rx_low_mask(priv); in at91_activate_rx_low()
543 at91_write(priv, AT91_TCR, mask); in at91_activate_rx_low()
553 static inline void at91_activate_rx_mb(const struct at91_priv *priv, in at91_activate_rx_mb() argument
557 at91_write(priv, AT91_TCR, mask); in at91_activate_rx_mb()
598 const struct at91_priv *priv = netdev_priv(dev); in at91_read_mb() local
601 reg_mid = at91_read(priv, AT91_MID(mb)); in at91_read_mb()
607 reg_msr = at91_read(priv, AT91_MSR(mb)); in at91_read_mb()
613 *(u32 *)(cf->data + 0) = at91_read(priv, AT91_MDL(mb)); in at91_read_mb()
614 *(u32 *)(cf->data + 4) = at91_read(priv, AT91_MDH(mb)); in at91_read_mb()
618 at91_write(priv, AT91_MID(mb), AT91_MID_MIDE); in at91_read_mb()
620 if (unlikely(mb == get_mb_rx_last(priv) && reg_msr & AT91_MSR_MMI)) in at91_read_mb()
704 struct at91_priv *priv = netdev_priv(dev); in at91_poll_rx() local
705 u32 reg_sr = at91_read(priv, AT91_SR); in at91_poll_rx()
710 if (priv->rx_next > get_mb_rx_low_last(priv) && in at91_poll_rx()
711 reg_sr & get_mb_rx_low_mask(priv)) in at91_poll_rx()
716 for (mb = find_next_bit(addr, get_mb_tx_first(priv), priv->rx_next); in at91_poll_rx()
717 mb < get_mb_tx_first(priv) && quota > 0; in at91_poll_rx()
718 reg_sr = at91_read(priv, AT91_SR), in at91_poll_rx()
719 mb = find_next_bit(addr, get_mb_tx_first(priv), ++priv->rx_next)) { in at91_poll_rx()
723 if (mb == get_mb_rx_low_last(priv)) in at91_poll_rx()
725 at91_activate_rx_low(priv); in at91_poll_rx()
726 else if (mb > get_mb_rx_low_last(priv)) in at91_poll_rx()
728 at91_activate_rx_mb(priv, mb); in at91_poll_rx()
735 if (priv->rx_next > get_mb_rx_low_last(priv) && in at91_poll_rx()
736 quota > 0 && mb > get_mb_rx_last(priv)) { in at91_poll_rx()
737 priv->rx_next = get_mb_rx_first(priv); in at91_poll_rx()
747 struct at91_priv *priv = netdev_priv(dev); in at91_poll_err_frame() local
753 priv->can.can_stats.bus_error++; in at91_poll_err_frame()
761 priv->can.can_stats.bus_error++; in at91_poll_err_frame()
777 priv->can.can_stats.bus_error++; in at91_poll_err_frame()
786 priv->can.can_stats.bus_error++; in at91_poll_err_frame()
816 const struct at91_priv *priv = netdev_priv(dev); in at91_poll() local
817 u32 reg_sr = at91_read(priv, AT91_SR); in at91_poll()
820 if (reg_sr & get_irq_mb_rx(priv)) in at91_poll()
827 reg_sr |= priv->reg_sr; in at91_poll()
834 reg_ier |= get_irq_mb_rx(priv) & ~AT91_MB_MASK(priv->rx_next); in at91_poll()
837 at91_write(priv, AT91_IER, reg_ier); in at91_poll()
857 struct at91_priv *priv = netdev_priv(dev); in at91_irq_tx() local
863 for (/* nix */; (priv->tx_next - priv->tx_echo) > 0; priv->tx_echo++) { in at91_irq_tx()
864 mb = get_tx_echo_mb(priv); in at91_irq_tx()
871 at91_write(priv, AT91_IDR, 1 << mb); in at91_irq_tx()
879 reg_msr = at91_read(priv, AT91_MSR(mb)); in at91_irq_tx()
883 can_get_echo_skb(dev, mb - get_mb_tx_first(priv)); in at91_irq_tx()
894 if ((priv->tx_next & get_next_mask(priv)) != 0 || in at91_irq_tx()
895 (priv->tx_echo & get_next_mask(priv)) == 0) in at91_irq_tx()
902 struct at91_priv *priv = netdev_priv(dev); in at91_irq_err_state() local
908 switch (priv->can.state) { in at91_irq_err_state()
918 priv->can.can_stats.error_warning++; in at91_irq_err_state()
934 priv->can.can_stats.error_passive++; in at91_irq_err_state()
951 priv->can.can_stats.restarts++; in at91_irq_err_state()
991 priv->can.can_stats.bus_off++; in at91_irq_err_state()
994 if (!priv->can.restart_ms) { in at91_irq_err_state()
1003 at91_write(priv, AT91_IDR, reg_idr); in at91_irq_err_state()
1004 at91_write(priv, AT91_IER, reg_ier); in at91_irq_err_state()
1032 struct at91_priv *priv = netdev_priv(dev); in at91_irq_err() local
1039 if (at91_is_sam9263(priv)) { in at91_irq_err()
1040 reg_sr = at91_read(priv, AT91_SR); in at91_irq_err()
1062 if (likely(new_state == priv->can.state)) in at91_irq_err()
1075 priv->can.state = new_state; in at91_irq_err()
1084 struct at91_priv *priv = netdev_priv(dev); in at91_irq() local
1088 reg_sr = at91_read(priv, AT91_SR); in at91_irq()
1089 reg_imr = at91_read(priv, AT91_IMR); in at91_irq()
1099 if (reg_sr & (get_irq_mb_rx(priv) | AT91_IRQ_ERR_FRAME)) { in at91_irq()
1104 priv->reg_sr = reg_sr; in at91_irq()
1105 at91_write(priv, AT91_IDR, in at91_irq()
1106 get_irq_mb_rx(priv) | AT91_IRQ_ERR_FRAME); in at91_irq()
1107 napi_schedule(&priv->napi); in at91_irq()
1111 if (reg_sr & get_irq_mb_tx(priv)) in at91_irq()
1122 struct at91_priv *priv = netdev_priv(dev); in at91_open() local
1125 err = clk_prepare_enable(priv->clk); in at91_open()
1145 napi_enable(&priv->napi); in at91_open()
1153 clk_disable_unprepare(priv->clk); in at91_open()
1163 struct at91_priv *priv = netdev_priv(dev); in at91_close() local
1166 napi_disable(&priv->napi); in at91_close()
1170 clk_disable_unprepare(priv->clk); in at91_close()
1204 struct at91_priv *priv = netdev_priv(to_net_dev(dev)); in at91_sysfs_show_mb0_id() local
1206 if (priv->mb0_id & CAN_EFF_FLAG) in at91_sysfs_show_mb0_id()
1207 return snprintf(buf, PAGE_SIZE, "0x%08x\n", priv->mb0_id); in at91_sysfs_show_mb0_id()
1209 return snprintf(buf, PAGE_SIZE, "0x%03x\n", priv->mb0_id); in at91_sysfs_show_mb0_id()
1216 struct at91_priv *priv = netdev_priv(ndev); in at91_sysfs_set_mb0_id() local
1239 priv->mb0_id = can_id; in at91_sysfs_set_mb0_id()
1294 struct at91_priv *priv; in at91_can_probe() local
1345 priv = netdev_priv(dev); in at91_can_probe()
1346 priv->can.clock.freq = clk_get_rate(clk); in at91_can_probe()
1347 priv->can.bittiming_const = &at91_bittiming_const; in at91_can_probe()
1348 priv->can.do_set_mode = at91_set_mode; in at91_can_probe()
1349 priv->can.do_get_berr_counter = at91_get_berr_counter; in at91_can_probe()
1350 priv->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES | in at91_can_probe()
1352 priv->reg_base = addr; in at91_can_probe()
1353 priv->devtype_data = *devtype_data; in at91_can_probe()
1354 priv->clk = clk; in at91_can_probe()
1355 priv->pdata = dev_get_platdata(&pdev->dev); in at91_can_probe()
1356 priv->mb0_id = 0x7ff; in at91_can_probe()
1358 netif_napi_add(dev, &priv->napi, at91_poll, get_mb_rx_num(priv)); in at91_can_probe()
1360 if (at91_is_sam9263(priv)) in at91_can_probe()
1375 priv->reg_base, dev->irq); in at91_can_probe()
1394 struct at91_priv *priv = netdev_priv(dev); in at91_can_remove() local
1399 iounmap(priv->reg_base); in at91_can_remove()
1404 clk_put(priv->clk); in at91_can_remove()