staging: vchi: Get rid of struct vchi_instance_handle
The idea behind this was to create an opaque handle to struct vchiq_instance. This can be achieved without creating a new type by means of a forward declaration of struct vchiq_instance. This saves us from a lot of useless casting and overall simplifies code. Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de> Link: https://lore.kernel.org/r/20200629150945.10720-12-nsaenzjulienne@suse.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
b5f1547b6e
commit
a7983fd946
@ -122,7 +122,7 @@ static void audio_vchi_callback(void *param,
|
||||
}
|
||||
|
||||
static int
|
||||
vc_vchi_audio_init(struct vchi_instance_handle *vchi_instance,
|
||||
vc_vchi_audio_init(struct vchiq_instance *vchiq_instance,
|
||||
struct bcm2835_audio_instance *instance)
|
||||
{
|
||||
struct service_creation params = {
|
||||
@ -134,7 +134,7 @@ vc_vchi_audio_init(struct vchi_instance_handle *vchi_instance,
|
||||
int status;
|
||||
|
||||
/* Open the VCHI service connections */
|
||||
status = vchi_service_open(vchi_instance, ¶ms,
|
||||
status = vchi_service_open(vchiq_instance, ¶ms,
|
||||
&instance->vchi_handle);
|
||||
|
||||
if (status) {
|
||||
@ -173,20 +173,20 @@ int bcm2835_new_vchi_ctx(struct device *dev, struct bcm2835_vchi_ctx *vchi_ctx)
|
||||
int ret;
|
||||
|
||||
/* Initialize and create a VCHI connection */
|
||||
ret = vchi_initialise(&vchi_ctx->vchi_instance);
|
||||
ret = vchi_initialise(&vchi_ctx->instance);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to initialise VCHI instance (ret=%d)\n",
|
||||
ret);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
ret = vchi_connect(vchi_ctx->vchi_instance);
|
||||
ret = vchi_connect(vchi_ctx->instance);
|
||||
if (ret) {
|
||||
dev_dbg(dev, "failed to connect VCHI instance (ret=%d)\n",
|
||||
ret);
|
||||
|
||||
kfree(vchi_ctx->vchi_instance);
|
||||
vchi_ctx->vchi_instance = NULL;
|
||||
kfree(vchi_ctx->instance);
|
||||
vchi_ctx->instance = NULL;
|
||||
|
||||
return -EIO;
|
||||
}
|
||||
@ -196,10 +196,10 @@ int bcm2835_new_vchi_ctx(struct device *dev, struct bcm2835_vchi_ctx *vchi_ctx)
|
||||
|
||||
void bcm2835_free_vchi_ctx(struct bcm2835_vchi_ctx *vchi_ctx)
|
||||
{
|
||||
/* Close the VCHI connection - it will also free vchi_instance */
|
||||
WARN_ON(vchi_disconnect(vchi_ctx->vchi_instance));
|
||||
/* Close the VCHI connection - it will also free vchi_ctx->instance */
|
||||
WARN_ON(vchi_disconnect(vchi_ctx->instance));
|
||||
|
||||
vchi_ctx->vchi_instance = NULL;
|
||||
vchi_ctx->instance = NULL;
|
||||
}
|
||||
|
||||
int bcm2835_audio_open(struct bcm2835_alsa_stream *alsa_stream)
|
||||
@ -217,7 +217,7 @@ int bcm2835_audio_open(struct bcm2835_alsa_stream *alsa_stream)
|
||||
instance->alsa_stream = alsa_stream;
|
||||
alsa_stream->instance = instance;
|
||||
|
||||
err = vc_vchi_audio_init(vchi_ctx->vchi_instance,
|
||||
err = vc_vchi_audio_init(vchi_ctx->instance,
|
||||
instance);
|
||||
if (err < 0)
|
||||
goto free_instance;
|
||||
|
@ -44,7 +44,7 @@ enum snd_bcm2835_ctrl {
|
||||
};
|
||||
|
||||
struct bcm2835_vchi_ctx {
|
||||
struct vchi_instance_handle *vchi_instance;
|
||||
struct vchiq_instance *instance;
|
||||
};
|
||||
|
||||
/* definition of the chip-specific record */
|
||||
|
@ -49,8 +49,8 @@ struct service_creation {
|
||||
void *callback_param;
|
||||
};
|
||||
|
||||
// Opaque handle for a VCHI instance
|
||||
struct vchi_instance_handle;
|
||||
// Opaque handle for a VCHIQ instance
|
||||
struct vchiq_instance;
|
||||
|
||||
// Opaque handle for a server or client
|
||||
struct vchi_service_handle;
|
||||
@ -61,19 +61,19 @@ struct vchi_service_handle;
|
||||
*****************************************************************************/
|
||||
|
||||
// Routine used to initialise the vchi on both local + remote connections
|
||||
extern int32_t vchi_initialise(struct vchi_instance_handle **instance_handle);
|
||||
extern int32_t vchi_initialise(struct vchiq_instance **instance);
|
||||
|
||||
extern int32_t vchi_connect(struct vchi_instance_handle *instance_handle);
|
||||
extern int32_t vchi_connect(struct vchiq_instance *instance);
|
||||
|
||||
//When this is called, ensure that all services have no data pending.
|
||||
//Bulk transfers can remain 'queued'
|
||||
extern int32_t vchi_disconnect(struct vchi_instance_handle *instance_handle);
|
||||
extern int32_t vchi_disconnect(struct vchiq_instance *instance);
|
||||
|
||||
/******************************************************************************
|
||||
* Global service API
|
||||
*****************************************************************************/
|
||||
// Routine to open a named service
|
||||
extern int32_t vchi_service_open(struct vchi_instance_handle *instance_handle,
|
||||
extern int32_t vchi_service_open(struct vchiq_instance *instance,
|
||||
struct service_creation *setup,
|
||||
struct vchi_service_handle **handle);
|
||||
|
||||
|
@ -287,7 +287,7 @@ EXPORT_SYMBOL(vchi_msg_hold);
|
||||
/***********************************************************
|
||||
* Name: vchi_initialise
|
||||
*
|
||||
* Arguments: struct vchi_instance_handle **instance_handle
|
||||
* Arguments: struct vchiq_instance **instance
|
||||
*
|
||||
* Description: Initialises the hardware but does not transmit anything
|
||||
* When run as a Host App this will be called twice hence the need
|
||||
@ -297,23 +297,16 @@ EXPORT_SYMBOL(vchi_msg_hold);
|
||||
*
|
||||
***********************************************************/
|
||||
|
||||
int32_t vchi_initialise(struct vchi_instance_handle **instance_handle)
|
||||
int32_t vchi_initialise(struct vchiq_instance **instance)
|
||||
{
|
||||
struct vchiq_instance *instance;
|
||||
enum vchiq_status status;
|
||||
|
||||
status = vchiq_initialise(&instance);
|
||||
|
||||
*instance_handle = (struct vchi_instance_handle *)instance;
|
||||
|
||||
return status;
|
||||
return vchiq_initialise(instance);
|
||||
}
|
||||
EXPORT_SYMBOL(vchi_initialise);
|
||||
|
||||
/***********************************************************
|
||||
* Name: vchi_connect
|
||||
*
|
||||
* Arguments: struct vchi_instance_handle *instance_handle
|
||||
* Arguments: struct vchiq_instance *instance
|
||||
*
|
||||
* Description: Starts the command service on each connection,
|
||||
* causing INIT messages to be pinged back and forth
|
||||
@ -321,10 +314,8 @@ EXPORT_SYMBOL(vchi_initialise);
|
||||
* Returns: 0 if successful, failure otherwise
|
||||
*
|
||||
***********************************************************/
|
||||
int32_t vchi_connect(struct vchi_instance_handle *instance_handle)
|
||||
int32_t vchi_connect(struct vchiq_instance *instance)
|
||||
{
|
||||
struct vchiq_instance *instance = (struct vchiq_instance *)instance_handle;
|
||||
|
||||
return vchiq_connect(instance);
|
||||
}
|
||||
EXPORT_SYMBOL(vchi_connect);
|
||||
@ -332,7 +323,7 @@ EXPORT_SYMBOL(vchi_connect);
|
||||
/***********************************************************
|
||||
* Name: vchi_disconnect
|
||||
*
|
||||
* Arguments: struct vchi_instance_handle *instance_handle
|
||||
* Arguments: struct vchiq_instance *instance
|
||||
*
|
||||
* Description: Stops the command service on each connection,
|
||||
* causing DE-INIT messages to be pinged back and forth
|
||||
@ -340,10 +331,8 @@ EXPORT_SYMBOL(vchi_connect);
|
||||
* Returns: 0 if successful, failure otherwise
|
||||
*
|
||||
***********************************************************/
|
||||
int32_t vchi_disconnect(struct vchi_instance_handle *instance_handle)
|
||||
int32_t vchi_disconnect(struct vchiq_instance *instance)
|
||||
{
|
||||
struct vchiq_instance *instance = (struct vchiq_instance *)instance_handle;
|
||||
|
||||
return vchiq_shutdown(instance);
|
||||
}
|
||||
EXPORT_SYMBOL(vchi_disconnect);
|
||||
@ -352,7 +341,7 @@ EXPORT_SYMBOL(vchi_disconnect);
|
||||
* Name: vchi_service_open
|
||||
* Name: vchi_service_create
|
||||
*
|
||||
* Arguments: struct vchi_instance_handle *instance_handle
|
||||
* Arguments: struct vchiq_instance *instance
|
||||
* struct service_creation *setup,
|
||||
* struct vchi_service_handle **handle
|
||||
*
|
||||
@ -446,11 +435,10 @@ static void service_free(struct shim_service *service)
|
||||
}
|
||||
}
|
||||
|
||||
int32_t vchi_service_open(struct vchi_instance_handle *instance_handle,
|
||||
int32_t vchi_service_open(struct vchiq_instance *instance,
|
||||
struct service_creation *setup,
|
||||
struct vchi_service_handle **handle)
|
||||
{
|
||||
struct vchiq_instance *instance = (struct vchiq_instance *)instance_handle;
|
||||
struct shim_service *service = service_alloc(instance, setup);
|
||||
|
||||
*handle = (struct vchi_service_handle *)service;
|
||||
|
@ -1864,7 +1864,7 @@ int vchiq_mmal_init(struct vchiq_mmal_instance **out_instance)
|
||||
{
|
||||
int status;
|
||||
struct vchiq_mmal_instance *instance;
|
||||
static struct vchi_instance_handle *vchi_instance;
|
||||
static struct vchiq_instance *vchiq_instance;
|
||||
struct service_creation params = {
|
||||
.version = VCHI_VERSION_EX(VC_MMAL_VER, VC_MMAL_MIN_VER),
|
||||
.service_id = VC_MMAL_SERVER_NAME,
|
||||
@ -1886,14 +1886,14 @@ int vchiq_mmal_init(struct vchiq_mmal_instance **out_instance)
|
||||
BUILD_BUG_ON(sizeof(struct mmal_port) != 64);
|
||||
|
||||
/* create a vchi instance */
|
||||
status = vchi_initialise(&vchi_instance);
|
||||
status = vchi_initialise(&vchiq_instance);
|
||||
if (status) {
|
||||
pr_err("Failed to initialise VCHI instance (status=%d)\n",
|
||||
status);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
status = vchi_connect(vchi_instance);
|
||||
status = vchi_connect(vchiq_instance);
|
||||
if (status) {
|
||||
pr_err("Failed to connect VCHI instance (status=%d)\n", status);
|
||||
return -EIO;
|
||||
@ -1918,7 +1918,7 @@ int vchiq_mmal_init(struct vchiq_mmal_instance **out_instance)
|
||||
if (!instance->bulk_wq)
|
||||
goto err_free;
|
||||
|
||||
status = vchi_service_open(vchi_instance, ¶ms, &instance->handle);
|
||||
status = vchi_service_open(vchiq_instance, ¶ms, &instance->handle);
|
||||
if (status) {
|
||||
pr_err("Failed to open VCHI service connection (status=%d)\n",
|
||||
status);
|
||||
|
Loading…
x
Reference in New Issue
Block a user