2 Copyright (C) 2015-2019, The AROS Development Team.
6 #include <aros/debug.h>
8 #define __STORAGE_NOLIBBASE__
10 #include <proto/sysexp.h>
11 #include <proto/storage.h>
13 #include <proto/alib.h>
14 #include <proto/dos.h>
15 #include <proto/exec.h>
16 #include <proto/muimaster.h>
17 #include <proto/oop.h>
18 #include <proto/utility.h>
19 #include <proto/intuition.h>
21 #include <zune/customclasses.h>
22 #include <mui/NListtree_mcc.h>
23 #include <mui/NListview_mcc.h>
24 #include <utility/tagitem.h>
25 #include <utility/hooks.h>
27 #include <hidd/storage.h>
28 #include <hidd/hidd.h>
34 #include "ata_classes.h"
35 #include "ata_intern.h"
37 extern int ATABusWindow_Initialize(struct SysexpBase
*SysexpBase
);
38 extern void ATABusWindow_Deinitialize(struct SysexpBase
*SysexpBase
);
39 extern int ATAUnitWindow_Initialize(struct SysexpBase
*SysexpBase
);
40 extern void ATAUnitWindow_Deinitialize(struct SysexpBase
*SysexpBase
);
42 #if (1) // TODO : Move into libbase
43 extern OOP_AttrBase HiddStorageUnitAB
;
44 extern OOP_AttrBase HiddATABusAB
;
45 extern OOP_AttrBase HiddATAUnitAB
;
47 extern OOP_MethodID HiddStorageControllerBase
;
50 AROS_UFH3S(BOOL
, ataunitenumFunc
,
51 AROS_UFHA(struct Hook
*, h
, A0
),
52 AROS_UFHA(OOP_Object
*, unit
, A2
),
53 AROS_UFHA(void *, parent
, A1
))
57 struct SysexpEnum_data
*edata
= (struct SysexpEnum_data
*)h
->h_Data
;
58 struct InsertObjectMsg msg
=
63 struct SysexpBase
*SysexpBase
;
64 struct SysexpATABase
*AtaBase
;
66 D(bug("[ata.sysexp] %s()\n", __func__
));
71 SysexpBase
= edata
->ed_sysexpbase
;
73 D(bug("[ata.sysexp] ataunit @ %p\n", unit
));
77 AtaBase
= GetBase("ATA.Module");
78 msg
.winClass
= AtaBase
->seab_ATAUnitWindowCLASS
;
79 SysexpBase
->GlobalCount
++;
81 OOP_GetAttr(unit
, aHidd_StorageUnit_Model
, (IPTR
*)&name
);
82 DoMethod(SysexpBase
->sesb_Tree
, MUIM_NListtree_Insert
, name
, &msg
,
83 parent
, MUIV_NListtree_Insert_PrevNode_Tail
, 0);
85 return FALSE
; /* Continue enumeration */
90 struct SysexpStorageBase
*StorageBase
;
91 static struct SysexpEnum_data privatehookdata
=
97 static void ataBusEnum(OOP_Object
*obj
, struct MUI_NListtree_TreeNode
*parent
)
99 D(bug("[ata.sysexp] atabus: \n"));
101 EnumBusUnits(obj
, parent
, ataunitenumFunc
, &privatehookdata
);
104 void ATAStartup(struct SysexpBase
*SysexpBase
)
106 struct SysexpATABase
*AtaBase
;
107 D(bug("[ata.sysexp] %s(%p)\n", __func__
, SysexpBase
));
109 StorageBase
= GetBase("Storage.Module");
110 D(bug("[ata.sysexp] %s: StorageBase @ %p\n", __func__
, StorageBase
));
115 "ATA enumerator requires `storage.sysexp'.", NULL
118 AtaBase
= GetBase("ATA.Module");
119 D(bug("[ata.sysexp] %s: AtaBase @ %p\n", __func__
, AtaBase
));
121 privatehookdata
.ed_sysexpbase
= SysexpBase
;
123 AtaBase
->seab_DevicePageCLASS
= GetBase("DevicePage.Class");
124 AtaBase
->seab_GenericWindowCLASS
= GetBase("GenericWindow.Class");
126 ATABusWindow_Initialize(SysexpBase
);
127 ATAUnitWindow_Initialize(SysexpBase
);
129 RegisterStorageControllerHandler(CLID_Hidd_ATA
, 90, AtaBase
->seab_GenericWindowCLASS
, NULL
, NULL
);
130 RegisterStorageBusHandler(CLID_Hidd_ATABus
, 90, AtaBase
->seab_ATABusWindowCLASS
, ataBusEnum
, NULL
);
133 void ATAShutdown(struct SysexpBase
*SysexpBase
)
135 D(bug("[ata.sysexp] %s(%p)\n", __func__
, SysexpBase
));
137 ATAUnitWindow_Deinitialize(SysexpBase
);
138 ATABusWindow_Deinitialize(SysexpBase
);