bna: IOC Event Notification Enhancement
[deliverable/linux.git] / drivers / net / bna / bfa_cee.c
index dcfbf08bcf433b342d041cb60fa4b7fae50e249c..39e5ab9fde5981429e58ecccc5dce636fdde3953 100644 (file)
@@ -223,44 +223,56 @@ bfa_cee_isr(void *cbarg, struct bfi_mbmsg *m)
 }
 
 /**
- * bfa_cee_hbfail()
+ * bfa_cee_notify()
  *
  * @brief CEE module heart-beat failure handler.
+ * @brief CEE module IOC event handler.
  *
- * @param[in] Pointer to the CEE module data structure.
+ * @param[in] IOC event type
  *
  * @return void
  */
 
 static void
-bfa_cee_hbfail(void *arg)
+bfa_cee_notify(void *arg, enum bfa_ioc_event event)
 {
        struct bfa_cee *cee;
-       cee = arg;
+       cee = (struct bfa_cee *) arg;
 
-       if (cee->get_attr_pending == true) {
-               cee->get_attr_status = BFA_STATUS_FAILED;
-               cee->get_attr_pending  = false;
-               if (cee->cbfn.get_attr_cbfn) {
-                       cee->cbfn.get_attr_cbfn(cee->cbfn.get_attr_cbarg,
-                           BFA_STATUS_FAILED);
+       switch (event) {
+       case BFA_IOC_E_DISABLED:
+       case BFA_IOC_E_FAILED:
+               if (cee->get_attr_pending == true) {
+                       cee->get_attr_status = BFA_STATUS_FAILED;
+                       cee->get_attr_pending  = false;
+                       if (cee->cbfn.get_attr_cbfn) {
+                               cee->cbfn.get_attr_cbfn(
+                                       cee->cbfn.get_attr_cbarg,
+                                       BFA_STATUS_FAILED);
+                       }
                }
-       }
-       if (cee->get_stats_pending == true) {
-               cee->get_stats_status = BFA_STATUS_FAILED;
-               cee->get_stats_pending  = false;
-               if (cee->cbfn.get_stats_cbfn) {
-                       cee->cbfn.get_stats_cbfn(cee->cbfn.get_stats_cbarg,
-                           BFA_STATUS_FAILED);
+               if (cee->get_stats_pending == true) {
+                       cee->get_stats_status = BFA_STATUS_FAILED;
+                       cee->get_stats_pending  = false;
+                       if (cee->cbfn.get_stats_cbfn) {
+                               cee->cbfn.get_stats_cbfn(
+                                       cee->cbfn.get_stats_cbarg,
+                                       BFA_STATUS_FAILED);
+                       }
                }
-       }
-       if (cee->reset_stats_pending == true) {
-               cee->reset_stats_status = BFA_STATUS_FAILED;
-               cee->reset_stats_pending  = false;
-               if (cee->cbfn.reset_stats_cbfn) {
-                       cee->cbfn.reset_stats_cbfn(cee->cbfn.reset_stats_cbarg,
-                           BFA_STATUS_FAILED);
+               if (cee->reset_stats_pending == true) {
+                       cee->reset_stats_status = BFA_STATUS_FAILED;
+                       cee->reset_stats_pending  = false;
+                       if (cee->cbfn.reset_stats_cbfn) {
+                               cee->cbfn.reset_stats_cbfn(
+                                       cee->cbfn.reset_stats_cbarg,
+                                       BFA_STATUS_FAILED);
+                       }
                }
+               break;
+
+       default:
+               break;
        }
 }
 
@@ -286,6 +298,7 @@ bfa_nw_cee_attach(struct bfa_cee *cee, struct bfa_ioc *ioc,
        cee->ioc = ioc;
 
        bfa_nw_ioc_mbox_regisr(cee->ioc, BFI_MC_CEE, bfa_cee_isr, cee);
-       bfa_ioc_hbfail_init(&cee->hbfail, bfa_cee_hbfail, cee);
-       bfa_nw_ioc_hbfail_register(cee->ioc, &cee->hbfail);
+       bfa_q_qe_init(&cee->ioc_notify);
+       bfa_ioc_notify_init(&cee->ioc_notify, bfa_cee_notify, cee);
+       bfa_nw_ioc_notify_register(cee->ioc, &cee->ioc_notify);
 }
This page took 0.028308 seconds and 5 git commands to generate.