Beispiel #1
0
        public static StorApiStatus GetControllers(ref List <Controller> controllers)
        {
            StorApiStatus controllers2 = MarvellController.GetControllers(ref controllers);

            if (controllers2 != StorApiStatusEnum.STOR_NO_ERROR)
            {
                Storage.Debug("Marvell get controllers failed: {0}", new object[]
                {
                    controllers2
                });
            }
            controllers2 = SpacesController.GetControllers(ref controllers);
            if (controllers2 != StorApiStatusEnum.STOR_NO_ERROR)
            {
                Storage.Debug("Storage Spaces get controllers failed: {0}", new object[]
                {
                    controllers2
                });
            }
            return(StorApiStatusEnum.STOR_NO_ERROR);
        }
        protected override void UpdateController(Controller controller)
        {
            UpdateCompletedEvent updateCompletedEvent = new UpdateCompletedEvent();
            MarvellController    marvellController    = new MarvellController(((MarvellController)controller).AdapterId);
            StorApiStatus        storApiStatus        = marvellController.Update();

            if (storApiStatus != StorApiStatusEnum.STOR_NO_ERROR)
            {
                updateCompletedEvent.updateStatus = storApiStatus;
                updateCompletedEvent.controller   = controller;
                this.OnUpdateCompleted(updateCompletedEvent);
                return;
            }
            ListComparer <Drive> listComparer = new ListComparer <Drive>();

            listComparer.Compare(controller.Drives, marvellController.Drives, new Func <Drive, Drive, bool>(Drive.CompareAndCopyStatus));
            ListComparer <Volume> listComparer2 = new ListComparer <Volume>();

            listComparer2.Compare(controller.Volumes, marvellController.Volumes, new Func <Volume, Volume, bool>(Volume.CompareInfo));
            controller.Drives  = marvellController.Drives;
            controller.Volumes = marvellController.Volumes;
            if (listComparer.AnythingChanged)
            {
                listComparer.removedItems.ForEach(delegate(ListComparer <Drive> .ItemData d)
                {
                    DriveEvent driveEvent = new DriveEvent();
                    driveEvent.controller = controller;
                    driveEvent.drive      = d.newItem;
                    driveEvent.oldDrive   = d.oldItem;
                    driveEvent.type       = ControllerEventType.EVENT_TYPE_REMOVED;
                    this.OnDriveChanged(driveEvent);
                });
                listComparer.changedItems.ForEach(delegate(ListComparer <Drive> .ItemData d)
                {
                    DriveEvent driveEvent = new DriveEvent();
                    driveEvent.controller = controller;
                    driveEvent.drive      = d.newItem;
                    driveEvent.oldDrive   = d.oldItem;
                    driveEvent.type       = ControllerEventType.EVENT_TYPE_CHANGED;
                    this.OnDriveChanged(driveEvent);
                });
                listComparer.addedItems.ForEach(delegate(ListComparer <Drive> .ItemData d)
                {
                    DriveEvent driveEvent = new DriveEvent();
                    driveEvent.controller = controller;
                    driveEvent.drive      = d.newItem;
                    driveEvent.oldDrive   = d.oldItem;
                    driveEvent.type       = ControllerEventType.EVENT_TYPE_ADDED;
                    this.OnDriveChanged(driveEvent);
                });
            }
            if (listComparer2.AnythingChanged)
            {
                listComparer2.removedItems.ForEach(delegate(ListComparer <Volume> .ItemData d)
                {
                    VolumeEvent volumeEvent = new VolumeEvent();
                    volumeEvent.controller  = controller;
                    volumeEvent.volume      = d.newItem;
                    volumeEvent.oldVolume   = d.oldItem;
                    volumeEvent.type        = ControllerEventType.EVENT_TYPE_REMOVED;
                    this.OnVolumeChanged(volumeEvent);
                });
                listComparer2.changedItems.ForEach(delegate(ListComparer <Volume> .ItemData d)
                {
                    VolumeEvent volumeEvent = new VolumeEvent();
                    volumeEvent.controller  = controller;
                    volumeEvent.volume      = d.newItem;
                    volumeEvent.oldVolume   = d.oldItem;
                    volumeEvent.type        = ControllerEventType.EVENT_TYPE_CHANGED;
                    this.OnVolumeChanged(volumeEvent);
                });
                listComparer2.addedItems.ForEach(delegate(ListComparer <Volume> .ItemData d)
                {
                    VolumeEvent volumeEvent = new VolumeEvent();
                    volumeEvent.controller  = controller;
                    volumeEvent.volume      = d.newItem;
                    volumeEvent.oldVolume   = d.oldItem;
                    volumeEvent.type        = ControllerEventType.EVENT_TYPE_ADDED;
                    this.OnVolumeChanged(volumeEvent);
                });
            }
            updateCompletedEvent.updateStatus = StorApiStatusEnum.STOR_NO_ERROR;
            updateCompletedEvent.controller   = controller;
            this.OnUpdateCompleted(updateCompletedEvent);
        }
