* [RFC 28/50] staging: vchi: Expose struct vchi_service
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
linux-kernel
Cc: devel, kernel-list, laurent.pinchart, Nicolas Saenz Julienne,
gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
This will make further changes easier. The struct will ultimately
disappear.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
drivers/staging/vc04_services/interface/vchi/vchi.h | 10 +++++++---
.../vc04_services/interface/vchiq_arm/vchiq_shim.c | 7 -------
2 files changed, 7 insertions(+), 10 deletions(-)
diff --git a/drivers/staging/vc04_services/interface/vchi/vchi.h b/drivers/staging/vc04_services/interface/vchi/vchi.h
index 9a74ca4e1062..789acb7999d1 100644
--- a/drivers/staging/vc04_services/interface/vchi/vchi.h
+++ b/drivers/staging/vc04_services/interface/vchi/vchi.h
@@ -29,6 +29,13 @@ struct vchi_held_msg {
void *message;
};
+struct vchi_service {
+ unsigned int handle;
+
+ vchi_callback callback;
+ void *callback_param;
+};
+
// structure used to provide the information needed to open a server or a client
struct service_creation {
struct vchi_version version;
@@ -40,9 +47,6 @@ struct service_creation {
// Opaque handle for a VCHIQ instance
struct vchiq_instance;
-// Opaque handle for a server or client
-struct vchi_service;
-
/******************************************************************************
* Global funcs - implementation is specific to which side you are on
* (local / remote)
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
index 9728667adbd9..843ee978928f 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
@@ -10,13 +10,6 @@
#include "vchiq.h"
#include "vchiq_core.h"
-struct vchi_service {
- unsigned int handle;
-
- vchi_callback callback;
- void *callback_param;
-};
-
int vchi_queue_kernel_message(struct vchi_service *service, void *data,
unsigned int size)
{
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 26/50] staging: vchiq: Move message queue into struct vchiq_service
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
Nicolas Saenz Julienne
Cc: devel, kernel-list, laurent.pinchart, linux-kernel, gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
This has historically been handled by vchi, but there is no reason why
this couldn't be handled directly in vchiq.
The patch tries to avoid altering any behavior, with the exception of
the msg_queue size, which is now fixed to VCHIQ_MAX_SLOTS (it was set to
VCHIQ_MAX_SLOTS / 2). This is done to match vchiq's user_service message
queue, which could be merged with this one in the future.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
drivers/staging/vc04_services/Makefile | 1 -
.../interface/vchiq_arm/vchiq_core.c | 46 ++++++++++++
.../interface/vchiq_arm/vchiq_core.h | 6 ++
.../interface/vchiq_arm/vchiq_if.h | 2 +
.../interface/vchiq_arm/vchiq_shim.c | 24 ++----
.../interface/vchiq_arm/vchiq_util.c | 73 -------------------
.../interface/vchiq_arm/vchiq_util.h | 22 ------
7 files changed, 61 insertions(+), 113 deletions(-)
delete mode 100644 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_util.c
diff --git a/drivers/staging/vc04_services/Makefile b/drivers/staging/vc04_services/Makefile
index 5fc3b65224a3..6a426572793b 100644
--- a/drivers/staging/vc04_services/Makefile
+++ b/drivers/staging/vc04_services/Makefile
@@ -7,7 +7,6 @@ vchiq-objs := \
interface/vchiq_arm/vchiq_2835_arm.o \
interface/vchiq_arm/vchiq_debugfs.o \
interface/vchiq_arm/vchiq_shim.o \
- interface/vchiq_arm/vchiq_util.o \
interface/vchiq_arm/vchiq_connected.o \
obj-$(CONFIG_SND_BCM2835) += bcm2835-audio/
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
index 46b09b7154f8..0e9680904e68 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
@@ -2265,6 +2265,47 @@ vchiq_init_state(struct vchiq_state *state, struct vchiq_slot_zero *slot_zero)
return VCHIQ_ERROR;
}
+void vchiq_msg_queue_push(unsigned handle, struct vchiq_header *header)
+{
+ struct vchiq_service *service = find_service_by_handle(handle);
+ int pos;
+
+ while (service->msg_queue_write == service->msg_queue_read +
+ VCHIQ_MAX_SLOTS) {
+ if (wait_for_completion_interruptible(&service->msg_queue_pop))
+ flush_signals(current);
+ }
+
+ pos = service->msg_queue_write++ & (VCHIQ_MAX_SLOTS - 1);
+ service->msg_queue[pos] = header;
+
+ complete(&service->msg_queue_push);
+}
+EXPORT_SYMBOL(vchiq_msg_queue_push);
+
+struct vchiq_header *vchiq_msg_hold(unsigned handle)
+{
+ struct vchiq_service *service = find_service_by_handle(handle);
+ struct vchiq_header *header;
+ int pos;
+
+ if (service->msg_queue_write == service->msg_queue_read)
+ return NULL;
+
+ while (service->msg_queue_write == service->msg_queue_read) {
+ if (wait_for_completion_interruptible(&service->msg_queue_push))
+ flush_signals(current);
+ }
+
+ pos = service->msg_queue_read++ & (VCHIQ_MAX_SLOTS - 1);
+ header = service->msg_queue[pos];
+
+ complete(&service->msg_queue_pop);
+
+ return header;
+}
+EXPORT_SYMBOL(vchiq_msg_hold);
+
static int vchiq_validate_params(const struct vchiq_service_params *params)
{
if (!params->callback || !params->fourcc) {
@@ -2319,12 +2360,17 @@ vchiq_add_service_internal(struct vchiq_state *state,
service->state = state;
service->instance = instance;
service->service_use_count = 0;
+ service->msg_queue_read = 0;
+ service->msg_queue_write = 0;
init_bulk_queue(&service->bulk_tx);
init_bulk_queue(&service->bulk_rx);
init_completion(&service->remove_event);
init_completion(&service->bulk_remove_event);
+ init_completion(&service->msg_queue_pop);
+ init_completion(&service->msg_queue_push);
mutex_init(&service->bulk_mutex);
memset(&service->stats, 0, sizeof(service->stats));
+ memset(&service->msg_queue, 0, sizeof(service->msg_queue));
/* Although it is perfectly possible to use a spinlock
** to protect the creation of services, it is overkill as it
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h
index 1fe6cd8b86c0..b97b661bea1c 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h
@@ -297,6 +297,12 @@ struct vchiq_service {
uint64_t bulk_tx_bytes;
uint64_t bulk_rx_bytes;
} stats;
+
+ int msg_queue_read;
+ int msg_queue_write;
+ struct completion msg_queue_pop;
+ struct completion msg_queue_push;
+ struct vchiq_header *msg_queue[VCHIQ_MAX_SLOTS];
};
/* The quota information is outside struct vchiq_service so that it can
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
index b62fd6d6f1ac..8fd51d885a18 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
@@ -136,5 +136,7 @@ extern enum vchiq_status vchiq_dump_phys_mem(unsigned int service,
extern enum vchiq_status vchiq_get_peer_version(unsigned int handle,
short *peer_version);
+extern void vchiq_msg_queue_push(unsigned handle, struct vchiq_header *header);
+extern struct vchiq_header *vchiq_msg_hold(unsigned handle);
#endif /* VCHIQ_IF_H */
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
index dcf8776834b1..85d79d0033bf 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
@@ -13,8 +13,6 @@
struct vchi_service {
unsigned int handle;
- struct vchiu_queue queue;
-
vchi_callback callback;
void *callback_param;
};
@@ -172,10 +170,9 @@ int32_t vchi_msg_hold(struct vchi_service *service, void **data,
{
struct vchiq_header *header;
- if (vchiu_queue_is_empty(&service->queue))
- return -1;
-
- header = vchiu_queue_pop(&service->queue);
+ header = vchiq_msg_hold(service->handle);
+ if (!header)
+ return -ENOENT;
*data = header->data;
*msg_size = header->size;
@@ -272,7 +269,7 @@ static enum vchiq_status shim_callback(enum vchiq_reason reason,
(struct vchi_service *)VCHIQ_GET_SERVICE_USERDATA(handle);
if (reason == VCHIQ_MESSAGE_AVAILABLE)
- vchiu_queue_push(&service->queue, header);
+ vchiq_msg_queue_push(service->handle, header);
service->callback(service->callback_param, reason, bulk_user);
@@ -285,13 +282,8 @@ static struct vchi_service *service_alloc(struct vchiq_instance *instance,
struct vchi_service *service = kzalloc(sizeof(struct vchi_service), GFP_KERNEL);
if (service) {
- if (!vchiu_queue_init(&service->queue, 64)) {
- service->callback = setup->callback;
- service->callback_param = setup->callback_param;
- } else {
- kfree(service);
- service = NULL;
- }
+ service->callback = setup->callback;
+ service->callback_param = setup->callback_param;
}
return service;
@@ -299,10 +291,8 @@ static struct vchi_service *service_alloc(struct vchiq_instance *instance,
static void service_free(struct vchi_service *service)
{
- if (service) {
- vchiu_queue_delete(&service->queue);
+ if (service)
kfree(service);
- }
}
int32_t vchi_service_open(struct vchiq_instance *instance,
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_util.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_util.c
deleted file mode 100644
index c1c81f9ab9e6..000000000000
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_util.c
+++ /dev/null
@@ -1,73 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
-/* Copyright (c) 2010-2012 Broadcom. All rights reserved. */
-
-#include "vchiq_util.h"
-
-static inline int is_pow2(int i)
-{
- return i && !(i & (i - 1));
-}
-
-int vchiu_queue_init(struct vchiu_queue *queue, int size)
-{
- WARN_ON(!is_pow2(size));
-
- queue->size = size;
- queue->read = 0;
- queue->write = 0;
- queue->initialized = 1;
-
- init_completion(&queue->pop);
- init_completion(&queue->push);
-
- queue->storage = kcalloc(size, sizeof(struct vchiq_header *),
- GFP_KERNEL);
- if (!queue->storage) {
- vchiu_queue_delete(queue);
- return -ENOMEM;
- }
- return 0;
-}
-
-void vchiu_queue_delete(struct vchiu_queue *queue)
-{
- kfree(queue->storage);
-}
-
-int vchiu_queue_is_empty(struct vchiu_queue *queue)
-{
- return queue->read == queue->write;
-}
-
-void vchiu_queue_push(struct vchiu_queue *queue, struct vchiq_header *header)
-{
- if (!queue->initialized)
- return;
-
- while (queue->write == queue->read + queue->size) {
- if (wait_for_completion_interruptible(&queue->pop))
- flush_signals(current);
- }
-
- queue->storage[queue->write & (queue->size - 1)] = header;
- queue->write++;
-
- complete(&queue->push);
-}
-
-struct vchiq_header *vchiu_queue_pop(struct vchiu_queue *queue)
-{
- struct vchiq_header *header;
-
- while (queue->write == queue->read) {
- if (wait_for_completion_interruptible(&queue->push))
- flush_signals(current);
- }
-
- header = queue->storage[queue->read & (queue->size - 1)];
- queue->read++;
-
- complete(&queue->pop);
-
- return header;
-}
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_util.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_util.h
index 1c90a8da1a92..dcf081079c39 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_util.h
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_util.h
@@ -24,26 +24,4 @@
#include "vchiq_if.h"
-struct vchiu_queue {
- int size;
- int read;
- int write;
- int initialized;
-
- struct completion pop;
- struct completion push;
-
- struct vchiq_header **storage;
-};
-
-extern int vchiu_queue_init(struct vchiu_queue *queue, int size);
-extern void vchiu_queue_delete(struct vchiu_queue *queue);
-
-extern int vchiu_queue_is_empty(struct vchiu_queue *queue);
-
-extern void vchiu_queue_push(struct vchiu_queue *queue,
- struct vchiq_header *header);
-
-extern struct vchiq_header *vchiu_queue_pop(struct vchiu_queue *queue);
-
#endif
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 27/50] staging: vchiq: Get rid of vchiq_util.h
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
linux-kernel
Cc: devel, kernel-list, laurent.pinchart, Nicolas Saenz Julienne,
gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
The header file only provides other includes. Move the relevant includes
to their respective C files and delete it for good.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
.../vc04_services/interface/vchiq_arm/vchiq.h | 1 -
.../interface/vchiq_arm/vchiq_2835_arm.c | 1 +
.../interface/vchiq_arm/vchiq_arm.c | 1 +
.../interface/vchiq_arm/vchiq_core.c | 9 +++++++
.../interface/vchiq_arm/vchiq_shim.c | 4 +--
.../interface/vchiq_arm/vchiq_util.h | 27 -------------------
6 files changed, 13 insertions(+), 30 deletions(-)
delete mode 100644 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_util.h
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq.h
index 25af99a0f394..211b20705e36 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq.h
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq.h
@@ -5,7 +5,6 @@
#define VCHIQ_VCHIQ_H
#include "vchiq_if.h"
-#include "vchiq_util.h"
/* Do this so that we can test-build the code on non-rpi systems */
#if IS_ENABLED(CONFIG_RASPBERRYPI_FIRMWARE)
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c
index ecec84ad4345..d80c5f9b5cd8 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c
@@ -13,6 +13,7 @@
#include <linux/uaccess.h>
#include <linux/mm.h>
#include <linux/of.h>
+#include <linux/slab.h>
#include <soc/bcm2835/raspberrypi-firmware.h>
#define TOTAL_SLOTS (VCHIQ_SLOT_ZERO_SLOTS + 2 * 32)
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
index abc30e593b67..4230f33ac38a 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
@@ -23,6 +23,7 @@
#include <linux/compat.h>
#include <linux/dma-mapping.h>
#include <linux/rcupdate.h>
+#include <linux/delay.h>
#include <soc/bcm2835/raspberrypi-firmware.h>
#include "vchiq_core.h"
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
index 0e9680904e68..5b55d32e62a0 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
@@ -1,8 +1,17 @@
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
/* Copyright (c) 2010-2012 Broadcom. All rights reserved. */
+#include <linux/types.h>
+#include <linux/completion.h>
+#include <linux/mutex.h>
+#include <linux/bitops.h>
+#include <linux/kthread.h>
+#include <linux/wait.h>
+#include <linux/delay.h>
+#include <linux/slab.h>
#include <linux/kref.h>
#include <linux/rcupdate.h>
+#include <linux/sched/signal.h>
#include "vchiq_core.h"
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
index 85d79d0033bf..9728667adbd9 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
@@ -2,14 +2,14 @@
/* Copyright (c) 2010-2012 Broadcom. All rights reserved. */
#include <linux/module.h>
#include <linux/types.h>
+#include <linux/slab.h>
+#include <linux/delay.h>
#include "vchiq_if.h"
#include "../vchi/vchi.h"
#include "vchiq.h"
#include "vchiq_core.h"
-#include "vchiq_util.h"
-
struct vchi_service {
unsigned int handle;
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_util.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_util.h
deleted file mode 100644
index dcf081079c39..000000000000
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_util.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright (c) 2010-2012 Broadcom. All rights reserved. */
-
-#ifndef VCHIQ_UTIL_H
-#define VCHIQ_UTIL_H
-
-#include <linux/types.h>
-#include <linux/completion.h>
-#include <linux/mutex.h>
-#include <linux/bitops.h>
-#include <linux/kthread.h>
-#include <linux/wait.h>
-#include <linux/vmalloc.h>
-#include <linux/jiffies.h>
-#include <linux/delay.h>
-#include <linux/string.h>
-#include <linux/interrupt.h>
-#include <linux/random.h>
-#include <linux/sched/signal.h>
-#include <linux/ctype.h>
-#include <linux/uaccess.h>
-#include <linux/time.h> /* for time_t */
-#include <linux/slab.h>
-
-#include "vchiq_if.h"
-
-#endif
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 30/50] staging: vchiq: Export vchiq_msg_queue_push
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
linux-kernel
Cc: devel, kernel-list, laurent.pinchart, Nicolas Saenz Julienne,
gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
vchiq consumer drivers may need to use this function in order to get the
benefits of vchiq's per service message queueing mechanism.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
index 8fd51d885a18..c99caa3add57 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
@@ -107,6 +107,7 @@ extern enum vchiq_status vchiq_use_service(unsigned int service);
extern enum vchiq_status vchiq_release_service(unsigned int service);
extern enum vchiq_status vchiq_queue_kernel_message(unsigned int handle,
void *context, size_t size);
+extern void vchiq_msg_queue_push(unsigned handle, struct vchiq_header *header);
extern void vchiq_release_message(unsigned int service,
struct vchiq_header *header);
extern enum vchiq_status vchiq_bulk_transmit(unsigned int service,
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 29/50] staging: vchiq: Export vchiq_get_service_userdata()
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
linux-kernel
Cc: devel, kernel-list, laurent.pinchart, Nicolas Saenz Julienne,
gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
This is for service's callbacks to get their private data.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
index 5b55d32e62a0..01a9331dbff4 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
@@ -332,6 +332,7 @@ vchiq_get_service_userdata(unsigned int handle)
rcu_read_unlock();
return userdata;
}
+EXPORT_SYMBOL(vchiq_get_service_userdata);
static void
mark_service_closing_internal(struct vchiq_service *service, int sh_thread)
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 31/50] staging: vchi: Get rid of vchiq_shim's message callback
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
Florian Fainelli, Ray Jui, Scott Branden, Nicolas Saenz Julienne
Cc: devel, kernel-list, laurent.pinchart, linux-kernel, gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
As vchiq_shim's callback does nothing aside from pushing messages into
the service's queue, let's bypass it and jump directly to the service's
callbacks, letting them choose whether to use the message queue.
It turns out most services don't need to use the message queue, which
makes for simpler code in the end.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
.../bcm2835-audio/bcm2835-vchiq.c | 20 ++---
.../vc04_services/interface/vchi/vchi.h | 9 +-
.../interface/vchi/vchi_common.h | 12 ---
.../interface/vchiq_arm/vchiq_shim.c | 42 ++--------
.../vc04_services/vc-sm-cma/vc_sm_cma_vchi.c | 17 ++--
.../vc04_services/vchiq-mmal/mmal-vchiq.c | 83 +++++++++----------
6 files changed, 69 insertions(+), 114 deletions(-)
delete mode 100644 drivers/staging/vc04_services/interface/vchi/vchi_common.h
diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
index 0f97eda4ec90..71750ef891dd 100644
--- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
+++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
@@ -89,22 +89,17 @@ static int bcm2835_audio_send_simple(struct bcm2835_audio_instance *instance,
return bcm2835_audio_send_msg(instance, &m, wait);
}
-static void audio_vchi_callback(void *param, const enum vchiq_reason reason,
- void *msg_handle)
+static enum vchiq_status audio_vchi_callback(enum vchiq_reason reason,
+ struct vchiq_header *header,
+ unsigned handle, void *userdata)
{
- struct bcm2835_audio_instance *instance = param;
- struct vchi_held_msg handle;
+ struct bcm2835_audio_instance *instance = vchiq_get_service_userdata(handle);
struct vc_audio_msg *m;
- unsigned size;
- int status;
if (reason != VCHIQ_MESSAGE_AVAILABLE)
- return;
-
- status = vchi_msg_hold(instance->service, (void **)&m, &size, &handle);
- if (status)
- return;
+ return VCHIQ_SUCCESS;
+ m = (void *)header->data;
if (m->type == VC_AUDIO_MSG_TYPE_RESULT) {
instance->result = m->result.success;
complete(&instance->msg_avail_comp);
@@ -119,7 +114,8 @@ static void audio_vchi_callback(void *param, const enum vchiq_reason reason,
dev_err(instance->dev, "unexpected callback type=%d\n", m->type);
}
- vchi_held_msg_release(&handle);
+ vchiq_release_message(handle, header);
+ return VCHIQ_SUCCESS;
}
static int
diff --git a/drivers/staging/vc04_services/interface/vchi/vchi.h b/drivers/staging/vc04_services/interface/vchi/vchi.h
index 789acb7999d1..fdc243f3f60a 100644
--- a/drivers/staging/vc04_services/interface/vchi/vchi.h
+++ b/drivers/staging/vc04_services/interface/vchi/vchi.h
@@ -4,8 +4,6 @@
#ifndef VCHI_H_
#define VCHI_H_
-#include "vchi_common.h"
-
/******************************************************************************
* Global defs
*****************************************************************************/
@@ -31,16 +29,13 @@ struct vchi_held_msg {
struct vchi_service {
unsigned int handle;
-
- vchi_callback callback;
- void *callback_param;
};
// structure used to provide the information needed to open a server or a client
struct service_creation {
struct vchi_version version;
int32_t service_id;
- vchi_callback callback;
+ vchiq_callback callback;
void *callback_param;
};
@@ -88,7 +83,7 @@ extern int vchi_queue_kernel_message(struct vchi_service *service, void *data,
// Routine to look at a message in place.
// The message is dequeued, so the caller is left holding it; the descriptor is
// filled in and must be released when the user has finished with the message.
-extern int32_t vchi_msg_hold(struct vchi_service *service,
+extern int32_t vchi_msg_hold(unsigned handle,
void **data, // } may be NULL, as info can be
uint32_t *msg_size, // } obtained from HELD_MSG_T
struct vchi_held_msg *message_descriptor);
diff --git a/drivers/staging/vc04_services/interface/vchi/vchi_common.h b/drivers/staging/vc04_services/interface/vchi/vchi_common.h
deleted file mode 100644
index 24e8665e214a..000000000000
--- a/drivers/staging/vc04_services/interface/vchi/vchi_common.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright (c) 2010-2012 Broadcom. All rights reserved. */
-
-#ifndef VCHI_COMMON_H_
-#define VCHI_COMMON_H_
-
-//Callback used by all services / bulk transfers
-typedef void (*vchi_callback)(void *callback_param, //my service local param
- enum vchiq_reason reason,
- void *handle); //for transmitting msg's only
-
-#endif // VCHI_COMMON_H_
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
index 843ee978928f..e6773cd51b44 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
@@ -158,12 +158,12 @@ EXPORT_SYMBOL(vchi_held_msg_release);
* Returns: int32_t - success == 0
*
***********************************************************/
-int32_t vchi_msg_hold(struct vchi_service *service, void **data,
- uint32_t *msg_size, struct vchi_held_msg *message_handle)
+int32_t vchi_msg_hold(unsigned handle, void **data, uint32_t *msg_size,
+ struct vchi_held_msg *message_handle)
{
struct vchiq_header *header;
- header = vchiq_msg_hold(service->handle);
+ header = vchiq_msg_hold(handle);
if (!header)
return -ENOENT;
@@ -179,7 +179,7 @@ int32_t vchi_msg_hold(struct vchi_service *service, void **data,
*/
message_handle->service =
- (struct opaque_vchi_service_t *)(long)service->handle;
+ (struct opaque_vchi_service_t *)(long)handle;
message_handle->message = header;
return 0;
@@ -253,33 +253,9 @@ EXPORT_SYMBOL(vchi_disconnect);
*
***********************************************************/
-static enum vchiq_status shim_callback(enum vchiq_reason reason,
- struct vchiq_header *header,
- unsigned int handle,
- void *bulk_user)
+static struct vchi_service *service_alloc(void)
{
- struct vchi_service *service =
- (struct vchi_service *)VCHIQ_GET_SERVICE_USERDATA(handle);
-
- if (reason == VCHIQ_MESSAGE_AVAILABLE)
- vchiq_msg_queue_push(service->handle, header);
-
- service->callback(service->callback_param, reason, bulk_user);
-
- return VCHIQ_SUCCESS;
-}
-
-static struct vchi_service *service_alloc(struct vchiq_instance *instance,
- struct service_creation *setup)
-{
- struct vchi_service *service = kzalloc(sizeof(struct vchi_service), GFP_KERNEL);
-
- if (service) {
- service->callback = setup->callback;
- service->callback_param = setup->callback_param;
- }
-
- return service;
+ return kzalloc(sizeof(struct vchi_service), GFP_KERNEL);
}
static void service_free(struct vchi_service *service)
@@ -293,15 +269,15 @@ int32_t vchi_service_open(struct vchiq_instance *instance,
struct vchi_service **service)
{
- *service = service_alloc(instance, setup);
+ *service = service_alloc();
if (service) {
struct vchiq_service_params params;
enum vchiq_status status;
memset(¶ms, 0, sizeof(params));
params.fourcc = setup->service_id;
- params.callback = shim_callback;
- params.userdata = *service;
+ params.callback = setup->callback;
+ params.userdata = setup->callback_param;
params.version = setup->version.version;
params.version_min = setup->version.version_min;
diff --git a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
index 7efe42d51e46..5088f72f57c9 100644
--- a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
+++ b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
@@ -237,8 +237,8 @@ static int vc_sm_cma_vchi_videocore_io(void *arg)
} while (1);
- while (!vchi_msg_hold(instance->service, (void **)&reply,
- &reply_len, &msg)) {
+ while (!vchi_msg_hold(instance->service->handle,
+ (void **)&reply, &reply_len, &msg)) {
if (reply->trans_id & 0x80000000) {
/* Async event or cmd from the VPU */
if (instance->vpu_event)
@@ -265,15 +265,16 @@ static int vc_sm_cma_vchi_videocore_io(void *arg)
return 0;
}
-static void vc_sm_cma_vchi_callback(void *param, const enum vchiq_reason reason,
- void *msg_handle)
+static enum vchiq_status vc_sm_cma_vchi_callback(enum vchiq_reason reason,
+ struct vchiq_header *header,
+ unsigned handle,
+ void *user_data)
{
- struct sm_instance *instance = param;
-
- (void)msg_handle;
+ struct sm_instance *instance = vchiq_get_service_userdata(handle);
switch (reason) {
case VCHIQ_MESSAGE_AVAILABLE:
+ vchiq_msg_queue_push(handle, header);
complete(&instance->io_cmplt);
break;
@@ -282,6 +283,8 @@ static void vc_sm_cma_vchi_callback(void *param, const enum vchiq_reason reason,
default:
break;
}
+
+ return VCHIQ_SUCCESS;
}
struct sm_instance *vc_sm_cma_vchi_init(struct vchiq_instance *vchiq_instance,
diff --git a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
index 258cfab7d397..3207d0612515 100644
--- a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
+++ b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
@@ -157,7 +157,7 @@ struct mmal_msg_context {
struct {
/* message handle to release */
- struct vchi_held_msg msg_handle;
+ struct vchiq_header *msg_handle;
/* pointer to received message */
struct mmal_msg *msg;
/* received message length */
@@ -674,54 +674,49 @@ static void bulk_abort_cb(struct vchiq_mmal_instance *instance,
}
/* incoming event service callback */
-static void service_callback(void *param, const enum vchiq_reason reason,
- void *bulk_ctx)
+static enum vchiq_status service_callback(enum vchiq_reason reason,
+ struct vchiq_header *header,
+ unsigned handle, void *bulk_ctx)
{
- struct vchiq_mmal_instance *instance = param;
- int status;
+ struct vchiq_mmal_instance *instance = vchiq_get_service_userdata(handle);
u32 msg_len;
struct mmal_msg *msg;
- struct vchi_held_msg msg_handle;
struct mmal_msg_context *msg_context;
if (!instance) {
pr_err("Message callback passed NULL instance\n");
- return;
+ return VCHIQ_SUCCESS;
}
switch (reason) {
case VCHIQ_MESSAGE_AVAILABLE:
- status = vchi_msg_hold(instance->service, (void **)&msg,
- &msg_len, &msg_handle);
- if (status) {
- pr_err("Unable to dequeue a message (%d)\n", status);
- break;
- }
+ msg = (void *)header->data;
+ msg_len = header->size;
DBG_DUMP_MSG(msg, msg_len, "<<< reply message");
/* handling is different for buffer messages */
switch (msg->h.type) {
case MMAL_MSG_TYPE_BUFFER_FROM_HOST:
- vchi_held_msg_release(&msg_handle);
+ vchiq_release_message(handle, header);
break;
case MMAL_MSG_TYPE_EVENT_TO_HOST:
event_to_host_cb(instance, msg, msg_len);
- vchi_held_msg_release(&msg_handle);
+ vchiq_release_message(handle, header);
break;
case MMAL_MSG_TYPE_BUFFER_TO_HOST:
buffer_to_host_cb(instance, msg, msg_len);
- vchi_held_msg_release(&msg_handle);
+ vchiq_release_message(handle, header);
break;
default:
/* messages dependent on header context to complete */
if (!msg->h.context) {
pr_err("received message context was null!\n");
- vchi_held_msg_release(&msg_handle);
+ vchiq_release_message(handle, header);
break;
}
@@ -730,12 +725,12 @@ static void service_callback(void *param, const enum vchiq_reason reason,
if (!msg_context) {
pr_err("received invalid message context %u!\n",
msg->h.context);
- vchi_held_msg_release(&msg_handle);
+ vchiq_release_message(handle, header);
break;
}
/* fill in context values */
- msg_context->u.sync.msg_handle = msg_handle;
+ msg_context->u.sync.msg_handle = header;
msg_context->u.sync.msg = msg;
msg_context->u.sync.msg_len = msg_len;
@@ -773,13 +768,15 @@ static void service_callback(void *param, const enum vchiq_reason reason,
pr_err("Received unhandled message reason %d\n", reason);
break;
}
+
+ return VCHIQ_SUCCESS;
}
static int send_synchronous_mmal_msg(struct vchiq_mmal_instance *instance,
struct mmal_msg *msg,
unsigned int payload_len,
struct mmal_msg **msg_out,
- struct vchi_held_msg *msg_handle_out)
+ struct vchiq_header **msg_handle)
{
struct mmal_msg_context *msg_context;
int ret;
@@ -833,7 +830,7 @@ static int send_synchronous_mmal_msg(struct vchiq_mmal_instance *instance,
}
*msg_out = msg_context->u.sync.msg;
- *msg_handle_out = msg_context->u.sync.msg_handle;
+ *msg_handle = msg_context->u.sync.msg_handle;
release_msg_context(msg_context);
return 0;
@@ -905,7 +902,7 @@ static int port_info_set(struct vchiq_mmal_instance *instance,
int ret;
struct mmal_msg m;
struct mmal_msg *rmsg;
- struct vchi_held_msg rmsg_handle;
+ struct vchiq_header *rmsg_handle;
pr_debug("setting port info port %p\n", port);
if (!port)
@@ -954,7 +951,7 @@ static int port_info_set(struct vchiq_mmal_instance *instance,
port->component->handle, port->handle);
release_msg:
- vchi_held_msg_release(&rmsg_handle);
+ vchiq_release_message(instance->service->handle, rmsg_handle);
return ret;
}
@@ -966,7 +963,7 @@ static int port_info_get(struct vchiq_mmal_instance *instance,
int ret;
struct mmal_msg m;
struct mmal_msg *rmsg;
- struct vchi_held_msg rmsg_handle;
+ struct vchiq_header *rmsg_handle;
/* port info time */
m.h.type = MMAL_MSG_TYPE_PORT_INFO_GET;
@@ -1049,7 +1046,7 @@ static int port_info_get(struct vchiq_mmal_instance *instance,
pr_debug("%s:result:%d component:0x%x port:%d\n",
__func__, ret, port->component->handle, port->handle);
- vchi_held_msg_release(&rmsg_handle);
+ vchiq_release_message(instance->service->handle, rmsg_handle);
return ret;
}
@@ -1062,7 +1059,7 @@ static int create_component(struct vchiq_mmal_instance *instance,
int ret;
struct mmal_msg m;
struct mmal_msg *rmsg;
- struct vchi_held_msg rmsg_handle;
+ struct vchiq_header *rmsg_handle;
/* build component create message */
m.h.type = MMAL_MSG_TYPE_COMPONENT_CREATE;
@@ -1097,7 +1094,7 @@ static int create_component(struct vchiq_mmal_instance *instance,
component->inputs, component->outputs, component->clocks);
release_msg:
- vchi_held_msg_release(&rmsg_handle);
+ vchiq_release_message(instance->service->handle, rmsg_handle);
return ret;
}
@@ -1109,7 +1106,7 @@ static int destroy_component(struct vchiq_mmal_instance *instance,
int ret;
struct mmal_msg m;
struct mmal_msg *rmsg;
- struct vchi_held_msg rmsg_handle;
+ struct vchiq_header *rmsg_handle;
m.h.type = MMAL_MSG_TYPE_COMPONENT_DESTROY;
m.u.component_destroy.component_handle = component->handle;
@@ -1130,7 +1127,7 @@ static int destroy_component(struct vchiq_mmal_instance *instance,
release_msg:
- vchi_held_msg_release(&rmsg_handle);
+ vchiq_release_message(instance->service->handle, rmsg_handle);
return ret;
}
@@ -1142,7 +1139,7 @@ static int enable_component(struct vchiq_mmal_instance *instance,
int ret;
struct mmal_msg m;
struct mmal_msg *rmsg;
- struct vchi_held_msg rmsg_handle;
+ struct vchiq_header *rmsg_handle;
m.h.type = MMAL_MSG_TYPE_COMPONENT_ENABLE;
m.u.component_enable.component_handle = component->handle;
@@ -1162,7 +1159,7 @@ static int enable_component(struct vchiq_mmal_instance *instance,
ret = -rmsg->u.component_enable_reply.status;
release_msg:
- vchi_held_msg_release(&rmsg_handle);
+ vchiq_release_message(instance->service->handle, rmsg_handle);
return ret;
}
@@ -1174,7 +1171,7 @@ static int disable_component(struct vchiq_mmal_instance *instance,
int ret;
struct mmal_msg m;
struct mmal_msg *rmsg;
- struct vchi_held_msg rmsg_handle;
+ struct vchiq_header *rmsg_handle;
m.h.type = MMAL_MSG_TYPE_COMPONENT_DISABLE;
m.u.component_disable.component_handle = component->handle;
@@ -1195,7 +1192,7 @@ static int disable_component(struct vchiq_mmal_instance *instance,
release_msg:
- vchi_held_msg_release(&rmsg_handle);
+ vchiq_release_message(instance->service->handle, rmsg_handle);
return ret;
}
@@ -1207,7 +1204,7 @@ static int get_version(struct vchiq_mmal_instance *instance,
int ret;
struct mmal_msg m;
struct mmal_msg *rmsg;
- struct vchi_held_msg rmsg_handle;
+ struct vchiq_header *rmsg_handle;
m.h.type = MMAL_MSG_TYPE_GET_VERSION;
@@ -1227,7 +1224,7 @@ static int get_version(struct vchiq_mmal_instance *instance,
*minor_out = rmsg->u.version.minor;
release_msg:
- vchi_held_msg_release(&rmsg_handle);
+ vchiq_release_message(instance->service->handle, rmsg_handle);
return ret;
}
@@ -1240,7 +1237,7 @@ static int port_action_port(struct vchiq_mmal_instance *instance,
int ret;
struct mmal_msg m;
struct mmal_msg *rmsg;
- struct vchi_held_msg rmsg_handle;
+ struct vchiq_header *rmsg_handle;
m.h.type = MMAL_MSG_TYPE_PORT_ACTION;
m.u.port_action_port.component_handle = port->component->handle;
@@ -1269,7 +1266,7 @@ static int port_action_port(struct vchiq_mmal_instance *instance,
port_action_type_names[action_type], action_type);
release_msg:
- vchi_held_msg_release(&rmsg_handle);
+ vchiq_release_message(instance->service->handle, rmsg_handle);
return ret;
}
@@ -1284,7 +1281,7 @@ static int port_action_handle(struct vchiq_mmal_instance *instance,
int ret;
struct mmal_msg m;
struct mmal_msg *rmsg;
- struct vchi_held_msg rmsg_handle;
+ struct vchiq_header *rmsg_handle;
m.h.type = MMAL_MSG_TYPE_PORT_ACTION;
@@ -1317,7 +1314,7 @@ static int port_action_handle(struct vchiq_mmal_instance *instance,
action_type, connect_component_handle, connect_port_handle);
release_msg:
- vchi_held_msg_release(&rmsg_handle);
+ vchiq_release_message(instance->service->handle, rmsg_handle);
return ret;
}
@@ -1329,7 +1326,7 @@ static int port_parameter_set(struct vchiq_mmal_instance *instance,
int ret;
struct mmal_msg m;
struct mmal_msg *rmsg;
- struct vchi_held_msg rmsg_handle;
+ struct vchiq_header *rmsg_handle;
m.h.type = MMAL_MSG_TYPE_PORT_PARAMETER_SET;
@@ -1358,7 +1355,7 @@ static int port_parameter_set(struct vchiq_mmal_instance *instance,
ret, port->component->handle, port->handle, parameter_id);
release_msg:
- vchi_held_msg_release(&rmsg_handle);
+ vchiq_release_message(instance->service->handle, rmsg_handle);
return ret;
}
@@ -1370,7 +1367,7 @@ static int port_parameter_get(struct vchiq_mmal_instance *instance,
int ret;
struct mmal_msg m;
struct mmal_msg *rmsg;
- struct vchi_held_msg rmsg_handle;
+ struct vchiq_header *rmsg_handle;
m.h.type = MMAL_MSG_TYPE_PORT_PARAMETER_GET;
@@ -1417,7 +1414,7 @@ static int port_parameter_get(struct vchiq_mmal_instance *instance,
ret, port->component->handle, port->handle, parameter_id);
release_msg:
- vchi_held_msg_release(&rmsg_handle);
+ vchiq_release_message(instance->service->handle, rmsg_handle);
return ret;
}
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 32/50] staging: vchiq: Don't use a typedef for vchiq_callback
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
linux-kernel
Cc: devel, kernel-list, laurent.pinchart, Nicolas Saenz Julienne,
gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
Linux coding style says to avoid typdefs.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
.../staging/vc04_services/interface/vchi/vchi.h | 5 ++++-
.../vc04_services/interface/vchiq_arm/vchiq_if.h | 14 ++++++++------
2 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/drivers/staging/vc04_services/interface/vchi/vchi.h b/drivers/staging/vc04_services/interface/vchi/vchi.h
index fdc243f3f60a..cb66ea1ffad2 100644
--- a/drivers/staging/vc04_services/interface/vchi/vchi.h
+++ b/drivers/staging/vc04_services/interface/vchi/vchi.h
@@ -35,7 +35,10 @@ struct vchi_service {
struct service_creation {
struct vchi_version version;
int32_t service_id;
- vchiq_callback callback;
+ enum vchiq_status (*callback)(enum vchiq_reason reason,
+ struct vchiq_header *header,
+ unsigned int handle,
+ void *bulk_userdata);
void *callback_param;
};
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
index c99caa3add57..b3d4c14536bd 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
@@ -60,19 +60,21 @@ struct vchiq_element {
unsigned int size;
};
-typedef enum vchiq_status (*vchiq_callback)(enum vchiq_reason,
- struct vchiq_header *,
- unsigned int, void *);
-
struct vchiq_service_base {
int fourcc;
- vchiq_callback callback;
+ enum vchiq_status (*callback)(enum vchiq_reason reason,
+ struct vchiq_header *header,
+ unsigned int handle,
+ void *bulk_userdata);
void *userdata;
};
struct vchiq_service_params {
int fourcc;
- vchiq_callback callback;
+ enum vchiq_status (*callback)(enum vchiq_reason reason,
+ struct vchiq_header *header,
+ unsigned int handle,
+ void *bulk_userdata);
void *userdata;
short version; /* Increment for non-trivial changes */
short version_min; /* Update for incompatible changes */
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 33/50] staging: vchi: Use struct vchiq_service_params
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
Florian Fainelli, Ray Jui, Scott Branden, Nicolas Saenz Julienne
Cc: devel, kernel-list, laurent.pinchart, linux-kernel, gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
For initialization, vchi has its own params structure, which is then
translated to vchiq's params structure. They are essentially the same,
so lets directly use vchiq's.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
.../bcm2835-audio/bcm2835-vchiq.c | 9 +++++----
.../vc04_services/interface/vchi/vchi.h | 19 +------------------
.../interface/vchiq_arm/vchiq_shim.c | 12 ++----------
.../vc04_services/vc-sm-cma/vc_sm_cma_vchi.c | 11 ++++++-----
.../vc04_services/vchiq-mmal/mmal-vchiq.c | 11 ++++++-----
5 files changed, 20 insertions(+), 42 deletions(-)
diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
index 71750ef891dd..c1537a41a2fe 100644
--- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
+++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
@@ -122,11 +122,12 @@ static int
vc_vchi_audio_init(struct vchiq_instance *vchiq_instance,
struct bcm2835_audio_instance *instance)
{
- struct service_creation params = {
- .version = VCHI_VERSION_EX(VC_AUDIOSERV_VER, VC_AUDIOSERV_MIN_VER),
- .service_id = VC_AUDIO_SERVER_NAME,
+ struct vchiq_service_params params = {
+ .version = VC_AUDIOSERV_VER,
+ .version_min = VC_AUDIOSERV_MIN_VER,
+ .fourcc = VC_AUDIO_SERVER_NAME,
.callback = audio_vchi_callback,
- .callback_param = instance,
+ .userdata = instance,
};
int status;
diff --git a/drivers/staging/vc04_services/interface/vchi/vchi.h b/drivers/staging/vc04_services/interface/vchi/vchi.h
index cb66ea1ffad2..4afa6e9f57c4 100644
--- a/drivers/staging/vc04_services/interface/vchi/vchi.h
+++ b/drivers/staging/vc04_services/interface/vchi/vchi.h
@@ -8,12 +8,6 @@
* Global defs
*****************************************************************************/
-struct vchi_version {
- uint32_t version;
- uint32_t version_min;
-};
-#define VCHI_VERSION_EX(v_, m_) { v_, m_ }
-
// Macros to manipulate 'FOURCC' values
#define MAKE_FOURCC(x) ((int32_t)((x[0] << 24) | (x[1] << 16) | (x[2] << 8) | x[3]))
@@ -31,17 +25,6 @@ struct vchi_service {
unsigned int handle;
};
-// structure used to provide the information needed to open a server or a client
-struct service_creation {
- struct vchi_version version;
- int32_t service_id;
- enum vchiq_status (*callback)(enum vchiq_reason reason,
- struct vchiq_header *header,
- unsigned int handle,
- void *bulk_userdata);
- void *callback_param;
-};
-
// Opaque handle for a VCHIQ instance
struct vchiq_instance;
@@ -64,7 +47,7 @@ extern int32_t vchi_disconnect(struct vchiq_instance *instance);
*****************************************************************************/
// Routine to open a named service
extern int32_t vchi_service_open(struct vchiq_instance *instance,
- struct service_creation *setup,
+ struct vchiq_service_params *setup,
struct vchi_service **service);
extern int32_t vchi_get_peer_version(struct vchi_service *service,
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
index e6773cd51b44..e76399e083f6 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
@@ -265,23 +265,15 @@ static void service_free(struct vchi_service *service)
}
int32_t vchi_service_open(struct vchiq_instance *instance,
- struct service_creation *setup,
+ struct vchiq_service_params *params,
struct vchi_service **service)
{
*service = service_alloc();
if (service) {
- struct vchiq_service_params params;
enum vchiq_status status;
- memset(¶ms, 0, sizeof(params));
- params.fourcc = setup->service_id;
- params.callback = setup->callback;
- params.userdata = setup->callback_param;
- params.version = setup->version.version;
- params.version_min = setup->version.version_min;
-
- status = vchiq_open_service(instance, ¶ms,
+ status = vchiq_open_service(instance, params,
&((*service)->handle));
if (status != VCHIQ_SUCCESS) {
service_free(*service);
diff --git a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
index 5088f72f57c9..a37607d07335 100644
--- a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
+++ b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
@@ -290,11 +290,12 @@ static enum vchiq_status vc_sm_cma_vchi_callback(enum vchiq_reason reason,
struct sm_instance *vc_sm_cma_vchi_init(struct vchiq_instance *vchiq_instance,
vpu_event_cb vpu_event)
{
- struct service_creation params = {
- .version = VCHI_VERSION_EX(VC_SM_VER, VC_SM_MIN_VER),
- .service_id = VC_SM_SERVER_NAME,
+ struct vchiq_service_params params = {
+ .version = VC_SM_VER,
+ .version_min = VC_SM_MIN_VER,
+ .fourcc = VC_SM_SERVER_NAME,
.callback = vc_sm_cma_vchi_callback,
- .callback_param = NULL,
+ .userdata = NULL,
};
struct sm_instance *instance;
int status;
@@ -318,7 +319,7 @@ struct sm_instance *vc_sm_cma_vchi_init(struct vchiq_instance *vchiq_instance,
init_completion(&instance->free_blk[i].cmplt);
list_add(&instance->free_blk[i].head, &instance->free_list);
}
- params.callback_param = instance;
+ params.userdata = instance;
/* Open the VCHI service connections */
status = vchi_service_open(vchiq_instance, ¶ms, &instance->service);
diff --git a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
index 3207d0612515..a3ad8aa8b8cc 100644
--- a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
+++ b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
@@ -2094,11 +2094,12 @@ int vchiq_mmal_init(struct vchiq_mmal_instance **out_instance)
int status;
struct vchiq_mmal_instance *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,
+ struct vchiq_service_params params = {
+ .version = VC_MMAL_VER,
+ .version_min = VC_MMAL_MIN_VER,
+ .fourcc = VC_MMAL_SERVER_NAME,
.callback = service_callback,
- .callback_param = NULL,
+ .userdata = NULL,
};
/* compile time checks to ensure structure size as they are
@@ -2140,7 +2141,7 @@ int vchiq_mmal_init(struct vchiq_mmal_instance **out_instance)
mutex_init(&instance->context_map_lock);
idr_init_base(&instance->context_map, 1);
- params.callback_param = instance;
+ params.userdata = instance;
instance->bulk_wq = alloc_ordered_workqueue("mmal-vchiq",
WQ_MEM_RECLAIM);
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 36/50] staging: vchi: Rework vchi_msg_hold() to match vchiq_msg_hold()
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
linux-kernel
Cc: devel, kernel-list, laurent.pinchart, Nicolas Saenz Julienne,
gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
The services have access to struct vchiq_header's internals, so we can
let them get the data pointer. This pretty much makes both functions
exactly the same, which will allow us to make a switch to
vchiq_msg_hold() further down the road.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
.../staging/vc04_services/interface/vchi/vchi.h | 5 +----
.../interface/vchiq_arm/vchiq_shim.c | 15 ++-------------
.../vc04_services/vc-sm-cma/vc_sm_cma_vchi.c | 9 +++++++--
3 files changed, 10 insertions(+), 19 deletions(-)
diff --git a/drivers/staging/vc04_services/interface/vchi/vchi.h b/drivers/staging/vc04_services/interface/vchi/vchi.h
index 72771fdee9d6..59559d4cd5f1 100644
--- a/drivers/staging/vc04_services/interface/vchi/vchi.h
+++ b/drivers/staging/vc04_services/interface/vchi/vchi.h
@@ -54,10 +54,7 @@ extern int vchi_queue_kernel_message(unsigned handle, void *data,
// Routine to look at a message in place.
// The message is dequeued, so the caller is left holding it; the descriptor is
// filled in and must be released when the user has finished with the message.
-extern int32_t vchi_msg_hold(unsigned handle,
- void **data, // } may be NULL, as info can be
- uint32_t *msg_size, // } obtained from HELD_MSG_T
- struct vchiq_header **message);
+struct vchiq_header *vchi_msg_hold(unsigned handle);
/*******************************************************************************
* Global service support API - operations on held messages
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
index 6eb9a9878641..fc12b76617d1 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
@@ -154,20 +154,9 @@ EXPORT_SYMBOL(vchi_held_msg_release);
* Returns: int32_t - success == 0
*
***********************************************************/
-int32_t vchi_msg_hold(unsigned handle, void **data, uint32_t *msg_size,
- struct vchiq_header **message)
+struct vchiq_header *vchi_msg_hold(unsigned handle)
{
- struct vchiq_header *header;
-
- header = vchiq_msg_hold(handle);
- if (!header)
- return -ENOENT;
-
- *data = header->data;
- *msg_size = header->size;
- *message = header;
-
- return 0;
+ return vchiq_msg_hold(handle);
}
EXPORT_SYMBOL(vchi_msg_hold);
diff --git a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
index 08979502f551..2de67ce18be2 100644
--- a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
+++ b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
@@ -233,8 +233,13 @@ static int vc_sm_cma_vchi_videocore_io(void *arg)
} while (1);
- while (!vchi_msg_hold(instance->service_handle,
- (void **)&reply, &reply_len, &message)) {
+ while (1) {
+ message = vchi_msg_hold(instance->service_handle);
+ if (!message)
+ break;
+ reply = (struct vc_sm_result_t *)message->data;
+ reply_len = message->size;
+
if (reply->trans_id & 0x80000000) {
/* Async event or cmd from the VPU */
if (instance->vpu_event)
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 35/50] staging: vchiq: Pass vchiq's message when holding a message
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
linux-kernel
Cc: devel, kernel-list, laurent.pinchart, Nicolas Saenz Julienne,
gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
vchi created an opaque structure to be held by services while they
process callback messages. The contents of this opaque structure are the
service handle, which all services already maintain, and a pointer to
vchiq's message structure, struct vchiq_header.
Let's get rid of this opaque structure and directly pass struct
vchiq_header, which is what ultimately vchiq consumes when handling
callback messages.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
.../vc04_services/interface/vchi/vchi.h | 14 ++---------
.../interface/vchiq_arm/vchiq_shim.c | 25 ++++++-------------
.../vc04_services/vc-sm-cma/vc_sm_cma_vchi.c | 6 ++---
3 files changed, 12 insertions(+), 33 deletions(-)
diff --git a/drivers/staging/vc04_services/interface/vchi/vchi.h b/drivers/staging/vc04_services/interface/vchi/vchi.h
index 74fd169e079a..72771fdee9d6 100644
--- a/drivers/staging/vc04_services/interface/vchi/vchi.h
+++ b/drivers/staging/vc04_services/interface/vchi/vchi.h
@@ -11,16 +11,6 @@
// Macros to manipulate 'FOURCC' values
#define MAKE_FOURCC(x) ((int32_t)((x[0] << 24) | (x[1] << 16) | (x[2] << 8) | x[3]))
-// Opaque service information
-struct opaque_vchi_service_t;
-
-// Descriptor for a held message. Allocated by client, initialised by vchi_msg_hold,
-// vchi_msg_iter_hold or vchi_msg_iter_hold_next. Fields are for internal VCHI use only.
-struct vchi_held_msg {
- struct opaque_vchi_service_t *service;
- void *message;
-};
-
// Opaque handle for a VCHIQ instance
struct vchiq_instance;
@@ -67,7 +57,7 @@ extern int vchi_queue_kernel_message(unsigned handle, void *data,
extern int32_t vchi_msg_hold(unsigned handle,
void **data, // } may be NULL, as info can be
uint32_t *msg_size, // } obtained from HELD_MSG_T
- struct vchi_held_msg *message_descriptor);
+ struct vchiq_header **message);
/*******************************************************************************
* Global service support API - operations on held messages
@@ -75,7 +65,7 @@ extern int32_t vchi_msg_hold(unsigned handle,
******************************************************************************/
// Routine to release a held message after it has been processed
-extern int32_t vchi_held_msg_release(struct vchi_held_msg *message);
+extern int32_t vchi_held_msg_release(unsigned handle, struct vchiq_header *message);
/******************************************************************************
* Global bulk API
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
index 578346965da6..6eb9a9878641 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
@@ -113,7 +113,8 @@ EXPORT_SYMBOL(vchi_bulk_queue_transmit);
/***********************************************************
* Name: vchi_held_msg_release
*
- * Arguments: struct vchi_held_msg *message
+ * Arguments: unsgined handle
+ * struct vchiq_header *message
*
* Description: Routine to release a held message (after it has been read with
* vchi_msg_hold)
@@ -121,7 +122,7 @@ EXPORT_SYMBOL(vchi_bulk_queue_transmit);
* Returns: int32_t - success == 0
*
***********************************************************/
-int32_t vchi_held_msg_release(struct vchi_held_msg *message)
+int32_t vchi_held_msg_release(unsigned handle, struct vchiq_header *message)
{
/*
* Convert the service field pointer back to an
@@ -131,8 +132,7 @@ int32_t vchi_held_msg_release(struct vchi_held_msg *message)
* to a pointer.
*/
- vchiq_release_message((unsigned int)(long)message->service,
- (struct vchiq_header *)message->message);
+ vchiq_release_message(handle, message);
return 0;
}
@@ -144,7 +144,7 @@ EXPORT_SYMBOL(vchi_held_msg_release);
* Arguments: struct vchi_service *service,
* void **data,
* uint32_t *msg_size,
- * struct vchi_held_msg *message_handle
+ * struct vchiq_header **message
*
* Description: Routine to return a pointer to the current message (to allow
* in place processing). The message is dequeued - don't forget
@@ -155,7 +155,7 @@ EXPORT_SYMBOL(vchi_held_msg_release);
*
***********************************************************/
int32_t vchi_msg_hold(unsigned handle, void **data, uint32_t *msg_size,
- struct vchi_held_msg *message_handle)
+ struct vchiq_header **message)
{
struct vchiq_header *header;
@@ -165,18 +165,7 @@ int32_t vchi_msg_hold(unsigned handle, void **data, uint32_t *msg_size,
*data = header->data;
*msg_size = header->size;
-
- /*
- * upcast the unsigned int which is an int
- * to a pointer and stuff it in the held message.
- * This pointer is opaque to everything except
- * vchi_held_msg_release which simply downcasts it back
- * to an int.
- */
-
- message_handle->service =
- (struct opaque_vchi_service_t *)(long)handle;
- message_handle->message = header;
+ *message = header;
return 0;
}
diff --git a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
index b0339b5438aa..08979502f551 100644
--- a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
+++ b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
@@ -176,7 +176,7 @@ static int vc_sm_cma_vchi_videocore_io(void *arg)
struct sm_instance *instance = arg;
struct sm_cmd_rsp_blk *cmd = NULL, *cmd_tmp;
struct vc_sm_result_t *reply;
- struct vchi_held_msg msg;
+ struct vchiq_header *message;
u32 reply_len;
s32 status;
int svc_use = 1;
@@ -234,7 +234,7 @@ static int vc_sm_cma_vchi_videocore_io(void *arg)
} while (1);
while (!vchi_msg_hold(instance->service_handle,
- (void **)&reply, &reply_len, &msg)) {
+ (void **)&reply, &reply_len, &message)) {
if (reply->trans_id & 0x80000000) {
/* Async event or cmd from the VPU */
if (instance->vpu_event)
@@ -245,7 +245,7 @@ static int vc_sm_cma_vchi_videocore_io(void *arg)
reply_len);
}
- vchi_held_msg_release(&msg);
+ vchi_held_msg_release(instance->service_handle, message);
}
/* Go through the dead list and free them */
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 39/50] staging: vchi: Don't include vchiq_core.h
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
linux-kernel
Cc: devel, kernel-list, laurent.pinchart, Nicolas Saenz Julienne,
gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
This file is internal to vchiq.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
index fc12b76617d1..52654123463d 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
@@ -8,7 +8,6 @@
#include "vchiq_if.h"
#include "../vchi/vchi.h"
#include "vchiq.h"
-#include "vchiq_core.h"
int vchi_queue_kernel_message(unsigned handle, void *data, unsigned int size)
{
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 34/50] staging: vchi: Get rid of struct vchi_service
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
Florian Fainelli, Ray Jui, Scott Branden, Nicolas Saenz Julienne
Cc: devel, kernel-list, laurent.pinchart, linux-kernel, gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
The structure only contains a single parameter, which is the underlying
vchiq handle. Get rid of the struct and directly pass the handle around.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
.../bcm2835-audio/bcm2835-vchiq.c | 23 ++---
.../vc04_services/interface/vchi/vchi.h | 25 ++---
.../interface/vchiq_arm/vchiq_shim.c | 99 +++++--------------
.../vc04_services/vc-sm-cma/vc_sm_cma_vchi.c | 26 +++--
.../vc04_services/vchiq-mmal/mmal-vchiq.c | 55 ++++++-----
5 files changed, 84 insertions(+), 144 deletions(-)
diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
index c1537a41a2fe..18309578e9a2 100644
--- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
+++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
@@ -9,7 +9,7 @@
struct bcm2835_audio_instance {
struct device *dev;
- struct vchi_service *service;
+ unsigned service_handle;
struct completion msg_avail_comp;
struct mutex vchi_mutex;
struct bcm2835_alsa_stream *alsa_stream;
@@ -25,12 +25,12 @@ MODULE_PARM_DESC(force_bulk, "Force use of vchiq bulk for audio");
static void bcm2835_audio_lock(struct bcm2835_audio_instance *instance)
{
mutex_lock(&instance->vchi_mutex);
- vchi_service_use(instance->service);
+ vchi_service_use(instance->service_handle);
}
static void bcm2835_audio_unlock(struct bcm2835_audio_instance *instance)
{
- vchi_service_release(instance->service);
+ vchi_service_release(instance->service_handle);
mutex_unlock(&instance->vchi_mutex);
}
@@ -44,7 +44,7 @@ static int bcm2835_audio_send_msg_locked(struct bcm2835_audio_instance *instance
init_completion(&instance->msg_avail_comp);
}
- status = vchi_queue_kernel_message(instance->service,
+ status = vchi_queue_kernel_message(instance->service_handle,
m, sizeof(*m));
if (status) {
dev_err(instance->dev,
@@ -133,7 +133,7 @@ vc_vchi_audio_init(struct vchiq_instance *vchiq_instance,
/* Open the VCHI service connections */
status = vchi_service_open(vchiq_instance, ¶ms,
- &instance->service);
+ &instance->service_handle);
if (status) {
dev_err(instance->dev,
@@ -143,7 +143,7 @@ vc_vchi_audio_init(struct vchiq_instance *vchiq_instance,
}
/* Finished with the service for now */
- vchi_service_release(instance->service);
+ vchi_service_release(instance->service_handle);
return 0;
}
@@ -153,10 +153,10 @@ static void vc_vchi_audio_deinit(struct bcm2835_audio_instance *instance)
int status;
mutex_lock(&instance->vchi_mutex);
- vchi_service_use(instance->service);
+ vchi_service_use(instance->service_handle);
/* Close all VCHI service connections */
- status = vchi_service_close(instance->service);
+ status = vchi_service_close(instance->service_handle);
if (status) {
dev_err(instance->dev,
"failed to close VCHI service connection (status=%d)\n",
@@ -226,7 +226,8 @@ int bcm2835_audio_open(struct bcm2835_alsa_stream *alsa_stream)
goto deinit;
bcm2835_audio_lock(instance);
- vchi_get_peer_version(instance->service, &instance->peer_version);
+ vchi_get_peer_version(instance->service_handle,
+ &instance->peer_version);
bcm2835_audio_unlock(instance);
if (instance->peer_version < 2 || force_bulk)
instance->max_packet = 0; /* bulk transfer */
@@ -342,7 +343,7 @@ int bcm2835_audio_write(struct bcm2835_alsa_stream *alsa_stream,
count = size;
if (!instance->max_packet) {
/* Send the message to the videocore */
- status = vchi_bulk_queue_transmit(instance->service,
+ status = vchi_bulk_queue_transmit(instance->service_handle,
src, count,
VCHIQ_BULK_MODE_BLOCKING,
NULL);
@@ -350,7 +351,7 @@ int bcm2835_audio_write(struct bcm2835_alsa_stream *alsa_stream,
while (count > 0) {
int bytes = min(instance->max_packet, count);
- status = vchi_queue_kernel_message(instance->service,
+ status = vchi_queue_kernel_message(instance->service_handle,
src, bytes);
src += bytes;
count -= bytes;
diff --git a/drivers/staging/vc04_services/interface/vchi/vchi.h b/drivers/staging/vc04_services/interface/vchi/vchi.h
index 4afa6e9f57c4..74fd169e079a 100644
--- a/drivers/staging/vc04_services/interface/vchi/vchi.h
+++ b/drivers/staging/vc04_services/interface/vchi/vchi.h
@@ -21,10 +21,6 @@ struct vchi_held_msg {
void *message;
};
-struct vchi_service {
- unsigned int handle;
-};
-
// Opaque handle for a VCHIQ instance
struct vchiq_instance;
@@ -46,24 +42,23 @@ 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 vchiq_instance *instance,
- struct vchiq_service_params *setup,
- struct vchi_service **service);
+extern int vchi_service_open(struct vchiq_instance *instance,
+ struct vchiq_service_params *params,
+ unsigned *handle);
-extern int32_t vchi_get_peer_version(struct vchi_service *service,
- short *peer_version);
+extern int32_t vchi_get_peer_version(unsigned handle, short *peer_version);
// Routine to close a named service
-extern int32_t vchi_service_close(struct vchi_service *service);
+extern int32_t vchi_service_close(unsigned handle);
// Routine to increment ref count on a named service
-extern int32_t vchi_service_use(struct vchi_service *service);
+extern int32_t vchi_service_use(unsigned handle);
// Routine to decrement ref count on a named service
-extern int32_t vchi_service_release(struct vchi_service *service);
+extern int32_t vchi_service_release(unsigned handle);
/* Routine to send a message from kernel memory across a service */
-extern int vchi_queue_kernel_message(struct vchi_service *service, void *data,
+extern int vchi_queue_kernel_message(unsigned handle, void *data,
unsigned int size);
// Routine to look at a message in place.
@@ -87,14 +82,14 @@ extern int32_t vchi_held_msg_release(struct vchi_held_msg *message);
*****************************************************************************/
// Routine to prepare interface for a transfer from the other side
-extern int32_t vchi_bulk_queue_receive(struct vchi_service *service,
+extern int32_t vchi_bulk_queue_receive(unsigned handle,
void *data_dst,
uint32_t data_size,
enum vchiq_bulk_mode mode,
void *transfer_handle);
// 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(struct vchi_service *service,
+extern int32_t vchi_bulk_queue_transmit(unsigned handle,
const void *data_src,
uint32_t data_size,
enum vchiq_bulk_mode mode,
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
index e76399e083f6..578346965da6 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
@@ -10,14 +10,12 @@
#include "vchiq.h"
#include "vchiq_core.h"
-int vchi_queue_kernel_message(struct vchi_service *service, void *data,
- unsigned int size)
+int vchi_queue_kernel_message(unsigned handle, void *data, unsigned int size)
{
enum vchiq_status status;
while (1) {
- status = vchiq_queue_kernel_message(service->handle, data,
- size);
+ status = vchiq_queue_kernel_message(handle, data, size);
/*
* vchiq_queue_message() may return VCHIQ_RETRY, so we need to
@@ -48,15 +46,15 @@ EXPORT_SYMBOL(vchi_queue_kernel_message);
* Returns: int32_t - success == 0
*
***********************************************************/
-int32_t vchi_bulk_queue_receive(struct vchi_service *service, void *data_dst,
+int32_t vchi_bulk_queue_receive(unsigned handle, void *data_dst,
uint32_t data_size, enum vchiq_bulk_mode mode,
void *bulk_handle)
{
enum vchiq_status status;
while (1) {
- status = vchiq_bulk_receive(service->handle, data_dst,
- data_size, bulk_handle, mode);
+ status = vchiq_bulk_receive(handle, data_dst, data_size,
+ bulk_handle, mode);
/*
* vchiq_bulk_receive() may return VCHIQ_RETRY, so we need to
* implement a retry mechanism since this function is supposed
@@ -86,17 +84,15 @@ EXPORT_SYMBOL(vchi_bulk_queue_receive);
* Returns: int32_t - success == 0
*
***********************************************************/
-int32_t vchi_bulk_queue_transmit(struct vchi_service *service,
- const void *data_src,
- uint32_t data_size,
- enum vchiq_bulk_mode mode,
+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(service->handle, data_src,
- data_size, bulk_handle, mode);
+ status = vchiq_bulk_transmit(handle, data_src, data_size,
+ bulk_handle, mode);
/*
* vchiq_bulk_transmit() may return VCHIQ_RETRY, so we need to
@@ -245,7 +241,7 @@ EXPORT_SYMBOL(vchi_disconnect);
*
* Arguments: struct vchiq_instance *instance
* struct service_creation *setup,
- * struct vchi_service **service
+ * unsigned *handle
*
* Description: Routine to open a service
*
@@ -253,103 +249,54 @@ EXPORT_SYMBOL(vchi_disconnect);
*
***********************************************************/
-static struct vchi_service *service_alloc(void)
-{
- return kzalloc(sizeof(struct vchi_service), GFP_KERNEL);
-}
-
-static void service_free(struct vchi_service *service)
-{
- if (service)
- kfree(service);
-}
-
int32_t vchi_service_open(struct vchiq_instance *instance,
- struct vchiq_service_params *params,
- struct vchi_service **service)
+ struct vchiq_service_params *params,
+ unsigned *handle)
{
-
- *service = service_alloc();
- if (service) {
- enum vchiq_status status;
-
- status = vchiq_open_service(instance, params,
- &((*service)->handle));
- if (status != VCHIQ_SUCCESS) {
- service_free(*service);
- *service = NULL;
- }
- }
-
- return *service ? 0 : -1;
+ return vchiq_open_service(instance, params, handle);
}
EXPORT_SYMBOL(vchi_service_open);
-int32_t vchi_service_close(struct vchi_service *service)
+int32_t vchi_service_close(unsigned handle)
{
- int32_t ret = -1;
-
- if (service) {
- enum vchiq_status status = vchiq_close_service(service->handle);
- if (status == VCHIQ_SUCCESS)
- service_free(service);
-
- ret = status;
- }
- return ret;
+ return vchiq_close_service(handle);
}
EXPORT_SYMBOL(vchi_service_close);
-int32_t vchi_get_peer_version(struct vchi_service *service, short *peer_version)
+int32_t vchi_get_peer_version(unsigned handle, short *peer_version)
{
- int32_t ret = -1;
-
- if (service) {
- enum vchiq_status status;
-
- status = vchiq_get_peer_version(service->handle, peer_version);
- ret = status;
- }
- return ret;
+ return vchiq_get_peer_version(handle, peer_version);
}
EXPORT_SYMBOL(vchi_get_peer_version);
/***********************************************************
* Name: vchi_service_use
*
- * Arguments: struct vchi_service *service
+ * Arguments: unsigned handle
*
* Description: Routine to increment refcount on a service
*
* Returns: void
*
***********************************************************/
-int32_t vchi_service_use(struct vchi_service *service)
+int32_t vchi_service_use(unsigned handle)
{
- int32_t ret = -1;
-
- if (service)
- ret = vchiq_use_service(service->handle);
- return ret;
+ return vchiq_use_service(handle);
}
EXPORT_SYMBOL(vchi_service_use);
/***********************************************************
* Name: vchi_service_release
*
- * Arguments: struct vchi_service *service
+ * Arguments: unsigned handle
*
* Description: Routine to decrement refcount on a service
*
* Returns: void
*
***********************************************************/
-int32_t vchi_service_release(struct vchi_service *service)
+int32_t vchi_service_release(unsigned handle)
{
- int32_t ret = -1;
-
- if (service)
- ret = vchiq_release_service(service->handle);
- return ret;
+ return vchiq_release_service(handle);
}
EXPORT_SYMBOL(vchi_service_release);
diff --git a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
index a37607d07335..b0339b5438aa 100644
--- a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
+++ b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
@@ -47,7 +47,7 @@ struct sm_cmd_rsp_blk {
};
struct sm_instance {
- struct vchi_service *service;
+ unsigned service_handle;
struct task_struct *io_thread;
struct completion io_cmplt;
@@ -76,13 +76,9 @@ struct sm_instance {
/* ---- Private Functions ------------------------------------------------ */
static int
-bcm2835_vchi_msg_queue(struct vchi_service *service,
- void *data,
- unsigned int size)
+bcm2835_vchi_msg_queue(unsigned handle, void *data, unsigned int size)
{
- return vchi_queue_kernel_message(service,
- data,
- size);
+ return vchi_queue_kernel_message(handle, data, size);
}
static struct
@@ -187,13 +183,13 @@ static int vc_sm_cma_vchi_videocore_io(void *arg)
while (1) {
if (svc_use)
- vchi_service_release(instance->service);
+ vchi_service_release(instance->service_handle);
svc_use = 0;
if (wait_for_completion_interruptible(&instance->io_cmplt))
continue;
- vchi_service_use(instance->service);
+ vchi_service_use(instance->service_handle);
svc_use = 1;
do {
@@ -214,7 +210,7 @@ static int vc_sm_cma_vchi_videocore_io(void *arg)
/* Send the command */
status =
- bcm2835_vchi_msg_queue(instance->service,
+ bcm2835_vchi_msg_queue(instance->service_handle,
cmd->msg, cmd->length);
if (status) {
pr_err("%s: failed to queue message (%d)",
@@ -237,7 +233,7 @@ static int vc_sm_cma_vchi_videocore_io(void *arg)
} while (1);
- while (!vchi_msg_hold(instance->service->handle,
+ while (!vchi_msg_hold(instance->service_handle,
(void **)&reply, &reply_len, &msg)) {
if (reply->trans_id & 0x80000000) {
/* Async event or cmd from the VPU */
@@ -322,7 +318,7 @@ struct sm_instance *vc_sm_cma_vchi_init(struct vchiq_instance *vchiq_instance,
params.userdata = instance;
/* Open the VCHI service connections */
- status = vchi_service_open(vchiq_instance, ¶ms, &instance->service);
+ status = vchi_service_open(vchiq_instance, ¶ms, &instance->service_handle);
if (status) {
pr_err("%s: failed to open VCHI service (%d)",
__func__, status);
@@ -346,7 +342,7 @@ struct sm_instance *vc_sm_cma_vchi_init(struct vchiq_instance *vchiq_instance,
return instance;
err_close_services:
- vchi_service_close(instance->service);
+ vchi_service_close(instance->service_handle);
kfree(instance);
pr_debug("%s: FAILED", __func__);
return NULL;
@@ -368,8 +364,8 @@ int vc_sm_cma_vchi_stop(struct sm_instance **handle)
instance = *handle;
- vchi_service_use(instance->service);
- vchi_service_close(instance->service);
+ vchi_service_use(instance->service_handle);
+ vchi_service_close(instance->service_handle);
kfree(instance);
diff --git a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
index a3ad8aa8b8cc..3707212d8e7e 100644
--- a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
+++ b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
@@ -170,7 +170,7 @@ struct mmal_msg_context {
};
struct vchiq_mmal_instance {
- struct vchi_service *service;
+ unsigned service_handle;
/* ensure serialised access to service */
struct mutex vchiq_mutex;
@@ -292,8 +292,8 @@ static void buffer_to_host_work_cb(struct work_struct *work)
/* Dummy receive to ensure the buffers remain in order */
len = 8;
/* queue the bulk submission */
- vchi_service_use(instance->service);
- ret = vchi_bulk_queue_receive(instance->service,
+ vchi_service_use(instance->service_handle);
+ ret = vchi_bulk_queue_receive(instance->service_handle,
msg_context->u.bulk.buffer->buffer,
/* Actual receive needs to be a multiple
* of 4 bytes
@@ -302,7 +302,7 @@ static void buffer_to_host_work_cb(struct work_struct *work)
VCHIQ_BULK_MODE_CALLBACK,
msg_context);
- vchi_service_release(instance->service);
+ vchi_service_release(instance->service_handle);
if (ret != 0)
pr_err("%s: ctx: %p, vchi_bulk_queue_receive failed %d\n",
@@ -382,7 +382,7 @@ buffer_from_host(struct vchiq_mmal_instance *instance,
if (!port->enabled)
return -EINVAL;
- pr_debug("instance:%p buffer:%p\n", instance->service, buf);
+ pr_debug("instance:%u buffer:%p\n", instance->service_handle, buf);
/* get context */
if (!buf->msg_context) {
@@ -450,14 +450,14 @@ buffer_from_host(struct vchiq_mmal_instance *instance,
/* no payload in message */
m.u.buffer_from_host.payload_in_message = 0;
- vchi_service_use(instance->service);
+ vchi_service_use(instance->service_handle);
- ret = vchi_queue_kernel_message(instance->service,
+ ret = vchi_queue_kernel_message(instance->service_handle,
&m,
sizeof(struct mmal_msg_header) +
sizeof(m.u.buffer_from_host));
- vchi_service_release(instance->service);
+ vchi_service_release(instance->service_handle);
return ret;
}
@@ -804,14 +804,14 @@ static int send_synchronous_mmal_msg(struct vchiq_mmal_instance *instance,
DBG_DUMP_MSG(msg, (sizeof(struct mmal_msg_header) + payload_len),
">>> sync message");
- vchi_service_use(instance->service);
+ vchi_service_use(instance->service_handle);
- ret = vchi_queue_kernel_message(instance->service,
+ ret = vchi_queue_kernel_message(instance->service_handle,
msg,
sizeof(struct mmal_msg_header) +
payload_len);
- vchi_service_release(instance->service);
+ vchi_service_release(instance->service_handle);
if (ret) {
pr_err("error %d queuing message\n", ret);
@@ -951,7 +951,7 @@ static int port_info_set(struct vchiq_mmal_instance *instance,
port->component->handle, port->handle);
release_msg:
- vchiq_release_message(instance->service->handle, rmsg_handle);
+ vchiq_release_message(instance->service_handle, rmsg_handle);
return ret;
}
@@ -1046,7 +1046,7 @@ static int port_info_get(struct vchiq_mmal_instance *instance,
pr_debug("%s:result:%d component:0x%x port:%d\n",
__func__, ret, port->component->handle, port->handle);
- vchiq_release_message(instance->service->handle, rmsg_handle);
+ vchiq_release_message(instance->service_handle, rmsg_handle);
return ret;
}
@@ -1094,7 +1094,7 @@ static int create_component(struct vchiq_mmal_instance *instance,
component->inputs, component->outputs, component->clocks);
release_msg:
- vchiq_release_message(instance->service->handle, rmsg_handle);
+ vchiq_release_message(instance->service_handle, rmsg_handle);
return ret;
}
@@ -1127,7 +1127,7 @@ static int destroy_component(struct vchiq_mmal_instance *instance,
release_msg:
- vchiq_release_message(instance->service->handle, rmsg_handle);
+ vchiq_release_message(instance->service_handle, rmsg_handle);
return ret;
}
@@ -1159,7 +1159,7 @@ static int enable_component(struct vchiq_mmal_instance *instance,
ret = -rmsg->u.component_enable_reply.status;
release_msg:
- vchiq_release_message(instance->service->handle, rmsg_handle);
+ vchiq_release_message(instance->service_handle, rmsg_handle);
return ret;
}
@@ -1192,7 +1192,7 @@ static int disable_component(struct vchiq_mmal_instance *instance,
release_msg:
- vchiq_release_message(instance->service->handle, rmsg_handle);
+ vchiq_release_message(instance->service_handle, rmsg_handle);
return ret;
}
@@ -1224,7 +1224,7 @@ static int get_version(struct vchiq_mmal_instance *instance,
*minor_out = rmsg->u.version.minor;
release_msg:
- vchiq_release_message(instance->service->handle, rmsg_handle);
+ vchiq_release_message(instance->service_handle, rmsg_handle);
return ret;
}
@@ -1266,7 +1266,7 @@ static int port_action_port(struct vchiq_mmal_instance *instance,
port_action_type_names[action_type], action_type);
release_msg:
- vchiq_release_message(instance->service->handle, rmsg_handle);
+ vchiq_release_message(instance->service_handle, rmsg_handle);
return ret;
}
@@ -1314,7 +1314,7 @@ static int port_action_handle(struct vchiq_mmal_instance *instance,
action_type, connect_component_handle, connect_port_handle);
release_msg:
- vchiq_release_message(instance->service->handle, rmsg_handle);
+ vchiq_release_message(instance->service_handle, rmsg_handle);
return ret;
}
@@ -1355,7 +1355,7 @@ static int port_parameter_set(struct vchiq_mmal_instance *instance,
ret, port->component->handle, port->handle, parameter_id);
release_msg:
- vchiq_release_message(instance->service->handle, rmsg_handle);
+ vchiq_release_message(instance->service_handle, rmsg_handle);
return ret;
}
@@ -1414,7 +1414,7 @@ static int port_parameter_get(struct vchiq_mmal_instance *instance,
ret, port->component->handle, port->handle, parameter_id);
release_msg:
- vchiq_release_message(instance->service->handle, rmsg_handle);
+ vchiq_release_message(instance->service_handle, rmsg_handle);
return ret;
}
@@ -2068,9 +2068,9 @@ int vchiq_mmal_finalise(struct vchiq_mmal_instance *instance)
if (mutex_lock_interruptible(&instance->vchiq_mutex))
return -EINTR;
- vchi_service_use(instance->service);
+ vchi_service_use(instance->service_handle);
- status = vchi_service_close(instance->service);
+ status = vchi_service_close(instance->service_handle);
if (status != 0)
pr_err("mmal-vchiq: VCHIQ close failed\n");
@@ -2148,21 +2148,22 @@ int vchiq_mmal_init(struct vchiq_mmal_instance **out_instance)
if (!instance->bulk_wq)
goto err_free;
- status = vchi_service_open(vchiq_instance, ¶ms, &instance->service);
+ status = vchi_service_open(vchiq_instance, ¶ms,
+ &instance->service_handle);
if (status) {
pr_err("Failed to open VCHI service connection (status=%d)\n",
status);
goto err_close_services;
}
- vchi_service_release(instance->service);
+ vchi_service_release(instance->service_handle);
*out_instance = instance;
return 0;
err_close_services:
- vchi_service_close(instance->service);
+ vchi_service_close(instance->service_handle);
destroy_workqueue(instance->bulk_wq);
err_free:
vfree(instance->bulk_scratch);
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 38/50] staging: vchi: Get rid of struct vchiq_instance forward declaration
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
linux-kernel
Cc: devel, kernel-list, laurent.pinchart, Nicolas Saenz Julienne,
gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
It's already forward declared in vchiq_if.h. So no need to insist
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
drivers/staging/vc04_services/interface/vchi/vchi.h | 7 -------
1 file changed, 7 deletions(-)
diff --git a/drivers/staging/vc04_services/interface/vchi/vchi.h b/drivers/staging/vc04_services/interface/vchi/vchi.h
index 7108c254a38a..d24e7027c08f 100644
--- a/drivers/staging/vc04_services/interface/vchi/vchi.h
+++ b/drivers/staging/vc04_services/interface/vchi/vchi.h
@@ -4,13 +4,6 @@
#ifndef VCHI_H_
#define VCHI_H_
-/******************************************************************************
- * Global defs
- *****************************************************************************/
-
-// Opaque handle for a VCHIQ instance
-struct vchiq_instance;
-
/******************************************************************************
* Global funcs - implementation is specific to which side you are on
* (local / remote)
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 40/50] staging: vchiq: Get rid of unnecessary definitions in vchiq_if.h
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
linux-kernel
Cc: devel, kernel-list, laurent.pinchart, Nicolas Saenz Julienne,
gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
Those functions don't actually exist, nor have any use, nor the macros.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
.../interface/vchiq_arm/vchiq_if.h | 17 -----------------
1 file changed, 17 deletions(-)
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
index b3d4c14536bd..407e7dc31108 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
@@ -8,11 +8,9 @@
#define VCHIQ_SLOT_SIZE 4096
#define VCHIQ_MAX_MSG_SIZE (VCHIQ_SLOT_SIZE - sizeof(struct vchiq_header))
-#define VCHIQ_CHANNEL_SIZE VCHIQ_MAX_MSG_SIZE /* For backwards compatibility */
#define VCHIQ_MAKE_FOURCC(x0, x1, x2, x3) \
(((x0) << 24) | ((x1) << 16) | ((x2) << 8) | (x3))
-#define VCHIQ_GET_SERVICE_USERDATA(service) vchiq_get_service_userdata(service)
enum vchiq_reason {
VCHIQ_SERVICE_OPENED, /* service, -, - */
@@ -92,7 +90,6 @@ struct vchiq_config {
};
struct vchiq_instance;
-typedef void (*vchiq_remote_callback)(void *cb_arg);
extern enum vchiq_status vchiq_initialise(struct vchiq_instance **pinstance);
extern enum vchiq_status vchiq_shutdown(struct vchiq_instance *instance);
@@ -118,25 +115,11 @@ extern enum vchiq_status vchiq_bulk_transmit(unsigned int service,
extern enum vchiq_status vchiq_bulk_receive(unsigned int service,
void *data, unsigned int size, void *userdata,
enum vchiq_bulk_mode mode);
-extern enum vchiq_status vchiq_bulk_transmit_handle(unsigned int service,
- const void *offset, unsigned int size,
- void *userdata, enum vchiq_bulk_mode mode);
-extern enum vchiq_status vchiq_bulk_receive_handle(unsigned int service,
- void *offset, unsigned int size, void *userdata,
- enum vchiq_bulk_mode mode);
extern int vchiq_get_client_id(unsigned int service);
extern void *vchiq_get_service_userdata(unsigned int service);
extern void vchiq_get_config(struct vchiq_config *config);
extern enum vchiq_status vchiq_set_service_option(unsigned int service,
enum vchiq_service_option option, int value);
-
-extern enum vchiq_status vchiq_remote_use(struct vchiq_instance *instance,
- vchiq_remote_callback callback, void *cb_arg);
-extern enum vchiq_status vchiq_remote_release(struct vchiq_instance *instance);
-
-extern enum vchiq_status vchiq_dump_phys_mem(unsigned int service,
- void *ptr, size_t num_bytes);
-
extern enum vchiq_status vchiq_get_peer_version(unsigned int handle,
short *peer_version);
extern void vchiq_msg_queue_push(unsigned handle, struct vchiq_header *header);
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 37/50] staging: vchiq: Unify fourcc definition mechanisms
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
Nicolas Saenz Julienne, Florian Fainelli, Ray Jui, Scott Branden
Cc: devel, kernel-list, laurent.pinchart, linux-kernel, gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
There is already enough duplication with regard to fourcc generation in
the kernel. Let's at least use the same macro all over the vchiq
ecosystem.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c | 2 +-
.../vc04_services/bcm2835-audio/vc_vchi_audioserv_defs.h | 5 ++---
drivers/staging/vc04_services/interface/vchi/vchi.h | 3 ---
drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c | 2 +-
drivers/staging/vc04_services/vc-sm-cma/vc_sm_defs.h | 3 ---
drivers/staging/vc04_services/vchiq-mmal/mmal-msg.h | 1 -
drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c | 2 +-
7 files changed, 5 insertions(+), 13 deletions(-)
diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
index 18309578e9a2..55f1e684eef1 100644
--- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
+++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
@@ -125,7 +125,7 @@ vc_vchi_audio_init(struct vchiq_instance *vchiq_instance,
struct vchiq_service_params params = {
.version = VC_AUDIOSERV_VER,
.version_min = VC_AUDIOSERV_MIN_VER,
- .fourcc = VC_AUDIO_SERVER_NAME,
+ .fourcc = VCHIQ_MAKE_FOURCC('A', 'U', 'D', 'S'),
.callback = audio_vchi_callback,
.userdata = instance,
};
diff --git a/drivers/staging/vc04_services/bcm2835-audio/vc_vchi_audioserv_defs.h b/drivers/staging/vc04_services/bcm2835-audio/vc_vchi_audioserv_defs.h
index d6401e914ac9..b4fa239c5ebe 100644
--- a/drivers/staging/vc04_services/bcm2835-audio/vc_vchi_audioserv_defs.h
+++ b/drivers/staging/vc04_services/bcm2835-audio/vc_vchi_audioserv_defs.h
@@ -8,9 +8,8 @@
#define VC_AUDIOSERV_VER 2
/* FourCC codes used for VCHI communication */
-#define VC_AUDIO_SERVER_NAME MAKE_FOURCC("AUDS")
-#define VC_AUDIO_WRITE_COOKIE1 MAKE_FOURCC("BCMA")
-#define VC_AUDIO_WRITE_COOKIE2 MAKE_FOURCC("DATA")
+#define VC_AUDIO_WRITE_COOKIE1 VCHIQ_MAKE_FOURCC('B', 'C', 'M', 'A')
+#define VC_AUDIO_WRITE_COOKIE2 VCHIQ_MAKE_FOURCC('D', 'A', 'T', 'A')
/*
* List of screens that are currently supported
diff --git a/drivers/staging/vc04_services/interface/vchi/vchi.h b/drivers/staging/vc04_services/interface/vchi/vchi.h
index 59559d4cd5f1..7108c254a38a 100644
--- a/drivers/staging/vc04_services/interface/vchi/vchi.h
+++ b/drivers/staging/vc04_services/interface/vchi/vchi.h
@@ -8,9 +8,6 @@
* Global defs
*****************************************************************************/
-// Macros to manipulate 'FOURCC' values
-#define MAKE_FOURCC(x) ((int32_t)((x[0] << 24) | (x[1] << 16) | (x[2] << 8) | x[3]))
-
// Opaque handle for a VCHIQ instance
struct vchiq_instance;
diff --git a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
index 2de67ce18be2..0b1a510d6bab 100644
--- a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
+++ b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
@@ -294,7 +294,7 @@ struct sm_instance *vc_sm_cma_vchi_init(struct vchiq_instance *vchiq_instance,
struct vchiq_service_params params = {
.version = VC_SM_VER,
.version_min = VC_SM_MIN_VER,
- .fourcc = VC_SM_SERVER_NAME,
+ .fourcc = VCHIQ_MAKE_FOURCC('S', 'M', 'E', 'M'),
.callback = vc_sm_cma_vchi_callback,
.userdata = NULL,
};
diff --git a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_defs.h b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_defs.h
index 8a0d1f6dbfe8..4e6354000dfd 100644
--- a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_defs.h
+++ b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_defs.h
@@ -15,9 +15,6 @@
#ifndef __VC_SM_DEFS_H__INCLUDED__
#define __VC_SM_DEFS_H__INCLUDED__
-/* FourCC code used for VCHI connection */
-#define VC_SM_SERVER_NAME MAKE_FOURCC("SMEM")
-
/* Maximum message length */
#define VC_SM_MAX_MSG_LEN (sizeof(union vc_sm_msg_union_t) + \
sizeof(struct vc_sm_msg_hdr_t))
diff --git a/drivers/staging/vc04_services/vchiq-mmal/mmal-msg.h b/drivers/staging/vc04_services/vchiq-mmal/mmal-msg.h
index bd83159403e5..ab63835ce01c 100644
--- a/drivers/staging/vc04_services/vchiq-mmal/mmal-msg.h
+++ b/drivers/staging/vc04_services/vchiq-mmal/mmal-msg.h
@@ -28,7 +28,6 @@
#define VC_MMAL_VER 15
#define VC_MMAL_MIN_VER 10
-#define VC_MMAL_SERVER_NAME MAKE_FOURCC("mmal")
/* max total message size is 512 bytes */
#define MMAL_MSG_MAX_SIZE 512
diff --git a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
index 3707212d8e7e..d35d2b50991b 100644
--- a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
+++ b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
@@ -2097,7 +2097,7 @@ int vchiq_mmal_init(struct vchiq_mmal_instance **out_instance)
struct vchiq_service_params params = {
.version = VC_MMAL_VER,
.version_min = VC_MMAL_MIN_VER,
- .fourcc = VC_MMAL_SERVER_NAME,
+ .fourcc = VCHIQ_MAKE_FOURCC('m', 'm', 'a', 'l'),
.callback = service_callback,
.userdata = NULL,
};
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 44/50] staging: vchi: Get rid of vchi_bulk_queue_transmit()
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
Florian Fainelli, Ray Jui, Scott Branden, Nicolas Saenz Julienne
Cc: devel, kernel-list, laurent.pinchart, linux-kernel, gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
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>
---
.../bcm2835-audio/bcm2835-vchiq.c | 7 +-
.../vc04_services/interface/vchi/vchi.h | 11 ----
.../interface/vchiq_arm/vchiq_arm.c | 38 +++++++----
.../interface/vchiq_arm/vchiq_shim.c | 66 ++++---------------
4 files changed, 41 insertions(+), 81 deletions(-)
diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
index 55f1e684eef1..28d64bc895cd 100644
--- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
+++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
@@ -343,10 +343,9 @@ int bcm2835_audio_write(struct bcm2835_alsa_stream *alsa_stream,
count = size;
if (!instance->max_packet) {
/* Send the message to the videocore */
- status = vchi_bulk_queue_transmit(instance->service_handle,
- src, count,
- VCHIQ_BULK_MODE_BLOCKING,
- NULL);
+ status = vchiq_bulk_transmit(instance->service_handle, src,
+ count, NULL,
+ VCHIQ_BULK_MODE_BLOCKING);
} else {
while (count > 0) {
int bytes = min(instance->max_packet, count);
diff --git a/drivers/staging/vc04_services/interface/vchi/vchi.h b/drivers/staging/vc04_services/interface/vchi/vchi.h
index ca20b99122f2..c800796f9986 100644
--- a/drivers/staging/vc04_services/interface/vchi/vchi.h
+++ b/drivers/staging/vc04_services/interface/vchi/vchi.h
@@ -54,17 +54,6 @@ struct vchiq_header *vchi_msg_hold(unsigned handle);
// Routine to release a held message after it has been processed
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
*****************************************************************************/
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
index 084e98b4ca61..524128225766 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
@@ -361,19 +361,31 @@ vchiq_bulk_transmit(unsigned int handle, const void *data,
{
enum vchiq_status status;
- switch (mode) {
- case VCHIQ_BULK_MODE_NOCALLBACK:
- case VCHIQ_BULK_MODE_CALLBACK:
- status = vchiq_bulk_transfer(handle, (void *)data, size,
- userdata, mode,
- VCHIQ_BULK_TRANSMIT);
- break;
- case VCHIQ_BULK_MODE_BLOCKING:
- status = vchiq_blocking_bulk_transfer(handle,
- (void *)data, size, VCHIQ_BULK_TRANSMIT);
- break;
- default:
- return VCHIQ_ERROR;
+ while (1) {
+ switch (mode) {
+ case VCHIQ_BULK_MODE_NOCALLBACK:
+ case VCHIQ_BULK_MODE_CALLBACK:
+ status = vchiq_bulk_transfer(handle, (void *)data, size,
+ userdata, mode,
+ VCHIQ_BULK_TRANSMIT);
+ break;
+ case VCHIQ_BULK_MODE_BLOCKING:
+ status = vchiq_blocking_bulk_transfer(handle,
+ (void *)data, size, VCHIQ_BULK_TRANSMIT);
+ break;
+ 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;
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
index f69936a9eb29..33493643b5f8 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
@@ -31,46 +31,6 @@ int vchi_queue_kernel_message(unsigned handle, void *data, unsigned int size)
}
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
*
@@ -80,10 +40,10 @@ EXPORT_SYMBOL(vchi_bulk_queue_transmit);
* Description: Routine to release a held message (after it has been read with
* 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
@@ -104,7 +64,7 @@ EXPORT_SYMBOL(vchi_held_msg_release);
*
* Arguments: struct vchi_service *service,
* void **data,
- * uint32_t *msg_size,
+ * unsigned *msg_size,
* struct vchiq_header **message
*
* 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
* finished.
*
- * Returns: int32_t - success == 0
+ * Returns: int - success == 0
*
***********************************************************/
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);
}
@@ -151,7 +111,7 @@ EXPORT_SYMBOL(vchi_initialise);
* 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);
}
@@ -168,7 +128,7 @@ EXPORT_SYMBOL(vchi_connect);
* 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);
}
@@ -184,11 +144,11 @@ EXPORT_SYMBOL(vchi_disconnect);
*
* 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,
unsigned *handle)
{
@@ -196,13 +156,13 @@ int32_t vchi_service_open(struct vchiq_instance *instance,
}
EXPORT_SYMBOL(vchi_service_open);
-int32_t vchi_service_close(unsigned handle)
+int vchi_service_close(unsigned handle)
{
return vchiq_close_service(handle);
}
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);
}
@@ -218,7 +178,7 @@ EXPORT_SYMBOL(vchi_get_peer_version);
* Returns: void
*
***********************************************************/
-int32_t vchi_service_use(unsigned handle)
+int vchi_service_use(unsigned handle)
{
return vchiq_use_service(handle);
}
@@ -234,7 +194,7 @@ EXPORT_SYMBOL(vchi_service_use);
* Returns: void
*
***********************************************************/
-int32_t vchi_service_release(unsigned handle)
+int vchi_service_release(unsigned handle)
{
return vchiq_release_service(handle);
}
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 41/50] staging: vchiq: Make vchiq_add_service() local
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
linux-kernel
Cc: devel, kernel-list, laurent.pinchart, Nicolas Saenz Julienne,
gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
The function is being exported although there is no use for it outside
of vchiq's core code. Keep it local then.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c | 3 +--
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h | 3 ---
2 files changed, 1 insertion(+), 5 deletions(-)
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
index 4230f33ac38a..4d98d4d3ee8a 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
@@ -277,7 +277,7 @@ enum vchiq_status vchiq_connect(struct vchiq_instance *instance)
}
EXPORT_SYMBOL(vchiq_connect);
-enum vchiq_status vchiq_add_service(
+static enum vchiq_status vchiq_add_service(
struct vchiq_instance *instance,
const struct vchiq_service_params *params,
unsigned int *phandle)
@@ -314,7 +314,6 @@ enum vchiq_status vchiq_add_service(
return status;
}
-EXPORT_SYMBOL(vchiq_add_service);
enum vchiq_status vchiq_open_service(
struct vchiq_instance *instance,
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
index 407e7dc31108..b852980447dc 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
@@ -94,9 +94,6 @@ struct vchiq_instance;
extern enum vchiq_status vchiq_initialise(struct vchiq_instance **pinstance);
extern enum vchiq_status vchiq_shutdown(struct vchiq_instance *instance);
extern enum vchiq_status vchiq_connect(struct vchiq_instance *instance);
-extern enum vchiq_status vchiq_add_service(struct vchiq_instance *instance,
- const struct vchiq_service_params *params,
- unsigned int *pservice);
extern enum vchiq_status vchiq_open_service(struct vchiq_instance *instance,
const struct vchiq_service_params *params,
unsigned int *pservice);
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 43/50] staging: vchi: Get rid of vchi_bulk_queue_receive()
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
linux-kernel
Cc: devel, kernel-list, laurent.pinchart, Nicolas Saenz Julienne,
gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
Its vchiq counterpart, vchiq_bulk_receive() is only used by vchi. We can
then merge both functions by moving vchi_bulk_queue_receive()'s retry
mechanism into vchiq_bulk_receive() and let services call the later.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
.../vc04_services/interface/vchi/vchi.h | 7 ----
.../interface/vchiq_arm/vchiq_arm.c | 42 ++++++++++++-------
.../interface/vchiq_arm/vchiq_shim.c | 38 -----------------
.../vc04_services/vchiq-mmal/mmal-vchiq.c | 20 ++++-----
4 files changed, 37 insertions(+), 70 deletions(-)
diff --git a/drivers/staging/vc04_services/interface/vchi/vchi.h b/drivers/staging/vc04_services/interface/vchi/vchi.h
index d24e7027c08f..ca20b99122f2 100644
--- a/drivers/staging/vc04_services/interface/vchi/vchi.h
+++ b/drivers/staging/vc04_services/interface/vchi/vchi.h
@@ -58,13 +58,6 @@ extern int32_t vchi_held_msg_release(unsigned handle, struct vchiq_header *messa
* Global bulk API
*****************************************************************************/
-// Routine to prepare interface for a transfer from the other side
-extern int32_t vchi_bulk_queue_receive(unsigned handle,
- void *data_dst,
- uint32_t data_size,
- enum vchiq_bulk_mode mode,
- void *transfer_handle);
-
// 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,
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
index 4d98d4d3ee8a..084e98b4ca61 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
@@ -380,24 +380,36 @@ vchiq_bulk_transmit(unsigned int handle, const void *data,
}
EXPORT_SYMBOL(vchiq_bulk_transmit);
-enum vchiq_status
-vchiq_bulk_receive(unsigned int handle, void *data,
- unsigned int size, void *userdata, enum vchiq_bulk_mode mode)
+enum vchiq_status vchiq_bulk_receive(unsigned int handle, void *data,
+ unsigned int size, void *userdata,
+ enum vchiq_bulk_mode mode)
{
enum vchiq_status status;
- switch (mode) {
- case VCHIQ_BULK_MODE_NOCALLBACK:
- case VCHIQ_BULK_MODE_CALLBACK:
- status = vchiq_bulk_transfer(handle, data, size, userdata,
- mode, VCHIQ_BULK_RECEIVE);
- break;
- case VCHIQ_BULK_MODE_BLOCKING:
- status = vchiq_blocking_bulk_transfer(handle,
- (void *)data, size, VCHIQ_BULK_RECEIVE);
- break;
- default:
- return VCHIQ_ERROR;
+ while (1) {
+ switch (mode) {
+ case VCHIQ_BULK_MODE_NOCALLBACK:
+ case VCHIQ_BULK_MODE_CALLBACK:
+ status = vchiq_bulk_transfer(handle, data, size, userdata,
+ mode, VCHIQ_BULK_RECEIVE);
+ break;
+ case VCHIQ_BULK_MODE_BLOCKING:
+ status = vchiq_blocking_bulk_transfer(handle,
+ (void *)data, size, VCHIQ_BULK_RECEIVE);
+ break;
+ 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;
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
index 52654123463d..f69936a9eb29 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
@@ -31,44 +31,6 @@ int vchi_queue_kernel_message(unsigned handle, void *data, unsigned int size)
}
EXPORT_SYMBOL(vchi_queue_kernel_message);
-/***********************************************************
- * Name: vchi_bulk_queue_receive
- *
- * Arguments: VCHI_BULK_HANDLE_T handle,
- * void *data_dst,
- * const uint32_t data_size,
- * enum vchi_flags flags
- * void *bulk_handle
- *
- * Description: Routine to setup a rcv buffer
- *
- * Returns: int32_t - success == 0
- *
- ***********************************************************/
-int32_t vchi_bulk_queue_receive(unsigned handle, void *data_dst,
- uint32_t data_size, enum vchiq_bulk_mode mode,
- void *bulk_handle)
-{
- enum vchiq_status status;
-
- while (1) {
- status = vchiq_bulk_receive(handle, data_dst, data_size,
- bulk_handle, mode);
- /*
- * vchiq_bulk_receive() 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_receive);
-
/***********************************************************
* Name: vchi_bulk_queue_transmit
*
diff --git a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
index d35d2b50991b..b5d40074cdc7 100644
--- a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
+++ b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
@@ -277,7 +277,7 @@ static void buffer_work_cb(struct work_struct *work)
* VCHI will allow up to 4 bulk receives to be scheduled before blocking.
* If we block in the service_callback context then we can't process the
* VCHI_CALLBACK_BULK_RECEIVED message that would otherwise allow the blocked
- * vchi_bulk_queue_receive() call to complete.
+ * vchiq_bulk_receive() call to complete.
*/
static void buffer_to_host_work_cb(struct work_struct *work)
{
@@ -293,19 +293,19 @@ static void buffer_to_host_work_cb(struct work_struct *work)
len = 8;
/* queue the bulk submission */
vchi_service_use(instance->service_handle);
- ret = vchi_bulk_queue_receive(instance->service_handle,
- msg_context->u.bulk.buffer->buffer,
- /* Actual receive needs to be a multiple
- * of 4 bytes
- */
- (len + 3) & ~3,
- VCHIQ_BULK_MODE_CALLBACK,
- msg_context);
+ ret = vchiq_bulk_receive(instance->service_handle,
+ msg_context->u.bulk.buffer->buffer,
+ /* Actual receive needs to be a multiple
+ * of 4 bytes
+ */
+ (len + 3) & ~3,
+ msg_context,
+ VCHIQ_BULK_MODE_CALLBACK);
vchi_service_release(instance->service_handle);
if (ret != 0)
- pr_err("%s: ctx: %p, vchi_bulk_queue_receive failed %d\n",
+ pr_err("%s: ctx: %p, vchiq_bulk_receive failed %d\n",
__func__, msg_context, ret);
}
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 42/50] staging: vchiq: Move definitions only used by core into core header
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
linux-kernel
Cc: devel, kernel-list, laurent.pinchart, Nicolas Saenz Julienne,
gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
vchiq_if.h is used by service consumers and only the exported API should
be present. Move the rest of definitions, which were not exported by the
way, to vchiq_core.h where they belong.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
.../interface/vchiq_arm/vchiq_core.h | 22 +++++++++++++++++++
.../interface/vchiq_arm/vchiq_if.h | 16 --------------
2 files changed, 22 insertions(+), 16 deletions(-)
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h
index b97b661bea1c..ff91c04ba6b9 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h
@@ -486,6 +486,18 @@ struct bulk_waiter {
int actual;
};
+struct vchiq_config {
+ unsigned int max_msg_size;
+ unsigned int bulk_threshold; /* The message size above which it
+ is better to use a bulk transfer
+ (<= max_msg_size) */
+ unsigned int max_outstanding_bulks;
+ unsigned int max_services;
+ short version; /* The version of VCHIQ */
+ short version_min; /* The minimum compatible version of VCHIQ */
+};
+
+
extern spinlock_t bulk_waiter_spinlock;
extern int vchiq_core_log_level;
@@ -665,4 +677,14 @@ extern void
vchiq_log_dump_mem(const char *label, uint32_t addr, const void *voidMem,
size_t numBytes);
+extern enum vchiq_status vchiq_remove_service(unsigned int service);
+
+extern int vchiq_get_client_id(unsigned int service);
+
+extern void vchiq_get_config(struct vchiq_config *config);
+
+extern enum vchiq_status
+vchiq_set_service_option(unsigned int service, enum vchiq_service_option option,
+ int value);
+
#endif
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
index b852980447dc..931debcd6492 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
@@ -78,17 +78,6 @@ struct vchiq_service_params {
short version_min; /* Update for incompatible changes */
};
-struct vchiq_config {
- unsigned int max_msg_size;
- unsigned int bulk_threshold; /* The message size above which it
- is better to use a bulk transfer
- (<= max_msg_size) */
- unsigned int max_outstanding_bulks;
- unsigned int max_services;
- short version; /* The version of VCHIQ */
- short version_min; /* The minimum compatible version of VCHIQ */
-};
-
struct vchiq_instance;
extern enum vchiq_status vchiq_initialise(struct vchiq_instance **pinstance);
@@ -98,7 +87,6 @@ extern enum vchiq_status vchiq_open_service(struct vchiq_instance *instance,
const struct vchiq_service_params *params,
unsigned int *pservice);
extern enum vchiq_status vchiq_close_service(unsigned int service);
-extern enum vchiq_status vchiq_remove_service(unsigned int service);
extern enum vchiq_status vchiq_use_service(unsigned int service);
extern enum vchiq_status vchiq_release_service(unsigned int service);
extern enum vchiq_status vchiq_queue_kernel_message(unsigned int handle,
@@ -112,11 +100,7 @@ extern enum vchiq_status vchiq_bulk_transmit(unsigned int service,
extern enum vchiq_status vchiq_bulk_receive(unsigned int service,
void *data, unsigned int size, void *userdata,
enum vchiq_bulk_mode mode);
-extern int vchiq_get_client_id(unsigned int service);
extern void *vchiq_get_service_userdata(unsigned int service);
-extern void vchiq_get_config(struct vchiq_config *config);
-extern enum vchiq_status vchiq_set_service_option(unsigned int service,
- enum vchiq_service_option option, int value);
extern enum vchiq_status vchiq_get_peer_version(unsigned int handle,
short *peer_version);
extern void vchiq_msg_queue_push(unsigned handle, struct vchiq_header *header);
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 45/50] staging: vchi: Move vchi_queue_kernel_message() into vchiq
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
Florian Fainelli, Ray Jui, Scott Branden, Nicolas Saenz Julienne
Cc: devel, kernel-list, laurent.pinchart, linux-kernel, gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
We can't really merge it with vchiq_queue_message() as it has internal
users that will not benefit from the retry mechanism
vchiq_queue_kernel_message() uses. So, for the sake of getting rid of
vchi, move it into vchiq.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
.../bcm2835-audio/bcm2835-vchiq.c | 8 +++----
.../vc04_services/interface/vchi/vchi.h | 4 ----
.../interface/vchiq_arm/vchiq_core.c | 23 ++++++++++++++++---
.../interface/vchiq_arm/vchiq_if.h | 4 ++--
.../interface/vchiq_arm/vchiq_shim.c | 22 ------------------
.../vc04_services/vc-sm-cma/vc_sm_cma_vchi.c | 2 +-
.../vc04_services/vchiq-mmal/mmal-vchiq.c | 14 +++++------
7 files changed, 33 insertions(+), 44 deletions(-)
diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
index 28d64bc895cd..efaa2ae11f52 100644
--- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
+++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
@@ -44,8 +44,8 @@ static int bcm2835_audio_send_msg_locked(struct bcm2835_audio_instance *instance
init_completion(&instance->msg_avail_comp);
}
- status = vchi_queue_kernel_message(instance->service_handle,
- m, sizeof(*m));
+ status = vchiq_queue_kernel_message(instance->service_handle,
+ m, sizeof(*m));
if (status) {
dev_err(instance->dev,
"vchi message queue failed: %d, msg=%d\n",
@@ -350,8 +350,8 @@ int bcm2835_audio_write(struct bcm2835_alsa_stream *alsa_stream,
while (count > 0) {
int bytes = min(instance->max_packet, count);
- status = vchi_queue_kernel_message(instance->service_handle,
- src, bytes);
+ status = vchiq_queue_kernel_message(instance->service_handle,
+ src, bytes);
src += bytes;
count -= bytes;
}
diff --git a/drivers/staging/vc04_services/interface/vchi/vchi.h b/drivers/staging/vc04_services/interface/vchi/vchi.h
index c800796f9986..6de5df43cc29 100644
--- a/drivers/staging/vc04_services/interface/vchi/vchi.h
+++ b/drivers/staging/vc04_services/interface/vchi/vchi.h
@@ -37,10 +37,6 @@ extern int32_t vchi_service_use(unsigned handle);
// Routine to decrement ref count on a named service
extern int32_t vchi_service_release(unsigned handle);
-/* Routine to send a message from kernel memory across a service */
-extern int vchi_queue_kernel_message(unsigned handle, void *data,
- unsigned int size);
-
// Routine to look at a message in place.
// The message is dequeued, so the caller is left holding it; the descriptor is
// filled in and must be released when the user has finished with the message.
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
index 01a9331dbff4..ee11707b7476 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
@@ -3213,11 +3213,28 @@ vchiq_queue_message(unsigned int handle,
return status;
}
-enum vchiq_status vchiq_queue_kernel_message(unsigned int handle, void *context,
- size_t size)
+int vchiq_queue_kernel_message(unsigned handle, void *data, unsigned size)
{
- return vchiq_queue_message(handle, memcpy_copy_callback, context, size);
+ enum vchiq_status status;
+
+ while (1) {
+ status = vchiq_queue_message(handle, memcpy_copy_callback,
+ data, size);
+
+ /*
+ * vchiq_queue_message() 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(vchiq_queue_kernel_message);
void
vchiq_release_message(unsigned int handle,
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
index 931debcd6492..6374eda4ea0c 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
@@ -89,8 +89,8 @@ extern enum vchiq_status vchiq_open_service(struct vchiq_instance *instance,
extern enum vchiq_status vchiq_close_service(unsigned int service);
extern enum vchiq_status vchiq_use_service(unsigned int service);
extern enum vchiq_status vchiq_release_service(unsigned int service);
-extern enum vchiq_status vchiq_queue_kernel_message(unsigned int handle,
- void *context, size_t size);
+extern int vchiq_queue_kernel_message(unsigned handle, void *data,
+ unsigned size);
extern void vchiq_msg_queue_push(unsigned handle, struct vchiq_header *header);
extern void vchiq_release_message(unsigned int service,
struct vchiq_header *header);
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
index 33493643b5f8..57ac6a289a08 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
@@ -9,28 +9,6 @@
#include "../vchi/vchi.h"
#include "vchiq.h"
-int vchi_queue_kernel_message(unsigned handle, void *data, unsigned int size)
-{
- enum vchiq_status status;
-
- while (1) {
- status = vchiq_queue_kernel_message(handle, data, size);
-
- /*
- * vchiq_queue_message() 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_queue_kernel_message);
-
/***********************************************************
* Name: vchi_held_msg_release
*
diff --git a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
index 0b1a510d6bab..dc8c469b37d2 100644
--- a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
+++ b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
@@ -78,7 +78,7 @@ struct sm_instance {
static int
bcm2835_vchi_msg_queue(unsigned handle, void *data, unsigned int size)
{
- return vchi_queue_kernel_message(handle, data, size);
+ return vchiq_queue_kernel_message(handle, data, size);
}
static struct
diff --git a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
index b5d40074cdc7..664547c8e4a9 100644
--- a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
+++ b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
@@ -452,10 +452,9 @@ buffer_from_host(struct vchiq_mmal_instance *instance,
vchi_service_use(instance->service_handle);
- ret = vchi_queue_kernel_message(instance->service_handle,
- &m,
- sizeof(struct mmal_msg_header) +
- sizeof(m.u.buffer_from_host));
+ ret = vchiq_queue_kernel_message(instance->service_handle, &m,
+ sizeof(struct mmal_msg_header) +
+ sizeof(m.u.buffer_from_host));
vchi_service_release(instance->service_handle);
@@ -806,10 +805,9 @@ static int send_synchronous_mmal_msg(struct vchiq_mmal_instance *instance,
vchi_service_use(instance->service_handle);
- ret = vchi_queue_kernel_message(instance->service_handle,
- msg,
- sizeof(struct mmal_msg_header) +
- payload_len);
+ ret = vchiq_queue_kernel_message(instance->service_handle, msg,
+ sizeof(struct mmal_msg_header) +
+ payload_len);
vchi_service_release(instance->service_handle);
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 47/50] staging: vchiq: Move conditional barrier definition into vchiq_core.h
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
linux-kernel
Cc: devel, kernel-list, laurent.pinchart, Nicolas Saenz Julienne,
gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
The barrier is only used by core code. So keep the barrier definition in
the core header.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
.../vc04_services/interface/vchiq_arm/vchiq.h | 11 -----------
.../vc04_services/interface/vchiq_arm/vchiq_core.h | 12 ++++++++++++
2 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq.h
index 211b20705e36..57fe7d5e9a85 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq.h
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq.h
@@ -6,15 +6,4 @@
#include "vchiq_if.h"
-/* Do this so that we can test-build the code on non-rpi systems */
-#if IS_ENABLED(CONFIG_RASPBERRYPI_FIRMWARE)
-
-#else
-
-#ifndef dsb
-#define dsb(a)
-#endif
-
-#endif /* IS_ENABLED(CONFIG_RASPBERRYPI_FIRMWARE) */
-
#endif
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h
index ff91c04ba6b9..15e9867f78f4 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h
@@ -15,6 +15,18 @@
#include "vchiq.h"
+/* Do this so that we can test-build the code on non-rpi systems */
+#if IS_ENABLED(CONFIG_RASPBERRYPI_FIRMWARE)
+
+#else
+
+#ifndef dsb
+#define dsb(a)
+#endif
+
+#endif /* IS_ENABLED(CONFIG_RASPBERRYPI_FIRMWARE) */
+
+
/* Run time control of log level, based on KERN_XXX level. */
#define VCHIQ_LOG_DEFAULT 4
#define VCHIQ_LOG_ERROR 3
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 46/50] staging: vchiq: Get rid of vchi
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
Nicolas Saenz Julienne, Florian Fainelli, Ray Jui, Scott Branden
Cc: devel, kernel-list, laurent.pinchart, linux-kernel, gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
All the functions that vchi currently provides are a 1:1 mapping to its
vchiq counterparts. Get rid of vchi altogether and use vchiq's on all
services.
In the process also get rid of the vchi directory, as the only remaining
file was a TODO file, which now lives in the parent directory.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
drivers/staging/vc04_services/Makefile | 1 -
.../bcm2835-audio/bcm2835-vchiq.c | 24 +--
.../vc04_services/bcm2835-audio/bcm2835.h | 1 -
.../vc04_services/interface/{vchi => }/TODO | 0
.../vc04_services/interface/vchi/vchi.h | 59 ------
.../interface/vchiq_arm/vchiq_arm.c | 2 +
.../interface/vchiq_arm/vchiq_core.c | 3 +
.../interface/vchiq_arm/vchiq_shim.c | 179 ------------------
.../staging/vc04_services/vc-sm-cma/vc_sm.c | 4 +-
.../vc04_services/vc-sm-cma/vc_sm_cma_vchi.c | 17 +-
.../vc04_services/vc-sm-cma/vc_sm_cma_vchi.h | 2 -
.../vc04_services/vchiq-mmal/mmal-vchiq.c | 29 ++-
12 files changed, 42 insertions(+), 279 deletions(-)
rename drivers/staging/vc04_services/interface/{vchi => }/TODO (100%)
delete mode 100644 drivers/staging/vc04_services/interface/vchi/vchi.h
delete mode 100644 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
diff --git a/drivers/staging/vc04_services/Makefile b/drivers/staging/vc04_services/Makefile
index 6a426572793b..e32c0744e7fc 100644
--- a/drivers/staging/vc04_services/Makefile
+++ b/drivers/staging/vc04_services/Makefile
@@ -6,7 +6,6 @@ vchiq-objs := \
interface/vchiq_arm/vchiq_arm.o \
interface/vchiq_arm/vchiq_2835_arm.o \
interface/vchiq_arm/vchiq_debugfs.o \
- interface/vchiq_arm/vchiq_shim.o \
interface/vchiq_arm/vchiq_connected.o \
obj-$(CONFIG_SND_BCM2835) += bcm2835-audio/
diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
index efaa2ae11f52..8c9ddd86fbbd 100644
--- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
+++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
@@ -25,12 +25,12 @@ MODULE_PARM_DESC(force_bulk, "Force use of vchiq bulk for audio");
static void bcm2835_audio_lock(struct bcm2835_audio_instance *instance)
{
mutex_lock(&instance->vchi_mutex);
- vchi_service_use(instance->service_handle);
+ vchiq_use_service(instance->service_handle);
}
static void bcm2835_audio_unlock(struct bcm2835_audio_instance *instance)
{
- vchi_service_release(instance->service_handle);
+ vchiq_release_service(instance->service_handle);
mutex_unlock(&instance->vchi_mutex);
}
@@ -132,8 +132,8 @@ vc_vchi_audio_init(struct vchiq_instance *vchiq_instance,
int status;
/* Open the VCHI service connections */
- status = vchi_service_open(vchiq_instance, ¶ms,
- &instance->service_handle);
+ status = vchiq_open_service(vchiq_instance, ¶ms,
+ &instance->service_handle);
if (status) {
dev_err(instance->dev,
@@ -143,7 +143,7 @@ vc_vchi_audio_init(struct vchiq_instance *vchiq_instance,
}
/* Finished with the service for now */
- vchi_service_release(instance->service_handle);
+ vchiq_release_service(instance->service_handle);
return 0;
}
@@ -153,10 +153,10 @@ static void vc_vchi_audio_deinit(struct bcm2835_audio_instance *instance)
int status;
mutex_lock(&instance->vchi_mutex);
- vchi_service_use(instance->service_handle);
+ vchiq_use_service(instance->service_handle);
/* Close all VCHI service connections */
- status = vchi_service_close(instance->service_handle);
+ status = vchiq_close_service(instance->service_handle);
if (status) {
dev_err(instance->dev,
"failed to close VCHI service connection (status=%d)\n",
@@ -171,14 +171,14 @@ 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->instance);
+ ret = vchiq_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->instance);
+ ret = vchiq_connect(vchi_ctx->instance);
if (ret) {
dev_dbg(dev, "failed to connect VCHI instance (ret=%d)\n",
ret);
@@ -195,7 +195,7 @@ 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_ctx->instance */
- WARN_ON(vchi_disconnect(vchi_ctx->instance));
+ WARN_ON(vchiq_shutdown(vchi_ctx->instance));
vchi_ctx->instance = NULL;
}
@@ -226,8 +226,8 @@ int bcm2835_audio_open(struct bcm2835_alsa_stream *alsa_stream)
goto deinit;
bcm2835_audio_lock(instance);
- vchi_get_peer_version(instance->service_handle,
- &instance->peer_version);
+ vchiq_get_peer_version(instance->service_handle,
+ &instance->peer_version);
bcm2835_audio_unlock(instance);
if (instance->peer_version < 2 || force_bulk)
instance->max_packet = 0; /* bulk transfer */
diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835.h b/drivers/staging/vc04_services/bcm2835-audio/bcm2835.h
index 7a0e4ab50fc7..a15f251033ac 100644
--- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835.h
+++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835.h
@@ -10,7 +10,6 @@
#include <sound/pcm.h>
#include <sound/pcm-indirect.h>
#include "interface/vchiq_arm/vchiq_if.h"
-#include "interface/vchi/vchi.h"
#define MAX_SUBSTREAMS (8)
#define AVAIL_SUBSTREAMS_MASK (0xff)
diff --git a/drivers/staging/vc04_services/interface/vchi/TODO b/drivers/staging/vc04_services/interface/TODO
similarity index 100%
rename from drivers/staging/vc04_services/interface/vchi/TODO
rename to drivers/staging/vc04_services/interface/TODO
diff --git a/drivers/staging/vc04_services/interface/vchi/vchi.h b/drivers/staging/vc04_services/interface/vchi/vchi.h
deleted file mode 100644
index 6de5df43cc29..000000000000
--- a/drivers/staging/vc04_services/interface/vchi/vchi.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright (c) 2010-2012 Broadcom. All rights reserved. */
-
-#ifndef VCHI_H_
-#define VCHI_H_
-
-/******************************************************************************
- * Global funcs - implementation is specific to which side you are on
- * (local / remote)
- *****************************************************************************/
-
-// Routine used to initialise the vchi on both local + remote connections
-extern int32_t vchi_initialise(struct vchiq_instance **instance);
-
-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 vchiq_instance *instance);
-
-/******************************************************************************
- * Global service API
- *****************************************************************************/
-// Routine to open a named service
-extern int vchi_service_open(struct vchiq_instance *instance,
- struct vchiq_service_params *params,
- unsigned *handle);
-
-extern int32_t vchi_get_peer_version(unsigned handle, short *peer_version);
-
-// Routine to close a named service
-extern int32_t vchi_service_close(unsigned handle);
-
-// Routine to increment ref count on a named service
-extern int32_t vchi_service_use(unsigned handle);
-
-// Routine to decrement ref count on a named service
-extern int32_t vchi_service_release(unsigned handle);
-
-// Routine to look at a message in place.
-// The message is dequeued, so the caller is left holding it; the descriptor is
-// filled in and must be released when the user has finished with the message.
-struct vchiq_header *vchi_msg_hold(unsigned handle);
-
-/*******************************************************************************
- * Global service support API - operations on held messages
- * and message iterators
- ******************************************************************************/
-
-// Routine to release a held message after it has been processed
-extern int32_t vchi_held_msg_release(unsigned handle, struct vchiq_header *message);
-
-/******************************************************************************
- * Configuration plumbing
- *****************************************************************************/
-
-#endif /* VCHI_H_ */
-
-/****************************** End of file **********************************/
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
index 524128225766..f266d5a3a7a5 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
@@ -2576,6 +2576,7 @@ vchiq_use_service(unsigned int handle)
}
return ret;
}
+EXPORT_SYMBOL(vchiq_use_service);
enum vchiq_status
vchiq_release_service(unsigned int handle)
@@ -2589,6 +2590,7 @@ vchiq_release_service(unsigned int handle)
}
return ret;
}
+EXPORT_SYMBOL(vchiq_release_service);
struct service_data_struct {
int fourcc;
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
index ee11707b7476..a0525edc3093 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
@@ -2946,6 +2946,7 @@ vchiq_close_service(unsigned int handle)
return status;
}
+EXPORT_SYMBOL(vchiq_close_service);
enum vchiq_status
vchiq_remove_service(unsigned int handle)
@@ -3268,6 +3269,7 @@ vchiq_release_message(unsigned int handle,
unlock_service(service);
}
+EXPORT_SYMBOL(vchiq_release_message);
static void
release_message_sync(struct vchiq_state *state, struct vchiq_header *header)
@@ -3294,6 +3296,7 @@ vchiq_get_peer_version(unsigned int handle, short *peer_version)
unlock_service(service);
return status;
}
+EXPORT_SYMBOL(vchiq_get_peer_version);
void vchiq_get_config(struct vchiq_config *config)
{
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
deleted file mode 100644
index 57ac6a289a08..000000000000
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_shim.c
+++ /dev/null
@@ -1,179 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
-/* Copyright (c) 2010-2012 Broadcom. All rights reserved. */
-#include <linux/module.h>
-#include <linux/types.h>
-#include <linux/slab.h>
-#include <linux/delay.h>
-
-#include "vchiq_if.h"
-#include "../vchi/vchi.h"
-#include "vchiq.h"
-
-/***********************************************************
- * Name: vchi_held_msg_release
- *
- * Arguments: unsgined handle
- * struct vchiq_header *message
- *
- * Description: Routine to release a held message (after it has been read with
- * vchi_msg_hold)
- *
- * Returns: int - success == 0
- *
- ***********************************************************/
-int vchi_held_msg_release(unsigned handle, struct vchiq_header *message)
-{
- /*
- * Convert the service field pointer back to an
- * unsigned int which is an int.
- * This pointer is opaque to everything except
- * vchi_msg_hold which simply upcasted the int
- * to a pointer.
- */
-
- vchiq_release_message(handle, message);
-
- return 0;
-}
-EXPORT_SYMBOL(vchi_held_msg_release);
-
-/***********************************************************
- * Name: vchi_msg_hold
- *
- * Arguments: struct vchi_service *service,
- * void **data,
- * unsigned *msg_size,
- * struct vchiq_header **message
- *
- * Description: Routine to return a pointer to the current message (to allow
- * in place processing). The message is dequeued - don't forget
- * to release the message using vchi_held_msg_release when you're
- * finished.
- *
- * Returns: int - success == 0
- *
- ***********************************************************/
-struct vchiq_header *vchi_msg_hold(unsigned handle)
-{
- return vchiq_msg_hold(handle);
-}
-EXPORT_SYMBOL(vchi_msg_hold);
-
-/***********************************************************
- * Name: vchi_initialise
- *
- * 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
- * to malloc the state information
- *
- * Returns: 0 if successful, failure otherwise
- *
- ***********************************************************/
-
-int vchi_initialise(struct vchiq_instance **instance)
-{
- return vchiq_initialise(instance);
-}
-EXPORT_SYMBOL(vchi_initialise);
-
-/***********************************************************
- * Name: vchi_connect
- *
- * Arguments: struct vchiq_instance *instance
- *
- * Description: Starts the command service on each connection,
- * causing INIT messages to be pinged back and forth
- *
- * Returns: 0 if successful, failure otherwise
- *
- ***********************************************************/
-int vchi_connect(struct vchiq_instance *instance)
-{
- return vchiq_connect(instance);
-}
-EXPORT_SYMBOL(vchi_connect);
-
-/***********************************************************
- * Name: vchi_disconnect
- *
- * Arguments: struct vchiq_instance *instance
- *
- * Description: Stops the command service on each connection,
- * causing DE-INIT messages to be pinged back and forth
- *
- * Returns: 0 if successful, failure otherwise
- *
- ***********************************************************/
-int vchi_disconnect(struct vchiq_instance *instance)
-{
- return vchiq_shutdown(instance);
-}
-EXPORT_SYMBOL(vchi_disconnect);
-
-/***********************************************************
- * Name: vchi_service_open
- * Name: vchi_service_create
- *
- * Arguments: struct vchiq_instance *instance
- * struct service_creation *setup,
- * unsigned *handle
- *
- * Description: Routine to open a service
- *
- * Returns: int - success == 0
- *
- ***********************************************************/
-
-int vchi_service_open(struct vchiq_instance *instance,
- struct vchiq_service_params *params,
- unsigned *handle)
-{
- return vchiq_open_service(instance, params, handle);
-}
-EXPORT_SYMBOL(vchi_service_open);
-
-int vchi_service_close(unsigned handle)
-{
- return vchiq_close_service(handle);
-}
-EXPORT_SYMBOL(vchi_service_close);
-
-int vchi_get_peer_version(unsigned handle, short *peer_version)
-{
- return vchiq_get_peer_version(handle, peer_version);
-}
-EXPORT_SYMBOL(vchi_get_peer_version);
-
-/***********************************************************
- * Name: vchi_service_use
- *
- * Arguments: unsigned handle
- *
- * Description: Routine to increment refcount on a service
- *
- * Returns: void
- *
- ***********************************************************/
-int vchi_service_use(unsigned handle)
-{
- return vchiq_use_service(handle);
-}
-EXPORT_SYMBOL(vchi_service_use);
-
-/***********************************************************
- * Name: vchi_service_release
- *
- * Arguments: unsigned handle
- *
- * Description: Routine to decrement refcount on a service
- *
- * Returns: void
- *
- ***********************************************************/
-int vchi_service_release(unsigned handle)
-{
- return vchiq_release_service(handle);
-}
-EXPORT_SYMBOL(vchi_service_release);
diff --git a/drivers/staging/vc04_services/vc-sm-cma/vc_sm.c b/drivers/staging/vc04_services/vc-sm-cma/vc_sm.c
index fcef607e9446..572068538a4c 100644
--- a/drivers/staging/vc04_services/vc-sm-cma/vc_sm.c
+++ b/drivers/staging/vc04_services/vc-sm-cma/vc_sm.c
@@ -1516,7 +1516,7 @@ static void vc_sm_connected_init(void)
* Initialize and create a VCHI connection for the shared memory service
* running on videocore.
*/
- ret = vchi_initialise(&instance);
+ ret = vchiq_initialise(&instance);
if (ret) {
pr_err("[%s]: failed to initialise VCHI instance (ret=%d)\n",
__func__, ret);
@@ -1524,7 +1524,7 @@ static void vc_sm_connected_init(void)
return;
}
- ret = vchi_connect(instance);
+ ret = vchiq_connect(instance);
if (ret) {
pr_err("[%s]: failed to connect VCHI instance (ret=%d)\n",
__func__, ret);
diff --git a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
index dc8c469b37d2..1ff165c05706 100644
--- a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
+++ b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
@@ -183,13 +183,13 @@ static int vc_sm_cma_vchi_videocore_io(void *arg)
while (1) {
if (svc_use)
- vchi_service_release(instance->service_handle);
+ vchiq_release_service(instance->service_handle);
svc_use = 0;
if (wait_for_completion_interruptible(&instance->io_cmplt))
continue;
- vchi_service_use(instance->service_handle);
+ vchiq_use_service(instance->service_handle);
svc_use = 1;
do {
@@ -234,7 +234,7 @@ static int vc_sm_cma_vchi_videocore_io(void *arg)
} while (1);
while (1) {
- message = vchi_msg_hold(instance->service_handle);
+ message = vchiq_msg_hold(instance->service_handle);
if (!message)
break;
reply = (struct vc_sm_result_t *)message->data;
@@ -250,7 +250,7 @@ static int vc_sm_cma_vchi_videocore_io(void *arg)
reply_len);
}
- vchi_held_msg_release(instance->service_handle, message);
+ vchiq_release_message(instance->service_handle, message);
}
/* Go through the dead list and free them */
@@ -323,7 +323,8 @@ struct sm_instance *vc_sm_cma_vchi_init(struct vchiq_instance *vchiq_instance,
params.userdata = instance;
/* Open the VCHI service connections */
- status = vchi_service_open(vchiq_instance, ¶ms, &instance->service_handle);
+ status = vchiq_open_service(vchiq_instance, ¶ms,
+ &instance->service_handle);
if (status) {
pr_err("%s: failed to open VCHI service (%d)",
__func__, status);
@@ -347,7 +348,7 @@ struct sm_instance *vc_sm_cma_vchi_init(struct vchiq_instance *vchiq_instance,
return instance;
err_close_services:
- vchi_service_close(instance->service_handle);
+ vchiq_close_service(instance->service_handle);
kfree(instance);
pr_debug("%s: FAILED", __func__);
return NULL;
@@ -369,8 +370,8 @@ int vc_sm_cma_vchi_stop(struct sm_instance **handle)
instance = *handle;
- vchi_service_use(instance->service_handle);
- vchi_service_close(instance->service_handle);
+ vchiq_use_service(instance->service_handle);
+ vchiq_close_service(instance->service_handle);
kfree(instance);
diff --git a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.h b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.h
index 09ef0fc59566..ba86610b8d3f 100644
--- a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.h
+++ b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.h
@@ -13,8 +13,6 @@
#ifndef __VC_SM_CMA_VCHI_H__INCLUDED__
#define __VC_SM_CMA_VCHI_H__INCLUDED__
-#include "interface/vchi/vchi.h"
-
#include "vc_sm_defs.h"
/*
diff --git a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
index 664547c8e4a9..c5f59d71badf 100644
--- a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
+++ b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
@@ -33,7 +33,6 @@
#include "vc-sm-cma/vc_sm_knl.h"
#include "interface/vchiq_arm/vchiq_if.h"
-#include "interface/vchi/vchi.h"
/*
* maximum number of components supported.
@@ -292,7 +291,7 @@ static void buffer_to_host_work_cb(struct work_struct *work)
/* Dummy receive to ensure the buffers remain in order */
len = 8;
/* queue the bulk submission */
- vchi_service_use(instance->service_handle);
+ vchiq_use_service(instance->service_handle);
ret = vchiq_bulk_receive(instance->service_handle,
msg_context->u.bulk.buffer->buffer,
/* Actual receive needs to be a multiple
@@ -302,7 +301,7 @@ static void buffer_to_host_work_cb(struct work_struct *work)
msg_context,
VCHIQ_BULK_MODE_CALLBACK);
- vchi_service_release(instance->service_handle);
+ vchiq_release_service(instance->service_handle);
if (ret != 0)
pr_err("%s: ctx: %p, vchiq_bulk_receive failed %d\n",
@@ -450,13 +449,13 @@ buffer_from_host(struct vchiq_mmal_instance *instance,
/* no payload in message */
m.u.buffer_from_host.payload_in_message = 0;
- vchi_service_use(instance->service_handle);
+ vchiq_use_service(instance->service_handle);
ret = vchiq_queue_kernel_message(instance->service_handle, &m,
sizeof(struct mmal_msg_header) +
sizeof(m.u.buffer_from_host));
- vchi_service_release(instance->service_handle);
+ vchiq_release_service(instance->service_handle);
return ret;
}
@@ -803,13 +802,13 @@ static int send_synchronous_mmal_msg(struct vchiq_mmal_instance *instance,
DBG_DUMP_MSG(msg, (sizeof(struct mmal_msg_header) + payload_len),
">>> sync message");
- vchi_service_use(instance->service_handle);
+ vchiq_use_service(instance->service_handle);
ret = vchiq_queue_kernel_message(instance->service_handle, msg,
sizeof(struct mmal_msg_header) +
payload_len);
- vchi_service_release(instance->service_handle);
+ vchiq_release_service(instance->service_handle);
if (ret) {
pr_err("error %d queuing message\n", ret);
@@ -2066,9 +2065,9 @@ int vchiq_mmal_finalise(struct vchiq_mmal_instance *instance)
if (mutex_lock_interruptible(&instance->vchiq_mutex))
return -EINTR;
- vchi_service_use(instance->service_handle);
+ vchiq_use_service(instance->service_handle);
- status = vchi_service_close(instance->service_handle);
+ status = vchiq_close_service(instance->service_handle);
if (status != 0)
pr_err("mmal-vchiq: VCHIQ close failed\n");
@@ -2114,14 +2113,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(&vchiq_instance);
+ status = vchiq_initialise(&vchiq_instance);
if (status) {
pr_err("Failed to initialise VCHI instance (status=%d)\n",
status);
return -EIO;
}
- status = vchi_connect(vchiq_instance);
+ status = vchiq_connect(vchiq_instance);
if (status) {
pr_err("Failed to connect VCHI instance (status=%d)\n", status);
return -EIO;
@@ -2146,22 +2145,22 @@ int vchiq_mmal_init(struct vchiq_mmal_instance **out_instance)
if (!instance->bulk_wq)
goto err_free;
- status = vchi_service_open(vchiq_instance, ¶ms,
- &instance->service_handle);
+ status = vchiq_open_service(vchiq_instance, ¶ms,
+ &instance->service_handle);
if (status) {
pr_err("Failed to open VCHI service connection (status=%d)\n",
status);
goto err_close_services;
}
- vchi_service_release(instance->service_handle);
+ vchiq_release_service(instance->service_handle);
*out_instance = instance;
return 0;
err_close_services:
- vchi_service_close(instance->service_handle);
+ vchiq_close_service(instance->service_handle);
destroy_workqueue(instance->bulk_wq);
err_free:
vfree(instance->bulk_scratch);
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 48/50] staging: vchiq: Use vchiq.h as the main header file for services
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
Florian Fainelli, Ray Jui, Scott Branden, Nicolas Saenz Julienne
Cc: devel, kernel-list, laurent.pinchart, linux-kernel, gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
This used to be vchiq_if.h but vchiq.h is more concise for an include
file that will hopefully be in the future in the includes directory.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
.../vc04_services/bcm2835-audio/bcm2835.h | 2 +-
.../vc04_services/interface/vchiq_arm/vchiq.h | 107 ++++++++++++++++-
.../interface/vchiq_arm/vchiq_if.h | 109 ------------------
.../interface/vchiq_arm/vchiq_ioctl.h | 2 +-
.../staging/vc04_services/vc-sm-cma/vc_sm.c | 2 +-
.../vc04_services/vc-sm-cma/vc_sm_cma_vchi.c | 2 +-
.../vc04_services/vchiq-mmal/mmal-vchiq.c | 2 +-
7 files changed, 108 insertions(+), 118 deletions(-)
delete mode 100644 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835.h b/drivers/staging/vc04_services/bcm2835-audio/bcm2835.h
index a15f251033ac..ca220f5230ec 100644
--- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835.h
+++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835.h
@@ -9,7 +9,7 @@
#include <sound/core.h>
#include <sound/pcm.h>
#include <sound/pcm-indirect.h>
-#include "interface/vchiq_arm/vchiq_if.h"
+#include "interface/vchiq_arm/vchiq.h"
#define MAX_SUBSTREAMS (8)
#define AVAIL_SUBSTREAMS_MASK (0xff)
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq.h
index 57fe7d5e9a85..04b7ff41a025 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq.h
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq.h
@@ -1,9 +1,108 @@
/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
/* Copyright (c) 2010-2012 Broadcom. All rights reserved. */
-#ifndef VCHIQ_VCHIQ_H
-#define VCHIQ_VCHIQ_H
+#ifndef VCHIQ_H
+#define VCHIQ_H
-#include "vchiq_if.h"
+#define VCHIQ_SERVICE_HANDLE_INVALID 0
-#endif
+#define VCHIQ_SLOT_SIZE 4096
+#define VCHIQ_MAX_MSG_SIZE (VCHIQ_SLOT_SIZE - sizeof(struct vchiq_header))
+
+#define VCHIQ_MAKE_FOURCC(x0, x1, x2, x3) \
+ (((x0) << 24) | ((x1) << 16) | ((x2) << 8) | (x3))
+
+enum vchiq_reason {
+ VCHIQ_SERVICE_OPENED, /* service, -, - */
+ VCHIQ_SERVICE_CLOSED, /* service, -, - */
+ VCHIQ_MESSAGE_AVAILABLE, /* service, header, - */
+ VCHIQ_BULK_TRANSMIT_DONE, /* service, -, bulk_userdata */
+ VCHIQ_BULK_RECEIVE_DONE, /* service, -, bulk_userdata */
+ VCHIQ_BULK_TRANSMIT_ABORTED, /* service, -, bulk_userdata */
+ VCHIQ_BULK_RECEIVE_ABORTED /* service, -, bulk_userdata */
+};
+
+enum vchiq_status {
+ VCHIQ_ERROR = -1,
+ VCHIQ_SUCCESS = 0,
+ VCHIQ_RETRY = 1
+};
+
+enum vchiq_bulk_mode {
+ VCHIQ_BULK_MODE_CALLBACK,
+ VCHIQ_BULK_MODE_BLOCKING,
+ VCHIQ_BULK_MODE_NOCALLBACK,
+ VCHIQ_BULK_MODE_WAITING /* Reserved for internal use */
+};
+
+enum vchiq_service_option {
+ VCHIQ_SERVICE_OPTION_AUTOCLOSE,
+ VCHIQ_SERVICE_OPTION_SLOT_QUOTA,
+ VCHIQ_SERVICE_OPTION_MESSAGE_QUOTA,
+ VCHIQ_SERVICE_OPTION_SYNCHRONOUS,
+ VCHIQ_SERVICE_OPTION_TRACE
+};
+
+struct vchiq_header {
+ /* The message identifier - opaque to applications. */
+ int msgid;
+
+ /* Size of message data. */
+ unsigned int size;
+
+ char data[0]; /* message */
+};
+
+struct vchiq_element {
+ const void __user *data;
+ unsigned int size;
+};
+
+struct vchiq_service_base {
+ int fourcc;
+ enum vchiq_status (*callback)(enum vchiq_reason reason,
+ struct vchiq_header *header,
+ unsigned int handle,
+ void *bulk_userdata);
+ void *userdata;
+};
+
+struct vchiq_service_params {
+ int fourcc;
+ enum vchiq_status (*callback)(enum vchiq_reason reason,
+ struct vchiq_header *header,
+ unsigned int handle,
+ void *bulk_userdata);
+ void *userdata;
+ short version; /* Increment for non-trivial changes */
+ short version_min; /* Update for incompatible changes */
+};
+
+struct vchiq_instance;
+
+extern enum vchiq_status vchiq_initialise(struct vchiq_instance **pinstance);
+extern enum vchiq_status vchiq_shutdown(struct vchiq_instance *instance);
+extern enum vchiq_status vchiq_connect(struct vchiq_instance *instance);
+extern enum vchiq_status vchiq_open_service(struct vchiq_instance *instance,
+ const struct vchiq_service_params *params,
+ unsigned int *pservice);
+extern enum vchiq_status vchiq_close_service(unsigned int service);
+extern enum vchiq_status vchiq_use_service(unsigned int service);
+extern enum vchiq_status vchiq_release_service(unsigned int service);
+extern void vchiq_msg_queue_push(unsigned handle, struct vchiq_header *header);
+extern void vchiq_release_message(unsigned int service,
+ struct vchiq_header *header);
+extern int vchiq_queue_kernel_message(unsigned handle, void *data,
+ unsigned size);
+extern enum vchiq_status vchiq_bulk_transmit(unsigned int service,
+ const void *data, unsigned int size, void *userdata,
+ enum vchiq_bulk_mode mode);
+extern enum vchiq_status vchiq_bulk_receive(unsigned int service,
+ void *data, unsigned int size, void *userdata,
+ enum vchiq_bulk_mode mode);
+extern void *vchiq_get_service_userdata(unsigned int service);
+extern enum vchiq_status vchiq_get_peer_version(unsigned int handle,
+ short *peer_version);
+extern struct vchiq_header *vchiq_msg_hold(unsigned handle);
+
+#endif /* VCHIQ_H */
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
deleted file mode 100644
index 6374eda4ea0c..000000000000
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_if.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright (c) 2010-2012 Broadcom. All rights reserved. */
-
-#ifndef VCHIQ_IF_H
-#define VCHIQ_IF_H
-
-#define VCHIQ_SERVICE_HANDLE_INVALID 0
-
-#define VCHIQ_SLOT_SIZE 4096
-#define VCHIQ_MAX_MSG_SIZE (VCHIQ_SLOT_SIZE - sizeof(struct vchiq_header))
-
-#define VCHIQ_MAKE_FOURCC(x0, x1, x2, x3) \
- (((x0) << 24) | ((x1) << 16) | ((x2) << 8) | (x3))
-
-enum vchiq_reason {
- VCHIQ_SERVICE_OPENED, /* service, -, - */
- VCHIQ_SERVICE_CLOSED, /* service, -, - */
- VCHIQ_MESSAGE_AVAILABLE, /* service, header, - */
- VCHIQ_BULK_TRANSMIT_DONE, /* service, -, bulk_userdata */
- VCHIQ_BULK_RECEIVE_DONE, /* service, -, bulk_userdata */
- VCHIQ_BULK_TRANSMIT_ABORTED, /* service, -, bulk_userdata */
- VCHIQ_BULK_RECEIVE_ABORTED /* service, -, bulk_userdata */
-};
-
-enum vchiq_status {
- VCHIQ_ERROR = -1,
- VCHIQ_SUCCESS = 0,
- VCHIQ_RETRY = 1
-};
-
-enum vchiq_bulk_mode {
- VCHIQ_BULK_MODE_CALLBACK,
- VCHIQ_BULK_MODE_BLOCKING,
- VCHIQ_BULK_MODE_NOCALLBACK,
- VCHIQ_BULK_MODE_WAITING /* Reserved for internal use */
-};
-
-enum vchiq_service_option {
- VCHIQ_SERVICE_OPTION_AUTOCLOSE,
- VCHIQ_SERVICE_OPTION_SLOT_QUOTA,
- VCHIQ_SERVICE_OPTION_MESSAGE_QUOTA,
- VCHIQ_SERVICE_OPTION_SYNCHRONOUS,
- VCHIQ_SERVICE_OPTION_TRACE
-};
-
-struct vchiq_header {
- /* The message identifier - opaque to applications. */
- int msgid;
-
- /* Size of message data. */
- unsigned int size;
-
- char data[0]; /* message */
-};
-
-struct vchiq_element {
- const void __user *data;
- unsigned int size;
-};
-
-struct vchiq_service_base {
- int fourcc;
- enum vchiq_status (*callback)(enum vchiq_reason reason,
- struct vchiq_header *header,
- unsigned int handle,
- void *bulk_userdata);
- void *userdata;
-};
-
-struct vchiq_service_params {
- int fourcc;
- enum vchiq_status (*callback)(enum vchiq_reason reason,
- struct vchiq_header *header,
- unsigned int handle,
- void *bulk_userdata);
- void *userdata;
- short version; /* Increment for non-trivial changes */
- short version_min; /* Update for incompatible changes */
-};
-
-struct vchiq_instance;
-
-extern enum vchiq_status vchiq_initialise(struct vchiq_instance **pinstance);
-extern enum vchiq_status vchiq_shutdown(struct vchiq_instance *instance);
-extern enum vchiq_status vchiq_connect(struct vchiq_instance *instance);
-extern enum vchiq_status vchiq_open_service(struct vchiq_instance *instance,
- const struct vchiq_service_params *params,
- unsigned int *pservice);
-extern enum vchiq_status vchiq_close_service(unsigned int service);
-extern enum vchiq_status vchiq_use_service(unsigned int service);
-extern enum vchiq_status vchiq_release_service(unsigned int service);
-extern int vchiq_queue_kernel_message(unsigned handle, void *data,
- unsigned size);
-extern void vchiq_msg_queue_push(unsigned handle, struct vchiq_header *header);
-extern void vchiq_release_message(unsigned int service,
- struct vchiq_header *header);
-extern enum vchiq_status vchiq_bulk_transmit(unsigned int service,
- const void *data, unsigned int size, void *userdata,
- enum vchiq_bulk_mode mode);
-extern enum vchiq_status vchiq_bulk_receive(unsigned int service,
- void *data, unsigned int size, void *userdata,
- enum vchiq_bulk_mode mode);
-extern void *vchiq_get_service_userdata(unsigned int service);
-extern enum vchiq_status vchiq_get_peer_version(unsigned int handle,
- short *peer_version);
-extern void vchiq_msg_queue_push(unsigned handle, struct vchiq_header *header);
-extern struct vchiq_header *vchiq_msg_hold(unsigned handle);
-
-#endif /* VCHIQ_IF_H */
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_ioctl.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_ioctl.h
index 202889b3774f..f285d754ad28 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_ioctl.h
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_ioctl.h
@@ -5,7 +5,7 @@
#define VCHIQ_IOCTLS_H
#include <linux/ioctl.h>
-#include "vchiq_if.h"
+#include "vchiq.h"
#define VCHIQ_IOC_MAGIC 0xc4
#define VCHIQ_INVALID_HANDLE (~0)
diff --git a/drivers/staging/vc04_services/vc-sm-cma/vc_sm.c b/drivers/staging/vc04_services/vc-sm-cma/vc_sm.c
index 572068538a4c..e4f7bdeef66d 100644
--- a/drivers/staging/vc04_services/vc-sm-cma/vc_sm.c
+++ b/drivers/staging/vc04_services/vc-sm-cma/vc_sm.c
@@ -48,7 +48,7 @@
#include <linux/types.h>
#include <asm/cacheflush.h>
-#include "vchiq_if.h"
+#include "vchiq.h"
#include "vchiq_connected.h"
#include "vc_sm_cma_vchi.h"
diff --git a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
index 1ff165c05706..2c65416cd331 100644
--- a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
+++ b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
@@ -19,7 +19,7 @@
#include <linux/slab.h>
#include <linux/types.h>
-#include "interface/vchiq_arm/vchiq_if.h"
+#include "vchiq.h"
#include "vc_sm_cma_vchi.h"
#define VC_SM_VER 1
diff --git a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
index c5f59d71badf..2101b79780eb 100644
--- a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
+++ b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
@@ -32,7 +32,7 @@
#include "vc-sm-cma/vc_sm_knl.h"
-#include "interface/vchiq_arm/vchiq_if.h"
+#include "interface/vchiq_arm/vchiq.h"
/*
* maximum number of components supported.
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 49/50] staging: vchiq: Move defines into core header
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
linux-kernel
Cc: devel, kernel-list, laurent.pinchart, Nicolas Saenz Julienne,
gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
Those are only used in the core vchiq code, while present in vchiq's
'public' API header. Move them into the right place.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
drivers/staging/vc04_services/interface/vchiq_arm/vchiq.h | 5 -----
.../staging/vc04_services/interface/vchiq_arm/vchiq_core.h | 4 ++++
2 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq.h
index 04b7ff41a025..cb9ef9a4150b 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq.h
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq.h
@@ -4,11 +4,6 @@
#ifndef VCHIQ_H
#define VCHIQ_H
-#define VCHIQ_SERVICE_HANDLE_INVALID 0
-
-#define VCHIQ_SLOT_SIZE 4096
-#define VCHIQ_MAX_MSG_SIZE (VCHIQ_SLOT_SIZE - sizeof(struct vchiq_header))
-
#define VCHIQ_MAKE_FOURCC(x0, x1, x2, x3) \
(((x0) << 24) | ((x1) << 16) | ((x2) << 8) | (x3))
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h
index 15e9867f78f4..8a27f3d7217e 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h
@@ -26,6 +26,10 @@
#endif /* IS_ENABLED(CONFIG_RASPBERRYPI_FIRMWARE) */
+#define VCHIQ_SERVICE_HANDLE_INVALID 0
+
+#define VCHIQ_SLOT_SIZE 4096
+#define VCHIQ_MAX_MSG_SIZE (VCHIQ_SLOT_SIZE - sizeof(struct vchiq_header))
/* Run time control of log level, based on KERN_XXX level. */
#define VCHIQ_LOG_DEFAULT 4
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [RFC 50/50] staging: vchiq: Move vchiq.h into include directory
From: Nicolas Saenz Julienne @ 2020-05-27 11:53 UTC (permalink / raw)
To: bcm-kernel-feedback-list, linux-rpi-kernel, linux-arm-kernel,
Nicolas Saenz Julienne, Florian Fainelli, Ray Jui, Scott Branden
Cc: devel, kernel-list, laurent.pinchart, linux-kernel, gregkh
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
To make the separation clear between vchiq's header files and vchiq.h,
which is to be used by services and is the 'public' API, move it into a
dedicated includes directory.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
drivers/staging/vc04_services/Makefile | 2 +-
drivers/staging/vc04_services/bcm2835-audio/Makefile | 2 +-
drivers/staging/vc04_services/bcm2835-audio/bcm2835.h | 2 +-
.../{interface/vchiq_arm => include/linux/raspberrypi}/vchiq.h | 0
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h | 2 +-
.../staging/vc04_services/interface/vchiq_arm/vchiq_ioctl.h | 2 +-
drivers/staging/vc04_services/vc-sm-cma/Makefile | 1 -
drivers/staging/vc04_services/vc-sm-cma/vc_sm.c | 2 +-
drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c | 2 +-
drivers/staging/vc04_services/vchiq-mmal/Makefile | 1 +
drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c | 3 +--
11 files changed, 9 insertions(+), 10 deletions(-)
rename drivers/staging/vc04_services/{interface/vchiq_arm => include/linux/raspberrypi}/vchiq.h (100%)
diff --git a/drivers/staging/vc04_services/Makefile b/drivers/staging/vc04_services/Makefile
index e32c0744e7fc..e1de39303ffe 100644
--- a/drivers/staging/vc04_services/Makefile
+++ b/drivers/staging/vc04_services/Makefile
@@ -14,5 +14,5 @@ obj-$(CONFIG_VIDEO_ISP_BCM2835) += bcm2835-isp/
obj-$(CONFIG_BCM_VC_SM_CMA) += vc-sm-cma/
obj-$(CONFIG_BCM2835_VCHIQ_MMAL) += vchiq-mmal/
-ccflags-y += -D__VCCOREVER__=0x04000000
+ccflags-y += -I $(srctree)/$(src)/include -D__VCCOREVER__=0x04000000
diff --git a/drivers/staging/vc04_services/bcm2835-audio/Makefile b/drivers/staging/vc04_services/bcm2835-audio/Makefile
index 13fa6d7d9745..d59fe4dde615 100644
--- a/drivers/staging/vc04_services/bcm2835-audio/Makefile
+++ b/drivers/staging/vc04_services/bcm2835-audio/Makefile
@@ -2,4 +2,4 @@
obj-$(CONFIG_SND_BCM2835) += snd-bcm2835.o
snd-bcm2835-objs := bcm2835.o bcm2835-ctl.o bcm2835-pcm.o bcm2835-vchiq.o
-ccflags-y += -I $(srctree)/$(src)/.. -D__VCCOREVER__=0x04000000
+ccflags-y += -I $(srctree)/$(src)/../include -D__VCCOREVER__=0x04000000
diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835.h b/drivers/staging/vc04_services/bcm2835-audio/bcm2835.h
index ca220f5230ec..1b36475872d6 100644
--- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835.h
+++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835.h
@@ -6,10 +6,10 @@
#include <linux/device.h>
#include <linux/wait.h>
+#include <linux/raspberrypi/vchiq.h>
#include <sound/core.h>
#include <sound/pcm.h>
#include <sound/pcm-indirect.h>
-#include "interface/vchiq_arm/vchiq.h"
#define MAX_SUBSTREAMS (8)
#define AVAIL_SUBSTREAMS_MASK (0xff)
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq.h b/drivers/staging/vc04_services/include/linux/raspberrypi/vchiq.h
similarity index 100%
rename from drivers/staging/vc04_services/interface/vchiq_arm/vchiq.h
rename to drivers/staging/vc04_services/include/linux/raspberrypi/vchiq.h
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h
index 8a27f3d7217e..e67692879249 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h
@@ -10,10 +10,10 @@
#include <linux/kref.h>
#include <linux/rcupdate.h>
#include <linux/wait.h>
+#include <linux/raspberrypi/vchiq.h>
#include "vchiq_cfg.h"
-#include "vchiq.h"
/* Do this so that we can test-build the code on non-rpi systems */
#if IS_ENABLED(CONFIG_RASPBERRYPI_FIRMWARE)
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_ioctl.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_ioctl.h
index f285d754ad28..3653fd99d8a1 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_ioctl.h
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_ioctl.h
@@ -5,7 +5,7 @@
#define VCHIQ_IOCTLS_H
#include <linux/ioctl.h>
-#include "vchiq.h"
+#include <linux/raspberrypi/vchiq.h>
#define VCHIQ_IOC_MAGIC 0xc4
#define VCHIQ_INVALID_HANDLE (~0)
diff --git a/drivers/staging/vc04_services/vc-sm-cma/Makefile b/drivers/staging/vc04_services/vc-sm-cma/Makefile
index 77d173694fbf..c92a5775c62e 100644
--- a/drivers/staging/vc04_services/vc-sm-cma/Makefile
+++ b/drivers/staging/vc04_services/vc-sm-cma/Makefile
@@ -1,6 +1,5 @@
ccflags-y += \
-I$(srctree)/$(src)/../ \
- -I$(srctree)/$(src)/../interface/vchi \
-I$(srctree)/$(src)/../interface/vchiq_arm\
-I$(srctree)/$(src)/../include
diff --git a/drivers/staging/vc04_services/vc-sm-cma/vc_sm.c b/drivers/staging/vc04_services/vc-sm-cma/vc_sm.c
index e4f7bdeef66d..cc69ce932317 100644
--- a/drivers/staging/vc04_services/vc-sm-cma/vc_sm.c
+++ b/drivers/staging/vc04_services/vc-sm-cma/vc_sm.c
@@ -46,9 +46,9 @@
#include <linux/seq_file.h>
#include <linux/syscalls.h>
#include <linux/types.h>
+#include <linux/raspberrypi/vchiq.h>
#include <asm/cacheflush.h>
-#include "vchiq.h"
#include "vchiq_connected.h"
#include "vc_sm_cma_vchi.h"
diff --git a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
index 2c65416cd331..8d8eda1a8142 100644
--- a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
+++ b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
@@ -18,8 +18,8 @@
#include <linux/semaphore.h>
#include <linux/slab.h>
#include <linux/types.h>
+#include <linux/raspberrypi/vchiq.h>
-#include "vchiq.h"
#include "vc_sm_cma_vchi.h"
#define VC_SM_VER 1
diff --git a/drivers/staging/vc04_services/vchiq-mmal/Makefile b/drivers/staging/vc04_services/vchiq-mmal/Makefile
index f8164c33aec3..b2a830f48acc 100644
--- a/drivers/staging/vc04_services/vchiq-mmal/Makefile
+++ b/drivers/staging/vc04_services/vchiq-mmal/Makefile
@@ -5,4 +5,5 @@ obj-$(CONFIG_BCM2835_VCHIQ_MMAL) += bcm2835-mmal-vchiq.o
ccflags-y += \
-I$(srctree)/$(src)/.. \
+ -I$(srctree)/$(src)/../include \
-D__VCCOREVER__=0x04000000
diff --git a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
index 2101b79780eb..e057e21961d5 100644
--- a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
+++ b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
@@ -23,6 +23,7 @@
#include <linux/slab.h>
#include <linux/completion.h>
#include <linux/vmalloc.h>
+#include <linux/raspberrypi/vchiq.h>
#include <media/videobuf2-vmalloc.h>
#include "mmal-common.h"
@@ -32,8 +33,6 @@
#include "vc-sm-cma/vc_sm_knl.h"
-#include "interface/vchiq_arm/vchiq.h"
-
/*
* maximum number of components supported.
* This matches the maximum permitted by default on the VPU
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox