Home | Info | Community | Development | myReactOS | Contact Us
Definition at line 1175 of file BusLogic958.c.
Referenced by BT958HwAdapterControl(), BT958HwResetBus(), and Buslogic_InitBT958().
{ BusLogic_HostAdapter_T *HostAdapter = &(deviceExtension->hcs); BusLogic_ExtendedMailboxRequest_T ExtendedMailboxRequest; UCHAR RoundRobinModeRequest; UCHAR SetCCBFormatRequest; int TargetID, LunID; // Used when we get the Physical address of the mail boxes ULONG length; // Initialize the pointers to the first and last CCBs that are queued for // completion processing. HostAdapter->FirstCompletedCCB = NULL; HostAdapter->LastCompletedCCB = NULL; // Initialize the Bus Device Reset Pending CCB, Tagged Queuing Active, // Command Successful Flag, Active Commands, and Commands Since Reset // for each Target Device. for (TargetID = 0; TargetID < HostAdapter->MaxTargetDevices; TargetID++) { HostAdapter->BusDeviceResetPendingCCB[TargetID] = NULL; HostAdapter->TargetFlags[TargetID].TaggedQueuingActive = FALSE; HostAdapter->TargetFlags[TargetID].CommandSuccessfulFlag = FALSE; HostAdapter->ActiveCommandsPerTarget[TargetID] = 0; for (LunID = 0; LunID < HostAdapter->MaxLogicalUnits; LunID++) HostAdapter->ActiveCommandsPerLun[TargetID][LunID] = 0; HostAdapter->CommandsSinceReset[TargetID] = 0; } // Convert virtual to physical mailbox address. deviceExtension->NoncachedExtension->MailboxPA = ScsiPortConvertPhysicalAddressToUlong( ScsiPortGetPhysicalAddress(deviceExtension, NULL, deviceExtension->NoncachedExtension->MailboxOut, &length)); HostAdapter->FirstOutgoingMailbox = (BusLogic_OutgoingMailbox_T *) deviceExtension->NoncachedExtension->MailboxOut; HostAdapter->LastOutgoingMailbox = HostAdapter->FirstOutgoingMailbox + HostAdapter->MailboxCount - 1; HostAdapter->NextOutgoingMailbox = HostAdapter->FirstOutgoingMailbox; HostAdapter->FirstIncomingMailbox = (BusLogic_IncomingMailbox_T *) deviceExtension->NoncachedExtension->MailboxIn; HostAdapter->LastIncomingMailbox = HostAdapter->FirstIncomingMailbox + HostAdapter->MailboxCount - 1; HostAdapter->NextIncomingMailbox = HostAdapter->FirstIncomingMailbox; // Initialize the Outgoing and Incoming Mailbox structures. memset(HostAdapter->FirstOutgoingMailbox, 0, HostAdapter->MailboxCount * sizeof(BusLogic_OutgoingMailbox_T)); memset(HostAdapter->FirstIncomingMailbox, 0, HostAdapter->MailboxCount * sizeof(BusLogic_IncomingMailbox_T)); ExtendedMailboxRequest.MailboxCount = HostAdapter->MailboxCount; ExtendedMailboxRequest.BaseMailboxAddress = deviceExtension->NoncachedExtension->MailboxPA ; if (BusLogic_Command(HostAdapter, BusLogic_InitializeExtendedMailbox, &ExtendedMailboxRequest, sizeof(ExtendedMailboxRequest), NULL, 0) < 0) { DebugPrint((ERROR, "\n BusLogic - Failure: MAILBOX INITIALIZATION\n")); return FALSE; } // Enable Strict Round Robin Mode if supported by the Host Adapter. In // Strict Round Robin Mode, the Host Adapter only looks at the next Outgoing // Mailbox for each new command, rather than scanning through all the // Outgoing Mailboxes to find any that have new commands in them. Strict // Round Robin Mode is significantly more efficient. if (HostAdapter->StrictRoundRobinModeSupport) { RoundRobinModeRequest = BusLogic_StrictRoundRobinMode; if (BusLogic_Command(HostAdapter, BusLogic_EnableStrictRoundRobinMode, &RoundRobinModeRequest, sizeof(RoundRobinModeRequest), NULL, 0) < 0) { DebugPrint((ERROR, "\n BusLogic - Failure: ENABLE STRICT ROUND ROBIN MODE\n")); return FALSE; } } // For Host Adapters that support Extended LUN Format CCBs, issue the Set CCB // Format command to allow 32 Logical Units per Target Device. if (HostAdapter->ExtendedLUNSupport) { SetCCBFormatRequest = BusLogic_ExtendedLUNFormatCCB; if (BusLogic_Command(HostAdapter, BusLogic_SetCCBFormat, &SetCCBFormatRequest, sizeof(SetCCBFormatRequest), NULL, 0) < 0) { DebugPrint((ERROR, "\n BusLogic - Failure: SET CCB FORMAT\n")); return FALSE; } } // Announce Successful Initialization. if (!HostAdapter->HostAdapterInitialized) { DebugPrint((INFO, "\n BusLogic - %s Initialized Successfully\n", HostAdapter, HostAdapter->FullModelName)); } else { DebugPrint((WARNING, "\n BusLogic - %s not initialized Successfully\n", HostAdapter, HostAdapter->FullModelName)); } HostAdapter->HostAdapterInitialized = TRUE; // Indicate the Host Adapter Initialization completed successfully. return TRUE; }// end BusLogic_InitializeHostAdapter