MEDIA open_scsi_as_media(long bus, long device) { SCSI_MEDIA a; UInt32 blockCount; UInt32 blockSize; if (scsi_inited == 0) { scsi_init(); } if (scsi_mgr.exists == 0) { return 0; } a = 0; if (DoTestUnitReady(device, bus) > 0) { if (DoReadCapacity(device, bus, &blockCount, &blockSize) != 0) { a = new_scsi_media(); if (a != 0) { a->m.kind = scsi_mgr.kind; a->m.grain = blockSize; a->m.size_in_bytes = ((long long)blockCount) * blockSize; a->m.do_read = read_scsi_media; a->m.do_write = write_scsi_media; a->m.do_close = close_scsi_media; a->m.do_os_reload = os_reload_scsi_media; a->bus = bus; a->id = device; } } } return (MEDIA) a; }
LOCAL void REGPARMS StartNextInternalRequest (ADAPTER_PTR HA) { IO_REQ_PTR IReq = &HA->Ext->InternalRequest; IO_REQ_PTR XReq; int i; TRACE(2, ("StartNextInternalRequest(): InUse flag == %s\n", (HA->State.InternalReqInUse) ? "True" : "False")); critical(HA); while (!HA->State.InternalReqInUse && HA->Ext->InternalReqDeferQueue != (IO_REQ_PTR)NILL) { HA->State.InternalReqInUse = TRUE; XReq = HA->Ext->InternalReqDeferQueue; uncritical(HA); ReqTargetID(IReq) = ReqTargetID(XReq); ReqTargetLUN(IReq) = ReqTargetLUN(XReq); ReqDevP(IReq) = ReqDevP(XReq); for (i=0; i<12;i++) ReqCDB(IReq)[i] = 0; ReqState(IReq).ReqType = ReqState(XReq).ReqType; switch(ReqState(XReq).ReqType) { case RTGetInfoReq: DeviceInfo(HA); break; case RTAutoSenseReq: AutoSense(HA); break; case RTSyncNegReq: DoTestUnitReady(HA); break; default: CompleteDeferedRequest(HA, S_REQ_REQUEST); continue; } critical(HA); } uncritical(HA); }