Blame ld10k1/src/liblo10k1.c

Packit Service b98cfc
/*
Packit Service b98cfc
 *  EMU10k1 loader lib
Packit Service b98cfc
 *  Copyright (c) 2003,2004 by Peter Zubaj
Packit Service b98cfc
 *
Packit Service b98cfc
 *
Packit Service b98cfc
 *   This library is free software; you can redistribute it and/or modify
Packit Service b98cfc
 *   it under the terms of the GNU Lesser General Public License as
Packit Service b98cfc
 *   published by the Free Software Foundation; either version 2.1 of
Packit Service b98cfc
 *   the License, or (at your option) any later version.
Packit Service b98cfc
 *
Packit Service b98cfc
 *   This program is distributed in the hope that it will be useful,
Packit Service b98cfc
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service b98cfc
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service b98cfc
 *   GNU Lesser General Public License for more details.
Packit Service b98cfc
 *
Packit Service b98cfc
 *   You should have received a copy of the GNU Lesser General Public
Packit Service b98cfc
 *   License along with this library; if not, write to the Free Software
Packit Service b98cfc
 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
Packit Service b98cfc
 *
Packit Service b98cfc
 */
Packit Service b98cfc
Packit Service b98cfc
#include <stdlib.h>
Packit Service b98cfc
#include <string.h>
Packit Service b98cfc
#include "comm.h"
Packit Service b98cfc
#include "ld10k1_fnc.h"
Packit Service b98cfc
#include "ld10k1_error.h"
Packit Service b98cfc
#include "liblo10k1.h"
Packit Service b98cfc
#include "liblo10k1ef.h"
Packit Service b98cfc
#include "liblo10k1lf.h"
Packit Service b98cfc
#include "ld10k1_debug.h"
Packit Service b98cfc
#include "config.h"
Packit Service b98cfc
Packit Service b98cfc
int send_request_check(int conn_num, int op, void *data, int data_size)
Packit Service b98cfc
{
Packit Service b98cfc
	int opr, sizer;
Packit Service b98cfc
	int err;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = send_request(conn_num, op, data, data_size)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = receive_response(conn_num, &opr, &sizer)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
		
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int send_msg_data_check(int conn_num, void *data, int data_size)
Packit Service b98cfc
{
Packit Service b98cfc
	int opr, sizer;
Packit Service b98cfc
	int err;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = send_msg_data(conn_num, data, data_size)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = receive_response(conn_num, &opr, &sizer)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
		
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int receive_response_data_check(int conn_num, void *data, int idata_size)
Packit Service b98cfc
{
Packit Service b98cfc
	int err;
Packit Service b98cfc
	int op, data_size;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = receive_response(conn_num, &op, &data_size)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
		
Packit Service b98cfc
	if (op == FNC_ERR)
Packit Service b98cfc
		return LD10K1_ERR_PROTOCOL;
Packit Service b98cfc
	if (data_size != idata_size)
Packit Service b98cfc
		return LD10K1_ERR_PROTOCOL;
Packit Service b98cfc
		
Packit Service b98cfc
	if ((err = receive_msg_data(conn_num, data, data_size)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
		
Packit Service b98cfc
	/* receive check */
Packit Service b98cfc
	if ((err = receive_response(conn_num, &op, &data_size)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
	
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void liblo10k1_connection_init(liblo10k1_connection_t *conn)
Packit Service b98cfc
{
Packit Service b98cfc
	*conn = 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_connect(liblo10k1_param *param, liblo10k1_connection_t *conn)
Packit Service b98cfc
{
Packit Service b98cfc
	int err;
Packit Service b98cfc
Packit Service b98cfc
	param->server = 0;
Packit Service b98cfc
	*conn = setup_comm(param);
Packit Service b98cfc
	if (*conn < 0)
Packit Service b98cfc
		return LD10K1_ERR_COMM_CONN;
Packit Service b98cfc
	if ((err = connect_comm(*conn, param)) < 0) {
Packit Service b98cfc
		free_comm(*conn);
Packit Service b98cfc
		*conn = 0;
Packit Service b98cfc
		return err;
Packit Service b98cfc
	}
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_disconnect(liblo10k1_connection_t *conn)
Packit Service b98cfc
{
Packit Service b98cfc
	send_request(*conn, FNC_CLOSE_CONN, NULL, 0);
Packit Service b98cfc
	free_comm(*conn);
Packit Service b98cfc
	*conn = 0;
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_is_open(liblo10k1_connection_t *conn)
Packit Service b98cfc
{
Packit Service b98cfc
	return *conn != 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_patch_set_in_count(liblo10k1_dsp_patch_t *p, int count)
Packit Service b98cfc
{
Packit Service b98cfc
	liblo10k1_dsp_pio_t *tmp = NULL;
Packit Service b98cfc
	
Packit Service b98cfc
	if (count > 0) {
Packit Service b98cfc
		tmp = (liblo10k1_dsp_pio_t *)malloc(sizeof(liblo10k1_dsp_pio_t) * count);
Packit Service b98cfc
		if (!tmp)
Packit Service b98cfc
			return LD10K1_ERR_NO_MEM;
Packit Service b98cfc
		memset(tmp, 0, sizeof(liblo10k1_dsp_pio_t) * count);
Packit Service b98cfc
	}
Packit Service b98cfc
	
Packit Service b98cfc
	p->in_count = count;
Packit Service b98cfc
	if (p->ins)
Packit Service b98cfc
		free(p->ins);
Packit Service b98cfc
	p->ins = tmp;
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_patch_set_out_count(liblo10k1_dsp_patch_t *p, int count)
Packit Service b98cfc
{
Packit Service b98cfc
	liblo10k1_dsp_pio_t *tmp = NULL;
Packit Service b98cfc
	
Packit Service b98cfc
	if (count > 0) {
Packit Service b98cfc
		tmp = (liblo10k1_dsp_pio_t *)malloc(sizeof(liblo10k1_dsp_pio_t) * count);
Packit Service b98cfc
		if (!tmp)
Packit Service b98cfc
			return LD10K1_ERR_NO_MEM;
Packit Service b98cfc
		memset(tmp, 0, sizeof(liblo10k1_dsp_pio_t) * count);
Packit Service b98cfc
	}
Packit Service b98cfc
	
Packit Service b98cfc
	p->out_count = count;
Packit Service b98cfc
	if (p->outs)
Packit Service b98cfc
		free(p->outs);
Packit Service b98cfc
	p->outs = tmp;
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_patch_set_const_count(liblo10k1_dsp_patch_t *p, int count)
Packit Service b98cfc
{
Packit Service b98cfc
	liblo10k1_dsp_cs_t *tmp = NULL;
Packit Service b98cfc
	
Packit Service b98cfc
	if (count > 0) {
Packit Service b98cfc
		tmp = (liblo10k1_dsp_cs_t *)malloc(sizeof(liblo10k1_dsp_cs_t) * count);
Packit Service b98cfc
		if (!tmp)
Packit Service b98cfc
			return LD10K1_ERR_NO_MEM;
Packit Service b98cfc
		memset(tmp, 0, sizeof(liblo10k1_dsp_cs_t) * count);
Packit Service b98cfc
	}
Packit Service b98cfc
	
Packit Service b98cfc
	p->const_count = count;
Packit Service b98cfc
	if (p->consts)
Packit Service b98cfc
		free(p->consts);
Packit Service b98cfc
	p->consts = tmp;
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_patch_set_sta_count(liblo10k1_dsp_patch_t *p, int count)
Packit Service b98cfc
{
Packit Service b98cfc
	liblo10k1_dsp_cs_t *tmp = NULL;
Packit Service b98cfc
	
Packit Service b98cfc
	if (count > 0) {
Packit Service b98cfc
		tmp = (liblo10k1_dsp_cs_t *)malloc(sizeof(liblo10k1_dsp_cs_t) * count);
Packit Service b98cfc
		if (!tmp)
Packit Service b98cfc
			return LD10K1_ERR_NO_MEM;
Packit Service b98cfc
		memset(tmp, 0, sizeof(liblo10k1_dsp_cs_t) * count);
Packit Service b98cfc
	}
Packit Service b98cfc
	
Packit Service b98cfc
	p->sta_count = count;
Packit Service b98cfc
	if (p->stas)
Packit Service b98cfc
		free(p->stas);
Packit Service b98cfc
	p->stas = tmp;
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_patch_set_dyn_count(liblo10k1_dsp_patch_t *p, int count)
Packit Service b98cfc
{
Packit Service b98cfc
	p->dyn_count = count;
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_patch_set_hw_count(liblo10k1_dsp_patch_t *p, int count)
Packit Service b98cfc
{
Packit Service b98cfc
	liblo10k1_dsp_hw_t *tmp = NULL;
Packit Service b98cfc
	
Packit Service b98cfc
	if (count > 0) {
Packit Service b98cfc
		tmp = (liblo10k1_dsp_hw_t *)malloc(sizeof(liblo10k1_dsp_hw_t) * count);
Packit Service b98cfc
		if (!tmp)
Packit Service b98cfc
			return LD10K1_ERR_NO_MEM;
Packit Service b98cfc
		memset(tmp, 0, sizeof(liblo10k1_dsp_hw_t) * count);
Packit Service b98cfc
	}
Packit Service b98cfc
	
Packit Service b98cfc
	p->hw_count = count;
Packit Service b98cfc
	if (p->hws)
Packit Service b98cfc
		free(p->hws);
Packit Service b98cfc
	p->hws = tmp;
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_patch_set_tram_count(liblo10k1_dsp_patch_t *p, int count)
Packit Service b98cfc
{
Packit Service b98cfc
	liblo10k1_dsp_tram_grp_t *tmp = NULL;
Packit Service b98cfc
	
Packit Service b98cfc
	if (count > 0) {
Packit Service b98cfc
		tmp = (liblo10k1_dsp_tram_grp_t *)malloc(sizeof(liblo10k1_dsp_tram_grp_t) * count);
Packit Service b98cfc
		if (!tmp)
Packit Service b98cfc
			return LD10K1_ERR_NO_MEM;
Packit Service b98cfc
		memset(tmp, 0, sizeof(liblo10k1_dsp_tram_grp_t) * count);
Packit Service b98cfc
	}
Packit Service b98cfc
	
Packit Service b98cfc
	p->tram_count = count;
Packit Service b98cfc
	if (p->tram)
Packit Service b98cfc
		free(p->tram);
Packit Service b98cfc
	p->tram = tmp;
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_patch_set_tram_acc_count(liblo10k1_dsp_patch_t *p, int count)
Packit Service b98cfc
{
Packit Service b98cfc
	liblo10k1_dsp_tram_acc_t *tmp = NULL;
Packit Service b98cfc
	
Packit Service b98cfc
	if (count > 0) {
Packit Service b98cfc
		tmp = (liblo10k1_dsp_tram_acc_t *)malloc(sizeof(liblo10k1_dsp_tram_acc_t) * count);
Packit Service b98cfc
		if (!tmp)
Packit Service b98cfc
			return LD10K1_ERR_NO_MEM;
Packit Service b98cfc
		memset(tmp, 0, sizeof(liblo10k1_dsp_tram_acc_t) * count);
Packit Service b98cfc
	}
Packit Service b98cfc
	
Packit Service b98cfc
	p->tram_acc_count = count;
Packit Service b98cfc
	if (p->tram_acc)
Packit Service b98cfc
		free(p->tram_acc);
Packit Service b98cfc
	p->tram_acc = tmp;
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_patch_set_ctl_count(liblo10k1_dsp_patch_t *p, int count)
Packit Service b98cfc
{
Packit Service b98cfc
	liblo10k1_dsp_ctl_t *tmp = NULL;
Packit Service b98cfc
	
Packit Service b98cfc
	if (count > 0) {
Packit Service b98cfc
		tmp = (liblo10k1_dsp_ctl_t *)malloc(sizeof(liblo10k1_dsp_ctl_t) * count);
Packit Service b98cfc
		if (!tmp)
Packit Service b98cfc
			return LD10K1_ERR_NO_MEM;
Packit Service b98cfc
		memset(tmp, 0, sizeof(liblo10k1_dsp_ctl_t) * count);
Packit Service b98cfc
	}
Packit Service b98cfc
	
Packit Service b98cfc
	p->ctl_count = count;
Packit Service b98cfc
	if (p->ctl)
Packit Service b98cfc
		free(p->ctl);
Packit Service b98cfc
	p->ctl = tmp;
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_patch_set_instr_count(liblo10k1_dsp_patch_t *p, int count)
Packit Service b98cfc
{
Packit Service b98cfc
	liblo10k1_dsp_instr_t *tmp = NULL;
Packit Service b98cfc
	
Packit Service b98cfc
	if (count > 0) {
Packit Service b98cfc
		tmp = (liblo10k1_dsp_instr_t *)malloc(sizeof(liblo10k1_dsp_instr_t) * count);
Packit Service b98cfc
		if (!tmp)
Packit Service b98cfc
			return LD10K1_ERR_NO_MEM;
Packit Service b98cfc
		memset(tmp, 0, sizeof(liblo10k1_dsp_instr_t) * count);
Packit Service b98cfc
	}
Packit Service b98cfc
	
Packit Service b98cfc
	p->instr_count = count;
Packit Service b98cfc
	if (p->instr)
Packit Service b98cfc
		free(p->instr);
Packit Service b98cfc
	p->instr = tmp;
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
liblo10k1_dsp_patch_t *liblo10k1_patch_alloc(int in_count, int out_count, int const_count, int sta_count, int dyn_count, int hw_count, int tram_count, int tram_acc_count, int ctl_count, int instr_count)
Packit Service b98cfc
{
Packit Service b98cfc
	liblo10k1_dsp_patch_t *np;
Packit Service b98cfc
	int en = 0;
Packit Service b98cfc
Packit Service b98cfc
	np = (liblo10k1_dsp_patch_t *)malloc(sizeof(liblo10k1_dsp_patch_t));
Packit Service b98cfc
	if (!np)
Packit Service b98cfc
		return NULL;
Packit Service b98cfc
Packit Service b98cfc
	np->patch_name[0] ='\0';
Packit Service b98cfc
	np->ins = NULL;
Packit Service b98cfc
	np->outs = NULL;
Packit Service b98cfc
	np->consts = NULL;
Packit Service b98cfc
	np->stas = NULL;
Packit Service b98cfc
	np->hws = NULL;
Packit Service b98cfc
	np->tram = NULL;
Packit Service b98cfc
	np->tram_acc = NULL;
Packit Service b98cfc
	np->ctl = NULL;
Packit Service b98cfc
	np->instr = NULL;
Packit Service b98cfc
Packit Service b98cfc
	if ((en = liblo10k1_patch_set_dyn_count(np, dyn_count)) < 0)
Packit Service b98cfc
		goto error;
Packit Service b98cfc
	if ((en = liblo10k1_patch_set_in_count(np, in_count)) < 0)
Packit Service b98cfc
		goto error;
Packit Service b98cfc
	if ((en = liblo10k1_patch_set_out_count(np, out_count)) < 0)
Packit Service b98cfc
		goto error;
Packit Service b98cfc
	if ((en = liblo10k1_patch_set_const_count(np, const_count)) < 0)
Packit Service b98cfc
		goto error;
Packit Service b98cfc
	if ((en = liblo10k1_patch_set_sta_count(np, sta_count)) < 0)
Packit Service b98cfc
		goto error;
Packit Service b98cfc
	if ((en = liblo10k1_patch_set_hw_count(np, hw_count)) < 0)
Packit Service b98cfc
		goto error;
Packit Service b98cfc
	if ((en = liblo10k1_patch_set_tram_count(np, tram_count)) < 0)
Packit Service b98cfc
		goto error;
Packit Service b98cfc
	if ((en = liblo10k1_patch_set_tram_acc_count(np, tram_acc_count)) < 0)
Packit Service b98cfc
		goto error;
Packit Service b98cfc
	if ((en = liblo10k1_patch_set_ctl_count(np, ctl_count)) < 0)
Packit Service b98cfc
		goto error;
Packit Service b98cfc
	if ((en = liblo10k1_patch_set_instr_count(np, instr_count)) < 0)
Packit Service b98cfc
		goto error;
Packit Service b98cfc
	return np;
Packit Service b98cfc
error:
Packit Service b98cfc
    	liblo10k1_patch_free(np);
Packit Service b98cfc
	return NULL;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
void liblo10k1_patch_free(liblo10k1_dsp_patch_t *patch)
Packit Service b98cfc
{
Packit Service b98cfc
	liblo10k1_patch_set_in_count(patch, 0);
Packit Service b98cfc
	liblo10k1_patch_set_out_count(patch, 0);
Packit Service b98cfc
	liblo10k1_patch_set_const_count(patch, 0);
Packit Service b98cfc
	liblo10k1_patch_set_dyn_count(patch, 0);
Packit Service b98cfc
	liblo10k1_patch_set_sta_count(patch, 0);
Packit Service b98cfc
	liblo10k1_patch_set_hw_count(patch, 0);
Packit Service b98cfc
	liblo10k1_patch_set_tram_count(patch, 0);
Packit Service b98cfc
	liblo10k1_patch_set_tram_acc_count(patch, 0);
Packit Service b98cfc
	liblo10k1_patch_set_ctl_count(patch, 0);
Packit Service b98cfc
	liblo10k1_patch_set_instr_count(patch, 0);
Packit Service b98cfc
		
Packit Service b98cfc
	free(patch);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_patch_load(liblo10k1_connection_t *conn, liblo10k1_dsp_patch_t *patch, int before, int *loaded, int *loaded_id)
Packit Service b98cfc
{
Packit Service b98cfc
	int err;
Packit Service b98cfc
	ld10k1_fnc_patch_add_t patch_fnc;
Packit Service b98cfc
	int tmpres[2];
Packit Service b98cfc
Packit Service b98cfc
	strncpy(patch_fnc.patch.patch_name, patch->patch_name, sizeof(patch_fnc.patch.patch_name) - 1);
Packit Service b98cfc
	patch_fnc.patch.patch_name[sizeof(patch_fnc.patch.patch_name) - 1] = '\0';
Packit Service b98cfc
	
Packit Service b98cfc
	patch_fnc.patch.in_count = patch->in_count;
Packit Service b98cfc
	patch_fnc.patch.out_count = patch->out_count;
Packit Service b98cfc
	patch_fnc.patch.const_count = patch->const_count;
Packit Service b98cfc
	patch_fnc.patch.static_count = patch->sta_count;
Packit Service b98cfc
	patch_fnc.patch.dynamic_count = patch->dyn_count;
Packit Service b98cfc
	patch_fnc.patch.hw_count = patch->hw_count;
Packit Service b98cfc
	patch_fnc.patch.tram_count = patch->tram_count;
Packit Service b98cfc
	patch_fnc.patch.tram_acc_count = patch->tram_acc_count;
Packit Service b98cfc
	patch_fnc.patch.ctl_count = patch->ctl_count;
Packit Service b98cfc
	patch_fnc.patch.instr_count = patch->instr_count;
Packit Service b98cfc
Packit Service b98cfc
	/* patch */
Packit Service b98cfc
	/* add */
Packit Service b98cfc
	patch_fnc.where = before;
Packit Service b98cfc
	if ((err = send_request_check(*conn, FNC_PATCH_ADD, &patch_fnc, sizeof(ld10k1_fnc_patch_add_t))) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	/* in */
Packit Service b98cfc
	if (patch->in_count)
Packit Service b98cfc
		if ((err = send_msg_data_check(*conn, patch->ins, sizeof(ld10k1_dsp_p_in_out_t) * patch->in_count)) < 0)
Packit Service b98cfc
			return err;
Packit Service b98cfc
Packit Service b98cfc
	/* out */
Packit Service b98cfc
	if (patch->out_count)
Packit Service b98cfc
		if ((err = send_msg_data_check(*conn, patch->outs, sizeof(ld10k1_dsp_p_in_out_t) * patch->out_count)) < 0)
Packit Service b98cfc
			return err;
Packit Service b98cfc
Packit Service b98cfc
	/* const */
Packit Service b98cfc
	if (patch->const_count)
Packit Service b98cfc
		if ((err = send_msg_data_check(*conn, patch->consts, sizeof(ld10k1_dsp_p_const_static_t) * patch->const_count)) < 0)
Packit Service b98cfc
			return err;
Packit Service b98cfc
Packit Service b98cfc
	/* sta */
Packit Service b98cfc
	if (patch->sta_count)
Packit Service b98cfc
		if ((err = send_msg_data_check(*conn, patch->stas, sizeof(ld10k1_dsp_p_const_static_t) * patch->sta_count)) < 0)
Packit Service b98cfc
			return err;
Packit Service b98cfc
Packit Service b98cfc
	/* hw */
Packit Service b98cfc
	if (patch->hw_count)
Packit Service b98cfc
		if ((err = send_msg_data_check(*conn, patch->hws, sizeof(ld10k1_dsp_p_hw_t) * patch->hw_count)) < 0)
Packit Service b98cfc
			return err;
Packit Service b98cfc
Packit Service b98cfc
	if (patch->tram_count)
Packit Service b98cfc
		/* tram groups */
Packit Service b98cfc
		if ((err = send_msg_data_check(*conn, patch->tram, sizeof(ld10k1_dsp_tram_grp_t) * patch->tram_count)) < 0)
Packit Service b98cfc
			return err;
Packit Service b98cfc
Packit Service b98cfc
	if (patch->tram_acc_count)
Packit Service b98cfc
		/* tram access */
Packit Service b98cfc
		if ((err = send_msg_data_check(*conn, patch->tram_acc, sizeof(ld10k1_dsp_tram_acc_t) * patch->tram_acc_count)) < 0)
Packit Service b98cfc
			return err;
Packit Service b98cfc
Packit Service b98cfc
	if (patch->ctl_count)
Packit Service b98cfc
		/* ctls */
Packit Service b98cfc
		if ((err = send_msg_data_check(*conn, patch->ctl, sizeof(ld10k1_dsp_ctl_t) * patch->ctl_count)) < 0)
Packit Service b98cfc
			return err;
Packit Service b98cfc
Packit Service b98cfc
	/* instr */
Packit Service b98cfc
	if ((err = send_msg_data_check(*conn, patch->instr, sizeof(ld10k1_dsp_instr_t) * patch->instr_count)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = receive_response_data_check(*conn, tmpres, sizeof(tmpres))) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	if (loaded)
Packit Service b98cfc
		*loaded = tmpres[0];
Packit Service b98cfc
	if (loaded_id)
Packit Service b98cfc
		*loaded_id = tmpres[1];
Packit Service b98cfc
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_debug(liblo10k1_connection_t *conn, int deb, void (*prn_fnc)(char *))
Packit Service b98cfc
{
Packit Service b98cfc
	int err;
Packit Service b98cfc
	ld10k1_fnc_debug_t debug_info;
Packit Service b98cfc
	char debug_line[1000];
Packit Service b98cfc
	int opr, sizer;
Packit Service b98cfc
Packit Service b98cfc
	/* add */
Packit Service b98cfc
	debug_info.what = deb;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = send_request(*conn, FNC_DEBUG, &debug_info, sizeof(ld10k1_fnc_debug_t))) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	while (1) {
Packit Service b98cfc
		if ((err = receive_response(*conn, &opr, &sizer)) < 0)
Packit Service b98cfc
			return err;
Packit Service b98cfc
Packit Service b98cfc
		if (opr != FNC_CONTINUE)
Packit Service b98cfc
			break;
Packit Service b98cfc
Packit Service b98cfc
		if (sizer < (int)sizeof(debug_line)) {
Packit Service b98cfc
			if ((err = receive_msg_data(*conn, &debug_line, sizer)) < 0)
Packit Service b98cfc
				return err;
Packit Service b98cfc
		} else
Packit Service b98cfc
			return LIBLO10K1_ERR_DEBUG;
Packit Service b98cfc
		(*prn_fnc)(debug_line);
Packit Service b98cfc
	}
Packit Service b98cfc
Packit Service b98cfc
	/* not checked */
Packit Service b98cfc
	return receive_response(*conn, &opr, &sizer);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_patch_unload(liblo10k1_connection_t *conn, int patch_num)
Packit Service b98cfc
{
Packit Service b98cfc
	ld10k1_fnc_patch_del_t patch_fnc;
Packit Service b98cfc
Packit Service b98cfc
	patch_fnc.where = patch_num;
Packit Service b98cfc
Packit Service b98cfc
	return send_request_check(*conn, FNC_PATCH_DEL, &patch_fnc, sizeof(ld10k1_fnc_patch_del_t));
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_dsp_init(liblo10k1_connection_t *conn)
Packit Service b98cfc
{
Packit Service b98cfc
	return send_request_check(*conn, FNC_DSP_INIT, NULL, 0);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
static int liblo10k1_find_any(liblo10k1_connection_t *conn, int op, int patch, char *name, int *out)
Packit Service b98cfc
{
Packit Service b98cfc
	ld10k1_fnc_name_t name_info;
Packit Service b98cfc
	int err;
Packit Service b98cfc
	int idx = -1;
Packit Service b98cfc
Packit Service b98cfc
	name_info.patch_num = patch;
Packit Service b98cfc
	name_info.gpr = -1;
Packit Service b98cfc
	
Packit Service b98cfc
	strncpy(name_info.name, name, sizeof(name_info.name) - 1);
Packit Service b98cfc
	name_info.name[sizeof(name_info.name) - 1] = '\0';
Packit Service b98cfc
Packit Service b98cfc
	if ((err = send_request(*conn, op, &name_info, sizeof(ld10k1_fnc_name_t))) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = receive_response_data_check(*conn, &idx, sizeof(idx))) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
	
Packit Service b98cfc
	*out = idx;
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_find_patch(liblo10k1_connection_t *conn, char *patch_name, int *out)
Packit Service b98cfc
{
Packit Service b98cfc
	return liblo10k1_find_any(conn, FNC_PATCH_FIND, -1, patch_name, out);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_find_fx(liblo10k1_connection_t *conn, char *fx_name, int *out)
Packit Service b98cfc
{
Packit Service b98cfc
	return liblo10k1_find_any(conn, FNC_FX_FIND, -1, fx_name, out);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_find_in(liblo10k1_connection_t *conn, char *in_name, int *out)
Packit Service b98cfc
{
Packit Service b98cfc
	return liblo10k1_find_any(conn, FNC_IN_FIND, -1, in_name, out);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_find_out(liblo10k1_connection_t *conn, char *out_name, int *out)
Packit Service b98cfc
{
Packit Service b98cfc
	return liblo10k1_find_any(conn, FNC_OUT_FIND, -1, out_name, out);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_find_patch_in(liblo10k1_connection_t *conn, int patch_num, char *patch_in_name, int *out)
Packit Service b98cfc
{
Packit Service b98cfc
	return liblo10k1_find_any(conn, FNC_PATCH_IN_FIND, patch_num, patch_in_name, out);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_find_patch_out(liblo10k1_connection_t *conn, int patch_num, char *patch_out_name, int *out)
Packit Service b98cfc
{
Packit Service b98cfc
	return liblo10k1_find_any(conn, FNC_PATCH_OUT_FIND, patch_num, patch_out_name, out);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_con_add(liblo10k1_connection_t *conn, int multi, int simple, int from_type, int from_patch, int from_io, int to_type, int to_patch, int to_io, int *ci)
Packit Service b98cfc
{
Packit Service b98cfc
	ld10k1_fnc_connection_t connection_fnc;
Packit Service b98cfc
	int err;
Packit Service b98cfc
	int conn_id;
Packit Service b98cfc
	
Packit Service b98cfc
	connection_fnc.what = FNC_CONNECTION_ADD;
Packit Service b98cfc
	connection_fnc.multi = multi;
Packit Service b98cfc
	connection_fnc.simple = simple;
Packit Service b98cfc
	connection_fnc.from_type = from_type;
Packit Service b98cfc
	connection_fnc.from_patch = from_patch;
Packit Service b98cfc
	connection_fnc.from_io = from_io;
Packit Service b98cfc
	connection_fnc.to_type = to_type;
Packit Service b98cfc
	connection_fnc.to_patch = to_patch;
Packit Service b98cfc
	connection_fnc.to_io = to_io;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = send_request(*conn, FNC_CONNECTION_ADD, &connection_fnc, sizeof(ld10k1_fnc_connection_t))) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
	
Packit Service b98cfc
	if ((err = receive_response_data_check(*conn, &conn_id, sizeof(conn_id))) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
		
Packit Service b98cfc
	if (ci)
Packit Service b98cfc
		*ci = conn_id;
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_con_del(liblo10k1_connection_t *conn, int type, int patch, int io, int *ci)
Packit Service b98cfc
{
Packit Service b98cfc
	ld10k1_fnc_connection_t connection_fnc;
Packit Service b98cfc
	int err;
Packit Service b98cfc
	int conn_id;
Packit Service b98cfc
Packit Service b98cfc
	connection_fnc.what = FNC_CONNECTION_DEL;
Packit Service b98cfc
	connection_fnc.from_type = type;
Packit Service b98cfc
	connection_fnc.from_patch = patch;
Packit Service b98cfc
	connection_fnc.from_io = io;
Packit Service b98cfc
	connection_fnc.to_type = -1;
Packit Service b98cfc
	connection_fnc.to_patch = -1;
Packit Service b98cfc
	connection_fnc.to_io = -1;
Packit Service b98cfc
	
Packit Service b98cfc
	if ((err = send_request(*conn, FNC_CONNECTION_DEL, &connection_fnc, sizeof(ld10k1_fnc_connection_t))) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
	
Packit Service b98cfc
	if ((err = receive_response_data_check(*conn, &conn_id, sizeof(conn_id))) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
		
Packit Service b98cfc
	if (ci)
Packit Service b98cfc
		*ci = conn_id;
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
static int liblo10k1_rename_any(liblo10k1_connection_t *conn, int op, int patch_num, int gpr_num, char *name)
Packit Service b98cfc
{
Packit Service b98cfc
	ld10k1_fnc_name_t name_info;
Packit Service b98cfc
Packit Service b98cfc
	name_info.patch_num = patch_num;
Packit Service b98cfc
	name_info.gpr = gpr_num;
Packit Service b98cfc
	
Packit Service b98cfc
	strncpy(name_info.name, name, sizeof(name_info.name) - 1);
Packit Service b98cfc
	name_info.name[sizeof(name_info.name) - 1] = '\0';
Packit Service b98cfc
	
Packit Service b98cfc
	return send_request_check(*conn, op, &name_info, sizeof(ld10k1_fnc_name_t));
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_rename_patch(liblo10k1_connection_t *conn, int patch_num, char *patch_name)
Packit Service b98cfc
{
Packit Service b98cfc
	return liblo10k1_rename_any(conn, FNC_PATCH_RENAME, patch_num, -1, patch_name);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_rename_patch_in(liblo10k1_connection_t *conn, int patch_num, int in, char *patch_in_name)
Packit Service b98cfc
{
Packit Service b98cfc
	return liblo10k1_rename_any(conn, FNC_PATCH_IN_RENAME, patch_num, in, patch_in_name);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_rename_patch_out(liblo10k1_connection_t *conn, int patch_num, int out, char *patch_out_name)
Packit Service b98cfc
{
Packit Service b98cfc
	return liblo10k1_rename_any(conn, FNC_PATCH_OUT_RENAME, patch_num, out, patch_out_name);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_rename_fx(liblo10k1_connection_t *conn, int fx, char *fx_name)
Packit Service b98cfc
{
Packit Service b98cfc
	return liblo10k1_rename_any(conn, FNC_FX_RENAME, -1, fx, fx_name);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_rename_in(liblo10k1_connection_t *conn, int in, char *in_name)
Packit Service b98cfc
{
Packit Service b98cfc
	return liblo10k1_rename_any(conn, FNC_IN_RENAME, -1, in, in_name);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_rename_out(liblo10k1_connection_t *conn, int out, char *out_name)
Packit Service b98cfc
{
Packit Service b98cfc
	return liblo10k1_rename_any(conn, FNC_OUT_RENAME, -1, out, out_name);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_get_io(liblo10k1_connection_t *conn, int op, int io_num, liblo10k1_get_io_t *out);
Packit Service b98cfc
int liblo10k1_get_pio(liblo10k1_connection_t *conn, int op, int patch_num, int io_num, liblo10k1_get_io_t *out);
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_get_fx(liblo10k1_connection_t *conn, int fx_num, liblo10k1_get_io_t *out)
Packit Service b98cfc
{
Packit Service b98cfc
	return liblo10k1_get_io(conn, FNC_GET_FX, fx_num, out);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_get_in(liblo10k1_connection_t *conn, int in_num, liblo10k1_get_io_t *out)
Packit Service b98cfc
{
Packit Service b98cfc
	return liblo10k1_get_io(conn, FNC_GET_IN, in_num, out);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_get_out(liblo10k1_connection_t *conn, int out_num, liblo10k1_get_io_t *out)
Packit Service b98cfc
{
Packit Service b98cfc
	return liblo10k1_get_io(conn, FNC_GET_OUT, out_num, out);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_get_pin(liblo10k1_connection_t *conn, int patch_num, int in_num, liblo10k1_get_io_t *out)
Packit Service b98cfc
{
Packit Service b98cfc
	return liblo10k1_get_pio(conn, FNC_GET_PIN, patch_num, in_num, out);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_get_pout(liblo10k1_connection_t *conn, int patch_num, int out_num, liblo10k1_get_io_t *out)
Packit Service b98cfc
{
Packit Service b98cfc
	return liblo10k1_get_pio(conn, FNC_GET_POUT, patch_num, out_num, out);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_get_io(liblo10k1_connection_t *conn, int op, int io_num, liblo10k1_get_io_t *out)
Packit Service b98cfc
{
Packit Service b98cfc
	int err;
Packit Service b98cfc
	
Packit Service b98cfc
	if ((err = send_request(*conn, op, &io_num, sizeof(int))) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = receive_response_data_check(*conn, out, sizeof(liblo10k1_get_io_t))) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_get_pio(liblo10k1_connection_t *conn, int op, int patch_num, int io_num, liblo10k1_get_io_t *out)
Packit Service b98cfc
{
Packit Service b98cfc
	int tmp_num[2];
Packit Service b98cfc
	int err;
Packit Service b98cfc
	
Packit Service b98cfc
	tmp_num[0] = patch_num;
Packit Service b98cfc
	tmp_num[1] = io_num;
Packit Service b98cfc
	
Packit Service b98cfc
	if ((err = send_request(*conn, op, tmp_num, sizeof(int) * 2)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = receive_response_data_check(*conn, out, sizeof(liblo10k1_get_io_t))) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
	
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_get_io_count(liblo10k1_connection_t *conn, int op, int *out);
Packit Service b98cfc
int liblo10k1_get_pio_count(liblo10k1_connection_t *conn, int op, int patch_num, int *out);
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_get_fx_count(liblo10k1_connection_t *conn, int *out)
Packit Service b98cfc
{
Packit Service b98cfc
	return liblo10k1_get_io_count(conn, FNC_GET_FX_COUNT, out);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_get_in_count(liblo10k1_connection_t *conn, int *out)
Packit Service b98cfc
{
Packit Service b98cfc
	return liblo10k1_get_io_count(conn, FNC_GET_IN_COUNT, out);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_get_out_count(liblo10k1_connection_t *conn, int *out)
Packit Service b98cfc
{
Packit Service b98cfc
	return liblo10k1_get_io_count(conn, FNC_GET_OUT_COUNT, out);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_get_pin_count(liblo10k1_connection_t *conn, int patch_num, int *out)
Packit Service b98cfc
{
Packit Service b98cfc
	return liblo10k1_get_pio_count(conn, FNC_GET_PIN_COUNT, patch_num, out);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_get_pout_count(liblo10k1_connection_t *conn, int patch_num, int *out)
Packit Service b98cfc
{
Packit Service b98cfc
	return liblo10k1_get_pio_count(conn, FNC_GET_POUT_COUNT, patch_num, out);
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_get_io_count(liblo10k1_connection_t *conn, int op, int *out)
Packit Service b98cfc
{
Packit Service b98cfc
	int err;
Packit Service b98cfc
	
Packit Service b98cfc
	if ((err = send_request(*conn, op, 0, 0)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = receive_response_data_check(*conn, out, sizeof(int))) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_get_pio_count(liblo10k1_connection_t *conn, int op, int patch_num, int *out)
Packit Service b98cfc
{
Packit Service b98cfc
	int err;
Packit Service b98cfc
	
Packit Service b98cfc
	if ((err = send_request(*conn, op, &patch_num, sizeof(int))) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = receive_response_data_check(*conn, out, sizeof(int))) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
	
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_get_patches_info(liblo10k1_connection_t *conn, liblo10k1_patches_info_t **out, int *count)
Packit Service b98cfc
{
Packit Service b98cfc
	liblo10k1_patches_info_t *info;
Packit Service b98cfc
	int opr, sizer;
Packit Service b98cfc
	int err;
Packit Service b98cfc
Packit Service b98cfc
	*out = NULL;
Packit Service b98cfc
	*count = 0;
Packit Service b98cfc
	info = NULL;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = send_request(*conn, FNC_GET_PATCHES_INFO, 0, 0)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = receive_response(*conn, &opr, &sizer)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	*count = sizer / sizeof(liblo10k1_patches_info_t);
Packit Service b98cfc
	if (sizer > 0) {
Packit Service b98cfc
		info = (liblo10k1_patches_info_t *)receive_msg_data_malloc(*conn, sizer);
Packit Service b98cfc
		if (!info)
Packit Service b98cfc
			return LD10K1_ERR_NO_MEM;
Packit Service b98cfc
	}
Packit Service b98cfc
Packit Service b98cfc
	if ((err = receive_response(*conn, &opr, &sizer)) < 0) {
Packit Service b98cfc
		free(info);
Packit Service b98cfc
		return err;
Packit Service b98cfc
	}
Packit Service b98cfc
Packit Service b98cfc
	*out = info;
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_patch_get(liblo10k1_connection_t *conn, int patch_num, liblo10k1_dsp_patch_t **opatch)
Packit Service b98cfc
{
Packit Service b98cfc
	liblo10k1_dsp_patch_t *patch;
Packit Service b98cfc
	int err;
Packit Service b98cfc
Packit Service b98cfc
	ld10k1_dsp_patch_t tmp_patch;
Packit Service b98cfc
	int opr, sizer;
Packit Service b98cfc
Packit Service b98cfc
Packit Service b98cfc
	if ((err = send_request(*conn, FNC_GET_PATCH, &patch_num, sizeof(patch_num))) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = receive_response(*conn, &opr, &sizer)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	if (opr != FNC_CONTINUE)
Packit Service b98cfc
		return LD10K1_ERR_PROTOCOL;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = receive_msg_data(*conn, &tmp_patch, sizeof(tmp_patch))) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	/* alloc patch */
Packit Service b98cfc
	patch = liblo10k1_patch_alloc(tmp_patch.in_count, tmp_patch.out_count, tmp_patch.const_count, tmp_patch.static_count, tmp_patch.dynamic_count, tmp_patch.hw_count, tmp_patch.tram_count, tmp_patch.tram_acc_count, tmp_patch.ctl_count, tmp_patch.instr_count);
Packit Service b98cfc
	if (!patch)
Packit Service b98cfc
		return LD10K1_ERR_NO_MEM;
Packit Service b98cfc
Packit Service b98cfc
	strcpy(patch->patch_name, tmp_patch.patch_name);
Packit Service b98cfc
Packit Service b98cfc
	/* ins */
Packit Service b98cfc
	if (patch->in_count) {
Packit Service b98cfc
		if ((err = receive_response(*conn, &opr, &sizer)) < 0)
Packit Service b98cfc
			return err;
Packit Service b98cfc
Packit Service b98cfc
		if (opr != FNC_CONTINUE || (unsigned int)sizer != patch->in_count * sizeof(ld10k1_dsp_p_in_out_t))
Packit Service b98cfc
			goto err_protocol;
Packit Service b98cfc
Packit Service b98cfc
		patch->ins = (ld10k1_dsp_p_in_out_t *)receive_msg_data_malloc(*conn, sizer);
Packit Service b98cfc
		if (!patch->ins)
Packit Service b98cfc
			goto err_nomem;
Packit Service b98cfc
	}
Packit Service b98cfc
Packit Service b98cfc
	/* outs */
Packit Service b98cfc
	if (patch->out_count) {
Packit Service b98cfc
		if ((err = receive_response(*conn, &opr, &sizer)) < 0)
Packit Service b98cfc
			return err;
Packit Service b98cfc
Packit Service b98cfc
		if (opr != FNC_CONTINUE || (unsigned int)sizer != patch->out_count * sizeof(ld10k1_dsp_p_in_out_t))
Packit Service b98cfc
			goto err_protocol;
Packit Service b98cfc
Packit Service b98cfc
		patch->outs = (ld10k1_dsp_p_in_out_t *)receive_msg_data_malloc(*conn, sizer);
Packit Service b98cfc
		if (!patch->outs)
Packit Service b98cfc
			goto err_nomem;
Packit Service b98cfc
	}
Packit Service b98cfc
Packit Service b98cfc
	/* consts */
Packit Service b98cfc
	if (patch->const_count) {
Packit Service b98cfc
		if ((err = receive_response(*conn, &opr, &sizer)) < 0)
Packit Service b98cfc
			return err;
Packit Service b98cfc
Packit Service b98cfc
		if (opr != FNC_CONTINUE || (unsigned int)sizer != patch->const_count * sizeof(ld10k1_dsp_p_const_static_t))
Packit Service b98cfc
			goto err_protocol;
Packit Service b98cfc
Packit Service b98cfc
		patch->consts = (ld10k1_dsp_p_const_static_t *)receive_msg_data_malloc(*conn, sizer);
Packit Service b98cfc
		if (!patch->consts)
Packit Service b98cfc
			goto err_nomem;
Packit Service b98cfc
	}
Packit Service b98cfc
Packit Service b98cfc
	/* stas */
Packit Service b98cfc
	if (patch->sta_count) {
Packit Service b98cfc
		if ((err = receive_response(*conn, &opr, &sizer)) < 0)
Packit Service b98cfc
			return err;
Packit Service b98cfc
Packit Service b98cfc
		if (opr != FNC_CONTINUE || (unsigned int)sizer != patch->sta_count * sizeof(ld10k1_dsp_p_const_static_t))
Packit Service b98cfc
			goto err_protocol;
Packit Service b98cfc
Packit Service b98cfc
		patch->stas = (ld10k1_dsp_p_const_static_t *)receive_msg_data_malloc(*conn, sizer);
Packit Service b98cfc
		if (!patch->stas)
Packit Service b98cfc
			goto err_nomem;
Packit Service b98cfc
	}
Packit Service b98cfc
Packit Service b98cfc
	/* hws */
Packit Service b98cfc
	if (patch->hw_count) {
Packit Service b98cfc
		if ((err = receive_response(*conn, &opr, &sizer)) < 0)
Packit Service b98cfc
			return err;
Packit Service b98cfc
Packit Service b98cfc
		if (opr != FNC_CONTINUE || (unsigned int)sizer != patch->hw_count * sizeof(ld10k1_dsp_p_hw_t))
Packit Service b98cfc
			goto err_protocol;
Packit Service b98cfc
Packit Service b98cfc
		patch->hws = (ld10k1_dsp_p_hw_t *)receive_msg_data_malloc(*conn, sizer);
Packit Service b98cfc
		if (!patch->hws)
Packit Service b98cfc
			goto err_nomem;
Packit Service b98cfc
	}
Packit Service b98cfc
Packit Service b98cfc
	/* tram grp */
Packit Service b98cfc
	if (patch->tram_count) {
Packit Service b98cfc
		if ((err = receive_response(*conn, &opr, &sizer)) < 0)
Packit Service b98cfc
			return err;
Packit Service b98cfc
Packit Service b98cfc
		if (opr != FNC_CONTINUE || (unsigned int)sizer != patch->tram_count * sizeof(liblo10k1_dsp_tram_grp_t))
Packit Service b98cfc
			goto err_protocol;
Packit Service b98cfc
Packit Service b98cfc
		patch->tram = (liblo10k1_dsp_tram_grp_t *)receive_msg_data_malloc(*conn, sizer);
Packit Service b98cfc
		if (!patch->tram)
Packit Service b98cfc
			goto err_nomem;
Packit Service b98cfc
	}
Packit Service b98cfc
Packit Service b98cfc
	/* tram acc */
Packit Service b98cfc
	if (patch->tram_acc_count) {
Packit Service b98cfc
		if ((err = receive_response(*conn, &opr, &sizer)) < 0)
Packit Service b98cfc
			return err;
Packit Service b98cfc
Packit Service b98cfc
		if (opr != FNC_CONTINUE || (unsigned int)sizer != patch->tram_acc_count * sizeof(liblo10k1_dsp_tram_acc_t))
Packit Service b98cfc
			goto err_protocol;
Packit Service b98cfc
Packit Service b98cfc
		patch->tram_acc = (liblo10k1_dsp_tram_acc_t *)receive_msg_data_malloc(*conn, sizer);
Packit Service b98cfc
		if (!patch->tram_acc)
Packit Service b98cfc
			goto err_nomem;
Packit Service b98cfc
	}
Packit Service b98cfc
Packit Service b98cfc
	/* ctls */
Packit Service b98cfc
	if (patch->ctl_count) {
Packit Service b98cfc
		if ((err = receive_response(*conn, &opr, &sizer)) < 0)
Packit Service b98cfc
			return err;
Packit Service b98cfc
Packit Service b98cfc
		if (opr != FNC_CONTINUE || (unsigned int)sizer != patch->ctl_count * sizeof(liblo10k1_dsp_ctl_t))
Packit Service b98cfc
			goto err_protocol;
Packit Service b98cfc
Packit Service b98cfc
		patch->ctl = (liblo10k1_dsp_ctl_t *)receive_msg_data_malloc(*conn, sizer);
Packit Service b98cfc
		if (!patch->ctl)
Packit Service b98cfc
			goto err_nomem;
Packit Service b98cfc
	}
Packit Service b98cfc
Packit Service b98cfc
	/* instr */
Packit Service b98cfc
	if (patch->instr_count) {
Packit Service b98cfc
		if ((err = receive_response(*conn, &opr, &sizer)) < 0)
Packit Service b98cfc
			return err;
Packit Service b98cfc
Packit Service b98cfc
		if (opr != FNC_CONTINUE || (unsigned int)sizer != patch->instr_count * sizeof(liblo10k1_dsp_instr_t))
Packit Service b98cfc
			goto err_protocol;
Packit Service b98cfc
Packit Service b98cfc
		patch->instr = (liblo10k1_dsp_instr_t *)receive_msg_data_malloc(*conn, sizer);
Packit Service b98cfc
		if (!patch->instr)
Packit Service b98cfc
			goto err_nomem;
Packit Service b98cfc
	}
Packit Service b98cfc
Packit Service b98cfc
 	if ((err = receive_response(*conn, &opr, &sizer)) < 0) {
Packit Service b98cfc
		liblo10k1_patch_free(patch);
Packit Service b98cfc
		return err;
Packit Service b98cfc
	}
Packit Service b98cfc
Packit Service b98cfc
	*opatch = patch;
Packit Service b98cfc
	return 0;
Packit Service b98cfc
err_nomem:
Packit Service b98cfc
	liblo10k1_patch_free(patch);
Packit Service b98cfc
	return LD10K1_ERR_NO_MEM;
Packit Service b98cfc
Packit Service b98cfc
err_protocol:
Packit Service b98cfc
	liblo10k1_patch_free(patch);
Packit Service b98cfc
	return LD10K1_ERR_PROTOCOL;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_dump(liblo10k1_connection_t *conn, void **out, int *size)
Packit Service b98cfc
{
Packit Service b98cfc
	int opr, sizer;
Packit Service b98cfc
	int err;
Packit Service b98cfc
	void *dump = NULL;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = send_request(*conn, FNC_DUMP, 0, 0)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = receive_response(*conn, &opr, &sizer)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	*size = sizer;
Packit Service b98cfc
	if (sizer > 0) {
Packit Service b98cfc
		dump = receive_msg_data_malloc(*conn, sizer);
Packit Service b98cfc
		if (!dump)
Packit Service b98cfc
			return LD10K1_ERR_NO_MEM;
Packit Service b98cfc
	}
Packit Service b98cfc
Packit Service b98cfc
	if ((err = receive_response(*conn, &opr, &sizer)) < 0) {
Packit Service b98cfc
		free(dump);
Packit Service b98cfc
		return err;
Packit Service b98cfc
	}
Packit Service b98cfc
Packit Service b98cfc
	*out = dump;
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_check_version(liblo10k1_connection_t *conn)
Packit Service b98cfc
{
Packit Service b98cfc
	int opr, sizer;
Packit Service b98cfc
	int err;
Packit Service b98cfc
	ld10k1_fnc_version_t ver;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = send_request(*conn, FNC_VERSION, 0, 0)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = receive_response(*conn, &opr, &sizer)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	if (sizer == sizeof(ver)) {
Packit Service b98cfc
		if ((err = receive_msg_data(*conn, &ver, sizer)) < 0)
Packit Service b98cfc
			return err;
Packit Service b98cfc
	}
Packit Service b98cfc
	else
Packit Service b98cfc
		return LD10K1_ERR_WRONG_VER;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = receive_response(*conn, &opr, &sizer)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	if (strcmp(ver.ld10k1_version, VERSION) == 0)
Packit Service b98cfc
		return 0;
Packit Service b98cfc
	else
Packit Service b98cfc
		return LD10K1_ERR_WRONG_VER;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_get_points_info(liblo10k1_connection_t *conn, int **out, int *count)
Packit Service b98cfc
{
Packit Service b98cfc
	int *info;
Packit Service b98cfc
	int opr, sizer;
Packit Service b98cfc
	int err;
Packit Service b98cfc
Packit Service b98cfc
	info = NULL;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = send_request(*conn, FNC_GET_POINTS_INFO, 0, 0)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = receive_response(*conn, &opr, &sizer)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	*count = sizer / sizeof(int);
Packit Service b98cfc
	if (sizer > 0) {
Packit Service b98cfc
		info = (int *)receive_msg_data_malloc(*conn, sizer);
Packit Service b98cfc
		if (!info)
Packit Service b98cfc
			return LD10K1_ERR_NO_MEM;
Packit Service b98cfc
	}
Packit Service b98cfc
Packit Service b98cfc
	if ((err = receive_response(*conn, &opr, &sizer)) < 0) {
Packit Service b98cfc
		free(info);
Packit Service b98cfc
		return err;
Packit Service b98cfc
	}
Packit Service b98cfc
Packit Service b98cfc
	*out = info;
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_get_point_info(liblo10k1_connection_t *conn, int point_id, liblo10k1_point_info_t *out)
Packit Service b98cfc
{
Packit Service b98cfc
	int opr, sizer;
Packit Service b98cfc
	int err;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = send_request(*conn, FNC_GET_POINT_INFO, &point_id, sizeof(point_id))) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = receive_response(*conn, &opr, &sizer)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	if (sizer != sizeof(liblo10k1_point_info_t))
Packit Service b98cfc
		return LD10K1_ERR_PROTOCOL;
Packit Service b98cfc
	if ((err = receive_msg_data(*conn, out, sizer)) < 0)
Packit Service b98cfc
		return LD10K1_ERR_PROTOCOL;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = receive_response(*conn, &opr, &sizer)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
int liblo10k1_get_dsp_info(liblo10k1_connection_t *conn, liblo10k1_dsp_info_t *info)
Packit Service b98cfc
{
Packit Service b98cfc
	int err;
Packit Service b98cfc
	
Packit Service b98cfc
	if ((err = send_request(*conn, FNC_GET_DSP_INFO, NULL, 0)) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
Packit Service b98cfc
	if ((err = receive_response_data_check(*conn, info, sizeof(liblo10k1_dsp_info_t))) < 0)
Packit Service b98cfc
		return err;
Packit Service b98cfc
	
Packit Service b98cfc
	return 0;
Packit Service b98cfc
}
Packit Service b98cfc
Packit Service b98cfc
struct errmsg_t
Packit Service b98cfc
{
Packit Service b98cfc
	int errnum;
Packit Service b98cfc
	char *errmsg;
Packit Service b98cfc
};
Packit Service b98cfc
Packit Service b98cfc
struct errmsg_t error_text[] =
Packit Service b98cfc
{
Packit Service b98cfc
	{LD10K1_ERR_UNKNOWN, "Unknown error"},
Packit Service b98cfc
	{LD10K1_ERR_COMM_READ, "Error in read from socket"},
Packit Service b98cfc
	{LD10K1_ERR_COMM_WRITE, "Error in write to socket"},
Packit Service b98cfc
	{LD10K1_ERR_UNKNOWN_PATCH_NUM, "Wrong parameter - patch with this num doesn't exists"},
Packit Service b98cfc
	{LD10K1_ERR_PROTOCOL, "ld10k1 is expecting more or less data as it got"},
Packit Service b98cfc
	{LD10K1_ERR_COMM_CONN, "Error in socket connect"},
Packit Service b98cfc
Packit Service b98cfc
/* add patch */
Packit Service b98cfc
	{LD10K1_ERR_PROTOCOL_IN_COUNT, "Wrong in registers count"},
Packit Service b98cfc
	{LD10K1_ERR_PROTOCOL_OUT_COUNT, "Wrong out registers count"},
Packit Service b98cfc
	{LD10K1_ERR_PROTOCOL_CONST_COUNT, "Wrong const registers count"},
Packit Service b98cfc
	{LD10K1_ERR_PROTOCOL_STATIC_COUNT, "Wrong static registers count"},
Packit Service b98cfc
	{LD10K1_ERR_PROTOCOL_DYNAMIC_COUNT, "Wrong dynamic registers count"},
Packit Service b98cfc
	{LD10K1_ERR_PROTOCOL_HW_COUNT, "Wrong hw registers count"},
Packit Service b98cfc
	{LD10K1_ERR_PROTOCOL_TRAM_COUNT, "Wrong tram count"},
Packit Service b98cfc
	{LD10K1_ERR_PROTOCOL_TRAM_ACC_COUNT, "Wrong tram access registers count"},
Packit Service b98cfc
	{LD10K1_ERR_PROTOCOL_CTL_COUNT, "Wrong controls count"},
Packit Service b98cfc
	{LD10K1_ERR_PROTOCOL_INSTR_COUNT, "Wrong instructions count"},
Packit Service b98cfc
Packit Service b98cfc
/* driver */
Packit Service b98cfc
	{LD10K1_ERR_DRIVER_CODE_POKE, "Unable to poke code"},
Packit Service b98cfc
	{LD10K1_ERR_DRIVER_INFO, "Unable to get info"},
Packit Service b98cfc
	{LD10K1_ERR_DRIVER_CODE_PEEK, "Unable to peek code"},
Packit Service b98cfc
	{LD10K1_ERR_DRIVER_PCM_POKE, "Unable to poke pcm"},
Packit Service b98cfc
Packit Service b98cfc
/* tram */
Packit Service b98cfc
	{LD10K1_ERR_ITRAM_FULL, "Not enought free itram"},
Packit Service b98cfc
	{LD10K1_ERR_ETRAM_FULL, "Not enought free etram"},
Packit Service b98cfc
	{LD10K1_ERR_TRAM_FULL, "Not enought free tram"},
Packit Service b98cfc
	{LD10K1_ERR_TRAM_FULL_GRP, "Not enought free tram group"},
Packit Service b98cfc
Packit Service b98cfc
	{LD10K1_ERR_ITRAM_FULL_ACC, "Not enought free itram acc"},
Packit Service b98cfc
	{LD10K1_ERR_ETRAM_FULL_ACC, "Not enought free etram acc"},
Packit Service b98cfc
	{LD10K1_ERR_TRAM_FULL_ACC, "Not enought free tram acc"},
Packit Service b98cfc
Packit Service b98cfc
	{LD10K1_ERR_MAX_CON_PER_POINT, "Maximum connections per point reached"},
Packit Service b98cfc
Packit Service b98cfc
/* others */
Packit Service b98cfc
	{LD10K1_ERR_NO_MEM, "Not enought free mem"},
Packit Service b98cfc
	{LD10K1_ERR_MAX_PATCH_COUNT, "Max patch count excesed"},
Packit Service b98cfc
	{LD10K1_ERR_NOT_FREE_REG, "There is not free reg"},
Packit Service b98cfc
	{LD10K1_ERR_NOT_FREE_INSTR, "There is no free instruction slot"},
Packit Service b98cfc
Packit Service b98cfc
/* patch chceck */
Packit Service b98cfc
	{LD10K1_ERR_WRONG_REG_HW_INDEX, "Loaded patch has wrong hw index"},
Packit Service b98cfc
	{LD10K1_ERR_WRONG_TRAM_POS, "Loaded patch has wrong tram position"},
Packit Service b98cfc
Packit Service b98cfc
	{LD10K1_ERR_WRONG_TRAM_TYPE, "Loaded patch has wrong tram type"},
Packit Service b98cfc
	{LD10K1_ERR_WRONG_TRAM_SIZE, "Loaded patch has wrong tram size"},
Packit Service b98cfc
	{LD10K1_ERR_WRONG_TRAM_ACC_TYPE, "Loaded patch has wrong tram acc type"},
Packit Service b98cfc
Packit Service b98cfc
	{LD10K1_ERR_TRAM_GRP_OUT_OF_RANGE, "Loaded patch has tram gpr index out of range"},
Packit Service b98cfc
	{LD10K1_ERR_TRAM_ACC_OUT_OF_RANGE, "Loaded patch has tram acc index out of range"},
Packit Service b98cfc
Packit Service b98cfc
	{LD10K1_ERR_CTL_VCOUNT_OUT_OF_RANGE, "Loaded patch has wrong count of visible gpr for control"},
Packit Service b98cfc
	{LD10K1_ERR_CTL_COUNT_OUT_OF_RANGE, "Loaded patch has wrong count of gpr for control"},
Packit Service b98cfc
Packit Service b98cfc
	{LD10K1_ERR_CTL_MIN_MAX_RANGE, "Loaded patch has wrong min, max range for control"},
Packit Service b98cfc
	{LD10K1_ERR_CTL_TRANLSLATION, "Loaded patch has wrong translation function for control"},
Packit Service b98cfc
	{LD10K1_ERR_CTL_REG_INDEX, "Loaded patch has wrong gpr index for control"},
Packit Service b98cfc
	{LD10K1_ERR_CTL_REG_VALUE, "Loaded patch has wrong initial value for control"},
Packit Service b98cfc
Packit Service b98cfc
	{LD10K1_ERR_INSTR_OPCODE, "Loaded patch has wrong instruction opcode"},
Packit Service b98cfc
	{LD10K1_ERR_INSTR_ARG_INDEX, "Loaded patch has wrong argument for instruction"},
Packit Service b98cfc
Packit Service b98cfc
	{LD10K1_ERR_UNKNOWN_REG_NUM, "There isn't register with this reg number"},
Packit Service b98cfc
	{LD10K1_ERR_UNKNOWN_PATCH_REG_NUM, "There isn't patch register with this reg number for patch"},
Packit Service b98cfc
Packit Service b98cfc
	{LD10K1_ERR_CONNECTION, "Couldn't connect patch to io"},
Packit Service b98cfc
	{LD10K1_ERR_CONNECTION_FNC, "Not supported connect/disconnect function"},
Packit Service b98cfc
Packit Service b98cfc
	{LD10K1_ERR_CTL_EXISTS, "Can't add control because there is one with same name"},
Packit Service b98cfc
Packit Service b98cfc
	{LD10K1_ERR_PATCH_RENAME, "Couldn't rename patch"},
Packit Service b98cfc
	{LD10K1_ERR_PATCH_REG_RENAME, "Couldn't rename patch register"},
Packit Service b98cfc
	{LD10K1_ERR_REG_RENAME, "Couldn't rename register"},
Packit Service b98cfc
	{LD10K1_ERR_WRONG_VER, "Wrong ld10k1 version"},
Packit Service b98cfc
	{LD10K1_ERR_UNKNOWN_POINT, "Unknown point"},
Packit Service b98cfc
	
Packit Service b98cfc
	/* errors from liblo10k1ef */
Packit Service b98cfc
	{LD10K1_EF_ERR_OPEN, "Can not open file"},
Packit Service b98cfc
	{LD10K1_EF_ERR_STAT, "Can not stat file"},
Packit Service b98cfc
	{LD10K1_EF_ERR_SIZE, "Wrong file size"},
Packit Service b98cfc
	{LD10K1_EF_ERR_READ, "Can not read file"},
Packit Service b98cfc
	{LD10K1_EF_ERR_SIGNATURE, "Wrong file signature"},
Packit Service b98cfc
	{LD10K1_EF_ERR_FORMAT, "Wrong file format"},
Packit Service b98cfc
Packit Service b98cfc
	{LD10K1_EF_ERR_TRANSFORM_CTL, "Can not transform control"},
Packit Service b98cfc
	{LD10K1_EF_ERR_TRANSFORM, "Can not transform effect"},
Packit Service b98cfc
	{LD10K1_EF_ERR_TRANSFORM_TRANS, "Wrong control translation"},
Packit Service b98cfc
	
Packit Service b98cfc
	/* errors from liblo10k1lf */
Packit Service b98cfc
	{LD10K1_LF_ERR_OPEN, "Can not open file"},
Packit Service b98cfc
	{LD10K1_LF_ERR_WRITE, "Can not write file"},
Packit Service b98cfc
	{LD10K1_LF_ERR_READ, "Can not read file"},
Packit Service b98cfc
	{LD10K1_LF_ERR_SIGNATURE, "Wrong file signature"},
Packit Service b98cfc
	{LD10K1_LF_ERR_PART_TYPE, "Wrong part type"},
Packit Service b98cfc
	{LD10K1_LF_ERR_PART_SIZE, "Wrong part size"},
Packit Service b98cfc
	{LD10K1_LF_ERR_VERSION, "Wrong file version"},
Packit Service b98cfc
	{LD10K1_LF_ERR_FILE_TYPE, "Wrong file type"},
Packit Service b98cfc
Packit Service b98cfc
	{0, ""}
Packit Service b98cfc
};
Packit Service b98cfc
Packit Service b98cfc
char *liblo10k1_error_str(int error)
Packit Service b98cfc
{
Packit Service b98cfc
	int i;
Packit Service b98cfc
Packit Service b98cfc
	for (i = 0; error_text[i].errnum != 0; i++)
Packit Service b98cfc
		if (error_text[i].errnum == error)
Packit Service b98cfc
			return error_text[i].errmsg;
Packit Service b98cfc
	return "Error msg not specified in liblo10k1";
Packit Service b98cfc
}