staging: vchi: Get rid of vchi_bulk_queue_transmit()

Its vchiq counterpart, vchiq_bulk_transmit() is only used by vchi. We
can then merge both functions by moving vchi_bulk_queue_transmit()'s
retry mechanism into vchiq_bulk_transmit() and let services call the
later.

Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
Link: https://lore.kernel.org/r/20200629150945.10720-42-nsaenzjulienne@suse.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Nicolas Saenz Julienne 2020-06-29 17:09:39 +02:00 committed by Greg Kroah-Hartman
parent b2bbe3dc76
commit 0bda14fd49
4 changed files with 41 additions and 81 deletions

View file

@ -343,10 +343,9 @@ int bcm2835_audio_write(struct bcm2835_alsa_stream *alsa_stream,
count = size; count = size;
if (!instance->max_packet) { if (!instance->max_packet) {
/* Send the message to the videocore */ /* Send the message to the videocore */
status = vchi_bulk_queue_transmit(instance->service_handle, status = vchiq_bulk_transmit(instance->service_handle, src,
src, count, count, NULL,
VCHIQ_BULK_MODE_BLOCKING, VCHIQ_BULK_MODE_BLOCKING);
NULL);
} else { } else {
while (count > 0) { while (count > 0) {
int bytes = min(instance->max_packet, count); int bytes = min(instance->max_packet, count);

View file

@ -54,17 +54,6 @@ struct vchiq_header *vchi_msg_hold(unsigned handle);
// Routine to release a held message after it has been processed // Routine to release a held message after it has been processed
extern int32_t vchi_held_msg_release(unsigned handle, struct vchiq_header *message); extern int32_t vchi_held_msg_release(unsigned handle, struct vchiq_header *message);
/******************************************************************************
* Global bulk API
*****************************************************************************/
// Routine to queue up data ready for transfer to the other (once they have signalled they are ready)
extern int32_t vchi_bulk_queue_transmit(unsigned handle,
const void *data_src,
uint32_t data_size,
enum vchiq_bulk_mode mode,
void *transfer_handle);
/****************************************************************************** /******************************************************************************
* Configuration plumbing * Configuration plumbing
*****************************************************************************/ *****************************************************************************/

View file

@ -355,19 +355,31 @@ vchiq_bulk_transmit(unsigned int handle, const void *data,
{ {
enum vchiq_status status; enum vchiq_status status;
switch (mode) { while (1) {
case VCHIQ_BULK_MODE_NOCALLBACK: switch (mode) {
case VCHIQ_BULK_MODE_CALLBACK: case VCHIQ_BULK_MODE_NOCALLBACK:
status = vchiq_bulk_transfer(handle, (void *)data, size, case VCHIQ_BULK_MODE_CALLBACK:
userdata, mode, status = vchiq_bulk_transfer(handle, (void *)data, size,
VCHIQ_BULK_TRANSMIT); userdata, mode,
break; VCHIQ_BULK_TRANSMIT);
case VCHIQ_BULK_MODE_BLOCKING: break;
status = vchiq_blocking_bulk_transfer(handle, case VCHIQ_BULK_MODE_BLOCKING:
(void *)data, size, VCHIQ_BULK_TRANSMIT); status = vchiq_blocking_bulk_transfer(handle,
break; (void *)data, size, VCHIQ_BULK_TRANSMIT);
default: break;
return VCHIQ_ERROR; default:
return VCHIQ_ERROR;
}
/*
* vchiq_*_bulk_transfer() may return VCHIQ_RETRY, so we need
* to implement a retry mechanism since this function is
* supposed to block until queued
*/
if (status != VCHIQ_RETRY)
break;
msleep(1);
} }
return status; return status;

View file

@ -31,46 +31,6 @@ int vchi_queue_kernel_message(unsigned handle, void *data, unsigned int size)
} }
EXPORT_SYMBOL(vchi_queue_kernel_message); EXPORT_SYMBOL(vchi_queue_kernel_message);
/***********************************************************
* Name: vchi_bulk_queue_transmit
*
* Arguments: VCHI_BULK_HANDLE_T handle,
* const void *data_src,
* uint32_t data_size,
* enum vchi_flags flags,
* void *bulk_handle
*
* Description: Routine to transmit some data
*
* Returns: int32_t - success == 0
*
***********************************************************/
int32_t vchi_bulk_queue_transmit(unsigned handle, const void *data_src,
uint32_t data_size, enum vchiq_bulk_mode mode,
void *bulk_handle)
{
enum vchiq_status status;
while (1) {
status = vchiq_bulk_transmit(handle, data_src, data_size,
bulk_handle, mode);
/*
* vchiq_bulk_transmit() may return VCHIQ_RETRY, so we need to
* implement a retry mechanism since this function is supposed
* to block until queued
*/
if (status != VCHIQ_RETRY)
break;
msleep(1);
}
return status;
}
EXPORT_SYMBOL(vchi_bulk_queue_transmit);
/*********************************************************** /***********************************************************
* Name: vchi_held_msg_release * Name: vchi_held_msg_release
* *
@ -80,10 +40,10 @@ EXPORT_SYMBOL(vchi_bulk_queue_transmit);
* Description: Routine to release a held message (after it has been read with * Description: Routine to release a held message (after it has been read with
* vchi_msg_hold) * vchi_msg_hold)
* *
* Returns: int32_t - success == 0 * Returns: int - success == 0
* *
***********************************************************/ ***********************************************************/
int32_t vchi_held_msg_release(unsigned handle, struct vchiq_header *message) int vchi_held_msg_release(unsigned handle, struct vchiq_header *message)
{ {
/* /*
* Convert the service field pointer back to an * Convert the service field pointer back to an
@ -104,7 +64,7 @@ EXPORT_SYMBOL(vchi_held_msg_release);
* *
* Arguments: struct vchi_service *service, * Arguments: struct vchi_service *service,
* void **data, * void **data,
* uint32_t *msg_size, * unsigned *msg_size,
* struct vchiq_header **message * struct vchiq_header **message
* *
* Description: Routine to return a pointer to the current message (to allow * Description: Routine to return a pointer to the current message (to allow
@ -112,7 +72,7 @@ EXPORT_SYMBOL(vchi_held_msg_release);
* to release the message using vchi_held_msg_release when you're * to release the message using vchi_held_msg_release when you're
* finished. * finished.
* *
* Returns: int32_t - success == 0 * Returns: int - success == 0
* *
***********************************************************/ ***********************************************************/
struct vchiq_header *vchi_msg_hold(unsigned handle) struct vchiq_header *vchi_msg_hold(unsigned handle)
@ -134,7 +94,7 @@ EXPORT_SYMBOL(vchi_msg_hold);
* *
***********************************************************/ ***********************************************************/
int32_t vchi_initialise(struct vchiq_instance **instance) int vchi_initialise(struct vchiq_instance **instance)
{ {
return vchiq_initialise(instance); return vchiq_initialise(instance);
} }
@ -151,7 +111,7 @@ EXPORT_SYMBOL(vchi_initialise);
* Returns: 0 if successful, failure otherwise * Returns: 0 if successful, failure otherwise
* *
***********************************************************/ ***********************************************************/
int32_t vchi_connect(struct vchiq_instance *instance) int vchi_connect(struct vchiq_instance *instance)
{ {
return vchiq_connect(instance); return vchiq_connect(instance);
} }
@ -168,7 +128,7 @@ EXPORT_SYMBOL(vchi_connect);
* Returns: 0 if successful, failure otherwise * Returns: 0 if successful, failure otherwise
* *
***********************************************************/ ***********************************************************/
int32_t vchi_disconnect(struct vchiq_instance *instance) int vchi_disconnect(struct vchiq_instance *instance)
{ {
return vchiq_shutdown(instance); return vchiq_shutdown(instance);
} }
@ -184,11 +144,11 @@ EXPORT_SYMBOL(vchi_disconnect);
* *
* Description: Routine to open a service * Description: Routine to open a service
* *
* Returns: int32_t - success == 0 * Returns: int - success == 0
* *
***********************************************************/ ***********************************************************/
int32_t vchi_service_open(struct vchiq_instance *instance, int vchi_service_open(struct vchiq_instance *instance,
struct vchiq_service_params *params, struct vchiq_service_params *params,
unsigned *handle) unsigned *handle)
{ {
@ -196,13 +156,13 @@ int32_t vchi_service_open(struct vchiq_instance *instance,
} }
EXPORT_SYMBOL(vchi_service_open); EXPORT_SYMBOL(vchi_service_open);
int32_t vchi_service_close(unsigned handle) int vchi_service_close(unsigned handle)
{ {
return vchiq_close_service(handle); return vchiq_close_service(handle);
} }
EXPORT_SYMBOL(vchi_service_close); EXPORT_SYMBOL(vchi_service_close);
int32_t vchi_get_peer_version(unsigned handle, short *peer_version) int vchi_get_peer_version(unsigned handle, short *peer_version)
{ {
return vchiq_get_peer_version(handle, peer_version); return vchiq_get_peer_version(handle, peer_version);
} }
@ -218,7 +178,7 @@ EXPORT_SYMBOL(vchi_get_peer_version);
* Returns: void * Returns: void
* *
***********************************************************/ ***********************************************************/
int32_t vchi_service_use(unsigned handle) int vchi_service_use(unsigned handle)
{ {
return vchiq_use_service(handle); return vchiq_use_service(handle);
} }
@ -234,7 +194,7 @@ EXPORT_SYMBOL(vchi_service_use);
* Returns: void * Returns: void
* *
***********************************************************/ ***********************************************************/
int32_t vchi_service_release(unsigned handle) int vchi_service_release(unsigned handle)
{ {
return vchiq_release_service(handle); return vchiq_release_service(handle);
} }