1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: os_AddressSpaceManager.h 4 5 Copyright (C)2009 Nintendo Co., Ltd. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Rev: 17610 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NN_OS_OS_ADDRESSSPACEMANAGER_H_ 17 #define NN_OS_OS_ADDRESSSPACEMANAGER_H_ 18 19 #include <nn/config.h> 20 #if NN_PLATFORM_HAS_MMU 21 22 #include <nn/types.h> 23 #include <nn/os/os_MemoryBlockBase.h> 24 #include <nn/os/os_CriticalSection.h> 25 26 // CHECK: C++ �p ifdef ���K�v�ł͂Ȃ��ł��傤��? 27 //#ifdef __cplusplus 28 29 namespace nn { 30 namespace os { 31 32 /*! 33 @brief �A�h���X��ԃ}�l�[�W�� 34 35 36 */ 37 class AddressSpaceManager 38 { 39 private: 40 typedef fnd::IntrusiveLinkedList<MemoryBlockBase> BlockList; 41 typedef os::CriticalSection Lock; 42 43 private: 44 uptr m_SpaceBegin; //!< �A�h���X��Ԃ̊J�n�A�h���X 45 uptr m_SpaceEnd; //!< �A�h���X��Ԃ̏I�[�A�h���X 46 BlockList m_BlockList; //!< �������u���b�N���X�g 47 Lock m_Lock; //!< �����I�u�W�F�N�g 48 49 public: 50 // CHECK: �R���X�g���N�^�ɂ� m_SpaceBegin�Am_SpaceEnd �����������邱�Ƃ����܂��B 51 52 /*! 53 @brief �A�h���X��ԃ}�l�[�W���Ƀ������̈�����蓖�Ă܂��B 54 55 @param[in] begin �������̈�̊J�n�A�h���X 56 @param[in] size �������̈�̃T�C�Y 57 */ 58 void Initialize(uptr begin, size_t size); 59 60 /*! 61 @brief �A�h���X��Ԃ��烁�������m�ۂ��܂��B 62 63 @param[out] pBlock �����������蓖�Ă�u���b�N 64 @param[in] size �m�ۂ��郁�����̃T�C�Y�B�y�[�W�T�C�Y�ɃA���C�����g����Ă���K�v������܂��B 65 66 @return �m�ۂ����������̃A�h���X��Ԃ��܂��B 67 */ 68 uptr Allocate(MemoryBlockBase* pBlock, size_t size, size_t skipSize); 69 70 /*! 71 @brief �������u���b�N���A�h���X��Ԃɉ�����܂��B 72 73 @param[in] pBlock �������u���b�N 74 */ 75 void Free(MemoryBlockBase* pBlock); 76 77 /*! 78 @brief �������u���b�N�̏��� pFrom ���� pTo �Ɉڂ��܂��B 79 80 @param[out] pTo �������u���b�N���R�s�[����Ώ� 81 @param[in,out] pFrom �������u���b�N�����R�s�[���錳�B�R�s�[��̓������u���b�N�̓N���A����܂��B 82 */ 83 void Switch(MemoryBlockBase* pTo, MemoryBlockBase* pFrom); 84 85 /*! 86 @brief �A�h���X��Ԃɑ��݂��郁�����u���b�N���X�g���f�o�b�O�o�͂��܂��B 87 */ 88 void Dump(); 89 90 private: 91 /*! 92 :private 93 94 @brief �w�肵���T�C�Y+�y�[�W�T�C�Y���̋�����̈��T�����܂��B 95 96 @param[in] size �T������T�C�Y 97 98 @return �������u���b�N�̌��ɋ��������ꍇ�́A���̃������u���b�N�ւ̃|�C���^��Ԃ��܂��B 99 100 �S��Ԃ��Ă���A�擪�̋�Ԃ��Ă���ꍇ�ɂ� NULL ��Ԃ��܂��B 101 102 �T�C�Y���̋��m�ۂł���̈悪�Ȃ������ꍇ�ɂ� NULL ��Ԃ��܂��B 103 */ 104 MemoryBlockBase* FindSpace(size_t size, size_t skipSize); 105 }; 106 107 108 } 109 } 110 111 // CHECK: C++ �p ifdef ���K�v�ł͂Ȃ��ł��傤��? 112 //#endif // __cplusplus 113 114 #include <nn/util/detail/util_CLibImpl.h> 115 116 /*! 117 @addtogroup nn_os os 118 @{ 119 120 @defgroup nn_os_AddressSpaceManager_c AddressSpaceManager (C) 121 122 @brief @ref nn::os::AddressSpaceManager �� C �C���^�t�F�[�X���W���[���ł��B 123 124 @{ 125 */ 126 127 /*! 128 @struct nnosAddressSpaceManager 129 @brief �A�h���X��ԊǗ���\�� C �̍\���̂ł��B 130 131 @brief �Ή�����N���X @ref nn::os::AddressSpaceManager ���Q�Ƃ��Ă��������B 132 */ 133 134 NN_UTIL_DETAIL_CLIBIMPL_DEFINE_BUFFER_CLASS(nnosAddressSpaceManager, nn::os::AddressSpaceManager, 24, bit32); 135 136 /*! 137 @brief �Ή����� C++ �� @ref nn::os::AddressSpaceManager::Initialize ���Q�Ƃ��Ă��������B 138 */ 139 NN_EXTERN_C void nnosAddressSpaceManagerInitialize(nnosAddressSpaceManager* p, uptr begin, size_t size); 140 141 /*! 142 @brief �Ή����� C++ �� @ref nn::os::AddressSpaceManager::Allocate ���Q�Ƃ��Ă��������B 143 */ 144 NN_EXTERN_C uptr nnosAddressSpaceManagerAllocate(nnosAddressSpaceManager* p, nnosMemoryBlockBase* pBlock, size_t size, size_t skipSize); 145 146 /*! 147 @brief �Ή����� C++ �� @ref nn::os::AddressSpaceManager::Free ���Q�Ƃ��Ă��������B 148 */ 149 NN_EXTERN_C void nnosAddressSpaceManagerFree(nnosAddressSpaceManager* p, nnosMemoryBlockBase* pBlock); 150 151 /*! 152 @brief �Ή����� C++ �� @ref nn::os::AddressSpaceManager::Switch ���Q�Ƃ��Ă��������B 153 */ 154 NN_EXTERN_C void nnosAddressSpaceManagerSwitch(nnosAddressSpaceManager* p, nnosMemoryBlockBase* pTo, nnosMemoryBlockBase* pFrom); 155 156 /*! 157 @} 158 159 @} 160 */ 161 162 #endif // if NN_PLATFORM_HAS_MMU 163 #endif /* NN_OS_OS_ADDRESSSPACEMANAGER_H_ */ 164