示例#1
0
static int tegra186_bpmp_remove(struct udevice *dev)
{
	struct tegra186_bpmp *priv = dev_get_priv(dev);

	debug("%s(dev=%p) (priv=%p)\n", __func__, dev, priv);

	mbox_free(&priv->mbox);

	return 0;
}
示例#2
0
static int tegra186_bpmp_probe(struct udevice *dev)
{
	struct tegra186_bpmp *priv = dev_get_priv(dev);
	int ret;
	ulong tx_base, rx_base, start_time;

	debug("%s(dev=%p) (priv=%p)\n", __func__, dev, priv);

	ret = mbox_get_by_index(dev, 0, &priv->mbox);
	if (ret) {
		error("mbox_get_by_index() failed: %d\n", ret);
		return ret;
	}

	tx_base = tegra186_bpmp_get_shmem(dev, 0);
	if (IS_ERR_VALUE(tx_base)) {
		error("tegra186_bpmp_get_shmem failed for tx_base\n");
		return tx_base;
	}
	rx_base = tegra186_bpmp_get_shmem(dev, 1);
	if (IS_ERR_VALUE(rx_base)) {
		error("tegra186_bpmp_get_shmem failed for rx_base\n");
		return rx_base;
	}
	debug("shmem: rx=%lx, tx=%lx\n", rx_base, tx_base);

	ret = tegra_ivc_init(&priv->ivc, rx_base, tx_base, BPMP_IVC_FRAME_COUNT,
			     BPMP_IVC_FRAME_SIZE, tegra186_bpmp_ivc_notify);
	if (ret) {
		error("tegra_ivc_init() failed: %d\n", ret);
		return ret;
	}

	tegra_ivc_channel_reset(&priv->ivc);
	start_time = timer_get_us();
	for (;;) {
		ret = tegra_ivc_channel_notified(&priv->ivc);
		if (!ret)
			break;

		/* Timeout 100ms */
		if ((timer_get_us() - start_time) > 100 * 1000) {
			error("Initial IVC reset timed out (%d)\n", ret);
			ret = -ETIMEDOUT;
			goto err_free_mbox;
		}
	}

	return 0;

err_free_mbox:
	mbox_free(&priv->mbox);

	return ret;
}
示例#3
0
void mbox_test(void)
{
	int mbox_id = mbox_init(1);
	assert(mbox_id >= 0);

	struct mboxbuf __buf, *buf = &__buf;
	buf->size = 4096;
	buf->len = buf->size;
	buf->data = (void *)0xF0000000;
	assert(mbox_send(mbox_id, buf) < 0);

	buf->data = malloc(sizeof(char) * buf->size);
	assert(buf->data != NULL);

	char *data = (char *)(buf->data);
	int i;
	for (i = 0; i < buf->size; i++) {
		data[i] = (char)i;
	}
	buf->len = buf->size;

	unsigned int timeout = 100, saved_msec = gettime_msec();

	assert(mbox_send(mbox_id, buf) == 0);
	assert(mbox_send_timeout(mbox_id, buf, timeout) == -E_TIMEOUT);
	assert((unsigned int)(gettime_msec() - saved_msec) >= timeout);

	size_t saved_size = buf->size;
	buf->size = 100;
	assert(mbox_recv(mbox_id, buf) != 0);

	buf->size = saved_size - 1;
	assert(mbox_recv(mbox_id, buf) != 0);

	buf->size = saved_size;
	memset(buf->data, 0, sizeof(char) * buf->size);
	assert(mbox_recv(mbox_id, buf) == 0);

	assert(buf->size == saved_size && buf->len == saved_size);
	data = (char *)(buf->data);
	for (i = 0; i < buf->size; i++) {
		assert(data[i] == (char)i);
	}

	saved_msec = gettime_msec();
	assert(mbox_recv_timeout(mbox_id, buf, timeout) == -E_TIMEOUT);
	assert((unsigned int)(gettime_msec() - saved_msec) >= timeout);

	assert(mbox_free(mbox_id) == 0);
	assert(mbox_send(mbox_id, buf) != 0);

	exit(0);
}
示例#4
0
void
config_free (struct config *config)
{
    struct mbox *mbox = config->mailboxes, *mbox_o;
    while (mbox) {
	mbox_o = mbox;
	mbox = mbox->next;
	mbox_free (mbox_o);
    }
    struct signal *signal = config->signals, *signal_o;
    while (signal) {
	signal_o = signal;
	signal = signal->next;
	signal_free (signal_o);
    }
    free (config_filename);
    config_filename = NULL;
    free (config);
}
示例#5
0
文件: main.c 项目: dacav/maillearn
int main (int argc, char **argv)
{
    mbox_err_t err;
    mbox_t *mbox;
    mbox_mail_t *mail;

    assert(argc > 1);
    err = mbox_new(argv[1], &mbox);
    if (err) {
        fprintf(stderr, "Mbox error: %s\n", mbox_strerr(err));
        exit(1);
    }

    printf("Starting to get milk\n");
    while ((mail = mbox_next_mail (mbox)) != NULL) {
        const dlist_t *trace;
        diter_t *iter;

        printf("Is to [%s]\n", mbox_mail_getattr(mail, "To"));
        printf("Mail trace:\n");
        trace = mbox_mail_gettrace(mail);
        iter = dlist_iter_new((dlist_t **)&trace);
        while (diter_hasnext(iter)) {
            printf("\t%s\n", (char *)diter_next(iter));
        }
        dlist_iter_free(iter);
        printf("FOLLOWING TEXT\n");
        printf("%s\n", mbox_mail_getbody(mail));
        printf("END OF TEXT\n");
        mbox_mail_free(mail);
    }
    printf("LOL WUT?\n");

    mbox_free(mbox);

    exit(0);
}