1 #pragma once
2 
3 #include "../SifModule.h"
4 #include "../SifDefs.h"
5 #include "Iop_Module.h"
6 
7 namespace Iop
8 {
9 	class CSysmem;
10 
11 	class CSifMan : public CModule
12 	{
13 	public:
14 		typedef std::function<void(const std::string&)> ModuleResetHandler;
15 		typedef std::function<void(uint32)> CustomCommandHandler;
16 
17 		CSifMan();
18 		virtual ~CSifMan() = default;
19 
20 		void GenerateHandlers(uint8*, CSysmem&);
21 
22 		std::string GetId() const override;
23 		std::string GetFunctionName(unsigned int) const override;
24 		void Invoke(CMIPS&, unsigned int) override;
25 
26 		virtual void RegisterModule(uint32, CSifModule*) = 0;
27 		virtual bool IsModuleRegistered(uint32) = 0;
28 		virtual void UnregisterModule(uint32) = 0;
29 		virtual void SendPacket(void*, uint32) = 0;
30 		virtual void SetDmaBuffer(uint32, uint32) = 0;
31 		virtual void SetCmdBuffer(uint32, uint32) = 0;
32 		virtual void SendCallReply(uint32, const void*) = 0;
33 		virtual void GetOtherData(uint32, uint32, uint32) = 0;
34 		virtual void SetModuleResetHandler(const ModuleResetHandler&) = 0;
35 		virtual void SetCustomCommandHandler(const CustomCommandHandler&) = 0;
36 
37 		virtual uint32 SifSetDma(uint32, uint32);
38 
39 	protected:
40 		virtual uint32 SifDmaStat(uint32);
41 		uint32 SifCheckInit();
42 		virtual uint32 SifSetDmaCallback(CMIPS&, uint32, uint32, uint32, uint32);
43 
44 		uint32 m_sifSetDmaCallbackHandlerPtr;
45 	};
46 
47 	typedef std::shared_ptr<CSifMan> SifManPtr;
48 }
49