17 #ifdef IOMANX_ENABLE_LEGACY_IOMAN_HOOK
31 #define MAX_DEVICES 32
37 static const char *ioman_modname =
"IO/File_Manager";
59 int len = strlen(name) + 1;
65 if (!memcmp(
info->name, name, len))
80 for(table = lib->caller; table != NULL; table = table->next)
83 for(stub = (
struct irx_import_stub *) table->stubs; stub->jump != 0; stub++)
86 stub->jump = 0x08000000 | (((u32) lib->exports[stub->fno] << 4) >> 6);
93 static u32 *ioman_exports;
96 static u32 Addr_IOMAN_AddDrv = 0;
97 static u32 Addr_IOMAN_DelDrv = 0;
108 res = AddDrv(device);
110 if (Addr_IOMAN_AddDrv)
117 static int sbv_DelDrv(
const char *name)
123 if (Addr_IOMAN_DelDrv)
124 return(((
int (*)(
const char *name)) (Addr_IOMAN_DelDrv))(name));
135 int ioman_open(
const char *name, u32 flags)
137 return(iomanX_open(name, flags, 0644));
140 int ioman_mkdir(
const char *name)
142 return(iomanX_mkdir(name, 0755));
146 int ioman_format(
const char *dev)
153 int mode2modex(
int mode);
154 int modex2mode(
int mode);
158 stat->mode = modex2mode(iox_stat->mode);
159 stat->attr = iox_stat->attr;
160 stat->size = iox_stat->size;
161 memcpy(stat->ctime, iox_stat->ctime,
sizeof(iox_stat->ctime));
162 memcpy(stat->atime, iox_stat->atime,
sizeof(iox_stat->atime));
163 memcpy(stat->mtime, iox_stat->mtime,
sizeof(iox_stat->mtime));
164 stat->hisize = iox_stat->hisize;
169 iox_stat->mode = mode2modex(stat->mode);
170 iox_stat->attr = stat->attr;
171 iox_stat->size = stat->size;
172 memcpy(iox_stat->ctime, stat->ctime,
sizeof(stat->ctime));
173 memcpy(iox_stat->atime, stat->atime,
sizeof(stat->atime));
174 memcpy(iox_stat->mtime, stat->mtime,
sizeof(stat->mtime));
175 iox_stat->hisize = stat->hisize;
183 if (f == NULL || !(f->
mode & 8))
191 res = f->
device->ops->dread(f, &iox_dirent);
193 statx2stat(&iox_dirent.stat, &io_dirent->stat);
195 strncpy(io_dirent->name, iox_dirent.name,
sizeof(iox_dirent.name));
200 io_dread_t *io_dread = (io_dread_t*) f->
device->ops->dread;
201 res = io_dread(f, io_dirent);
207 int ioman_getstat(
const char *name,
io_stat_t *stat)
210 int res = iomanX_getstat(name, &iox_stat);
212 statx2stat(&iox_stat, stat);
216 int ioman_chstat(
const char *name,
io_stat_t *stat,
unsigned int mask)
219 stat2statx(stat, &iox_stat);
220 return iomanX_chstat(name, &iox_stat, mask);
229 iop_library_t ioman_library = { NULL, NULL, 0x102, 0,
"ioman\0\0" };
238 if (!
smod_get_mod_by_name(ioman_modname, &
info) || !(ioman_exports = (u32 *)QueryLibraryEntryTable(&ioman_library)))
243 old_version = _exp_ioman.version;
244 _exp_ioman.version |= 0xFF;
245 ret = RegisterLibraryEntries(&_exp_ioman);
246 _exp_ioman.version = old_version;
258 old_version = _exp_ioman.version;
259 _exp_ioman.version |= 0xFF;
260 ret = RegisterLibraryEntries(&_exp_ioman);
261 _exp_ioman.version = old_version;
266 ReleaseLibraryEntries((
struct irx_export_table *) (((uiptr) ioman_exports) - 0x14));
269 Addr_IOMAN_AddDrv = ioman_exports[20];
270 Addr_IOMAN_DelDrv = ioman_exports[21];
272 ioman_exports[20] = (u32) sbv_AddDrv;
273 ioman_exports[21] = (u32) sbv_DelDrv;
276 fix_imports((
iop_library_t *)(((uiptr) ioman_exports) - 0x14));
279 dev_list = iomanX_GetDeviceList();
297 int unhook_ioman(
void)
302 ReleaseLibraryEntries(&_exp_ioman);
303 RegisterLibraryEntries((
struct irx_export_table *) (((uiptr) ioman_exports) - 0x14));
309 ioman_exports[20] = Addr_IOMAN_AddDrv;
310 ioman_exports[21] = Addr_IOMAN_DelDrv;
313 fix_imports((
iop_library_t *) (((uiptr) ioman_exports) - 0x14));
315 ioman_exports = NULL;