Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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() */