コード例 #1
0
ファイル: lws.c プロジェクト: lws-team/esplws
static lws_filefd_type
esp8266_lws_fops_open(struct lws *wsi, const char *filename,
		      unsigned long *filelen, int flags)
{
	struct esp8266_file *f = malloc(sizeof(*f));
	
	if (!f)
		return NULL;
	
	f->i = romfs_lookup(romfs, romfs, filename);
	if (!f->i) {
		free(f);
		return NULL;
	}
	
	*filelen = romfs_inode_size(f->i);
	f->ofs = 0;
	f->size = *filelen;
	
	return f;
}
コード例 #2
0
ファイル: modules.c プロジェクト: 3a9LL/panda
static int
load_module(const char *name)
{
	int len, i;
	void *addr;
	void *link_addr;
	module_init_t module_init;

	// Load modules right after the SNK...
	// FIXME: hard-coded offset!
	link_addr = (void*)__client_start + 0x800000;

	// snk_kernel_interface.print("Loading Module '%s'\n", name);

	/* find module in module list and lookup link address */
	for(i=0; modules[i].name; ++i) {
		if(strcmp(modules[i].name, name) == 0)
			break;
	}
	if( modules[i].name == 0 ) {
		/* module not in list */
		return -1;
	}

	/* check if link address is used already */
	for(i=1; i<MODULES_MAX; ++i) {
		if(snk_modules[i] /* && snk_modules[i]->link_addr == link_addr*/) {
			// busy, can't load modules
			return -2;
		}
	}

	/* find empty position in array of loaded modules */
	for(i=0; i<MODULES_MAX; ++i) {
		if(snk_modules[i] == 0) {
			break;
		}
	}
	if(i == MODULES_MAX) {
		// no space avaliable!
		return -3;
	}

	/* Read module from FLASH */
	len = romfs_lookup(name, &addr);
	if (len <= 0) {
		/* file not found */
		return -4;
	}

	/* Copy image from flash to RAM */
	if (elf_load_file_to_addr(addr, link_addr, (void*)&module_init,
				  NULL, flush_cache) != 2) {
		snk_kernel_interface.print("ELF loading failed!\n");
		return -5;
	}

	snk_modules[i] = module_init(&snk_kernel_interface, &snk_kernel_interface.pci_conf);
	if(snk_modules[i] == 0) {
		/* no device found that can be managed by this module */
		return -5;
	}

	if(snk_modules[i]->type == MOD_TYPE_NETWORK) {
		/* Get mac address from device tree */
		get_mac(snk_modules[i]->mac_addr);
	}

	return i;
}
コード例 #3
0
ファイル: modules.c プロジェクト: B-Rich/serialice
static int
load_module(const char *name)
{
	int len, i;
	void *addr;
	void *link_addr;
	module_init_t module_init;

	/* find module in module list and lookup link address */
	for(i=0; modules[i].name; ++i) {
		if(strcmp(modules[i].name, name) == 0)
			break;
	}
	if( modules[i].name == 0 ) {
		/* module not in list */
		return -1;
	}
	link_addr = modules[i].link_addr;

	/* check if link address is used already */
	for(i=0; i<MODULES_MAX; ++i) {
		if(snk_modules[i] && snk_modules[i]->link_addr == link_addr) {
			/* busy, can't load modules */
			return -2;
		}
	}

	/* find empty position in array of loaded modules */
	for(i=0; i<MODULES_MAX; ++i) {
		if(snk_modules[i] == 0) {
			break;
		}
	}
	if(i == MODULES_MAX) {
		// no space avaliable!
		return -3;
	}

	/* Read module from FLASH */
	len = romfs_lookup(name, &addr);
	if (len <= 0) {
		/* file not found */
		return -4;
	}
	/* Copy image from flash to RAM
	 * FIXME fix address 8MB
	 */

	memcpy(link_addr, addr, len);

	flush_cache(link_addr, len);

	/* Module starts with opd structure of the module_init
	 * function.
	 */
	module_init = (module_init_t) link_addr;

	snk_modules[i] = module_init(&snk_kernel_interface, &snk_kernel_interface.pci_conf);
	if(snk_modules[i] == 0) {
		/* no device found that can be managed by this module */
		return -5;
	}

	if(snk_modules[i]->type == MOD_TYPE_NETWORK) {
		/* Get mac address from device tree */
		get_mac(snk_modules[i]->mac_addr);
	}

	return i;
}