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 { 11d9467163SBob Pearson TASK_STATE_IDLE = 0, 128700e3e7SMoni Shoua TASK_STATE_BUSY = 1, 138700e3e7SMoni Shoua TASK_STATE_ARMED = 2, 14d9467163SBob Pearson TASK_STATE_DRAINING = 3, 15d9467163SBob Pearson TASK_STATE_DRAINED = 4, 16d9467163SBob Pearson TASK_STATE_INVALID = 5, 178700e3e7SMoni Shoua }; 188700e3e7SMoni Shoua 198700e3e7SMoni Shoua /* 208700e3e7SMoni Shoua * data structure to describe a 'task' which is a short 218700e3e7SMoni Shoua * function that returns 0 as long as it needs to be 228700e3e7SMoni Shoua * called again. 238700e3e7SMoni Shoua */ 248700e3e7SMoni Shoua struct rxe_task { 25*9b4b7c1fSBob Pearson struct work_struct work; 268700e3e7SMoni Shoua int state; 2763a18baeSBob Pearson spinlock_t lock; 283946fc2aSBob Pearson struct rxe_qp *qp; 293946fc2aSBob Pearson int (*func)(struct rxe_qp *qp); 308700e3e7SMoni Shoua int ret; 31d9467163SBob Pearson long num_sched; 32d9467163SBob Pearson long num_done; 338700e3e7SMoni Shoua }; 348700e3e7SMoni Shoua 35*9b4b7c1fSBob Pearson int rxe_alloc_wq(void); 36*9b4b7c1fSBob Pearson 37*9b4b7c1fSBob Pearson void rxe_destroy_wq(void); 38*9b4b7c1fSBob Pearson 398700e3e7SMoni Shoua /* 408700e3e7SMoni Shoua * init rxe_task structure 413946fc2aSBob Pearson * qp => parameter to pass to func 425f9e2822SBob Pearson * func => function to call until it returns != 0 438700e3e7SMoni Shoua */ 443946fc2aSBob Pearson int rxe_init_task(struct rxe_task *task, struct rxe_qp *qp, 453946fc2aSBob Pearson int (*func)(struct rxe_qp *)); 468700e3e7SMoni Shoua 478700e3e7SMoni Shoua /* cleanup task */ 488700e3e7SMoni Shoua void rxe_cleanup_task(struct rxe_task *task); 498700e3e7SMoni Shoua 50dccb23f6SBob Pearson void rxe_run_task(struct rxe_task *task); 51dccb23f6SBob Pearson 52dccb23f6SBob Pearson void rxe_sched_task(struct rxe_task *task); 538700e3e7SMoni Shoua 548700e3e7SMoni Shoua /* keep a task from scheduling */ 558700e3e7SMoni Shoua void rxe_disable_task(struct rxe_task *task); 568700e3e7SMoni Shoua 578700e3e7SMoni Shoua /* allow task to run */ 588700e3e7SMoni Shoua void rxe_enable_task(struct rxe_task *task); 598700e3e7SMoni Shoua 608700e3e7SMoni Shoua #endif /* RXE_TASK_H */ 61