VirtualBox

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

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

Main: back out r50147 until the locking is properly understood; will come back.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.9 KB
Line 
1/* $Id: StorageControllerImpl.h 21686 2009-07-17 13:41:39Z 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 mPortCount (2),
47 mPortIde0Master (0),
48 mPortIde0Slave (1),
49 mPortIde1Master (2),
50 mPortIde1Slave (3) { }
51
52 bool operator== (const Data &that) const
53 {
54 return this == &that || ((mStorageControllerType == that.mStorageControllerType) &&
55 (mName == that.mName) &&
56 (mPortCount == that.mPortCount) &&
57 (mPortIde0Master == that.mPortIde0Master) &&
58 (mPortIde0Slave == that.mPortIde0Slave) &&
59 (mPortIde1Master == that.mPortIde1Master) &&
60 (mPortIde1Slave == that.mPortIde1Slave));
61 }
62
63 /** Uniuqe name of the storage controller. */
64 Bstr mName;
65 /** The connection type of thestorage controller. */
66 StorageBus_T mStorageBus;
67 /** Type of the Storage controller. */
68 StorageControllerType_T mStorageControllerType;
69 /** Number of usable ports. */
70 ULONG mPortCount;
71
72 /** The following is only for the SATA controller atm. */
73 /** Port which acts as primary master for ide emulation. */
74 ULONG mPortIde0Master;
75 /** Port which acts as primary slave for ide emulation. */
76 ULONG mPortIde0Slave;
77 /** Port which acts as secondary master for ide emulation. */
78 ULONG mPortIde1Master;
79 /** Port which acts as secondary slave for ide emulation. */
80 ULONG mPortIde1Slave;
81 };
82
83public:
84
85 VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT (StorageController)
86
87 DECLARE_NOT_AGGREGATABLE (StorageController)
88
89 DECLARE_PROTECT_FINAL_CONSTRUCT()
90
91 BEGIN_COM_MAP(StorageController)
92 COM_INTERFACE_ENTRY (ISupportErrorInfo)
93 COM_INTERFACE_ENTRY (IStorageController)
94 COM_INTERFACE_ENTRY2 (IDispatch, IStorageController)
95 END_COM_MAP()
96
97 NS_DECL_ISUPPORTS
98
99 DECLARE_EMPTY_CTOR_DTOR (StorageController)
100
101 HRESULT FinalConstruct();
102 void FinalRelease();
103
104 // public initializer/uninitializer for internal purposes only
105 HRESULT init (Machine *aParent, IN_BSTR aName,
106 StorageBus_T aBus);
107 HRESULT init (Machine *aParent, StorageController *aThat, bool aReshare = false);
108 HRESULT initCopy (Machine *aParent, StorageController *aThat);
109 void uninit();
110
111 // IStorageController properties
112 STDMETHOD(COMGETTER(Name)) (BSTR *aName);
113 STDMETHOD(COMGETTER(Bus)) (StorageBus_T *aBus);
114 STDMETHOD(COMGETTER(ControllerType)) (StorageControllerType_T *aControllerType);
115 STDMETHOD(COMSETTER(ControllerType)) (StorageControllerType_T aControllerType);
116 STDMETHOD(COMGETTER(MaxDevicesPerPortCount)) (ULONG *aMaxDevices);
117 STDMETHOD(COMGETTER(MinPortCount)) (ULONG *aMinPortCount);
118 STDMETHOD(COMGETTER(MaxPortCount)) (ULONG *aMaxPortCount);
119 STDMETHOD(COMGETTER(PortCount)) (ULONG *aPortCount);
120 STDMETHOD(COMSETTER(PortCount)) (ULONG aPortCount);
121 STDMETHOD(COMGETTER(Instance)) (ULONG *aInstance);
122 STDMETHOD(COMSETTER(Instance)) (ULONG aInstance);
123
124 // StorageController methods
125 STDMETHOD(GetIDEEmulationPort) (LONG DevicePosition, LONG *aPortNumber);
126 STDMETHOD(SetIDEEmulationPort) (LONG DevicePosition, LONG aPortNumber);
127
128 // public methods only for internal purposes
129
130 const Bstr &name() const { return mData->mName; }
131 StorageControllerType_T controllerType() const { return mData->mStorageControllerType; }
132
133 bool isModified() { AutoWriteLock alock (this); return mData.isBackedUp(); }
134 bool isReallyModified() { AutoWriteLock alock (this); return mData.hasActualChanges(); }
135 bool rollback();
136 void commit();
137
138 // public methods for internal purposes only
139 // (ensure there is a caller and a read lock before calling them!)
140
141 void unshare();
142
143 /** @note this doesn't require a read lock since mParent is constant. */
144 const ComObjPtr <Machine, ComWeakRef> &parent() { return mParent; };
145
146 const Backupable<Data> &data() { return mData; }
147 ComObjPtr <StorageController> peer() { return mPeer; }
148
149 // for VirtualBoxSupportErrorInfoImpl
150 static const wchar_t *getComponentName() { return L"StorageController"; }
151
152private:
153
154 void printList();
155
156 /** Parent object. */
157 const ComObjPtr<Machine, ComWeakRef> mParent;
158 /** Peer object. */
159 const ComObjPtr <StorageController> mPeer;
160 /** Data. */
161 Backupable <Data> mData;
162
163 /* Instance number of the device in the running VM. */
164 ULONG mInstance;
165};
166
167#endif //!____H_STORAGECONTROLLERIMPL
168/* 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