163fa15dbSBob Pearson /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ 28700e3e7SMoni Shoua /* 38700e3e7SMoni Shoua * Copyright (c) 2016 Mellanox Technologies Ltd. All rights reserved. 48700e3e7SMoni Shoua * Copyright (c) 2015 System Fabric Works, Inc. All rights reserved. 58700e3e7SMoni Shoua */ 68700e3e7SMoni Shoua 78700e3e7SMoni Shoua #ifndef RXE_TASK_H 88700e3e7SMoni Shoua #define RXE_TASK_H 98700e3e7SMoni Shoua 108700e3e7SMoni Shoua enum { 118700e3e7SMoni Shoua TASK_STATE_START = 0, 128700e3e7SMoni Shoua TASK_STATE_BUSY = 1, 138700e3e7SMoni Shoua TASK_STATE_ARMED = 2, 148700e3e7SMoni Shoua }; 158700e3e7SMoni Shoua 168700e3e7SMoni Shoua /* 178700e3e7SMoni Shoua * data structure to describe a 'task' which is a short 188700e3e7SMoni Shoua * function that returns 0 as long as it needs to be 198700e3e7SMoni Shoua * called again. 208700e3e7SMoni Shoua */ 218700e3e7SMoni Shoua struct rxe_task { 228700e3e7SMoni Shoua struct tasklet_struct tasklet; 238700e3e7SMoni Shoua int state; 24*63a18baeSBob Pearson spinlock_t lock; 258700e3e7SMoni Shoua void *arg; 268700e3e7SMoni Shoua int (*func)(void *arg); 278700e3e7SMoni Shoua int ret; 2807bf9627SAndrew Boyer bool destroyed; 298700e3e7SMoni Shoua }; 308700e3e7SMoni Shoua 318700e3e7SMoni Shoua /* 328700e3e7SMoni Shoua * init rxe_task structure 338700e3e7SMoni Shoua * arg => parameter to pass to fcn 345f9e2822SBob Pearson * func => function to call until it returns != 0 358700e3e7SMoni Shoua */ 36de669ae8SBob Pearson int rxe_init_task(struct rxe_task *task, void *arg, int (*func)(void *)); 378700e3e7SMoni Shoua 388700e3e7SMoni Shoua /* cleanup task */ 398700e3e7SMoni Shoua void rxe_cleanup_task(struct rxe_task *task); 408700e3e7SMoni Shoua 418700e3e7SMoni Shoua /* 428700e3e7SMoni Shoua * raw call to func in loop without any checking 438700e3e7SMoni Shoua * can call when tasklets are disabled 448700e3e7SMoni Shoua */ 458700e3e7SMoni Shoua int __rxe_do_task(struct rxe_task *task); 468700e3e7SMoni Shoua 47dccb23f6SBob Pearson void rxe_run_task(struct rxe_task *task); 48dccb23f6SBob Pearson 49dccb23f6SBob Pearson void rxe_sched_task(struct rxe_task *task); 508700e3e7SMoni Shoua 518700e3e7SMoni Shoua /* keep a task from scheduling */ 528700e3e7SMoni Shoua void rxe_disable_task(struct rxe_task *task); 538700e3e7SMoni Shoua 548700e3e7SMoni Shoua /* allow task to run */ 558700e3e7SMoni Shoua void rxe_enable_task(struct rxe_task *task); 568700e3e7SMoni Shoua 578700e3e7SMoni Shoua #endif /* RXE_TASK_H */ 58