Пример #1
0
/* Read queue from a stream */
vqueue *
vq_read(FILE *fp)
{
    double priority;
    vscalar *s;
    int num, i;
    vqueue *q;

    q = vq_create();

    /* No. of entries */
    if (!v_read_long(&num, fp))
        return NULL;

    vq_require(q, num);

    /* The entries */
    for (i = 0; i < num; i++) {
        if (!v_read_double(&priority, fp))
            return NULL;

        if ((s = vs_read(fp)) == NULL)
            return NULL;

        vq_store(q, s, priority);
    }

    return q;
}
Пример #2
0
int init_config(void)
{
	int id, ret, len = 0;
	void * cfg = (void *)ITEMS_LOWBASE;

	printf("cfg: 0x%p\n", cfg);
	id = boot_device();
	switch(id) {
		case DEV_EEPROM:
		case DEV_FLASH:
			cfg = (void *)(IRAM_BASE_PA + BL_SIZE_FIXED
					- ITEM_SIZE_EMBEDDED);
			len = ITEM_SIZE_EMBEDDED;
			break ;
		case DEV_BND:
			id = DEV_NAND;
		default:
			printf("read items: id=%d\n", id);
			ret = vs_assign_by_id(id, 1);
			if (ret)
			  return ret;
			ret = vs_read(cfg, BL_LOC_CONFIG, ITEM_SIZE_NORMAL, 0);
			if (ret < 0)
			  return ret;
			len = ITEM_SIZE_NORMAL;
	}

	printf("begin init.\n");
	return item_init(cfg, len);
}
Пример #3
0
static int pdp_demux(void)
{
	int ret;
	u8 ch;
	size_t len;
	struct pdp_info *dev = NULL;
	struct pdp_hdr hdr;

	/* read header */
	ret = dpram_read(dpram_filp, &hdr, sizeof(hdr));

	if (ret < 0) {
		return ret;
	}

	len = hdr.len - sizeof(struct pdp_hdr);

	/* check header */
	down(&pdp_lock);
	dev = pdp_get_dev(hdr.id);

	if (dev == NULL) {
		printk("invalid id: %u, there is no existing device.\n", hdr.id);
		ret = -ENODEV;
		goto err;
	}

	/* read data */
	switch (dev->type) {
		case DEV_TYPE_NET:
			ret = vnet_recv(dev, len);
			break;
		case DEV_TYPE_SERIAL:
			ret = vs_read(dev, len);
			break;
		default:
			ret = -1;
	}

	if (ret < 0) {
		goto err;
	}
	up(&pdp_lock);

	/* check stop byte */
	ret = dpram_read(dpram_filp, &ch, sizeof(ch));

	if (ret < 0 || ch != 0x7e) {
		return ret;
	}

	return 0;
err:
	up(&pdp_lock);

	/* flush the remaining data including stop byte. */
	dpram_flush_rx(dpram_filp, len + 1);
	return ret;
}