summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/sparc/shared/can/canmux.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/sparc/shared/can/canmux.c')
-rw-r--r--c/src/lib/libbsp/sparc/shared/can/canmux.c197
1 files changed, 0 insertions, 197 deletions
diff --git a/c/src/lib/libbsp/sparc/shared/can/canmux.c b/c/src/lib/libbsp/sparc/shared/can/canmux.c
deleted file mode 100644
index 1d9d371157..0000000000
--- a/c/src/lib/libbsp/sparc/shared/can/canmux.c
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * CAN_MUX driver. Present in GR712RC.
- *
- * COPYRIGHT (c) 2008.
- * Cobham Gaisler AB.
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <rtems/libio.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <bsp.h>
-#include <rtems/bspIo.h> /* printk */
-
-#include <bsp/canmux.h>
-#include <ambapp.h>
-
-#ifndef GAISLER_CANMUX
-#define GAISLER_CANMUX 0x081
-#endif
-
-#if !defined(CANMUX_DEVNAME)
- #undef CANMUX_DEVNAME
- #define CANMUX_DEVNAME "/dev/canmux"
-#endif
-
-/* Enable debug output? */
-/* #define DEBUG */
-
-#ifdef DEBUG
-#define DBG(x...) printk(x)
-#else
-#define DBG(x...)
-#endif
-
-#define BUSA_SELECT (1 << 0)
-#define BUSB_SELECT (1 << 1)
-
-struct canmux_priv {
- volatile unsigned int *muxreg;
- rtems_id devsem;
- int open;
-};
-
-static struct canmux_priv *priv;
-
-static rtems_device_driver canmux_ioctl(rtems_device_major_number major, rtems_device_minor_number minor, void *arg);
-static rtems_device_driver canmux_write(rtems_device_major_number major, rtems_device_minor_number minor, void *arg);
-static rtems_device_driver canmux_read(rtems_device_major_number major, rtems_device_minor_number minor, void *arg);
-static rtems_device_driver canmux_close(rtems_device_major_number major, rtems_device_minor_number minor, void *arg);
-static rtems_device_driver canmux_open(rtems_device_major_number major, rtems_device_minor_number minor, void *arg);
-static rtems_device_driver canmux_initialize(rtems_device_major_number major, rtems_device_minor_number unused, void *arg);
-
-
-static rtems_device_driver canmux_ioctl(rtems_device_major_number major, rtems_device_minor_number minor, void *arg)
-{
- rtems_libio_ioctl_args_t *ioarg = (rtems_libio_ioctl_args_t*)arg;
-
- DBG("CAN_MUX: IOCTL %d\n\r", ioarg->command);
-
- ioarg->ioctl_return = 0;
- switch(ioarg->command) {
- case CANMUX_IOC_BUSA_SATCAN: *priv->muxreg &= ~BUSA_SELECT; break;
- case CANMUX_IOC_BUSA_OCCAN1: *priv->muxreg |= BUSA_SELECT; break;
- case CANMUX_IOC_BUSB_SATCAN: *priv->muxreg &= ~BUSB_SELECT; break;
- case CANMUX_IOC_BUSB_OCCAN2: *priv->muxreg |= BUSB_SELECT; break;
- default: return RTEMS_NOT_DEFINED;
- }
-
- return RTEMS_SUCCESSFUL;
-}
-
-static rtems_device_driver canmux_write(rtems_device_major_number major, rtems_device_minor_number minor, void *arg)
-{
- rtems_libio_rw_args_t *rw_args=(rtems_libio_rw_args_t*)arg;
-
- rw_args->bytes_moved = 0;
-
- return RTEMS_SUCCESSFUL;
-}
-
-static rtems_device_driver canmux_read(rtems_device_major_number major, rtems_device_minor_number minor, void *arg)
-{
- rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t*)arg;
-
- rw_args->bytes_moved = 0;
-
- return RTEMS_SUCCESSFUL;
-}
-
-
-static rtems_device_driver canmux_close(rtems_device_major_number major, rtems_device_minor_number minor, void *arg)
-{
- DBG("CAN_MUX: Closing %d\n\r",minor);
-
- priv->open = 0;
- return RTEMS_SUCCESSFUL;
-}
-
-
-static rtems_device_driver canmux_open(rtems_device_major_number major, rtems_device_minor_number minor, void *arg)
-{
- DBG("CAN_MUX: Opening %d\n\r",minor);
-
- rtems_semaphore_obtain(priv->devsem,RTEMS_WAIT, RTEMS_NO_TIMEOUT);
- if (priv->open) {
- rtems_semaphore_release(priv->devsem);
- return RTEMS_RESOURCE_IN_USE; /* EBUSY */
- }
- priv->open = 1;
- rtems_semaphore_release(priv->devsem);
-
- DBG("CAN_MUX: Opening %d success\n\r",minor);
-
- return RTEMS_SUCCESSFUL;
-}
-
-static rtems_device_driver canmux_initialize(rtems_device_major_number major, rtems_device_minor_number minor, void *arg)
-{
- struct ambapp_apb_info d;
- char fs_name[20];
- rtems_status_code status;
-
- DBG("CAN_MUX: Initialize..\n\r");
-
- strcpy(fs_name, CANMUX_DEVNAME);
-
- /* Find core and initialize register pointer */
- if (!ambapp_find_apbslv(&ambapp_plb, VENDOR_GAISLER, GAISLER_CANMUX, &d)) {
- printk("CAN_MUX: Failed to find CAN_MUX core\n\r");
- return -1;
- }
-
- status = rtems_io_register_name(fs_name, major, minor);
- if (RTEMS_SUCCESSFUL != status)
- rtems_fatal_error_occurred(status);
-
- /* Create private structure */
- if ((priv = malloc(sizeof(struct canmux_priv))) == NULL) {
- printk("CAN_MUX driver could not allocate memory for priv structure\n\r");
- return -1;
- }
-
- priv->muxreg = (unsigned int*)d.start;
-
- status = rtems_semaphore_create(
- rtems_build_name('M', 'd', 'v', '0'),
- 1,
- RTEMS_FIFO | RTEMS_SIMPLE_BINARY_SEMAPHORE | RTEMS_NO_INHERIT_PRIORITY | \
- RTEMS_NO_PRIORITY_CEILING,
- 0,
- &priv->devsem);
- if (status != RTEMS_SUCCESSFUL) {
- printk("CAN_MUX: Failed to create dev semaphore (%d)\n\r", status);
- free(priv);
- return RTEMS_UNSATISFIED;
- }
-
- priv->open = 0;
-
- return RTEMS_SUCCESSFUL;
-}
-
-
-#define CANMUX_DRIVER_TABLE_ENTRY { canmux_initialize, canmux_open, canmux_close, canmux_read, canmux_write, canmux_ioctl }
-
-static rtems_driver_address_table canmux_driver = CANMUX_DRIVER_TABLE_ENTRY;
-
-int canmux_register(void)
-{
- rtems_status_code r;
- rtems_device_major_number m;
-
- DBG("CAN_MUX: canmux_register called\n\r");
-
- if ((r = rtems_io_register_driver(0, &canmux_driver, &m)) == RTEMS_SUCCESSFUL) {
- DBG("CAN_MUX driver successfully registered, major: %d\n\r", m);
- } else {
- switch(r) {
- case RTEMS_TOO_MANY:
- printk("CAN_MUX rtems_io_register_driver failed: RTEMS_TOO_MANY\n\r"); break;
- case RTEMS_INVALID_NUMBER:
- printk("CAN_MUX rtems_io_register_driver failed: RTEMS_INVALID_NUMBER\n\r"); break;
- case RTEMS_RESOURCE_IN_USE:
- printk("CAN_MUX rtems_io_register_driver failed: RTEMS_RESOURCE_IN_USE\n\r"); break;
- default:
- printk("CAN_MUX rtems_io_register_driver failed\n\r");
- }
- return 1;
- }
-
- return 0;
-}