VirtualBox

source: vbox/trunk/src/VBox/Main/include/StorageControllerImpl.h@ 25149

Last change on this file since 25149 was 24250, checked in by vboxsync, 15 years ago

StorageController: added support for Instance number

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.2 KB
Line 
1/* $Id: StorageControllerImpl.h 24250 2009-11-02 13:00:58Z vboxsync $ */
2
3/** @file
4 *
5 * VBox StorageController COM Class declaration.
6 */
7
8/*
9 * Copyright (C) 2008 Sun Microsystems, Inc.
10 *
11 * This file is part of VirtualBox Open Source Edition (OSE), as
12 * available from http://www.virtualbox.org. This file is free software;
13 * you can redistribute it and/or modify it under the terms of the GNU
14 * General Public License (GPL) as published by the Free Software
15 * Foundation, in version 2 as it comes in the "COPYING" file of the
16 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
17 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
18 *
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
20 * Clara, CA 95054 USA or visit http://www.sun.com if you need
21 * additional information or have any questions.
22 */
23
24#ifndef ____H_STORAGECONTROLLERIMPL
25#define ____H_STORAGECONTROLLERIMPL
26
27#include "VirtualBoxBase.h"
28
29#include <list>
30
31class Machine;
32
33class ATL_NO_VTABLE StorageController :
34 public VirtualBoxBaseWithChildrenNEXT,
35 public VirtualBoxSupportErrorInfoImpl<StorageController, IStorageController>,
36 public VirtualBoxSupportTranslation<StorageController>,
37 VBOX_SCRIPTABLE_IMPL(IStorageController)
38{
39private:
40
41 struct Data
42 {
43 /* Constructor. */
44 Data() : mStorageBus (StorageBus_IDE),
45 mStorageControllerType (StorageControllerType_PIIX4),
46 mInstance (0),
47 mPortCount (2),
48 mPortIde0Master (0),
49 mPortIde0Slave (1),
50 mPortIde1Master (2),
51 mPortIde1Slave (3) { }
52
53 bool operator== (const Data &that) const
54 {
55 return this == &that
56 || ( (mStorageControllerType == that.mStorageControllerType)
57 && (strName == that.strName)
58 && (mPortCount == that.mPortCount)
59 && (mPortIde0Master == that.mPortIde0Master)
60 && (mPortIde0Slave == that.mPortIde0Slave)
61 && (mPortIde1Master == that.mPortIde1Master)
62 && (mPortIde1Slave == that.mPortIde1Slave));
63 }
64
65 /** Unique name of the storage controller. */
66 Utf8Str strName;
67 /** The connection type of thestorage controller. */
68 StorageBus_T mStorageBus;
69 /** Type of the Storage controller. */
70 StorageControllerType_T mStorageControllerType;
71 /** Instance number of the storage controller. */
72 ULONG mInstance;
73 /** Number of usable ports. */
74 ULONG mPortCount;
75
76 /** The following is only for the SATA controller atm. */
77 /** Port which acts as primary master for ide emulation. */
78 ULONG mPortIde0Master;
79 /** Port which acts as primary slave for ide emulation. */
80 ULONG mPortIde0Slave;
81 /** Port which acts as secondary master for ide emulation. */
82 ULONG mPortIde1Master;
83 /** Port which acts as secondary slave for ide emulation. */
84 ULONG mPortIde1Slave;
85 };
86
87public:
88
89 VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT (StorageController)
90
91 DECLARE_NOT_AGGREGATABLE (StorageController)
92
93 DECLARE_PROTECT_FINAL_CONSTRUCT()
94
95 BEGIN_COM_MAP(StorageController)
96 COM_INTERFACE_ENTRY (ISupportErrorInfo)
97 COM_INTERFACE_ENTRY (IStorageController)
98 COM_INTERFACE_ENTRY2 (IDispatch, IStorageController)
99 END_COM_MAP()
100
101 DECLARE_EMPTY_CTOR_DTOR (StorageController)
102
103 HRESULT FinalConstruct();
104 void FinalRelease();
105
106 // public initializer/uninitializer for internal purposes only
107 HRESULT init(Machine *aParent,
108 const Utf8Str &aName,
109 StorageBus_T aBus,
110 ULONG aInstance);
111 HRESULT init(Machine *aParent,
112 StorageController *aThat,
113 bool aReshare = false);
114 HRESULT initCopy(Machine *aParent,
115 StorageController *aThat);
116 void uninit();
117
118 // IStorageController properties
119 STDMETHOD(COMGETTER(Name)) (BSTR *aName);
120 STDMETHOD(COMGETTER(Bus)) (StorageBus_T *aBus);
121 STDMETHOD(COMGETTER(ControllerType)) (StorageControllerType_T *aControllerType);
122 STDMETHOD(COMSETTER(ControllerType)) (StorageControllerType_T aControllerType);
123 STDMETHOD(COMGETTER(MaxDevicesPerPortCount)) (ULONG *aMaxDevices);
124 STDMETHOD(COMGETTER(MinPortCount)) (ULONG *aMinPortCount);
125 STDMETHOD(COMGETTER(MaxPortCount)) (ULONG *aMaxPortCount);
126 STDMETHOD(COMGETTER(PortCount)) (ULONG *aPortCount);
127 STDMETHOD(COMSETTER(PortCount)) (ULONG aPortCount);
128 STDMETHOD(COMGETTER(Instance)) (ULONG *aInstance);
129 STDMETHOD(COMSETTER(Instance)) (ULONG aInstance);
130
131 // StorageController methods
132 STDMETHOD(GetIDEEmulationPort) (LONG DevicePosition, LONG *aPortNumber);
133 STDMETHOD(SetIDEEmulationPort) (LONG DevicePosition, LONG aPortNumber);
134
135 // public methods only for internal purposes
136
137 const Utf8Str &name() const { return mData->strName; }
138 StorageControllerType_T controllerType() const { return mData->mStorageControllerType; }
139 StorageBus_T storageBus() const { return mData->mStorageBus; }
140 ULONG instance() const { return mData->mInstance; }
141
142 bool isModified() { AutoWriteLock alock (this); return mData.isBackedUp(); }
143 bool isReallyModified() { AutoWriteLock alock (this); return mData.hasActualChanges(); }
144 bool rollback();
145 void commit();
146
147 // public methods for internal purposes only
148 // (ensure there is a caller and a read lock before calling them!)
149
150 void unshare();
151
152 /** @note this doesn't require a read lock since mParent is constant. */
153 const ComObjPtr<Machine, ComWeakRef> &parent() { return mParent; };
154
155 const Backupable<Data> &data() { return mData; }
156 ComObjPtr<StorageController> peer() { return mPeer; }
157
158 // for VirtualBoxSupportErrorInfoImpl
159 static const wchar_t *getComponentName() { return L"StorageController"; }
160
161private:
162
163 void printList();
164
165 /** Parent object. */
166 const ComObjPtr<Machine, ComWeakRef> mParent;
167 /** Peer object. */
168 const ComObjPtr<StorageController> mPeer;
169 /** Data. */
170 Backupable<Data> mData;
171};
172
173#endif //!____H_STORAGECONTROLLERIMPL
174/* vi: set tabstop=4 shiftwidth=4 expandtab: */
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette