unsigned char RPC_Init(unsigned char addr) { unsigned char status; rpc_addr = addr; status = MAC_Init(addr); if (status != 0) return status; rpcTableSize = 0; while (RPC_Table[rpcTableSize].procedure != NULL) rpcTableSize++; DELAYMS(200); DELAYMS(200); DELAYMS(200); DELAYMS(200); DELAYMS(200); return 0; }
extern void emlxs_event_queue_destroy(emlxs_hba_t *hba) { emlxs_port_t *vport; emlxs_event_queue_t *eventq = &EVENTQ; uint32_t i; uint32_t wakeup = 0; mutex_enter(&eventq->lock); /* Clear all event masks and broadcast a wakeup */ /* to clear any sleeping threads */ if (hba->event_mask) { hba->event_mask = 0; hba->event_timer = 0; wakeup = 1; } for (i = 0; i < MAX_VPORTS; i++) { vport = &VPORT(i); if (vport->sd_event_mask) { vport->sd_event_mask = 0; wakeup = 1; } } if (wakeup) { cv_broadcast(&eventq->lock_cv); mutex_exit(&eventq->lock); DELAYMS(10); mutex_enter(&eventq->lock); } /* Destroy the remaining events */ while (eventq->first) { emlxs_event_destroy(hba, eventq->first); } mutex_exit(&eventq->lock); /* Destroy the queue lock */ mutex_destroy(&eventq->lock); cv_destroy(&eventq->lock_cv); /* Clear the queue */ bzero(eventq, sizeof (emlxs_event_queue_t)); return; } /* emlxs_event_queue_destroy() */