@@ -41,7 +41,8 @@ struct can_loopback_data {
4141 CONFIG_CAN_LOOPBACK_TX_THREAD_STACK_SIZE );
4242};
4343
44- static void dispatch_frame (const struct zcan_frame * frame ,
44+ static void dispatch_frame (const struct device * dev ,
45+ const struct zcan_frame * frame ,
4546 struct can_loopback_filter * filter )
4647{
4748 struct zcan_frame frame_tmp = * frame ;
@@ -52,7 +53,7 @@ static void dispatch_frame(const struct zcan_frame *frame,
5253 "standard" : "extended" ,
5354 frame -> rtr == CAN_DATAFRAME ? "" : ", RTR frame" );
5455
55- filter -> rx_cb (& frame_tmp , filter -> cb_arg );
56+ filter -> rx_cb (dev , & frame_tmp , filter -> cb_arg );
5657}
5758
5859static inline int check_filter_match (const struct zcan_frame * frame ,
@@ -62,13 +63,15 @@ static inline int check_filter_match(const struct zcan_frame *frame,
6263 (frame -> id & filter -> id_mask ));
6364}
6465
65- void tx_thread (void * data_arg , void * arg2 , void * arg3 )
66+ void tx_thread (void * arg1 , void * arg2 , void * arg3 )
6667{
67- ARG_UNUSED ( arg2 ) ;
68- ARG_UNUSED ( arg3 ) ;
68+ const struct device * dev = arg1 ;
69+ struct can_loopback_data * data = dev -> data ;
6970 struct can_loopback_frame frame ;
7071 struct can_loopback_filter * filter ;
71- struct can_loopback_data * data = (struct can_loopback_data * )data_arg ;
72+
73+ ARG_UNUSED (arg2 );
74+ ARG_UNUSED (arg3 );
7275
7376 while (1 ) {
7477 k_msgq_get (& data -> tx_msgq , & frame , K_FOREVER );
@@ -78,7 +81,7 @@ void tx_thread(void *data_arg, void *arg2, void *arg3)
7881 filter = & data -> filters [i ];
7982 if (filter -> rx_cb &&
8083 check_filter_match (& frame .frame , & filter -> filter )) {
81- dispatch_frame (& frame .frame , filter );
84+ dispatch_frame (dev , & frame .frame , filter );
8285 }
8386 }
8487
@@ -87,7 +90,7 @@ void tx_thread(void *data_arg, void *arg2, void *arg3)
8790 if (!frame .cb ) {
8891 k_sem_give (frame .tx_compl );
8992 } else {
90- frame .cb (0 , frame .cb_arg );
93+ frame .cb (dev , 0 , frame .cb_arg );
9194 }
9295 }
9396}
@@ -307,7 +310,7 @@ static int can_loopback_init(const struct device *dev)
307310
308311 tx_tid = k_thread_create (& data -> tx_thread_data , data -> tx_thread_stack ,
309312 K_KERNEL_STACK_SIZEOF (data -> tx_thread_stack ),
310- tx_thread , data , NULL , NULL ,
313+ tx_thread , ( void * ) dev , NULL , NULL ,
311314 CONFIG_CAN_LOOPBACK_TX_THREAD_PRIORITY ,
312315 0 , K_NO_WAIT );
313316 if (!tx_tid ) {
0 commit comments