pvr
struct pvr pvr_list[13];
uint32_t *pvr, uint32_t *svr)
if (portal == NULL || cmd == NULL || pvr == NULL || svr == NULL)
*pvr = cmd->params[0] >> 32;
uint16_t pvr = mfpvr() >> 16;
switch (pvr) {
uint16_t pvr = mfpvr() >> 16;
if (pvr == FSL_E500mc || pvr == FSL_E5500 || pvr == FSL_E6500)
u_int pvr = (mfpvr() >> 16) & 0xFFFF;
switch (pvr) {
u_int pvr;
pvr = mfpvr();
vers = pvr >> 16;
u_int maj, min, pvr;
pvr = mfpvr();
vers = pvr >> 16;
rev = pvr;
min = (pvr >> 0) & 0xff;
maj = (pvr >> 4) & 0xf;
min = (pvr >> 0) & 0xf;
maj = (pvr >> 8) & 0xf;
min = (pvr >> 0) & 0xf;
if (rev == MPC750 && pvr == 15) {
register_t hid0, pvr;
pvr = mfpvr();
if (((pvr >> 16) == MPC7450 && (pvr & 0xFFFF) <= 0x0200)
|| (pvr >> 16) == MPC7457)
vresample_free(vresample_t *pvr)
if (pvr->state != NULL)
src_delete(pvr->state);
free(pvr->data_in);
free(pvr->data_out);
memset(pvr, 0, sizeof(*pvr));
vresample_setup(vclient_t *pvc, vresample_t *pvr, int samples)
if (pvr->state != NULL)
pvr->state = src_new(voss_libsamplerate_quality, pvc->channels, &code);
if (pvr->state == NULL)
pvr->data_in = malloc(sizeof(float) * samples);
if (pvr->data_in == NULL)
pvr->data_out = malloc(sizeof(float) * samples);
if (pvr->data_out == NULL)
pvr->data.data_in = pvr->data_in;
pvr->data.data_out = pvr->data_out;
vresample_free(pvr);
vresample_t *pvr = &pvc->rx_resample;
if (vresample_setup(pvc, pvr, MAX_FRAME * pvc->channels) != 0)
pvr->data_in[y / 8] =
pvr->data.input_frames = src_len / src_mod;
pvr->data.output_frames = dst_len / dst_mod;
pvr->data.src_ratio = (float)pvc->sample_rate / (float)voss_dsp_sample_rate;
error = src_process(pvr->state, &pvr->data);
src_len = pvr->data.input_frames_used * src_mod;
dst_len = pvr->data.output_frames_gen * dst_mod;
samples = pvr->data.output_frames_gen * pvc->channels;
temp[y] = pvr->data_out[y];
vresample_t *pvr = &pvc->tx_resample;
if (vresample_setup(pvc, pvr, MAX_FRAME * pvc->channels) != 0)
pvr->data_in[y] = temp[y];
pvr->data.input_frames = src_len / src_mod;
pvr->data.output_frames = dst_len / dst_mod;
pvr->data.src_ratio = (float)voss_dsp_sample_rate / (float)pvc->sample_rate;
error = src_process(pvr->state, &pvr->data);
src_len = pvr->data.input_frames_used * src_mod;
dst_len = pvr->data.output_frames_gen * dst_mod;
samples = pvr->data.output_frames_gen * pvc->channels;
pvr->data_out[y];
pos_write = pvr->pos_read + pvr->len_write;
if (pos_write >= pvr->total_size)
pos_write -= pvr->total_size;
len_read = pvr->total_size - pvr->len_write;
delta = pvr->total_size - pos_write;
*pptr = pvr->buf_start + pos_write;
vring_inc_read(struct virtual_ring *pvr, size_t len)
pvr->pos_read += len;
pvr->len_write -= len;
if (pvr->pos_read == pvr->total_size)
pvr->pos_read = 0;
vring_inc_write(struct virtual_ring *pvr, size_t len)
pvr->len_write += len;
vring_total_read_len(struct virtual_ring *pvr)
return (pvr->len_write);
vring_total_write_len(struct virtual_ring *pvr)
return (pvr->total_size - pvr->len_write);
vring_write_linear(struct virtual_ring *pvr, const uint8_t *src, size_t total)
vring_get_write(pvr, &buf_ptr, &buf_len);
vring_inc_write(pvr, buf_len);
vring_read_linear(struct virtual_ring *pvr, uint8_t *dst, size_t total)
if (total > vring_total_read_len(pvr))
vring_get_read(pvr, &buf_ptr, &buf_len);
vring_inc_read(pvr, buf_len);
vring_write_zero(struct virtual_ring *pvr, size_t total)
vring_get_write(pvr, &buf_ptr, &buf_len);
vring_inc_write(pvr, buf_len);
vring_alloc(struct virtual_ring *pvr, size_t size)
if (pvr->buf_start != NULL)
pvr->buf_start = malloc(size);
if (pvr->buf_start == NULL)
pvr->pos_read = 0;
pvr->total_size = size;
pvr->len_write = 0;
vring_free(struct virtual_ring *pvr)
if (pvr->buf_start != NULL) {
free(pvr->buf_start);
pvr->buf_start = NULL;
vring_reset(struct virtual_ring *pvr)
pvr->pos_read = 0;
pvr->len_write = 0;
vring_get_read(struct virtual_ring *pvr, uint8_t **pptr, size_t *plen)
if (pvr->buf_start == NULL) {
delta = pvr->total_size - pvr->pos_read;
if (delta > pvr->len_write)
delta = pvr->len_write;
*pptr = pvr->buf_start + pvr->pos_read;
vring_get_write(struct virtual_ring *pvr, uint8_t **pptr, size_t *plen)
if (pvr->buf_start == NULL) {
vclient_write_linear(struct virtual_client *pvc, struct virtual_ring *pvr,
size_t written = vring_write_linear(pvr, (uint8_t *)src, total * 8) / 8;
vclient_read_linear(struct virtual_client *pvc, struct virtual_ring *pvr,
size_t read = vring_read_linear(pvr, (uint8_t *)dst, 8 * total) / 8;