Commit a7983fd9 authored by Nicolas Saenz Julienne's avatar Nicolas Saenz Julienne Committed by Greg Kroah-Hartman

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: default avatarNicolas Saenz Julienne <nsaenzjulienne@suse.de>
Link: https://lore.kernel.org/r/20200629150945.10720-12-nsaenzjulienne@suse.deSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent b5f1547b
...@@ -122,7 +122,7 @@ static void audio_vchi_callback(void *param, ...@@ -122,7 +122,7 @@ static void audio_vchi_callback(void *param,
} }
static int 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 bcm2835_audio_instance *instance)
{ {
struct service_creation params = { struct service_creation params = {
...@@ -134,7 +134,7 @@ vc_vchi_audio_init(struct vchi_instance_handle *vchi_instance, ...@@ -134,7 +134,7 @@ vc_vchi_audio_init(struct vchi_instance_handle *vchi_instance,
int status; int status;
/* Open the VCHI service connections */ /* Open the VCHI service connections */
status = vchi_service_open(vchi_instance, &params, status = vchi_service_open(vchiq_instance, &params,
&instance->vchi_handle); &instance->vchi_handle);
if (status) { if (status) {
...@@ -173,20 +173,20 @@ int bcm2835_new_vchi_ctx(struct device *dev, struct bcm2835_vchi_ctx *vchi_ctx) ...@@ -173,20 +173,20 @@ int bcm2835_new_vchi_ctx(struct device *dev, struct bcm2835_vchi_ctx *vchi_ctx)
int ret; int ret;
/* Initialize and create a VCHI connection */ /* Initialize and create a VCHI connection */
ret = vchi_initialise(&vchi_ctx->vchi_instance); ret = vchi_initialise(&vchi_ctx->instance);
if (ret) { if (ret) {
dev_err(dev, "failed to initialise VCHI instance (ret=%d)\n", dev_err(dev, "failed to initialise VCHI instance (ret=%d)\n",
ret); ret);
return -EIO; return -EIO;
} }
ret = vchi_connect(vchi_ctx->vchi_instance); ret = vchi_connect(vchi_ctx->instance);
if (ret) { if (ret) {
dev_dbg(dev, "failed to connect VCHI instance (ret=%d)\n", dev_dbg(dev, "failed to connect VCHI instance (ret=%d)\n",
ret); ret);
kfree(vchi_ctx->vchi_instance); kfree(vchi_ctx->instance);
vchi_ctx->vchi_instance = NULL; vchi_ctx->instance = NULL;
return -EIO; return -EIO;
} }
...@@ -196,10 +196,10 @@ int bcm2835_new_vchi_ctx(struct device *dev, struct bcm2835_vchi_ctx *vchi_ctx) ...@@ -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) void bcm2835_free_vchi_ctx(struct bcm2835_vchi_ctx *vchi_ctx)
{ {
/* Close the VCHI connection - it will also free vchi_instance */ /* Close the VCHI connection - it will also free vchi_ctx->instance */
WARN_ON(vchi_disconnect(vchi_ctx->vchi_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) int bcm2835_audio_open(struct bcm2835_alsa_stream *alsa_stream)
...@@ -217,7 +217,7 @@ 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; instance->alsa_stream = alsa_stream;
alsa_stream->instance = instance; alsa_stream->instance = instance;
err = vc_vchi_audio_init(vchi_ctx->vchi_instance, err = vc_vchi_audio_init(vchi_ctx->instance,
instance); instance);
if (err < 0) if (err < 0)
goto free_instance; goto free_instance;
......
...@@ -44,7 +44,7 @@ enum snd_bcm2835_ctrl { ...@@ -44,7 +44,7 @@ enum snd_bcm2835_ctrl {
}; };
struct bcm2835_vchi_ctx { struct bcm2835_vchi_ctx {
struct vchi_instance_handle *vchi_instance; struct vchiq_instance *instance;
}; };
/* definition of the chip-specific record */ /* definition of the chip-specific record */
......
...@@ -49,8 +49,8 @@ struct service_creation { ...@@ -49,8 +49,8 @@ struct service_creation {
void *callback_param; void *callback_param;
}; };
// Opaque handle for a VCHI instance // Opaque handle for a VCHIQ instance
struct vchi_instance_handle; struct vchiq_instance;
// Opaque handle for a server or client // Opaque handle for a server or client
struct vchi_service_handle; struct vchi_service_handle;
...@@ -61,19 +61,19 @@ struct vchi_service_handle; ...@@ -61,19 +61,19 @@ struct vchi_service_handle;
*****************************************************************************/ *****************************************************************************/
// Routine used to initialise the vchi on both local + remote connections // 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. //When this is called, ensure that all services have no data pending.
//Bulk transfers can remain 'queued' //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 * Global service API
*****************************************************************************/ *****************************************************************************/
// Routine to open a named service // 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 service_creation *setup,
struct vchi_service_handle **handle); struct vchi_service_handle **handle);
......
...@@ -287,7 +287,7 @@ EXPORT_SYMBOL(vchi_msg_hold); ...@@ -287,7 +287,7 @@ EXPORT_SYMBOL(vchi_msg_hold);
/*********************************************************** /***********************************************************
* Name: vchi_initialise * Name: vchi_initialise
* *
* Arguments: struct vchi_instance_handle **instance_handle * Arguments: struct vchiq_instance **instance
* *
* Description: Initialises the hardware but does not transmit anything * Description: Initialises the hardware but does not transmit anything
* When run as a Host App this will be called twice hence the need * When run as a Host App this will be called twice hence the need
...@@ -297,23 +297,16 @@ EXPORT_SYMBOL(vchi_msg_hold); ...@@ -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; return vchiq_initialise(instance);
enum vchiq_status status;
status = vchiq_initialise(&instance);
*instance_handle = (struct vchi_instance_handle *)instance;
return status;
} }
EXPORT_SYMBOL(vchi_initialise); EXPORT_SYMBOL(vchi_initialise);
/*********************************************************** /***********************************************************
* Name: vchi_connect * Name: vchi_connect
* *
* Arguments: struct vchi_instance_handle *instance_handle * Arguments: struct vchiq_instance *instance
* *
* Description: Starts the command service on each connection, * Description: Starts the command service on each connection,
* causing INIT messages to be pinged back and forth * causing INIT messages to be pinged back and forth
...@@ -321,10 +314,8 @@ EXPORT_SYMBOL(vchi_initialise); ...@@ -321,10 +314,8 @@ EXPORT_SYMBOL(vchi_initialise);
* Returns: 0 if successful, failure otherwise * 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); return vchiq_connect(instance);
} }
EXPORT_SYMBOL(vchi_connect); EXPORT_SYMBOL(vchi_connect);
...@@ -332,7 +323,7 @@ EXPORT_SYMBOL(vchi_connect); ...@@ -332,7 +323,7 @@ EXPORT_SYMBOL(vchi_connect);
/*********************************************************** /***********************************************************
* Name: vchi_disconnect * Name: vchi_disconnect
* *
* Arguments: struct vchi_instance_handle *instance_handle * Arguments: struct vchiq_instance *instance
* *
* Description: Stops the command service on each connection, * Description: Stops the command service on each connection,
* causing DE-INIT messages to be pinged back and forth * causing DE-INIT messages to be pinged back and forth
...@@ -340,10 +331,8 @@ EXPORT_SYMBOL(vchi_connect); ...@@ -340,10 +331,8 @@ EXPORT_SYMBOL(vchi_connect);
* Returns: 0 if successful, failure otherwise * 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); return vchiq_shutdown(instance);
} }
EXPORT_SYMBOL(vchi_disconnect); EXPORT_SYMBOL(vchi_disconnect);
...@@ -352,7 +341,7 @@ EXPORT_SYMBOL(vchi_disconnect); ...@@ -352,7 +341,7 @@ EXPORT_SYMBOL(vchi_disconnect);
* Name: vchi_service_open * Name: vchi_service_open
* Name: vchi_service_create * Name: vchi_service_create
* *
* Arguments: struct vchi_instance_handle *instance_handle * Arguments: struct vchiq_instance *instance
* struct service_creation *setup, * struct service_creation *setup,
* struct vchi_service_handle **handle * struct vchi_service_handle **handle
* *
...@@ -446,11 +435,10 @@ static void service_free(struct shim_service *service) ...@@ -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 service_creation *setup,
struct vchi_service_handle **handle) struct vchi_service_handle **handle)
{ {
struct vchiq_instance *instance = (struct vchiq_instance *)instance_handle;
struct shim_service *service = service_alloc(instance, setup); struct shim_service *service = service_alloc(instance, setup);
*handle = (struct vchi_service_handle *)service; *handle = (struct vchi_service_handle *)service;
......
...@@ -1864,7 +1864,7 @@ int vchiq_mmal_init(struct vchiq_mmal_instance **out_instance) ...@@ -1864,7 +1864,7 @@ int vchiq_mmal_init(struct vchiq_mmal_instance **out_instance)
{ {
int status; int status;
struct vchiq_mmal_instance *instance; struct vchiq_mmal_instance *instance;
static struct vchi_instance_handle *vchi_instance; static struct vchiq_instance *vchiq_instance;
struct service_creation params = { struct service_creation params = {
.version = VCHI_VERSION_EX(VC_MMAL_VER, VC_MMAL_MIN_VER), .version = VCHI_VERSION_EX(VC_MMAL_VER, VC_MMAL_MIN_VER),
.service_id = VC_MMAL_SERVER_NAME, .service_id = VC_MMAL_SERVER_NAME,
...@@ -1886,14 +1886,14 @@ int vchiq_mmal_init(struct vchiq_mmal_instance **out_instance) ...@@ -1886,14 +1886,14 @@ int vchiq_mmal_init(struct vchiq_mmal_instance **out_instance)
BUILD_BUG_ON(sizeof(struct mmal_port) != 64); BUILD_BUG_ON(sizeof(struct mmal_port) != 64);
/* create a vchi instance */ /* create a vchi instance */
status = vchi_initialise(&vchi_instance); status = vchi_initialise(&vchiq_instance);
if (status) { if (status) {
pr_err("Failed to initialise VCHI instance (status=%d)\n", pr_err("Failed to initialise VCHI instance (status=%d)\n",
status); status);
return -EIO; return -EIO;
} }
status = vchi_connect(vchi_instance); status = vchi_connect(vchiq_instance);
if (status) { if (status) {
pr_err("Failed to connect VCHI instance (status=%d)\n", status); pr_err("Failed to connect VCHI instance (status=%d)\n", status);
return -EIO; return -EIO;
...@@ -1918,7 +1918,7 @@ int vchiq_mmal_init(struct vchiq_mmal_instance **out_instance) ...@@ -1918,7 +1918,7 @@ int vchiq_mmal_init(struct vchiq_mmal_instance **out_instance)
if (!instance->bulk_wq) if (!instance->bulk_wq)
goto err_free; goto err_free;
status = vchi_service_open(vchi_instance, &params, &instance->handle); status = vchi_service_open(vchiq_instance, &params, &instance->handle);
if (status) { if (status) {
pr_err("Failed to open VCHI service connection (status=%d)\n", pr_err("Failed to open VCHI service connection (status=%d)\n",
status); status);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment