#include #include #include #include #include #include #include "request.h" #include "globals.h" #include "global.h" #include "aspi.h" #include "callaspi.h" union ReqUnion Req; static void load_HA_info(IO_HA_INQ_PTR,char); /*************************************************************************** * * * ***************************************************************************/ static void load_HA_info(IO_HA_INQ_PTR req, char HANum) { char i; struct adapter_info *info = &HA_Info[HANum]; i = info->TargetID = req->ADSCSIID; info->dev[i].valid = 1; strncpy(&info->dev[i].InquiryString[8], req->AdapterID, 16); info->dev[i].InquiryString[24] = 0; printf("HOST Adapter: %d, %s\n",HANum,&info->dev[i].InquiryString[8]); } /*************************************************************************** * * * ***************************************************************************/ void check_devices(char HANum) { union SCSI_CDB cdb; char i; cdb.SCSI6[0] = 0x12; cdb.SCSI6[1] = 0; cdb.SCSI6[2] = 0; cdb.SCSI6[3] = 0; cdb.SCSI6[4] = 32; cdb.SCSI6[5] = 0; for(i = 0; i < MAX_DEV; i++) { if (i != HA_Info[HANum].TargetID) { if (!diag_here(DIAG_NO_INQ)) // No Inquery? { InitRequest(&Req, HANum, i,0, (void FAR *)HA_Info[HANum].dev[i].InquiryString, (unsigned long) MAX_DEV_INQ_STR, (char *)&cdb, 6,NULL); if (!DoASPI(&Req, FALSE /*TRUE*/,ASPI_NOPOST)) { // HA_Info[HANum].dev[i].valid = TRUE; // HA_Info[HANum].dev[i].InquiryString[MAX_DEV_INQ_STR] = 0; } } HA_Info[HANum].dev[i].valid = TRUE; HA_Info[HANum].dev[i].InquiryString[MAX_DEV_INQ_STR] = 0; } if(HA_Info[HANum].dev[i].valid) { printf("\tSCSI ID: %d, %s\n", i, &HA_Info[HANum].dev[i].InquiryString[8]); } } } /*************************************************************************** * * * ***************************************************************************/ void show_all() { char i,j; if(MG_Info.NumHA > 0) { printf("Aspi Manager Version: %s", MG_Info.IDString); } for (i = 0; i < MG_Info.NumHA; i++) { printf("Host Adapter %d (%s):", i, &HA_Info[i].dev[HA_Info[i].TargetID].InquiryString[8]); for(j = 0; j < MAX_DEV; j++) { printf("\tDevice %d: %s\n", j, &HA_Info[i].dev[j].InquiryString[8]); } } } /*************************************************************************** * * * ***************************************************************************/ void Init_ASPI() { InitGlobals(); } /*************************************************************************** * * * ***************************************************************************/ void Get_HAs(void) { struct ASPIHAINQUIRY inq_req; char i; inq_req.Command = 0; inq_req.Status = 0; inq_req.HANumber = 0; inq_req.Flags = 0; if (DoASPI(&inq_req, FALSE,ASPI_NOPOST)) { /* something's hosed; get out */ exit(1); } MG_Info.NumHA = inq_req.AdapterCount; strncpy(MG_Info.IDString, inq_req.MGRID, MAX_MGR_ID_STR); MG_Info.IDString[MAX_MGR_ID_STR] = 0; load_HA_info(&inq_req, 0); for(i = 1; i < MG_Info.NumHA; i++) { inq_req.Status = 0; inq_req.HANumber = i; if (DoASPI(&inq_req, FALSE,ASPI_NOPOST)) { /* something's hosed; get out */ exit(1); } load_HA_info(&inq_req, i); } } /*************************************************************************** * * * ***************************************************************************/ void quick_scan(void) { char i; Get_HAs(); for (i = 0; i < MAX_HA; i++) check_devices(i); }