Beispiel #3
0
 public MarvellVolume(short id, MarvellController c) : base(id.ToString(), c)
 {
     this.mvid     = id;
     this.blockIds = new List <short>();
 }
Beispiel #4
0
 public MarvellDrive(short id, MarvellController c) : base(id.ToString(), c)
 {
     this.mvid = id;
 }
 public MarvellController(byte id) : base(MarvellController.MakeMarvellId(id))
 {
     this.mvid = id;
 }
        public new static StorApiStatus GetControllers(ref List <Controller> controllers)
        {
            StorApiStatus result = StorApiStatusEnum.STOR_NO_ERROR;
            byte          b      = 0;
            byte          b2     = 0;

            lock (MarvellUtil.mvApiLock)
            {
                try
                {
                    b2 = MvApi.MvApi.MV_Adapter_GetCount();
                }
                catch (Exception ex)
                {
                    Logger.Warn("MV_Adapter_GetCount exception: {0}", new object[]
                    {
                        ex
                    });
                    return(StorApiStatusEnum.STOR_API_ERROR);
                }
            }
            Storage.Debug("MV_Adapter_GetCount: {0}", new object[]
            {
                b2
            });
            for (byte b3 = 0; b3 < b2; b3 += 1)
            {
                byte b4 = 0;
                MvApi.MvApi.Adapter_Info adapter_Info = default(MvApi.MvApi.Adapter_Info);
                lock (MarvellUtil.mvApiLock)
                {
                    try
                    {
                        b = MvApi.MvApi.MV_Adapter_GetInfo(b3, ref b4, ref adapter_Info);
                    }
                    catch (Exception ex2)
                    {
                        Logger.Warn("MV_Adapter_GetInfo exception: {0}", new object[]
                        {
                            ex2
                        });
                        return(StorApiStatusEnum.STOR_API_ERROR);
                    }
                }
                Storage.Debug("MV_Adapter_GetInfo: mvstatus={0}, count={1}", new object[]
                {
                    b,
                    b2
                });
                if (b != 0 || b4 != 1)
                {
                    result = MarvellUtil.ToStorApiStatus(b);
                    break;
                }
                if (controllers == null)
                {
                    controllers = new List <Controller>();
                }
                MarvellController marvellController = new MarvellController(b3);
                marvellController.vendorId       = (int)adapter_Info.VenID;
                marvellController.maxHDSupported = (int)adapter_Info.MaxHD;
                Storage.Debug("AdvancedFeatures: {0:X}", new object[]
                {
                    adapter_Info.AdvancedFeatures
                });
                Storage.Debug("Supports ATA passthru: {0}", new object[]
                {
                    ((adapter_Info.AdvancedFeatures & 134217728) != 0) ? "yes" : "no"
                });
                controllers.Add(marvellController);
            }
            return(result);
        }