static void ethInitSMB(void) {
	int ret;

	WaitSema(ethInitSemaID);
	ret = ethInitApplyConfig();
	SignalSema(ethInitSemaID);

	if(ret != 0)
	{
		ethDisplayErrorStatus();
		return;
	}

	// connect
	ethSMBConnect();

	if (gNetworkStartup == 0) {
		// update Themes
		char path[256];
		sprintf(path, "%sTHM", ethPrefix);
		thmAddElements(path, "\\", ethGameList.mode);

		sbCreateFolders(ethPrefix, 1);
	} else if (gPCShareName[0] || !(gNetworkStartup >= ERROR_ETH_SMB_OPENSHARE)) {
		ethDisplayErrorStatus();
	}
}
static void ethLoadModules(void) {
	int ret, ipconfiglen;
	char ipconfig[IPCONFIG_MAX_LEN] __attribute__((aligned(64)));

	LOG("ethLoadModules()\n");

	ipconfiglen = sysSetIPConfig(ipconfig);

	gNetworkStartup = 5;

	ret = sysLoadModuleBuffer(&ps2dev9_irx, size_ps2dev9_irx, 0, NULL);
	if (ret < 0) {
		gNetworkStartup = -1;
		return;
	}

	gNetworkStartup = 4;

	ret = sysLoadModuleBuffer(&smsutils_irx, size_smsutils_irx, 0, NULL);
	if (ret < 0) {
		gNetworkStartup = -1;
		return;
	}
	gNetworkStartup = 3;

	ret = sysLoadModuleBuffer(&smstcpip_irx, size_smstcpip_irx, 0, NULL);
	if (ret < 0) {
		gNetworkStartup = -1;
		return;
	}

	gNetworkStartup = 2;

	ret = sysLoadModuleBuffer(&smsmap_irx, size_smsmap_irx, ipconfiglen, ipconfig);
	if (ret < 0) {
		gNetworkStartup = -1;
		return;
	}

	gNetworkStartup = 1;

	ret = sysLoadModuleBuffer(&smbman_irx, size_smbman_irx, 0, NULL);
	if (ret < 0) {
		gNetworkStartup = -1;
		return;
	}

	gNetworkStartup = 0; // ok, all loaded

	LOG("ethLoadModules: modules loaded\n");

	// connect
	ethSMBConnect();

	// update Themes
	char path[255];
	sprintf(path, "%sTHM", ethPrefix);
	thmAddElements(path, "\\", ethGameList.mode);

#ifdef VMC
	sprintf(path, "%sVMC", ethPrefix);
	checkCreateDir(path);
#endif
}