1717/* esdACC DLC register layout */
1818#define ACC_DLC_DLC_MASK GENMASK(3, 0)
1919#define ACC_DLC_RTR_FLAG BIT(4)
20+ #define ACC_DLC_SSTX_FLAG BIT(24) /* Single Shot TX */
21+
22+ /* esdACC DLC in struct acc_bmmsg_rxtxdone::acc_dlc.len only! */
2023#define ACC_DLC_TXD_FLAG BIT(5)
2124
2225/* ecc value of esdACC equals SJA1000's ECC register */
4346
4447static void acc_resetmode_enter (struct acc_core * core )
4548{
46- acc_set_bits (core , ACC_CORE_OF_CTRL_MODE ,
47- ACC_REG_CONTROL_MASK_MODE_RESETMODE );
49+ acc_set_bits (core , ACC_CORE_OF_CTRL ,
50+ ACC_REG_CTRL_MASK_RESETMODE );
4851
4952 /* Read back reset mode bit to flush PCI write posting */
5053 acc_resetmode_entered (core );
5154}
5255
5356static void acc_resetmode_leave (struct acc_core * core )
5457{
55- acc_clear_bits (core , ACC_CORE_OF_CTRL_MODE ,
56- ACC_REG_CONTROL_MASK_MODE_RESETMODE );
58+ acc_clear_bits (core , ACC_CORE_OF_CTRL ,
59+ ACC_REG_CTRL_MASK_RESETMODE );
5760
5861 /* Read back reset mode bit to flush PCI write posting */
5962 acc_resetmode_entered (core );
6063}
6164
62- static void acc_txq_put (struct acc_core * core , u32 acc_id , u8 acc_dlc ,
65+ static void acc_txq_put (struct acc_core * core , u32 acc_id , u32 acc_dlc ,
6366 const void * data )
6467{
6568 acc_write32_noswap (core , ACC_CORE_OF_TXFIFO_DATA_1 ,
@@ -172,7 +175,7 @@ int acc_open(struct net_device *netdev)
172175 struct acc_net_priv * priv = netdev_priv (netdev );
173176 struct acc_core * core = priv -> core ;
174177 u32 tx_fifo_status ;
175- u32 ctrl_mode ;
178+ u32 ctrl ;
176179 int err ;
177180
178181 /* Retry to enter RESET mode if out of sync. */
@@ -187,19 +190,19 @@ int acc_open(struct net_device *netdev)
187190 if (err )
188191 return err ;
189192
190- ctrl_mode = ACC_REG_CONTROL_MASK_IE_RXTX |
191- ACC_REG_CONTROL_MASK_IE_TXERROR |
192- ACC_REG_CONTROL_MASK_IE_ERRWARN |
193- ACC_REG_CONTROL_MASK_IE_OVERRUN |
194- ACC_REG_CONTROL_MASK_IE_ERRPASS ;
193+ ctrl = ACC_REG_CTRL_MASK_IE_RXTX |
194+ ACC_REG_CTRL_MASK_IE_TXERROR |
195+ ACC_REG_CTRL_MASK_IE_ERRWARN |
196+ ACC_REG_CTRL_MASK_IE_OVERRUN |
197+ ACC_REG_CTRL_MASK_IE_ERRPASS ;
195198
196199 if (priv -> can .ctrlmode & CAN_CTRLMODE_BERR_REPORTING )
197- ctrl_mode |= ACC_REG_CONTROL_MASK_IE_BUSERR ;
200+ ctrl |= ACC_REG_CTRL_MASK_IE_BUSERR ;
198201
199202 if (priv -> can .ctrlmode & CAN_CTRLMODE_LISTENONLY )
200- ctrl_mode |= ACC_REG_CONTROL_MASK_MODE_LOM ;
203+ ctrl |= ACC_REG_CTRL_MASK_LOM ;
201204
202- acc_set_bits (core , ACC_CORE_OF_CTRL_MODE , ctrl_mode );
205+ acc_set_bits (core , ACC_CORE_OF_CTRL , ctrl );
203206
204207 acc_resetmode_leave (core );
205208 priv -> can .state = CAN_STATE_ERROR_ACTIVE ;
@@ -218,13 +221,13 @@ int acc_close(struct net_device *netdev)
218221 struct acc_net_priv * priv = netdev_priv (netdev );
219222 struct acc_core * core = priv -> core ;
220223
221- acc_clear_bits (core , ACC_CORE_OF_CTRL_MODE ,
222- ACC_REG_CONTROL_MASK_IE_RXTX |
223- ACC_REG_CONTROL_MASK_IE_TXERROR |
224- ACC_REG_CONTROL_MASK_IE_ERRWARN |
225- ACC_REG_CONTROL_MASK_IE_OVERRUN |
226- ACC_REG_CONTROL_MASK_IE_ERRPASS |
227- ACC_REG_CONTROL_MASK_IE_BUSERR );
224+ acc_clear_bits (core , ACC_CORE_OF_CTRL ,
225+ ACC_REG_CTRL_MASK_IE_RXTX |
226+ ACC_REG_CTRL_MASK_IE_TXERROR |
227+ ACC_REG_CTRL_MASK_IE_ERRWARN |
228+ ACC_REG_CTRL_MASK_IE_OVERRUN |
229+ ACC_REG_CTRL_MASK_IE_ERRPASS |
230+ ACC_REG_CTRL_MASK_IE_BUSERR );
228231
229232 netif_stop_queue (netdev );
230233 acc_resetmode_enter (core );
@@ -233,9 +236,9 @@ int acc_close(struct net_device *netdev)
233236 /* Mark pending TX requests to be aborted after controller restart. */
234237 acc_write32 (core , ACC_CORE_OF_TX_ABORT_MASK , 0xffff );
235238
236- /* ACC_REG_CONTROL_MASK_MODE_LOM is only accessible in RESET mode */
237- acc_clear_bits (core , ACC_CORE_OF_CTRL_MODE ,
238- ACC_REG_CONTROL_MASK_MODE_LOM );
239+ /* ACC_REG_CTRL_MASK_LOM is only accessible in RESET mode */
240+ acc_clear_bits (core , ACC_CORE_OF_CTRL ,
241+ ACC_REG_CTRL_MASK_LOM );
239242
240243 close_candev (netdev );
241244 return 0 ;
@@ -249,7 +252,7 @@ netdev_tx_t acc_start_xmit(struct sk_buff *skb, struct net_device *netdev)
249252 u8 tx_fifo_head = core -> tx_fifo_head ;
250253 int fifo_usage ;
251254 u32 acc_id ;
252- u8 acc_dlc ;
255+ u32 acc_dlc ;
253256
254257 if (can_dropped_invalid_skb (netdev , skb ))
255258 return NETDEV_TX_OK ;
@@ -274,6 +277,8 @@ netdev_tx_t acc_start_xmit(struct sk_buff *skb, struct net_device *netdev)
274277 acc_dlc = can_get_cc_dlc (cf , priv -> can .ctrlmode );
275278 if (cf -> can_id & CAN_RTR_FLAG )
276279 acc_dlc |= ACC_DLC_RTR_FLAG ;
280+ if (priv -> can .ctrlmode & CAN_CTRLMODE_ONE_SHOT )
281+ acc_dlc |= ACC_DLC_SSTX_FLAG ;
277282
278283 if (cf -> can_id & CAN_EFF_FLAG ) {
279284 acc_id = cf -> can_id & CAN_EFF_MASK ;
0 commit comments