コード例 #1
0
ファイル: SCSI_media.c プロジェクト: aosm/pdisk
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;
}
コード例 #2
0
ファイル: intrlreq.c プロジェクト: BillTheBest/WinNT4
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);

}