1/* 2 * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. 3 * All rights reserved 4 * www.brocade.com 5 * 6 * Linux driver for Brocade Fibre Channel Host Bus Adapter. 7 * 8 * This program is free software; you can redistribute it and/or modify it 9 * under the terms of the GNU General Public License (GPL) Version 2 as 10 * published by the Free Software Foundation 11 * 12 * This program is distributed in the hope that it will be useful, but 13 * WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * General Public License for more details. 16 */ 17 18#ifndef __BFA_CALLBACK_PRIV_H__ 19#define __BFA_CALLBACK_PRIV_H__ 20 21#include <cs/bfa_q.h> 22 23typedef void (*bfa_cb_cbfn_t) (void *cbarg, bfa_boolean_t complete); 24 25/** 26 * Generic BFA callback element. 27 */ 28struct bfa_cb_qe_s { 29 struct list_head qe; 30 bfa_cb_cbfn_t cbfn; 31 bfa_boolean_t once; 32 u32 rsvd; 33 void *cbarg; 34}; 35 36#define bfa_cb_queue(__bfa, __hcb_qe, __cbfn, __cbarg) do { \ 37 (__hcb_qe)->cbfn = (__cbfn); \ 38 (__hcb_qe)->cbarg = (__cbarg); \ 39 list_add_tail(&(__hcb_qe)->qe, &(__bfa)->comp_q); \ 40} while (0) 41 42#define bfa_cb_dequeue(__hcb_qe) list_del(&(__hcb_qe)->qe) 43 44#define bfa_cb_queue_once(__bfa, __hcb_qe, __cbfn, __cbarg) do { \ 45 (__hcb_qe)->cbfn = (__cbfn); \ 46 (__hcb_qe)->cbarg = (__cbarg); \ 47 if (!(__hcb_qe)->once) { \ 48 list_add_tail((__hcb_qe), &(__bfa)->comp_q); \ 49 (__hcb_qe)->once = BFA_TRUE; \ 50 } \ 51} while (0) 52 53#define bfa_cb_queue_done(__hcb_qe) do { \ 54 (__hcb_qe)->once = BFA_FALSE; \ 55} while (0) 56 57#endif /* __BFA_CALLBACK_PRIV_H__ */ 58