summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/lm32
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-04-23 13:31:18 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-04-23 15:18:46 +0200
commit2197852371ea390092fcc6b5314a2e669a67e1a2 (patch)
tree6fa02d8a36808c40eb8357c6a0a50b50374ecabe /c/src/lib/libbsp/lm32
parentbsps: Move ATA drivers to bsps (diff)
downloadrtems-2197852371ea390092fcc6b5314a2e669a67e1a2.tar.bz2
bsps/lm32: Move shared drivers to bsps
This patch is a part of the BSP source reorganization. Update #3285.
Diffstat (limited to 'c/src/lib/libbsp/lm32')
-rw-r--r--c/src/lib/libbsp/lm32/milkymist/Makefile.am36
-rw-r--r--c/src/lib/libbsp/lm32/shared/milkymist_ac97/ac97.c436
-rw-r--r--c/src/lib/libbsp/lm32/shared/milkymist_buttons/buttons.c130
-rw-r--r--c/src/lib/libbsp/lm32/shared/milkymist_clock/ckinit.c52
-rw-r--r--c/src/lib/libbsp/lm32/shared/milkymist_clock/clock.h22
-rw-r--r--c/src/lib/libbsp/lm32/shared/milkymist_console/console.c216
-rw-r--r--c/src/lib/libbsp/lm32/shared/milkymist_console/uart.c46
-rw-r--r--c/src/lib/libbsp/lm32/shared/milkymist_console/uart.h22
-rw-r--r--c/src/lib/libbsp/lm32/shared/milkymist_dmx/dmx.c128
-rw-r--r--c/src/lib/libbsp/lm32/shared/milkymist_flash/flash.c193
-rw-r--r--c/src/lib/libbsp/lm32/shared/milkymist_framebuffer/framebuffer.c251
-rw-r--r--c/src/lib/libbsp/lm32/shared/milkymist_gpio/gpio.c119
-rw-r--r--c/src/lib/libbsp/lm32/shared/milkymist_ir/ir.c104
-rw-r--r--c/src/lib/libbsp/lm32/shared/milkymist_memcard/memcard.c370
-rw-r--r--c/src/lib/libbsp/lm32/shared/milkymist_midi/midi.c122
-rw-r--r--c/src/lib/libbsp/lm32/shared/milkymist_pfpu/pfpu.c143
-rw-r--r--c/src/lib/libbsp/lm32/shared/milkymist_timer/timer.c78
-rw-r--r--c/src/lib/libbsp/lm32/shared/milkymist_tmu/tmu.c161
-rw-r--r--c/src/lib/libbsp/lm32/shared/milkymist_usbinput/comloc.h32
-rw-r--r--c/src/lib/libbsp/lm32/shared/milkymist_usbinput/usbinput.c179
-rw-r--r--c/src/lib/libbsp/lm32/shared/milkymist_versions/versions.c132
-rw-r--r--c/src/lib/libbsp/lm32/shared/milkymist_video/video.c391
22 files changed, 18 insertions, 3345 deletions
diff --git a/c/src/lib/libbsp/lm32/milkymist/Makefile.am b/c/src/lib/libbsp/lm32/milkymist/Makefile.am
index b779f973f6..3c3b16ec3b 100644
--- a/c/src/lib/libbsp/lm32/milkymist/Makefile.am
+++ b/c/src/lib/libbsp/lm32/milkymist/Makefile.am
@@ -31,56 +31,56 @@ librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/lm32/shared/irq/irq.c
# clock
-librtemsbsp_a_SOURCES += ../shared/milkymist_clock/ckinit.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/lm32/shared/milkymist_clock/ckinit.c
# console
-librtemsbsp_a_SOURCES += ../shared/milkymist_console/console.c
-librtemsbsp_a_SOURCES += ../shared/milkymist_console/uart.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/lm32/shared/milkymist_console/console.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/lm32/shared/milkymist_console/uart.c
# timer
-librtemsbsp_a_SOURCES += ../shared/milkymist_timer/timer.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/lm32/shared/milkymist_timer/timer.c
# framebuffer
-librtemsbsp_a_SOURCES += ../shared/milkymist_framebuffer/framebuffer.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/lm32/shared/milkymist_framebuffer/framebuffer.c
# GPIO
-librtemsbsp_a_SOURCES += ../shared/milkymist_gpio/gpio.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/lm32/shared/milkymist_gpio/gpio.c
# buttons
-librtemsbsp_a_SOURCES += ../shared/milkymist_buttons/buttons.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/lm32/shared/milkymist_buttons/buttons.c
# ac97
-librtemsbsp_a_SOURCES += ../shared/milkymist_ac97/ac97.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/lm32/shared/milkymist_ac97/ac97.c
# usbinput
-librtemsbsp_a_SOURCES += ../shared/milkymist_usbinput/usbinput.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/lm32/shared/milkymist_usbinput/usbinput.c
# PFPU
-librtemsbsp_a_SOURCES += ../shared/milkymist_pfpu/pfpu.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/lm32/shared/milkymist_pfpu/pfpu.c
# TMU
-librtemsbsp_a_SOURCES += ../shared/milkymist_tmu/tmu.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/lm32/shared/milkymist_tmu/tmu.c
# memory card
-librtemsbsp_a_SOURCES += ../shared/milkymist_memcard/memcard.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/lm32/shared/milkymist_memcard/memcard.c
# flash
-librtemsbsp_a_SOURCES += ../shared/milkymist_flash/flash.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/lm32/shared/milkymist_flash/flash.c
# DMX
-librtemsbsp_a_SOURCES += ../shared/milkymist_dmx/dmx.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/lm32/shared/milkymist_dmx/dmx.c
# MIDI
-librtemsbsp_a_SOURCES += ../shared/milkymist_midi/midi.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/lm32/shared/milkymist_midi/midi.c
# IR
-librtemsbsp_a_SOURCES += ../shared/milkymist_ir/ir.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/lm32/shared/milkymist_ir/ir.c
# video input
-librtemsbsp_a_SOURCES += ../shared/milkymist_video/video.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/lm32/shared/milkymist_video/video.c
# versions
-librtemsbsp_a_SOURCES += ../shared/milkymist_versions/versions.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/lm32/shared/milkymist_versions/versions.c
# Cache
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/cache/nocache.c
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_ac97/ac97.c b/c/src/lib/libbsp/lm32/shared/milkymist_ac97/ac97.c
deleted file mode 100644
index d06f4ced0a..0000000000
--- a/c/src/lib/libbsp/lm32/shared/milkymist_ac97/ac97.c
+++ /dev/null
@@ -1,436 +0,0 @@
-/* ac97.c
- *
- * Sound driver for Milkymist SoC
- *
- * 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.
- *
- * COPYRIGHT (c) 2010, 2011 Sebastien Bourdeauducq
- */
-
-#define RTEMS_STATUS_CHECKS_USE_PRINTK
-
-#include <rtems.h>
-#include <bsp.h>
-#include <bsp/irq-generic.h>
-#include <rtems/libio.h>
-#include <rtems/status-checks.h>
-#include "../include/system_conf.h"
-#include <bsp/milkymist_ac97.h>
-
-#define SND_DEVICE_NAME "/dev/snd"
-#define MIXER_DEVICE_NAME "/dev/mixer"
-
-static rtems_id cr_write_sem;
-static rtems_id cr_read_sem;
-
-static rtems_isr crrequest_handler(rtems_vector_number n)
-{
- rtems_semaphore_release(cr_write_sem);
- lm32_interrupt_ack(1 << MM_IRQ_AC97CRREQUEST);
-}
-
-static rtems_isr crreply_handler(rtems_vector_number n)
-{
- rtems_semaphore_release(cr_read_sem);
- lm32_interrupt_ack(1 << MM_IRQ_AC97CRREPLY);
-}
-
-/* queued playback buffers */
-#define PLAY_Q_SIZE 8
-#define PLAY_Q_MASK (PLAY_Q_SIZE-1)
-
-static struct snd_buffer *play_q[PLAY_Q_SIZE];
-static int play_produce;
-static int play_consume;
-static int play_level;
-
-/* buffers played, for application to collect */
-static rtems_id play_q_done;
-
-static void play_start(struct snd_buffer *buf)
-{
- if (buf->nsamples > (AC97_MAX_DMASIZE/4))
- buf->nsamples = AC97_MAX_DMASIZE/4;
-
- MM_WRITE(MM_AC97_DADDRESS, (unsigned int)buf->samples);
- MM_WRITE(MM_AC97_DREMAINING, buf->nsamples*4);
- MM_WRITE(MM_AC97_DCTL, AC97_SCTL_EN);
-}
-
-static rtems_isr pcmplay_handler(rtems_vector_number n)
-{
- lm32_interrupt_ack(1 << MM_IRQ_AC97DMAR);
-
- rtems_message_queue_send(play_q_done, &play_q[play_consume],
- sizeof(void *));
-
- play_consume = (play_consume + 1) & PLAY_Q_MASK;
- play_level--;
-
- if(play_level > 0)
- play_start(play_q[play_consume]);
- else
- MM_WRITE(MM_AC97_DCTL, 0);
-}
-
-/* queued record buffers */
-#define RECORD_Q_SIZE 8
-#define RECORD_Q_MASK (RECORD_Q_SIZE-1)
-
-static struct snd_buffer *record_q[RECORD_Q_SIZE];
-static int record_produce;
-static int record_consume;
-static int record_level;
-
-/* buffers recorded, for application to collect */
-static rtems_id record_q_done;
-
-static void record_start(struct snd_buffer *buf)
-{
- if (buf->nsamples > (AC97_MAX_DMASIZE/4))
- buf->nsamples = AC97_MAX_DMASIZE/4;
-
- MM_WRITE(MM_AC97_UADDRESS, (unsigned int)buf->samples);
- MM_WRITE(MM_AC97_UREMAINING, buf->nsamples*4);
- MM_WRITE(MM_AC97_UCTL, AC97_SCTL_EN);
-}
-
-static rtems_isr pcmrecord_handler(rtems_vector_number n)
-{
- lm32_interrupt_ack(1 << MM_IRQ_AC97DMAW);
-
- __asm__ volatile( /* Invalidate Level-1 data cache */
- "wcsr DCC, r0\n"
- "nop\n"
- );
-
- rtems_message_queue_send(record_q_done, &record_q[record_consume],
- sizeof(void *));
-
- record_consume = (record_consume + 1) & RECORD_Q_MASK;
- record_level--;
-
- if(record_level > 0)
- record_start(record_q[record_consume]);
- else
- MM_WRITE(MM_AC97_UCTL, 0);
-}
-
-rtems_device_driver ac97_initialize(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_status_code sc;
- rtems_isr_entry dummy;
-
- sc = rtems_io_register_name(SND_DEVICE_NAME, major, 0);
- RTEMS_CHECK_SC(sc, "create snd device");
-
- sc = rtems_io_register_name(MIXER_DEVICE_NAME, major, 1);
- RTEMS_CHECK_SC(sc, "create mixer device");
-
- sc = rtems_semaphore_create(
- rtems_build_name('C', 'R', 'W', 'S'),
- 0,
- RTEMS_SIMPLE_BINARY_SEMAPHORE,
- 0,
- &cr_write_sem
- );
- RTEMS_CHECK_SC(sc, "create AC97 register write semaphore");
-
- sc = rtems_semaphore_create(
- rtems_build_name('C', 'R', 'R', 'S'),
- 0,
- RTEMS_SIMPLE_BINARY_SEMAPHORE,
- 0,
- &cr_read_sem
- );
- RTEMS_CHECK_SC(sc, "create AC97 register read semaphore");
-
- sc = rtems_message_queue_create(
- rtems_build_name('P', 'L', 'Y', 'Q'),
- PLAY_Q_SIZE*2,
- sizeof(void *),
- 0,
- &play_q_done
- );
- RTEMS_CHECK_SC(sc, "create playback done queue");
-
- sc = rtems_message_queue_create(
- rtems_build_name('R', 'E', 'C', 'Q'),
- RECORD_Q_SIZE*2,
- sizeof(void *),
- 0,
- &record_q_done
- );
- RTEMS_CHECK_SC(sc, "create record done queue");
-
- rtems_interrupt_catch(crrequest_handler, MM_IRQ_AC97CRREQUEST, &dummy);
- rtems_interrupt_catch(crreply_handler, MM_IRQ_AC97CRREPLY, &dummy);
- rtems_interrupt_catch(pcmplay_handler, MM_IRQ_AC97DMAR, &dummy);
- rtems_interrupt_catch(pcmrecord_handler, MM_IRQ_AC97DMAW, &dummy);
- bsp_interrupt_vector_enable(MM_IRQ_AC97CRREQUEST);
- bsp_interrupt_vector_enable(MM_IRQ_AC97CRREPLY);
- bsp_interrupt_vector_enable(MM_IRQ_AC97DMAR);
- bsp_interrupt_vector_enable(MM_IRQ_AC97DMAW);
-
- play_produce = 0;
- play_consume = 0;
- play_level = 0;
-
- record_produce = 0;
- record_consume = 0;
- record_level = 0;
-
- return RTEMS_SUCCESSFUL;
-}
-
-static rtems_status_code submit_play(struct snd_buffer *buf)
-{
- bsp_interrupt_vector_disable(MM_IRQ_AC97DMAR);
- if (play_level == PLAY_Q_SIZE) {
- bsp_interrupt_vector_enable(MM_IRQ_AC97DMAR);
- return RTEMS_UNSATISFIED;
- }
- play_q[play_produce] = buf;
- play_produce = (play_produce + 1) & PLAY_Q_MASK;
- play_level++;
-
- if (play_level == 1)
- play_start(buf);
-
- bsp_interrupt_vector_enable(MM_IRQ_AC97DMAR);
- return RTEMS_SUCCESSFUL;
-}
-
-static rtems_status_code collect_play(struct snd_buffer **buf)
-{
- size_t s;
-
- return rtems_message_queue_receive(
- play_q_done,
- buf,
- &s,
- RTEMS_WAIT,
- RTEMS_NO_TIMEOUT
- );
-}
-
-static rtems_status_code submit_record(struct snd_buffer *buf)
-{
- bsp_interrupt_vector_disable(MM_IRQ_AC97DMAW);
- if (record_level == RECORD_Q_SIZE) {
- bsp_interrupt_vector_enable(MM_IRQ_AC97DMAW);
- return RTEMS_UNSATISFIED;
- }
- record_q[record_produce] = buf;
- record_produce = (record_produce + 1) & RECORD_Q_MASK;
- record_level++;
-
- if (record_level == 1)
- record_start(buf);
-
- bsp_interrupt_vector_enable(MM_IRQ_AC97DMAW);
- return RTEMS_SUCCESSFUL;
-}
-
-static rtems_status_code collect_record(struct snd_buffer **buf)
-{
- size_t s;
-
- return rtems_message_queue_receive(
- record_q_done,
- buf,
- &s,
- RTEMS_WAIT,
- RTEMS_NO_TIMEOUT
- );
-}
-
-#define CR_TIMEOUT 10
-
-static int read_cr(unsigned int adr)
-{
- rtems_status_code sc;
-
- MM_WRITE(MM_AC97_CRADDR, adr);
- MM_WRITE(MM_AC97_CRCTL, AC97_CRCTL_RQEN);
- sc = rtems_semaphore_obtain(cr_write_sem, RTEMS_WAIT, CR_TIMEOUT);
- if (sc != RTEMS_SUCCESSFUL)
- return -1;
- sc = rtems_semaphore_obtain(cr_read_sem, RTEMS_WAIT, CR_TIMEOUT);
- if (sc != RTEMS_SUCCESSFUL)
- return -1;
- return MM_READ(MM_AC97_CRDATAIN);
-}
-
-static int write_cr(unsigned int adr, unsigned int val)
-{
- rtems_status_code sc;
-
- MM_WRITE(MM_AC97_CRADDR, adr);
- MM_WRITE(MM_AC97_CRDATAOUT, val);
- MM_WRITE(MM_AC97_CRCTL, AC97_CRCTL_RQEN|AC97_CRCTL_WRITE);
- sc = rtems_semaphore_obtain(cr_write_sem, RTEMS_WAIT, CR_TIMEOUT);
- if (sc != RTEMS_SUCCESSFUL)
- return 0;
- return 1;
-}
-
-rtems_device_driver ac97_open(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- int codec_id;
-
- if (minor == 0) {
- /* snd */
- return RTEMS_SUCCESSFUL;
- } else {
- /* mixer */
- codec_id = read_cr(0x00);
- if ((codec_id != 0x0d50) && (codec_id != 0x6150)) {
- printk("AC97 codec detection failed\n");
- return RTEMS_UNSATISFIED;
- }
- write_cr(0x02, 0x0000); /* master volume */
- write_cr(0x04, 0x0f0f); /* headphones volume */
- write_cr(0x18, 0x0000); /* PCM out volume */
- write_cr(0x1c, 0x0f0f); /* record gain */
-
- write_cr(0x1a, 0x0505); /* record select: stereo mix */
-
- return RTEMS_SUCCESSFUL;
- }
-}
-
-static rtems_status_code ioctl_read_channel(void *buf,
- unsigned int chan, int mono)
-{
- unsigned int *val = (unsigned int *)buf;
- int mic_boost;
- int codec;
- int left, right;
-
- codec = read_cr(chan);
- if (codec < 0)
- return RTEMS_UNSATISFIED;
- if (codec & 0x8000) {
- /* muted */
- *val = 0;
- return RTEMS_SUCCESSFUL;
- }
- if (mono) {
- left = 100-(((codec & 0x1f) + 1)*100)/32;
- mic_boost = (codec & (1 << 6)) >> 6;
- *val = left | mic_boost << 8;
- } else {
- right = 100-(((codec & 0x1f) + 1)*100)/32;
- left = 100-((((codec & 0x1f00) >> 8) + 1)*100)/32;
- *val = left | (right << 8);
- }
- return RTEMS_SUCCESSFUL;
-}
-
-static rtems_status_code ioctl_write_channel(void *buf,
- unsigned int chan, int mono)
-{
- unsigned int *val = (unsigned int *)buf;
- int mic_boost;
- int left, right;
- int codec;
- rtems_status_code sc;
-
- left = *val & 0xff;
- left = (left*32)/100 - 1;
- if (left < 0)
- left = 0;
-
- if (mono) {
- mic_boost = *val >> 8;
- right = 31;
- } else {
- right = (*val >> 8) & 0xff;
- right = (right*32)/100 - 1;
- if (right < 0)
- right = 0;
- }
-
- if ((left == 0) && (right == 0))
- /* mute */
- codec = 0x8000;
- else
- codec = (31-left) | ((31-right) << 8);
-
- if (mono) {
- if (mic_boost)
- codec |= (1 << 6);
- else
- codec &= ~(1 << 6);
- }
-
- if (!write_cr(chan, codec))
- sc = RTEMS_UNSATISFIED;
- else
- sc = RTEMS_SUCCESSFUL;
- return sc;
-}
-
-rtems_device_driver ac97_control(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_libio_ioctl_args_t *args = arg;
- rtems_status_code sc;
-
- args->ioctl_return = -1;
- if(minor == 0) {
- /* dsp */
- switch (args->command) {
- case SOUND_SND_SUBMIT_PLAY:
- return submit_play((struct snd_buffer *)args->buffer);
- case SOUND_SND_COLLECT_PLAY:
- return collect_play((struct snd_buffer **)args->buffer);
- case SOUND_SND_SUBMIT_RECORD:
- return submit_record((struct snd_buffer *)args->buffer);
- case SOUND_SND_COLLECT_RECORD:
- return collect_record((struct snd_buffer **)args->buffer);
- default:
- return RTEMS_UNSATISFIED;
- }
- } else {
- /* mixer */
- switch (args->command) {
- case SOUND_MIXER_READ(SOUND_MIXER_MIC):
- sc = ioctl_read_channel(args->buffer, 0x0e, 1);
- if(sc == RTEMS_SUCCESSFUL)
- args->ioctl_return = 0;
- return sc;
- case SOUND_MIXER_READ(SOUND_MIXER_LINE):
- sc = ioctl_read_channel(args->buffer, 0x10, 0);
- if(sc == RTEMS_SUCCESSFUL)
- args->ioctl_return = 0;
- return sc;
- case SOUND_MIXER_WRITE(SOUND_MIXER_MIC):
- sc = ioctl_write_channel(args->buffer, 0x0e, 1);
- if(sc == RTEMS_SUCCESSFUL)
- args->ioctl_return = 0;
- return sc;
- case SOUND_MIXER_WRITE(SOUND_MIXER_LINE):
- sc = ioctl_write_channel(args->buffer, 0x10, 0);
- if(sc == RTEMS_SUCCESSFUL)
- args->ioctl_return = 0;
- return sc;
- default:
- return RTEMS_UNSATISFIED;
- }
- }
-}
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_buttons/buttons.c b/c/src/lib/libbsp/lm32/shared/milkymist_buttons/buttons.c
deleted file mode 100644
index 6e5673b838..0000000000
--- a/c/src/lib/libbsp/lm32/shared/milkymist_buttons/buttons.c
+++ /dev/null
@@ -1,130 +0,0 @@
-/* buttons.c
- *
- * Buttons driver for the Milkymist One board
- *
- * 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.
- *
- * COPYRIGHT (c) 2011 Sebastien Bourdeauducq
- */
-
-#define RTEMS_STATUS_CHECKS_USE_PRINTK
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <rtems.h>
-#include <rtems/status-checks.h>
-#include <bsp.h>
-#include <bsp/irq-generic.h>
-#include <rtems/libio.h>
-#include "../include/system_conf.h"
-#include <bsp/milkymist_buttons.h>
-
-#define DEVICE_NAME "/dev/buttons"
-
-static rtems_id event_q;
-
-static void send_byte(char b)
-{
- rtems_message_queue_send(event_q, &b, 1);
-}
-
-static rtems_isr interrupt_handler(rtems_vector_number n)
-{
- static unsigned int previous_keys;
- unsigned int keys, pushed_keys, released_keys;
-
- keys = MM_READ(MM_GPIO_IN) & (GPIO_BTN1|GPIO_BTN2|GPIO_BTN3);
- pushed_keys = keys & ~previous_keys;
- released_keys = previous_keys & ~keys;
- previous_keys = keys;
-
- if(pushed_keys & GPIO_BTN1)
- send_byte('A');
- if(pushed_keys & GPIO_BTN2)
- send_byte('B');
- if(pushed_keys & GPIO_BTN3)
- send_byte('C');
-
- if(released_keys & GPIO_BTN1)
- send_byte('a');
- if(released_keys & GPIO_BTN2)
- send_byte('b');
- if(released_keys & GPIO_BTN3)
- send_byte('c');
-
- lm32_interrupt_ack(1 << MM_IRQ_GPIO);
-}
-
-rtems_device_driver buttons_initialize(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_status_code sc;
- rtems_isr_entry dummy;
-
- sc = rtems_io_register_name(DEVICE_NAME, major, 0);
- RTEMS_CHECK_SC(sc, "create buttons device");
-
- sc = rtems_message_queue_create(
- rtems_build_name('B', 'T', 'N', 'Q'),
- 24,
- 1,
- 0,
- &event_q
- );
- RTEMS_CHECK_SC(sc, "create buttons event queue");
-
- rtems_interrupt_catch(interrupt_handler, MM_IRQ_GPIO, &dummy);
- bsp_interrupt_vector_enable(MM_IRQ_GPIO);
- MM_WRITE(MM_GPIO_INTEN, GPIO_BTN1|GPIO_BTN2|GPIO_BTN3);
-
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver buttons_open(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- uint32_t count;
-
- rtems_message_queue_flush(event_q, &count);
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver buttons_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;
- rtems_status_code sc;
-
- if(rw_args->count < 1) {
- rw_args->bytes_moved = 0;
- return RTEMS_UNSATISFIED;
- }
-
- sc = rtems_message_queue_receive(
- event_q,
- rw_args->buffer,
- (size_t *)&rw_args->bytes_moved,
- RTEMS_WAIT,
- RTEMS_NO_TIMEOUT
- );
-
- if(sc == RTEMS_SUCCESSFUL)
- return RTEMS_SUCCESSFUL;
- else {
- rw_args->bytes_moved = 0;
- return RTEMS_UNSATISFIED;
- }
-}
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_clock/ckinit.c b/c/src/lib/libbsp/lm32/shared/milkymist_clock/ckinit.c
deleted file mode 100644
index c138309982..0000000000
--- a/c/src/lib/libbsp/lm32/shared/milkymist_clock/ckinit.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Clock device driver for Lattice Mico32 (lm32).
- */
-
-/*
- * 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.
- *
- * COPYRIGHT (c) Yann Sionneau <yann.sionneau@telecom-sudparis.eu> (GSoC 2010)
- * Telecom SudParis
- */
-
-#include <bsp.h>
-#include <bsp/irq-generic.h>
-#include "../include/system_conf.h"
-#include "clock.h"
-#include "bspopts.h"
-
-#if ON_SIMULATOR
-#define CLOCK_DRIVER_USE_FAST_IDLE 1
-#endif
-
-#define Clock_driver_support_at_tick() \
- do { \
- lm32_interrupt_ack(1 << MM_IRQ_TIMER0); \
- } while (0)
-
-#define Clock_driver_support_install_isr(_new ) \
- do { \
- rtems_isr_entry _old; \
- rtems_interrupt_catch(_new, MM_IRQ_TIMER0, &_old); \
- } while (0)
-
-static void Clock_driver_support_initialize_hardware(void)
-{
- MM_WRITE(MM_TIMER0_COMPARE,
- (MM_READ(MM_FREQUENCY)/(1000000/rtems_configuration_get_microseconds_per_tick())));
- MM_WRITE(MM_TIMER0_COUNTER, 0);
- MM_WRITE(MM_TIMER0_CONTROL, TIMER_ENABLE | TIMER_AUTORESTART);
- bsp_interrupt_vector_enable(MM_IRQ_TIMER0);
-}
-
-#define Clock_driver_support_shutdown_hardware() \
- do { \
- bsp_interrupt_vector_disable(MM_IRQ_TIMER0); \
- MM_WRITE(MM_TIMER0_CONTROL, 0); \
- } while (0)
-
-#define CLOCK_DRIVER_USE_DUMMY_TIMECOUNTER
-
-#include "../../../shared/dev/clock/clockimpl.h"
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_clock/clock.h b/c/src/lib/libbsp/lm32/shared/milkymist_clock/clock.h
deleted file mode 100644
index 96dc2efbf6..0000000000
--- a/c/src/lib/libbsp/lm32/shared/milkymist_clock/clock.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * @file
- * @ingroup lm32_clock lm32_milkymist_shared
- * @brief LatticeMico32 Timer (Clock) definitions
- */
-
-/*
- * This file contains definitions for LatticeMico32 Timer (Clock)
- *
- * 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.
- *
- * COPYRIGHT (c) Yann Sionneau <yann.sionneau@telecom-sudparis.eu> (GSoC 2010)
- * Telecom SudParis
- */
-
-#ifndef _BSPCLOCK_H
-#define _BSPCLOCK_H
-
-
-#endif /* _BSPCLOCK_H */
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_console/console.c b/c/src/lib/libbsp/lm32/shared/milkymist_console/console.c
deleted file mode 100644
index de87233299..0000000000
--- a/c/src/lib/libbsp/lm32/shared/milkymist_console/console.c
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Console driver for Milkymist
- *
- * 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.
- *
- * COPYRIGHT (c) 2010 Sebastien Bourdeauducq
- */
-
-#include <unistd.h>
-#include <termios.h>
-
-#include <rtems.h>
-#include <rtems/bspIo.h>
-#include <rtems/libio.h>
-#include <rtems/console.h>
-#include <rtems/termiostypes.h>
-#include <bsp/irq-generic.h>
-
-#include "../include/system_conf.h"
-#include "uart.h"
-
-BSP_output_char_function_type BSP_output_char = BSP_uart_polled_write;
-BSP_polling_getchar_function_type BSP_poll_char = BSP_uart_polled_read;
-
-static struct rtems_termios_tty *tty;
-
-static int mmconsole_first_open(int major, int minor, void *arg)
-{
- tty = ((rtems_libio_open_close_args_t *) arg)->iop->data1;
- return rtems_termios_set_initial_baud(tty, UART_BAUD_RATE);
-}
-
-static int mmconsole_last_close(int major, int minor, void *arg)
-{
- return 0;
-}
-
-static int mmconsole_set_attributes(int minor, const struct termios *t)
-{
- int baud;
-
- switch (t->c_ospeed) {
- case B0:
- baud = 0;
- break;
- case B50:
- baud = 50;
- break;
- case B75:
- baud = 75;
- break;
- case B110:
- baud = 110;
- break;
- case B134:
- baud = 134;
- break;
- case B150:
- baud = 150;
- break;
- case B200:
- baud = 200;
- break;
- case B300:
- baud = 300;
- break;
- case B600:
- baud = 600;
- break;
- case B1200:
- baud = 1200;
- break;
- case B1800:
- baud = 1800;
- break;
- case B2400:
- baud = 2400;
- break;
- case B4800:
- baud = 4800;
- break;
- case B9600:
- baud = 9600;
- break;
- case B19200:
- baud = 19200;
- break;
- case B38400:
- baud = 38400;
- break;
- case B57600:
- baud = 57600;
- break;
- case B115200:
- baud = 115200;
- break;
- case B230400:
- baud = 230400;
- break;
- case B460800:
- baud = 460800;
- break;
- default:
- baud = -1;
- break;
- }
-
- if (baud > 0)
- MM_WRITE(MM_UART_DIV, MM_READ(MM_FREQUENCY)/baud/16);
-
- return 0;
-}
-
-static ssize_t mmconsole_write(int minor, const char *buf, size_t n)
-{
- if (n > 0) {
- MM_WRITE(MM_UART_RXTX, *buf);
- }
-
- return 0;
-}
-
-static rtems_isr mmconsole_interrupt(rtems_vector_number n)
-{
- char c;
- while (MM_READ(MM_UART_STAT) & UART_STAT_RX_EVT) {
- c = MM_READ(MM_UART_RXTX);
- MM_WRITE(MM_UART_STAT, UART_STAT_RX_EVT);
- rtems_termios_enqueue_raw_characters(tty, &c, 1);
- }
- if (MM_READ(MM_UART_STAT) & UART_STAT_TX_EVT) {
- MM_WRITE(MM_UART_STAT, UART_STAT_TX_EVT);
- rtems_termios_dequeue_characters(tty, 1);
- }
- lm32_interrupt_ack(1 << MM_IRQ_UART);
-}
-
-static const rtems_termios_callbacks mmconsole_callbacks = {
- .firstOpen = mmconsole_first_open,
- .lastClose = mmconsole_last_close,
- .pollRead = NULL,
- .write = mmconsole_write,
- .setAttributes = mmconsole_set_attributes,
- .stopRemoteTx = NULL,
- .startRemoteTx = NULL,
- .outputUsesInterrupts = TERMIOS_IRQ_DRIVEN
-};
-
-rtems_device_driver console_initialize(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_status_code status;
- rtems_isr_entry dummy;
-
- rtems_termios_initialize();
-
- status = rtems_io_register_name("/dev/console", major, 0);
- if (status != RTEMS_SUCCESSFUL)
- rtems_fatal_error_occurred(status);
-
- rtems_interrupt_catch(mmconsole_interrupt, MM_IRQ_UART, &dummy);
- bsp_interrupt_vector_enable(MM_IRQ_UART);
- MM_WRITE(MM_UART_CTRL, UART_CTRL_RX_INT|UART_CTRL_TX_INT);
-
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver console_open(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- return rtems_termios_open(major, minor, arg, &mmconsole_callbacks);
-}
-
-rtems_device_driver console_close(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- return rtems_termios_close(arg);
-}
-
-rtems_device_driver console_read(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- return rtems_termios_read(arg);
-}
-
-rtems_device_driver console_write(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- return rtems_termios_write(arg);
-}
-
-rtems_device_driver console_control(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- return rtems_termios_ioctl(arg);
-}
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_console/uart.c b/c/src/lib/libbsp/lm32/shared/milkymist_console/uart.c
deleted file mode 100644
index 3ca1284954..0000000000
--- a/c/src/lib/libbsp/lm32/shared/milkymist_console/uart.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Driver for Milkymist UART
- *
- * 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.
- *
- * COPYRIGHT (c) 2010 Sebastien Bourdeauducq
- * COPYRIGHT (c) Yann Sionneau <yann.sionneau@telecom-sudparis.eu> (GSoC 2010)
- * Telecom SudParis
- */
-
-#include <rtems.h>
-#include <rtems/libio.h>
-#include "../include/system_conf.h"
-#include "uart.h"
-
-void BSP_uart_init(int baud)
-{
- MM_WRITE(MM_UART_DIV, MM_READ(MM_FREQUENCY)/baud/16);
-}
-
-void BSP_uart_polled_write(char ch)
-{
- rtems_interrupt_level level;
-
- rtems_interrupt_disable(level);
- while(!(MM_READ(MM_UART_STAT) & UART_STAT_THRE));
- MM_WRITE(MM_UART_RXTX, ch);
- while(!(MM_READ(MM_UART_STAT) & UART_STAT_THRE));
- rtems_interrupt_enable(level);
-}
-
-int BSP_uart_polled_read(void)
-{
- char r;
- rtems_interrupt_level level;
-
- rtems_interrupt_disable(level);
- while(!(MM_READ(MM_UART_STAT) & UART_STAT_RX_EVT));
- r = MM_READ(MM_UART_RXTX);
- MM_WRITE(MM_UART_STAT, UART_STAT_RX_EVT);
- rtems_interrupt_enable(level);
-
- return r;
-}
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_console/uart.h b/c/src/lib/libbsp/lm32/shared/milkymist_console/uart.h
deleted file mode 100644
index 5dbb8cd859..0000000000
--- a/c/src/lib/libbsp/lm32/shared/milkymist_console/uart.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * @file
- * @ingroup lm32_uart lm32_milkymist_shared
- * @brief Milkymist UART definitions
- */
-
-/*
- * This file contains definitions for the Milkymist UART
- *
- * 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.
- */
-
-#ifndef _BSPUART_H
-#define _BSPUART_H
-
-void BSP_uart_init(int baud);
-void BSP_uart_polled_write(char ch);
-int BSP_uart_polled_read(void);
-
-#endif /* _BSPUART_H */
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_dmx/dmx.c b/c/src/lib/libbsp/lm32/shared/milkymist_dmx/dmx.c
deleted file mode 100644
index d2c25685ec..0000000000
--- a/c/src/lib/libbsp/lm32/shared/milkymist_dmx/dmx.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/* dmx.c
- *
- * Milkymist DMX512 driver for RTEMS
- *
- * 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.
- *
- * COPYRIGHT (c) 2010, 2011 Sebastien Bourdeauducq
- */
-
-#define RTEMS_STATUS_CHECKS_USE_PRINTK
-
-#include <stdlib.h>
-#include <sys/types.h>
-#include <rtems.h>
-#include <rtems/status-checks.h>
-#include <bsp.h>
-#include <rtems/libio.h>
-#include "../include/system_conf.h"
-#include <bsp/milkymist_dmx.h>
-
-#define IN_DEVICE_NAME "/dev/dmx_in"
-#define OUT_DEVICE_NAME "/dev/dmx_out"
-
-rtems_device_driver dmx_initialize(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_status_code sc;
-
- sc = rtems_io_register_name(IN_DEVICE_NAME, major, 0);
- RTEMS_CHECK_SC(sc, "create DMX input device");
-
- sc = rtems_io_register_name(OUT_DEVICE_NAME, major, 1);
- RTEMS_CHECK_SC(sc, "create DMX output device");
-
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver dmx_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;
- int len;
- unsigned int i;
- unsigned char *values = (unsigned char *)rw_args->buffer;
-
- len = 512 - rw_args->offset;
- if (len < 0) {
- rw_args->bytes_moved = 0;
- return RTEMS_SUCCESSFUL;
- }
- if (len > rw_args->count)
- len = rw_args->count;
-
- if (minor == 0) {
- for (i=0;i<len;i++)
- values[i] = MM_READ(MM_DMX_RX((unsigned int)rw_args->offset+i));
- } else {
- for (i=0;i<len;i++)
- values[i] = MM_READ(MM_DMX_TX((unsigned int)rw_args->offset+i));
- }
-
- rw_args->bytes_moved = len;
-
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver dmx_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;
- int len;
- unsigned int i;
- unsigned char *values = (unsigned char *)rw_args->buffer;
-
- if (minor == 0) {
- rw_args->bytes_moved = 0;
- return RTEMS_UNSATISFIED;
- }
-
- len = 512 - rw_args->offset;
- if (len < 0) {
- rw_args->bytes_moved = 0;
- return RTEMS_SUCCESSFUL;
- }
- if (len > rw_args->count)
- len = rw_args->count;
-
- for (i=0;i<len;i++)
- MM_WRITE(MM_DMX_TX((unsigned int)rw_args->offset+i), values[i]);
-
- rw_args->bytes_moved = len;
-
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver dmx_control(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_libio_ioctl_args_t *args = arg;
-
- switch (args->command) {
- case DMX_SET_THRU:
- args->ioctl_return = 0;
- MM_WRITE(MM_DMX_THRU, (unsigned int)args->buffer);
- return RTEMS_SUCCESSFUL;
- case DMX_GET_THRU:
- args->ioctl_return = 0;
- *((unsigned int *)args->buffer) = MM_READ(MM_DMX_THRU);
- return RTEMS_SUCCESSFUL;
- default:
- args->ioctl_return = -1;
- return RTEMS_UNSATISFIED;
- }
-}
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_flash/flash.c b/c/src/lib/libbsp/lm32/shared/milkymist_flash/flash.c
deleted file mode 100644
index aeb0f6416d..0000000000
--- a/c/src/lib/libbsp/lm32/shared/milkymist_flash/flash.c
+++ /dev/null
@@ -1,193 +0,0 @@
-/* flash.c
- *
- * Milkymist flash driver for RTEMS
- *
- * 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.
- *
- * COPYRIGHT (c) 2010, 2011 Sebastien Bourdeauducq
- */
-
-#define RTEMS_STATUS_CHECKS_USE_PRINTK
-
-#include <rtems.h>
-#include <stdio.h>
-#include <bsp.h>
-#include <string.h>
-#include <rtems/libio.h>
-#include <rtems/status-checks.h>
-#include "../include/system_conf.h"
-#include <bsp/milkymist_flash.h>
-
-static struct flash_partition partitions[FLASH_PARTITION_COUNT]
- = FLASH_PARTITIONS;
-
-static rtems_id flash_lock;
-
-rtems_device_driver flash_initialize(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_status_code sc;
- int i;
- char devname[16];
-
- for (i=0;i<FLASH_PARTITION_COUNT;i++) {
- sprintf(devname, "/dev/flash%d", i+1);
- sc = rtems_io_register_name(devname, major, i);
- RTEMS_CHECK_SC(sc, "Create flash device");
- }
-
- sc = rtems_semaphore_create(
- rtems_build_name('F', 'L', 'S', 'H'),
- 1,
- RTEMS_SIMPLE_BINARY_SEMAPHORE,
- 0,
- &flash_lock
- );
- RTEMS_CHECK_SC(sc, "create semaphore");
-
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver flash_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;
- void *startaddr;
- int len;
-
- if (minor >= FLASH_PARTITION_COUNT)
- return RTEMS_UNSATISFIED;
-
- startaddr = (void *)(partitions[minor].start_address
- + (unsigned int)rw_args->offset);
- len = partitions[minor].length - rw_args->offset;
- if (len > rw_args->count)
- len = rw_args->count;
- if (len <= 0) {
- rw_args->bytes_moved = 0;
- return RTEMS_SUCCESSFUL;
- }
-
- rtems_semaphore_obtain(flash_lock, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
- memcpy(rw_args->buffer, startaddr, len);
- rtems_semaphore_release(flash_lock);
-
- rw_args->bytes_moved = len;
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver flash_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;
- volatile unsigned short *startaddr;
- unsigned short *srcdata;
- int len;
- int this_time;
- int remaining;
- int i;
-
- if (minor >= FLASH_PARTITION_COUNT)
- return RTEMS_UNSATISFIED;
-
- startaddr = (unsigned short *)(partitions[minor].start_address
- + (unsigned int)rw_args->offset);
- len = partitions[minor].length - rw_args->offset;
- if (len > rw_args->count)
- len = rw_args->count;
- if (len <= 2) {
- rw_args->bytes_moved = 0;
- return RTEMS_SUCCESSFUL;
- }
- len /= 2;
- srcdata = (unsigned short *)rw_args->buffer;
- remaining = len;
-
- rtems_semaphore_obtain(flash_lock, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
- while (remaining > 0) {
- this_time = remaining;
- if (this_time > 256)
- this_time = 256;
- /* Issue "Buffered Programming Setup" command
- * and wait for buffer available.
- */
- do {
- *startaddr = 0x00e8;
- } while (!(*startaddr & 0x0080));
- /* Load word count */
- *startaddr = this_time-1;
- /* Fill buffer */
- for(i=0;i<this_time;i++)
- startaddr[i] = srcdata[i];
- /* Issue "Buffer Programming Confirm" command */
- *startaddr = 0x00d0;
- while (!(*startaddr & 0x0080)); /* read status register, wait for ready */
- *startaddr = 0x0050; /* clear status register */
- /* update state */
- startaddr += this_time;
- srcdata += this_time;
- remaining -= this_time;
- }
- *startaddr = 0x00ff; /* back to read array mode */
- rtems_semaphore_release(flash_lock);
-
- rw_args->bytes_moved = 2*len;
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver flash_control(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_libio_ioctl_args_t *args = arg;
- unsigned int eraseaddr_i;
- volatile unsigned short *eraseaddr;
-
- if (minor >= FLASH_PARTITION_COUNT) {
- args->ioctl_return = -1;
- return RTEMS_UNSATISFIED;
- }
-
- switch (args->command) {
- case FLASH_GET_SIZE:
- *((unsigned int *)args->buffer) = partitions[minor].length;
- break;
- case FLASH_GET_BLOCKSIZE:
- *((unsigned int *)args->buffer) = 128*1024;
- break;
- case FLASH_ERASE_BLOCK:
- eraseaddr_i = (unsigned int)args->buffer;
- if (eraseaddr_i >= partitions[minor].length) {
- args->ioctl_return = -1;
- return RTEMS_UNSATISFIED;
- }
- eraseaddr_i = eraseaddr_i + partitions[minor].start_address;
- eraseaddr = (unsigned short *)eraseaddr_i;
- rtems_semaphore_obtain(flash_lock, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
- *eraseaddr = 0x0020; /* erase */
- *eraseaddr = 0x00d0;
- while(!(*eraseaddr & 0x0080)); /* read status register, wait for ready */
- *eraseaddr = 0x0050; /* clear status register */
- *eraseaddr = 0x00ff; /* back to read array mode */
- rtems_semaphore_release(flash_lock);
- break;
- default:
- args->ioctl_return = -1;
- return RTEMS_UNSATISFIED;
- }
- args->ioctl_return = 0;
- return RTEMS_SUCCESSFUL;
-}
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_framebuffer/framebuffer.c b/c/src/lib/libbsp/lm32/shared/milkymist_framebuffer/framebuffer.c
deleted file mode 100644
index 8bbd44ae0c..0000000000
--- a/c/src/lib/libbsp/lm32/shared/milkymist_framebuffer/framebuffer.c
+++ /dev/null
@@ -1,251 +0,0 @@
-/* framebuffer.c
- *
- * This file is the framebuffer driver for the Milkymist VGA IP-core
- * This VGA Core is a part of Milkymist System-on-Chip
- *
- * 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.
- *
- * COPYRIGHT (c) Yann Sionneau <yann.sionneau@telecom-sudparis.eu> (GSoC 2010)
- * Telecom SudParis
- * Copyright (c) 2011 Sebastien Bourdeauducq
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <rtems.h>
-#include <bsp.h>
-#include "../include/system_conf.h"
-#include <rtems/libio.h>
-#include <rtems/fb.h>
-#include <rtems/framebuffer.h>
-#include <rtems/bspIo.h>
-
-static unsigned short int framebufferA[1024*768]
- __attribute__((aligned(32)));
-static unsigned short int framebufferB[1024*768]
- __attribute__((aligned(32)));
-static unsigned short int framebufferC[1024*768]
- __attribute__((aligned(32)));
-
-static unsigned short int *frontbuffer;
-static unsigned short int *backbuffer;
-static unsigned short int *lastbuffer;
-
-static struct fb_var_screeninfo fb_var = {
- .xres = 640,
- .yres = 480,
- .bits_per_pixel = 16
-};
-
-static struct fb_fix_screeninfo fb_fix = {
- .smem_len = 1024 * 768 * 2,
- .type = FB_TYPE_VGA_PLANES,
- .visual = FB_VISUAL_TRUECOLOR,
- .line_length = 80
-};
-
-static int get_fix_screen_info( struct fb_fix_screeninfo *info )
-{
- *info = fb_fix;
- return 0;
-}
-
-static int get_var_screen_info( struct fb_var_screeninfo *info )
-{
- *info = fb_var;
- return 0;
-}
-
-static void init_buffers(void)
-{
- frontbuffer = framebufferA;
- backbuffer = framebufferB;
- lastbuffer = framebufferC;
-}
-
-static void swap_buffers(void)
-{
- unsigned short int *p;
-
- /* Make sure last buffer swap has been executed */
- while (MM_READ(MM_VGA_BASEADDRESS_ACT) != MM_READ(MM_VGA_BASEADDRESS));
-
- p = frontbuffer;
- frontbuffer = backbuffer;
- backbuffer = lastbuffer;
- lastbuffer = p;
-
- fb_fix.smem_start = (volatile char *)backbuffer;
- MM_WRITE(MM_VGA_BASEADDRESS, (unsigned int)frontbuffer);
-}
-
-static void set_video_mode(int mode)
-{
- int hres, vres;
-
- MM_WRITE(MM_VGA_RESET, VGA_RESET);
- hres = vres = 0;
- switch(mode) {
- case 0: // 640x480, pixel clock: 25MHz
- hres = 640;
- vres = 480;
- MM_WRITE(MM_VGA_HSYNC_START, 656);
- MM_WRITE(MM_VGA_HSYNC_END, 752);
- MM_WRITE(MM_VGA_HSCAN, 799);
- MM_WRITE(MM_VGA_VSYNC_START, 492);
- MM_WRITE(MM_VGA_VSYNC_END, 494);
- MM_WRITE(MM_VGA_VSCAN, 524);
- MM_WRITE(MM_VGA_CLKSEL, 0);
- break;
- case 1: // 800x600, pixel clock: 50MHz
- hres = 800;
- vres = 600;
- MM_WRITE(MM_VGA_HSYNC_START, 848);
- MM_WRITE(MM_VGA_HSYNC_END, 976);
- MM_WRITE(MM_VGA_HSCAN, 1040);
- MM_WRITE(MM_VGA_VSYNC_START, 636);
- MM_WRITE(MM_VGA_VSYNC_END, 642);
- MM_WRITE(MM_VGA_VSCAN, 665);
- MM_WRITE(MM_VGA_CLKSEL, 1);
- break;
- case 2: // 1024x768, pixel clock: 65MHz
- hres = 1024;
- vres = 768;
- MM_WRITE(MM_VGA_HSYNC_START, 1048);
- MM_WRITE(MM_VGA_HSYNC_END, 1184);
- MM_WRITE(MM_VGA_HSCAN, 1344);
- MM_WRITE(MM_VGA_VSYNC_START, 772);
- MM_WRITE(MM_VGA_VSYNC_END, 778);
- MM_WRITE(MM_VGA_VSCAN, 807);
- MM_WRITE(MM_VGA_CLKSEL, 2);
- break;
- }
- if((hres != 0) && (vres != 0)) {
- MM_WRITE(MM_VGA_HRES, hres);
- MM_WRITE(MM_VGA_VRES, vres);
- fb_var.xres = hres;
- fb_var.yres = vres;
- memset(framebufferA, 0, hres*vres*2);
- memset(framebufferB, 0, hres*vres*2);
- memset(framebufferC, 0, hres*vres*2);
- MM_WRITE(MM_VGA_BURST_COUNT, hres*vres/16);
- MM_WRITE(MM_VGA_RESET, 0);
- } /* otherwise, leave the VGA controller in reset */
-}
-
-rtems_device_driver frame_buffer_initialize(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_status_code status;
-
- init_buffers();
- fb_fix.smem_start = (volatile char *)frontbuffer;
- MM_WRITE(MM_VGA_BASEADDRESS, (unsigned int)frontbuffer);
-
- status = rtems_io_register_name(FRAMEBUFFER_DEVICE_0_NAME, major, 0);
- if (status != RTEMS_SUCCESSFUL) {
- printk("Error registering frame buffer device!\n");
- rtems_fatal_error_occurred( status );
- }
-
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver frame_buffer_close(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver frame_buffer_open(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver frame_buffer_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 = ((rw_args->offset + rw_args->count) > fb_fix.smem_len)
- ? (fb_fix.smem_len - rw_args->offset) : rw_args->count;
- memcpy(rw_args->buffer, (const void *)(fb_fix.smem_start + rw_args->offset),
- rw_args->bytes_moved);
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver frame_buffer_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 = ((rw_args->offset + rw_args->count) > fb_fix.smem_len)
- ? (fb_fix.smem_len - rw_args->offset) : rw_args->count;
- memcpy((void *)(fb_fix.smem_start + rw_args->offset), rw_args->buffer,
- rw_args->bytes_moved);
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver frame_buffer_control(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_libio_ioctl_args_t *args = arg;
-
- switch (args->command) {
- case FBIOGET_FSCREENINFO:
- args->ioctl_return =
- get_fix_screen_info((struct fb_fix_screeninfo *)args->buffer);
- return RTEMS_SUCCESSFUL;
- case FBIOGET_VSCREENINFO:
- args->ioctl_return =
- get_var_screen_info((struct fb_var_screeninfo *)args->buffer);
- return RTEMS_SUCCESSFUL;
- case FBIOSWAPBUFFERS:
- swap_buffers();
- args->ioctl_return = 0;
- return RTEMS_SUCCESSFUL;
- case FBIOSETBUFFERMODE:
- args->ioctl_return = 0;
- switch ((unsigned int)args->buffer) {
- case FB_SINGLE_BUFFERED:
- init_buffers();
- fb_fix.smem_start = (volatile char *)frontbuffer;
- MM_WRITE(MM_VGA_BASEADDRESS, (unsigned int)frontbuffer);
- return RTEMS_SUCCESSFUL;
- case FB_TRIPLE_BUFFERED:
- fb_fix.smem_start = (volatile char *)backbuffer;
- return RTEMS_SUCCESSFUL;
- default:
- return RTEMS_UNSATISFIED;
- }
- case FBIOSETVIDEOMODE:
- set_video_mode((int)args->buffer);
- return RTEMS_SUCCESSFUL;
- default:
- args->ioctl_return = -1;
- return RTEMS_UNSATISFIED;
- }
-}
-
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_gpio/gpio.c b/c/src/lib/libbsp/lm32/shared/milkymist_gpio/gpio.c
deleted file mode 100644
index b559c9b4bc..0000000000
--- a/c/src/lib/libbsp/lm32/shared/milkymist_gpio/gpio.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/* gpio.c
- *
- * GPIO driver for the Milkymist One board
- *
- * 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.
- *
- * COPYRIGHT (c) 2010, 2011 Sebastien Bourdeauducq
- * COPYRIGHT (c) Yann Sionneau <yann.sionneau@telecom-sudparis.eu> (GSoC 2010)
- * Telecom SudParis
- */
-
-#define RTEMS_STATUS_CHECKS_USE_PRINTK
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <rtems.h>
-#include <rtems/status-checks.h>
-#include <bsp.h>
-#include <rtems/libio.h>
-#include "../include/system_conf.h"
-#include <bsp/milkymist_gpio.h>
-
-struct milkymist_gpio {
- char *name;
- unsigned int mask;
- bool readonly;
-};
-
-static const struct milkymist_gpio gpio[] = {
- {
- .name = "/dev/led1",
- .mask = GPIO_LED1,
- .readonly = false
- },
- {
- .name = "/dev/led2",
- .mask = GPIO_LED2,
- .readonly = false
- },
-};
-
-rtems_device_driver gpio_initialize(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_status_code sc;
- int i;
-
- for (i=0;i<sizeof(gpio)/sizeof(struct milkymist_gpio);i++) {
- sc = rtems_io_register_name(gpio[i].name, major, i);
- RTEMS_CHECK_SC(sc, "create GPIO device");
- }
-
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver gpio_read(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- unsigned int data;
-
- rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *)arg;
-
- if (rw_args->offset > 0) {
- rw_args->bytes_moved = 0;
- return RTEMS_SUCCESSFUL;
- }
-
- rw_args->bytes_moved = 1;
-
- if (gpio[minor].readonly)
- data = MM_READ(MM_GPIO_IN);
- else
- data = MM_READ(MM_GPIO_OUT);
-
- if (data & gpio[minor].mask)
- *(uint8_t *)rw_args->buffer = '1';
- else
- *(uint8_t *)rw_args->buffer = '0';
-
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver gpio_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;
-
- if (gpio[minor].readonly) {
- rw_args->bytes_moved = 0;
- return RTEMS_UNSATISFIED;
- }
-
- if (rw_args->offset > 0) {
- rw_args->bytes_moved = 0;
- return RTEMS_SUCCESSFUL;
- }
-
- rw_args->bytes_moved = 1;
-
- if (*(uint8_t *)rw_args->buffer == '1')
- MM_WRITE(MM_GPIO_OUT, MM_READ(MM_GPIO_OUT)|gpio[minor].mask);
- else
- MM_WRITE(MM_GPIO_OUT, MM_READ(MM_GPIO_OUT) & ~gpio[minor].mask);
-
- return RTEMS_SUCCESSFUL;
-}
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_ir/ir.c b/c/src/lib/libbsp/lm32/shared/milkymist_ir/ir.c
deleted file mode 100644
index 5c5a195a39..0000000000
--- a/c/src/lib/libbsp/lm32/shared/milkymist_ir/ir.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/* ir.c
- *
- * Milkymist RC5 IR driver for RTEMS
- *
- * 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.
- *
- * COPYRIGHT (c) 2010, 2011 Sebastien Bourdeauducq
- */
-
-#define RTEMS_STATUS_CHECKS_USE_PRINTK
-
-#include <stdlib.h>
-#include <sys/types.h>
-#include <rtems.h>
-#include <rtems/status-checks.h>
-#include <bsp.h>
-#include <bsp/irq-generic.h>
-#include <rtems/libio.h>
-#include "../include/system_conf.h"
-#include <bsp/milkymist_ir.h>
-
-#define DEVICE_NAME "/dev/ir"
-
-static rtems_id ir_q;
-
-static rtems_isr interrupt_handler(rtems_vector_number n)
-{
- unsigned short int msg;
-
- lm32_interrupt_ack(1 << MM_IRQ_IR);
- msg = MM_READ(MM_IR_RX);
- rtems_message_queue_send(ir_q, &msg, 2);
-}
-
-rtems_device_driver ir_initialize(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_status_code sc;
- rtems_isr_entry dummy;
-
- sc = rtems_io_register_name(DEVICE_NAME, major, 0);
- RTEMS_CHECK_SC(sc, "create IR input device");
-
- sc = rtems_message_queue_create(
- rtems_build_name('R', 'C', '5', 'Q'),
- 64,
- 2,
- 0,
- &ir_q
- );
- RTEMS_CHECK_SC(sc, "create IR queue");
-
- rtems_interrupt_catch(interrupt_handler, MM_IRQ_IR, &dummy);
- bsp_interrupt_vector_enable(MM_IRQ_IR);
-
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver ir_open(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- uint32_t count;
-
- rtems_message_queue_flush(ir_q, &count);
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver ir_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;
- rtems_status_code sc;
-
- if (rw_args->count < 2) {
- rw_args->bytes_moved = 0;
- return RTEMS_UNSATISFIED;
- }
-
- sc = rtems_message_queue_receive(
- ir_q,
- rw_args->buffer,
- (size_t *)&rw_args->bytes_moved,
- RTEMS_WAIT,
- RTEMS_NO_TIMEOUT
- );
-
- if(sc == RTEMS_SUCCESSFUL)
- return RTEMS_SUCCESSFUL;
- else {
- rw_args->bytes_moved = 0;
- return RTEMS_UNSATISFIED;
- }
-}
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_memcard/memcard.c b/c/src/lib/libbsp/lm32/shared/milkymist_memcard/memcard.c
deleted file mode 100644
index 3e56303292..0000000000
--- a/c/src/lib/libbsp/lm32/shared/milkymist_memcard/memcard.c
+++ /dev/null
@@ -1,370 +0,0 @@
-/* memcard.c
- *
- * Milkymist memory card driver for RTEMS
- *
- * 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.
- *
- * COPYRIGHT (c) 2010, 2011 Sebastien Bourdeauducq
- */
-
-#define RTEMS_STATUS_CHECKS_USE_PRINTK
-
-#include <rtems.h>
-#include <rtems/libio.h>
-#include <rtems/diskdevs.h>
-#include <rtems/blkdev.h>
-#include <rtems/status-checks.h>
-#include <errno.h>
-#include <bsp.h>
-#include "../include/system_conf.h"
-#include <bsp/milkymist_memcard.h>
-
-//#define MEMCARD_DEBUG
-
-#define BLOCK_SIZE 512
-
-static void memcard_start_cmd_tx(void)
-{
- MM_WRITE(MM_MEMCARD_ENABLE, MEMCARD_ENABLE_CMD_TX);
-}
-
-static void memcard_start_cmd_rx(void)
-{
- MM_WRITE(MM_MEMCARD_PENDING, MEMCARD_PENDING_CMD_RX);
- MM_WRITE(MM_MEMCARD_START, MEMCARD_START_CMD_RX);
- MM_WRITE(MM_MEMCARD_ENABLE, MEMCARD_ENABLE_CMD_RX);
-}
-
-static void memcard_start_cmd_dat_rx(void)
-{
- MM_WRITE(MM_MEMCARD_PENDING, MEMCARD_PENDING_CMD_RX|MEMCARD_PENDING_DAT_RX);
- MM_WRITE(MM_MEMCARD_START, MEMCARD_START_CMD_RX|MEMCARD_START_DAT_RX);
- MM_WRITE(MM_MEMCARD_ENABLE, MEMCARD_ENABLE_CMD_RX|MEMCARD_ENABLE_DAT_RX);
-}
-
-static void memcard_send_command(unsigned char cmd, unsigned int arg)
-{
- unsigned char packet[6];
- int a;
- int i;
- unsigned char data;
- unsigned char crc;
-
- packet[0] = cmd | 0x40;
- packet[1] = ((arg >> 24) & 0xff);
- packet[2] = ((arg >> 16) & 0xff);
- packet[3] = ((arg >> 8) & 0xff);
- packet[4] = (arg & 0xff);
-
- crc = 0;
- for(a=0;a<5;a++) {
- data = packet[a];
- for(i=0;i<8;i++) {
- crc <<= 1;
- if((data & 0x80) ^ (crc & 0x80))
- crc ^= 0x09;
- data <<= 1;
- }
- }
- crc = (crc<<1) | 1;
-
- packet[5] = crc;
-
-#ifdef MEMCARD_DEBUG
- printk(">> %02x %02x %02x %02x %02x %02x\n",
- packet[0], packet[1], packet[2], packet[3], packet[4], packet[5]);
-#endif
-
- for(i=0;i<6;i++) {
- MM_WRITE(MM_MEMCARD_CMD, packet[i]);
- while(MM_READ(MM_MEMCARD_PENDING) & MEMCARD_PENDING_CMD_TX);
- }
-}
-
-static void memcard_send_dummy(void)
-{
- MM_WRITE(MM_MEMCARD_CMD, 0xff);
- while(MM_READ(MM_MEMCARD_PENDING) & MEMCARD_PENDING_CMD_TX);
-}
-
-static bool memcard_receive_command(unsigned char *buffer, int len)
-{
- int i;
- int timeout;
-
- for(i=0;i<len;i++) {
- timeout = 2000000;
- while(!(MM_READ(MM_MEMCARD_PENDING) & MEMCARD_PENDING_CMD_RX)) {
- timeout--;
- if(timeout == 0) {
- #ifdef MEMCARD_DEBUG
- printk("Command receive timeout\n");
- #endif
- return false;
- }
- }
- buffer[i] = MM_READ(MM_MEMCARD_CMD);
- MM_WRITE(MM_MEMCARD_PENDING, MEMCARD_PENDING_CMD_RX);
- }
-
- while(!(MM_READ(MM_MEMCARD_PENDING) & MEMCARD_PENDING_CMD_RX));
-
- #ifdef MEMCARD_DEBUG
- printk("<< ");
- for(i=0;i<len;i++)
- printk("%02x ", buffer[i]);
- printk("\n");
- #endif
-
- return true;
-}
-
-static bool memcard_receive_command_data(unsigned char *command,
- unsigned int *data)
-{
- int i, j;
- int timeout;
-
- i = 0;
- j = 0;
- while(j < 128) {
- timeout = 2000000;
- while(!(MM_READ(MM_MEMCARD_PENDING) &
- (MEMCARD_PENDING_CMD_RX|MEMCARD_PENDING_DAT_RX))) {
- timeout--;
- if(timeout == 0) {
- #ifdef MEMCARD_DEBUG
- printk("Command receive timeout\n");
- #endif
- return false;
- }
- }
- if(MM_READ(MM_MEMCARD_PENDING) & MEMCARD_PENDING_CMD_RX) {
- command[i++] = MM_READ(MM_MEMCARD_CMD);
- MM_WRITE(MM_MEMCARD_PENDING, MEMCARD_PENDING_CMD_RX);
- if(i == 6)
- /* disable command RX */
- MM_WRITE(MM_MEMCARD_ENABLE, MEMCARD_ENABLE_DAT_RX);
- }
- if(MM_READ(MM_MEMCARD_PENDING) & MEMCARD_PENDING_DAT_RX) {
- data[j++] = MM_READ(MM_MEMCARD_DAT);
- MM_WRITE(MM_MEMCARD_PENDING, MEMCARD_PENDING_DAT_RX);
- }
- }
-
- /* Get CRC (ignored) */
- for(i=0;i<2;i++) {
- while(!(MM_READ(MM_MEMCARD_PENDING) & MEMCARD_PENDING_DAT_RX));
- #ifdef MEMCARD_DEBUG
- printk("CRC: %08x\n", MM_READ(MM_MEMCARD_DAT));
- #endif
- MM_WRITE(MM_MEMCARD_PENDING, MEMCARD_PENDING_DAT_RX);
- }
-
- while(!(MM_READ(MM_MEMCARD_PENDING) & MEMCARD_PENDING_DAT_RX));
-
- #ifdef MEMCARD_DEBUG
- printk("<< %02x %02x %02x %02x %02x %02x\n",
- command[0], command[1], command[2], command[3], command[4], command[5]);
- #endif
-
- //for(i=0;i<128;i++)
- // printk("%08x ", data[i]);
- //printk("\n");
-
- return true;
-}
-
-static unsigned int block_count;
-
-static int memcard_disk_block_read(rtems_blkdev_request *r)
-{
- unsigned char b[6];
- unsigned int i, nblocks;
- unsigned int block;
-
- block = RTEMS_BLKDEV_START_BLOCK(r);
- nblocks = r->bufnum;
-
- for(i=0;i<nblocks;i++) {
- /* CMD17 - read block */
- memcard_start_cmd_tx();
- memcard_send_command(17, (block+i)*BLOCK_SIZE);
- memcard_start_cmd_dat_rx();
- if(!memcard_receive_command_data(b, (unsigned int *)r->bufs[i].buffer))
- return -RTEMS_IO_ERROR;
- }
-
- rtems_blkdev_request_done(r, RTEMS_SUCCESSFUL);
-
- return 0;
-}
-
-static int memcard_disk_block_write(rtems_blkdev_request *r)
-{
- rtems_blkdev_request_done(r, RTEMS_IO_ERROR);
-
- return 0;
-}
-
-static rtems_status_code memcard_init(void)
-{
- unsigned char b[17];
- unsigned int rca;
- unsigned int block_shift;
- unsigned int c_size;
- unsigned int c_size_mult;
-
- MM_WRITE(MM_MEMCARD_CLK2XDIV, 250);
-
- /* CMD0 */
- memcard_start_cmd_tx();
- memcard_send_command(0, 0);
-
- memcard_send_dummy();
-
- /* CMD8 */
- memcard_send_command(8, 0x1aa);
- memcard_start_cmd_rx();
- if(!memcard_receive_command(b, 6)) return RTEMS_IO_ERROR;
-
- /* ACMD41 - initialize */
- while(1) {
- memcard_start_cmd_tx();
- memcard_send_command(55, 0);
- memcard_start_cmd_rx();
- if(!memcard_receive_command(b, 6)) return RTEMS_IO_ERROR;
- memcard_start_cmd_tx();
- memcard_send_command(41, 0x00300000);
- memcard_start_cmd_rx();
- if(!memcard_receive_command(b, 6)) return RTEMS_IO_ERROR;
- if(b[1] & 0x80) break;
- #ifdef MEMCARD_DEBUG
- printk("Card is busy, retrying\n");
- #endif
- }
-
- /* CMD2 - get CID */
- memcard_start_cmd_tx();
- memcard_send_command(2, 0);
- memcard_start_cmd_rx();
- if(!memcard_receive_command(b, 17)) return RTEMS_IO_ERROR;
-
- /* CMD3 - get RCA */
- memcard_start_cmd_tx();
- memcard_send_command(3, 0);
- memcard_start_cmd_rx();
- if(!memcard_receive_command(b, 6)) return RTEMS_IO_ERROR;
- rca = (((unsigned int)b[1]) << 8)|((unsigned int)b[2]);
- #ifdef MEMCARD_DEBUG
- printk("RCA: %04x\n", rca);
- #endif
-
- /* CMD9 - get CSD */
- memcard_start_cmd_tx();
- memcard_send_command(9, rca << 16);
- memcard_start_cmd_rx();
- if(!memcard_receive_command(b, 17)) return RTEMS_IO_ERROR;
-
- if(((b)[0] >> 6) != 0)
- return RTEMS_IO_ERROR;
-
- block_shift = ((unsigned int)(b)[5] & 0xf);
- c_size = ((((unsigned int)(b)[6] & 0x3) << 10)
- + (((unsigned int)(b)[7]) << 2)
- + ((((unsigned int)(b)[8]) >> 6) & 0x3));
- c_size_mult = ((((b)[9] & 0x3) << 1) + (((b)[10] >> 7) & 0x1));
- block_count = (c_size + 1) * (1U << (c_size_mult + 2));
-
- /* convert to 512-byte blocks for the sake of simplicity */
- if(block_shift < 9)
- return RTEMS_IO_ERROR;
- block_count <<= block_shift - 9;
-
- /* CMD7 - select card */
- memcard_start_cmd_tx();
- memcard_send_command(7, rca << 16);
- memcard_start_cmd_rx();
- if(!memcard_receive_command(b, 6)) return RTEMS_IO_ERROR;
-
- /* ACMD6 - set bus width */
- memcard_start_cmd_tx();
- memcard_send_command(55, rca << 16);
- memcard_start_cmd_rx();
- if(!memcard_receive_command(b, 6)) return RTEMS_IO_ERROR;
- memcard_start_cmd_tx();
- memcard_send_command(6, 2);
- memcard_start_cmd_rx();
- if(!memcard_receive_command(b, 6)) return RTEMS_IO_ERROR;
-
- MM_WRITE(MM_MEMCARD_CLK2XDIV, 3);
-
- return RTEMS_SUCCESSFUL;
-}
-
-static int memcard_disk_ioctl(rtems_disk_device *dd, uint32_t req, void *arg)
-{
- if (req == RTEMS_BLKIO_REQUEST) {
- rtems_blkdev_request *r = (rtems_blkdev_request *)arg;
- switch (r->req) {
- case RTEMS_BLKDEV_REQ_READ:
- return memcard_disk_block_read(r);
- case RTEMS_BLKDEV_REQ_WRITE:
- return memcard_disk_block_write(r);
- default:
- errno = EINVAL;
- return -1;
- }
- } else if (req == RTEMS_BLKIO_CAPABILITIES) {
- *(uint32_t *)arg = RTEMS_BLKDEV_CAP_MULTISECTOR_CONT;
- return 0;
- } else {
- errno = EINVAL;
- return -1;
- }
-}
-
-static rtems_status_code memcard_disk_init(
- rtems_device_major_number major, rtems_device_minor_number minor,
- void *arg)
-{
- rtems_status_code sc;
- dev_t dev;
-
- sc = rtems_disk_io_initialize();
- RTEMS_CHECK_SC(sc, "Initialize RTEMS disk IO");
-
- dev = rtems_filesystem_make_dev_t(major, 0);
-
- sc = memcard_init();
- RTEMS_CHECK_SC(sc, "Initialize memory card");
-
- sc = rtems_disk_create_phys(dev, BLOCK_SIZE, block_count, memcard_disk_ioctl,
- NULL, "/dev/memcard");
- RTEMS_CHECK_SC(sc, "Create disk device");
-
- return RTEMS_SUCCESSFUL;
-}
-
-
-static const rtems_driver_address_table memcard_disk_ops = {
- .initialization_entry = memcard_disk_init,
- .open_entry = rtems_blkdev_generic_open,
- .close_entry = rtems_blkdev_generic_close,
- .read_entry = rtems_blkdev_generic_read,
- .write_entry = rtems_blkdev_generic_write,
- .control_entry = rtems_blkdev_generic_ioctl
-};
-
-rtems_status_code memcard_register(void)
-{
- rtems_status_code sc = RTEMS_SUCCESSFUL;
- rtems_device_major_number major = 0;
-
- sc = rtems_io_register_driver(0, &memcard_disk_ops, &major);
- RTEMS_CHECK_SC(sc, "Register disk memory card driver");
-
- return RTEMS_SUCCESSFUL;
-}
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_midi/midi.c b/c/src/lib/libbsp/lm32/shared/milkymist_midi/midi.c
deleted file mode 100644
index 956edbfaf0..0000000000
--- a/c/src/lib/libbsp/lm32/shared/milkymist_midi/midi.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/* midi.c
- *
- * Milkymist MIDI driver for RTEMS
- *
- * 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.
- *
- * COPYRIGHT (c) 2010, 2011 Sebastien Bourdeauducq
- */
-
-#define RTEMS_STATUS_CHECKS_USE_PRINTK
-
-#include <stdlib.h>
-#include <sys/types.h>
-#include <rtems.h>
-#include <rtems/status-checks.h>
-#include <bsp.h>
-#include <bsp/irq-generic.h>
-#include <rtems/libio.h>
-#include "../include/system_conf.h"
-#include <bsp/milkymist_midi.h>
-
-#define DEVICE_NAME "/dev/midi"
-
-static rtems_id midi_q;
-static unsigned char *midi_p = NULL;
-static unsigned char midi_msg[3];
-
-static rtems_isr interrupt_handler(rtems_vector_number n)
-{
- unsigned char msg;
-
- while (MM_READ(MM_MIDI_STAT) & MIDI_STAT_RX_EVT) {
- msg = MM_READ(MM_MIDI_RXTX);
- MM_WRITE(MM_MIDI_STAT, MIDI_STAT_RX_EVT);
-
- if ((msg & 0xf8) == 0xf8)
- continue; /* ignore system real-time */
-
- if (msg & 0x80)
- midi_p = midi_msg; /* status byte */
-
- if (!midi_p)
- continue; /* ignore extra or unsynchronized data */
-
- *midi_p++ = msg;
-
- if (midi_p == midi_msg+3) {
- /* received a complete MIDI message */
- rtems_message_queue_send(midi_q, midi_msg, 3);
- midi_p = NULL;
- }
- }
- lm32_interrupt_ack(1 << MM_IRQ_MIDI);
-}
-
-rtems_device_driver midi_initialize(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_status_code sc;
- rtems_isr_entry dummy;
-
- sc = rtems_io_register_name(DEVICE_NAME, major, 0);
- RTEMS_CHECK_SC(sc, "create MIDI input device");
-
- sc = rtems_message_queue_create(
- rtems_build_name('M', 'I', 'D', 'I'),
- 32,
- 3,
- 0,
- &midi_q
- );
- RTEMS_CHECK_SC(sc, "create MIDI queue");
-
- rtems_interrupt_catch(interrupt_handler, MM_IRQ_MIDI, &dummy);
- bsp_interrupt_vector_enable(MM_IRQ_MIDI);
- /* Only MIDI THRU mode is supported atm */
- MM_WRITE(MM_MIDI_CTRL, MIDI_CTRL_RX_INT|MIDI_CTRL_THRU);
-
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver midi_open(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- uint32_t count;
-
- rtems_message_queue_flush(midi_q, &count);
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver midi_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;
- rtems_status_code sc;
-
- sc = rtems_message_queue_receive(
- midi_q,
- rw_args->buffer,
- (size_t *)&rw_args->bytes_moved,
- RTEMS_WAIT,
- RTEMS_NO_TIMEOUT
- );
-
- if(sc == RTEMS_SUCCESSFUL)
- return RTEMS_SUCCESSFUL;
- else {
- rw_args->bytes_moved = 0;
- return RTEMS_UNSATISFIED;
- }
-}
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_pfpu/pfpu.c b/c/src/lib/libbsp/lm32/shared/milkymist_pfpu/pfpu.c
deleted file mode 100644
index a9fb38f472..0000000000
--- a/c/src/lib/libbsp/lm32/shared/milkymist_pfpu/pfpu.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/* pfpu.c
- *
- * Milkymist PFPU driver for RTEMS
- *
- * 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.
- *
- * COPYRIGHT (c) 2010, 2011 Sebastien Bourdeauducq
- */
-
-#define RTEMS_STATUS_CHECKS_USE_PRINTK
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <rtems.h>
-#include <bsp.h>
-#include <bsp/irq-generic.h>
-#include <rtems/libio.h>
-#include <rtems/status-checks.h>
-#include "../include/system_conf.h"
-#include <bsp/milkymist_pfpu.h>
-
-#define DEVICE_NAME "/dev/pfpu"
-
-static rtems_id done_sem;
-
-static rtems_isr done_handler(rtems_vector_number n)
-{
- rtems_semaphore_release(done_sem);
- lm32_interrupt_ack(1 << MM_IRQ_PFPU);
-}
-
-rtems_device_driver pfpu_initialize(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_status_code sc;
- rtems_isr_entry dummy;
-
- sc = rtems_io_register_name(DEVICE_NAME, major, 0);
- RTEMS_CHECK_SC(sc, "create PFPU device");
-
- sc = rtems_semaphore_create(
- rtems_build_name('P', 'F', 'P', 'U'),
- 0,
- RTEMS_SIMPLE_BINARY_SEMAPHORE,
- 0,
- &done_sem
- );
- RTEMS_CHECK_SC(sc, "create PFPU done semaphore");
-
- rtems_interrupt_catch(done_handler, MM_IRQ_PFPU, &dummy);
- bsp_interrupt_vector_enable(MM_IRQ_PFPU);
-
- return RTEMS_SUCCESSFUL;
-}
-
-static void load_program(unsigned int *program, int size)
-{
- int page;
- int word;
- volatile unsigned int *pfpu_prog = (unsigned int *)MM_PFPU_CODEBASE;
-
- for (page=0;page<(PFPU_PROGSIZE/PFPU_PAGESIZE);page++) {
- MM_WRITE(MM_PFPU_CODEPAGE, page);
- for (word=0;word<PFPU_PAGESIZE;word++) {
- if (size == 0) return;
- pfpu_prog[word] = *program;
- program++;
- size--;
- }
- }
-}
-
-static void load_registers(float *registers)
-{
- volatile float *pfpu_regs = (float *)MM_PFPU_DREGBASE;
- int i;
-
- for (i=PFPU_SPREG_COUNT;i<PFPU_REG_COUNT;i++)
- pfpu_regs[i] = registers[i];
-}
-
-static void update_registers(float *registers)
-{
- volatile float *pfpu_regs = (float *)MM_PFPU_DREGBASE;
- int i;
-
- for (i=PFPU_SPREG_COUNT;i<PFPU_REG_COUNT;i++)
- registers[i] = pfpu_regs[i];
-}
-
-static rtems_status_code pfpu_execute(struct pfpu_td *td)
-{
- rtems_status_code sc;
-
- load_program(td->program, td->progsize);
- load_registers(td->registers);
- MM_WRITE(MM_PFPU_MESHBASE, (unsigned int)td->output);
- MM_WRITE(MM_PFPU_HMESHLAST, td->hmeshlast);
- MM_WRITE(MM_PFPU_VMESHLAST, td->vmeshlast);
- MM_WRITE(MM_PFPU_CTL, PFPU_CTL_START);
-
- sc = rtems_semaphore_obtain(done_sem, RTEMS_WAIT, 10);
- if (sc != RTEMS_SUCCESSFUL)
- return sc;
-
- if (td->update) {
- update_registers(td->registers);
- if (td->invalidate) {
- __asm__ volatile( /* Invalidate Level-1 data cache */
- "wcsr DCC, r0\n"
- "nop\n"
- );
- }
- }
-
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver pfpu_control(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_libio_ioctl_args_t *args = arg;
-
- args->ioctl_return = -1;
- if (args->command != PFPU_EXECUTE)
- return RTEMS_UNSATISFIED;
-
- if (pfpu_execute((struct pfpu_td *)args->buffer) != RTEMS_SUCCESSFUL)
- return RTEMS_UNSATISFIED;
-
- args->ioctl_return = 0;
- return RTEMS_SUCCESSFUL;
-}
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_timer/timer.c b/c/src/lib/libbsp/lm32/shared/milkymist_timer/timer.c
deleted file mode 100644
index 74d59956ec..0000000000
--- a/c/src/lib/libbsp/lm32/shared/milkymist_timer/timer.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* timer.c
- *
- * This file manages the benchmark timer used by the RTEMS Timing
- * Test Suite. Each measured time period is demarcated by calls to
- * benchmark_timer_initialize() and benchmark_timer_read().
- * benchmark_timer_read() usually returns the number of microseconds
- * since benchmark_timer_initialize() exitted.
- *
- * NOTE: It is important that the timer start/stop overhead be
- * determined when porting or modifying this code.
- *
- * 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.
- *
- * COPYRIGHT (c) Yann Sionneau <yann.sionneau@telecom-sudparis.eu> (GSoC 2010)
- * Telecom SudParis
- */
-
-#include <rtems.h>
-#include <bsp.h>
-#include <rtems/btimer.h>
-#include <rtems/bspIo.h>
-#include "../include/system_conf.h"
-#include "../../shared/clock/clock.h"
-
-bool benchmark_timer_find_average_overhead;
-
-void benchmark_timer_initialize(void)
-{
- MM_WRITE(MM_TIMER1_COMPARE, 0xffffffff);
- MM_WRITE(MM_TIMER1_COUNTER, 0);
- MM_WRITE(MM_TIMER1_CONTROL, TIMER_ENABLE);
-}
-
-/*
- * The following controls the behavior of benchmark_timer_read().
- *
- * AVG_OVEREHAD is the overhead for starting and stopping the timer. It
- * is usually deducted from the number returned.
- *
- * LEAST_VALID is the lowest number this routine should trust. Numbers
- * below this are "noise" and zero is returned.
- */
-
-#define AVG_OVERHEAD 4 /* It typically takes X.X microseconds */
- /* (Y countdowns) to start/stop the timer. */
- /* This value is in microseconds. */
-#define LEAST_VALID 4 /* Don't trust a clicks value lower than this */
-
-benchmark_timer_t benchmark_timer_read(void)
-{
- uint32_t ticks;
- uint32_t total;
-
- ticks = MM_READ(MM_TIMER1_COUNTER);
- if (ticks == 0xffffffff)
- printk("Timer overflow!\n");
-
- total = ticks / (MM_READ(MM_FREQUENCY) / 1000000);
-
- if (benchmark_timer_find_average_overhead)
- return total;
- else
- {
- if (total < LEAST_VALID)
- return 0;
-
- return (total - AVG_OVERHEAD);
- }
-}
-
-void benchmark_timer_disable_subtracting_average_overhead(
- bool find_flag
-)
-{
- benchmark_timer_find_average_overhead = find_flag;
-}
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_tmu/tmu.c b/c/src/lib/libbsp/lm32/shared/milkymist_tmu/tmu.c
deleted file mode 100644
index 10b7b2660c..0000000000
--- a/c/src/lib/libbsp/lm32/shared/milkymist_tmu/tmu.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/* tmu.c
- *
- * Milkymist TMU driver for RTEMS
- *
- * 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.
- *
- * COPYRIGHT (c) 2010, 2011 Sebastien Bourdeauducq
- */
-
-#define RTEMS_STATUS_CHECKS_USE_PRINTK
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <rtems.h>
-#include <bsp.h>
-#include <bsp/irq-generic.h>
-#include <rtems/libio.h>
-#include <rtems/status-checks.h>
-#include "../include/system_conf.h"
-#include <bsp/milkymist_tmu.h>
-
-#define DEVICE_NAME "/dev/tmu"
-
-static rtems_id done_sem;
-
-static rtems_isr done_handler(rtems_vector_number n)
-{
- rtems_semaphore_release(done_sem);
- lm32_interrupt_ack(1 << MM_IRQ_TMU);
-}
-
-rtems_device_driver tmu_initialize(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_status_code sc;
- rtems_isr_entry dummy;
-
- sc = rtems_io_register_name(DEVICE_NAME, major, 0);
- RTEMS_CHECK_SC(sc, "create TMU device");
-
- sc = rtems_semaphore_create(
- rtems_build_name('T', 'M', 'U', ' '),
- 0,
- RTEMS_SIMPLE_BINARY_SEMAPHORE,
- 0,
- &done_sem
- );
- RTEMS_CHECK_SC(sc, "create TMU done semaphore");
-
- rtems_interrupt_catch(done_handler, MM_IRQ_TMU, &dummy);
- bsp_interrupt_vector_enable(MM_IRQ_TMU);
-
- return RTEMS_SUCCESSFUL;
-}
-
-static void invalidate_l2(void)
-{
- volatile char *flushbase = (char *)FMLBRG_FLUSH_BASE;
- int i, offset;
-
- offset = 0;
- for (i=0;i<FMLBRG_LINE_COUNT;i++) {
- flushbase[offset] = 0;
- offset += FMLBRG_LINE_LENGTH;
- }
-}
-
-static bool invalidate_after;
-
-static void tmu_start(struct tmu_td *td)
-{
- if (td->invalidate_before)
- invalidate_l2();
-
- MM_WRITE(MM_TMU_HMESHLAST, td->hmeshlast);
- MM_WRITE(MM_TMU_VMESHLAST, td->vmeshlast);
- MM_WRITE(MM_TMU_BRIGHTNESS, td->brightness);
- MM_WRITE(MM_TMU_CHROMAKEY, td->chromakey);
-
- MM_WRITE(MM_TMU_VERTICESADR, (unsigned int)td->vertices);
- MM_WRITE(MM_TMU_TEXFBUF, (unsigned int)td->texfbuf);
- MM_WRITE(MM_TMU_TEXHRES, td->texhres);
- MM_WRITE(MM_TMU_TEXVRES, td->texvres);
- MM_WRITE(MM_TMU_TEXHMASK, td->texhmask);
- MM_WRITE(MM_TMU_TEXVMASK, td->texvmask);
-
- MM_WRITE(MM_TMU_DSTFBUF, (unsigned int)td->dstfbuf);
- MM_WRITE(MM_TMU_DSTHRES, td->dsthres);
- MM_WRITE(MM_TMU_DSTVRES, td->dstvres);
- MM_WRITE(MM_TMU_DSTHOFFSET, td->dsthoffset);
- MM_WRITE(MM_TMU_DSTVOFFSET, td->dstvoffset);
- MM_WRITE(MM_TMU_DSTSQUAREW, td->dstsquarew);
- MM_WRITE(MM_TMU_DSTSQUAREH, td->dstsquareh);
-
- MM_WRITE(MM_TMU_ALPHA, td->alpha);
-
- MM_WRITE(MM_TMU_CTL, td->flags|TMU_CTL_START);
-
- invalidate_after = td->invalidate_after;
-}
-
-static rtems_status_code tmu_finalize(void)
-{
- rtems_status_code sc;
-
- sc = rtems_semaphore_obtain(done_sem, RTEMS_WAIT, 100);
- if (sc != RTEMS_SUCCESSFUL)
- return sc;
-
- if (invalidate_after) {
- invalidate_l2();
- __asm__ volatile( /* Invalidate Level-1 data cache */
- "wcsr DCC, r0\n"
- "nop\n"
- );
- }
-
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver tmu_control(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_libio_ioctl_args_t *args = arg;
- struct tmu_td *td = (struct tmu_td *)args->buffer;
- rtems_status_code sc;
-
- switch (args->command) {
- case TMU_EXECUTE:
- tmu_start(td);
- sc = tmu_finalize();
- break;
- case TMU_EXECUTE_NONBLOCK:
- tmu_start(td);
- sc = RTEMS_SUCCESSFUL;
- break;
- case TMU_EXECUTE_WAIT:
- sc = tmu_finalize();
- break;
- default:
- sc = RTEMS_UNSATISFIED;
- break;
- }
-
- if (sc == RTEMS_SUCCESSFUL)
- args->ioctl_return = 0;
- else
- args->ioctl_return = -1;
-
- return sc;
-}
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/comloc.h b/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/comloc.h
deleted file mode 100644
index 187792f348..0000000000
--- a/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/comloc.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * @file
- * @ingroup lm32_milkymist_usbinput lm32_milkymist_shared
- * @brief Milkymist USB input devices driver
- */
-
-/* comloc.h
- *
- * Milkymist USB input devices driver for RTEMS
- *
- * 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.
- *
- * COPYRIGHT (c) 2010 Sebastien Bourdeauducq
- */
-
-#ifndef __COMLOC_H_
-#define __COMLOC_H_
-
-#define COMLOCV(x) (*(volatile unsigned char *)(x))
-
-#define COMLOC_DEBUG_PRODUCE COMLOCV(MM_SOFTUSB_DMEM_BASE+0x1000)
-#define COMLOC_DEBUG(offset) COMLOCV(MM_SOFTUSB_DMEM_BASE+0x1001+offset)
-#define COMLOC_MEVT_PRODUCE COMLOCV(MM_SOFTUSB_DMEM_BASE+0x1101)
-#define COMLOC_MEVT(offset) COMLOCV(MM_SOFTUSB_DMEM_BASE+0x1102+offset)
-#define COMLOC_KEVT_PRODUCE COMLOCV(MM_SOFTUSB_DMEM_BASE+0x1142)
-#define COMLOC_KEVT(offset) COMLOCV(MM_SOFTUSB_DMEM_BASE+0x1143+offset)
-#define COMLOC_MIDI_PRODUCE COMLOCV(MM_SOFTUSB_DMEM_BASE+0x1183)
-#define COMLOC_MIDI(offset) COMLOCV(MM_SOFTUSB_DMEM_BASE+0x1184+offset)
-
-#endif /* __COMLOC_H_ */
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/usbinput.c b/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/usbinput.c
deleted file mode 100644
index de924b177f..0000000000
--- a/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/usbinput.c
+++ /dev/null
@@ -1,179 +0,0 @@
-/* usbinput.c
- *
- * Milkymist USB input devices driver for RTEMS
- *
- * 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.
- *
- * COPYRIGHT (c) 2010, 2011, 2012 Sebastien Bourdeauducq
- */
-
-#define RTEMS_STATUS_CHECKS_USE_PRINTK
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <rtems.h>
-#include <bsp.h>
-#include <bsp/irq-generic.h>
-#include <rtems/libio.h>
-#include <rtems/status-checks.h>
-#include "../include/system_conf.h"
-#include <bsp/milkymist_usbinput.h>
-
-#include "comloc.h"
-
-#define DEVICE_NAME "/dev/usbinput"
-
-static int mouse_consume;
-static int keyboard_consume;
-static int midi_consume;
-
-static rtems_id event_q;
-
-static rtems_isr interrupt_handler(rtems_vector_number n)
-{
- unsigned char msg[8];
- int i;
-
- lm32_interrupt_ack(1 << MM_IRQ_USB);
-
- while(mouse_consume != COMLOC_MEVT_PRODUCE) {
- for(i=0;i<4;i++)
- msg[i] = COMLOC_MEVT(4*mouse_consume+i);
- rtems_message_queue_send(event_q, msg, 4);
- mouse_consume = (mouse_consume + 1) & 0x0f;
- }
-
- while(keyboard_consume != COMLOC_KEVT_PRODUCE) {
- for(i=0;i<8;i++)
- msg[i] = COMLOC_KEVT(8*keyboard_consume+i);
- rtems_message_queue_send(event_q, msg, 8);
- keyboard_consume = (keyboard_consume + 1) & 0x07;
- }
-
- while(midi_consume != COMLOC_MIDI_PRODUCE) {
- for(i=0;i<3;i++)
- msg[i] = COMLOC_MIDI(4*midi_consume+i+1);
- rtems_message_queue_send(event_q, msg, 3);
- midi_consume = (midi_consume + 1) & 0x0f;
- }
-
-}
-
-rtems_device_driver usbinput_initialize(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_status_code sc;
- rtems_isr_entry dummy;
-
- MM_WRITE(MM_SOFTUSB_CONTROL, SOFTUSB_CONTROL_RESET);
-
- mouse_consume = 0;
- keyboard_consume = 0;
- midi_consume = 0;
-
- sc = rtems_io_register_name(DEVICE_NAME, major, 0);
- RTEMS_CHECK_SC(sc, "create USB input device");
-
- sc = rtems_message_queue_create(
- rtems_build_name('U', 'S', 'B', 'I'),
- 64,
- 8,
- 0,
- &event_q
- );
- RTEMS_CHECK_SC(sc, "create USB event queue");
-
- rtems_interrupt_catch(interrupt_handler, MM_IRQ_USB, &dummy);
- bsp_interrupt_vector_enable(MM_IRQ_USB);
-
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver usbinput_open(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- uint32_t count;
-
- rtems_message_queue_flush(event_q, &count);
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver usbinput_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;
- rtems_status_code sc;
-
- if(rw_args->count < 8) {
- rw_args->bytes_moved = 0;
- return RTEMS_UNSATISFIED;
- }
-
- sc = rtems_message_queue_receive(
- event_q,
- rw_args->buffer,
- (size_t *)&rw_args->bytes_moved,
- RTEMS_WAIT,
- RTEMS_NO_TIMEOUT
- );
-
- if(sc == RTEMS_SUCCESSFUL)
- return RTEMS_SUCCESSFUL;
- else {
- rw_args->bytes_moved = 0;
- return RTEMS_UNSATISFIED;
- }
-}
-
-static void load_firmware(const unsigned char *firmware, int length)
-{
- int i, nwords;
- volatile unsigned int *usb_dmem
- = (volatile unsigned int *)MM_SOFTUSB_DMEM_BASE;
- volatile unsigned int *usb_pmem
- = (volatile unsigned int *)MM_SOFTUSB_PMEM_BASE;
-
- MM_WRITE(MM_SOFTUSB_CONTROL, SOFTUSB_CONTROL_RESET);
- for(i=0;i<SOFTUSB_DMEM_SIZE/4;i++)
- usb_dmem[i] = 0;
- for(i=0;i<SOFTUSB_PMEM_SIZE/2;i++)
- usb_pmem[i] = 0;
- nwords = (length+1)/2;
- for(i=0;i<nwords;i++)
- usb_pmem[i] = ((unsigned int)(firmware[2*i]))
- |((unsigned int)(firmware[2*i+1]) << 8);
- MM_WRITE(MM_SOFTUSB_CONTROL, 0);
-}
-
-rtems_device_driver usbinput_control(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_libio_ioctl_args_t *args = arg;
- struct usbinput_firmware_description *fd
- = (struct usbinput_firmware_description *)args->buffer;
-
- if(args->command == USBINPUT_LOAD_FIRMWARE) {
- load_firmware(fd->data, fd->length);
- args->ioctl_return = 0;
- return RTEMS_SUCCESSFUL;
- } else {
- args->ioctl_return = -1;
- return RTEMS_UNSATISFIED;
- }
-}
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_versions/versions.c b/c/src/lib/libbsp/lm32/shared/milkymist_versions/versions.c
deleted file mode 100644
index 84b2b5d2fb..0000000000
--- a/c/src/lib/libbsp/lm32/shared/milkymist_versions/versions.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/* versions.c
- *
- * Milkymist versioning driver for RTEMS
- *
- * 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.
- *
- * COPYRIGHT (c) 2010, 2011 Sebastien Bourdeauducq
- */
-
-#define RTEMS_STATUS_CHECKS_USE_PRINTK
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <rtems.h>
-#include <rtems/status-checks.h>
-#include <bsp.h>
-#include <rtems/libio.h>
-#include "../include/system_conf.h"
-#include <bsp/milkymist_versions.h>
-
-#define SOC_DEVICE_NAME "/dev/soc"
-#define PCB_DEVICE_NAME "/dev/pcb"
-#define PCBREV_DEVICE_NAME "/dev/pcb_rev"
-
-rtems_device_driver versions_initialize(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_status_code sc;
-
- sc = rtems_io_register_name(SOC_DEVICE_NAME, major, 0);
- RTEMS_CHECK_SC(sc, "create SoC version device");
- sc = rtems_io_register_name(PCB_DEVICE_NAME, major, 1);
- RTEMS_CHECK_SC(sc, "create PCB type device");
- sc = rtems_io_register_name(PCBREV_DEVICE_NAME, major, 2);
- RTEMS_CHECK_SC(sc, "create PCB revision device");
-
- return RTEMS_SUCCESSFUL;
-}
-
-static int get_soc_version(char *buffer)
-{
- char fmt[13];
- char *version;
- int len;
- unsigned int id;
- unsigned int major, minor, subminor, rc;
-
- id = MM_READ(MM_SYSTEM_ID);
- major = (id & 0xf0000000) >> 28;
- minor = (id & 0x0f000000) >> 24;
- subminor = (id & 0x00f00000) >> 20;
- rc = (id & 0x000f0000) >> 16;
-
- version = fmt;
- version += sprintf(version, "%u.%u", major, minor);
- if (subminor != 0)
- version += sprintf(version, ".%u", subminor);
- if (rc != 0)
- version += sprintf(version, "RC%u", rc);
-
- len = version - fmt;
- memcpy(buffer, fmt, len);
- return len;
-}
-
-static int get_pcb_type(char *buffer)
-{
- unsigned int id;
-
- id = MM_READ(MM_SYSTEM_ID);
- buffer[0] = (id & 0x0000ff00) >> 8;
- buffer[1] = id & 0x000000ff;
- return 2;
-}
-
-static int get_pcb_revision(char *buffer)
-{
- unsigned int v;
-
- v = MM_READ(MM_GPIO_IN);
- v = (v & 0x78) >> 3;
- buffer[0] = '0' + v;
- return 1;
-}
-
-rtems_device_driver versions_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;
-
- if(rw_args->offset != 0) {
- rw_args->bytes_moved = 0;
- return RTEMS_SUCCESSFUL;
- }
-
- switch (minor) {
- case 0:
- if (rw_args->count < 12) {
- rw_args->bytes_moved = 0;
- return RTEMS_UNSATISFIED;
- }
- rw_args->bytes_moved = get_soc_version((char *)rw_args->buffer);
- return RTEMS_SUCCESSFUL;
- case 1:
- if (rw_args->count < 2) {
- rw_args->bytes_moved = 0;
- return RTEMS_UNSATISFIED;
- }
- rw_args->bytes_moved = get_pcb_type((char *)rw_args->buffer);
- return RTEMS_SUCCESSFUL;
- case 2:
- if (rw_args->count < 1) {
- rw_args->bytes_moved = 0;
- return RTEMS_UNSATISFIED;
- }
- rw_args->bytes_moved = get_pcb_revision((char *)rw_args->buffer);
- return RTEMS_SUCCESSFUL;
- }
-
- rw_args->bytes_moved = 0;
- return RTEMS_UNSATISFIED;
-}
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_video/video.c b/c/src/lib/libbsp/lm32/shared/milkymist_video/video.c
deleted file mode 100644
index bb6bf62928..0000000000
--- a/c/src/lib/libbsp/lm32/shared/milkymist_video/video.c
+++ /dev/null
@@ -1,391 +0,0 @@
-/* video.c
- *
- * Milkymist video input driver for RTEMS
- *
- * 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.
- *
- * COPYRIGHT (c) 2010, 2011 Sebastien Bourdeauducq
- */
-
-#define RTEMS_STATUS_CHECKS_USE_PRINTK
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <rtems.h>
-#include <bsp.h>
-#include <bsp/irq-generic.h>
-#include <rtems/libio.h>
-#include <rtems/status-checks.h>
-#include <rtems/bspIo.h>
-#include "../include/system_conf.h"
-#include <bsp/milkymist_video.h>
-
-#define DEVICE_NAME "/dev/video"
-#define N_BUFFERS 3
-#define FRAME_W 720
-#define FRAME_H 288
-
-static bool buffers_locked[N_BUFFERS];
-static void *buffers[N_BUFFERS];
-static int last_buffer;
-static int current_buffer;
-
-static rtems_isr frame_handler(rtems_vector_number n)
-{
- int remaining_attempts;
-
- lm32_interrupt_ack(1 << MM_IRQ_VIDEOIN);
-
- last_buffer = current_buffer;
-
- /* get a new buffer */
- remaining_attempts = N_BUFFERS;
- do {
- current_buffer++;
- if(current_buffer == N_BUFFERS)
- current_buffer = 0;
- remaining_attempts--;
- } while(buffers_locked[current_buffer] && (remaining_attempts > 0));
-
- MM_WRITE(MM_BT656_BASE, (unsigned int)buffers[current_buffer]);
-
- if(buffers_locked[current_buffer])
- printk("Failed to find unlocked buffer\n");
-}
-
-static void i2c_delay(void)
-{
- unsigned int i;
-
- for(i=0;i<1000;i++) __asm__("nop");
-}
-
-/* I2C bit-banging functions from http://en.wikipedia.org/wiki/I2c */
-static unsigned int i2c_read_bit(void)
-{
- unsigned int bit;
-
- /* Let the slave drive data */
- MM_WRITE(MM_BT656_I2C, 0);
- i2c_delay();
- MM_WRITE(MM_BT656_I2C, BT656_I2C_SDC);
- i2c_delay();
- bit = MM_READ(MM_BT656_I2C) & BT656_I2C_SDAIN;
- i2c_delay();
- MM_WRITE(MM_BT656_I2C, 0);
- return bit;
-}
-
-static void i2c_write_bit(unsigned int bit)
-{
- if(bit) {
- MM_WRITE(MM_BT656_I2C, BT656_I2C_SDAOE|BT656_I2C_SDAOUT);
- } else {
- MM_WRITE(MM_BT656_I2C, BT656_I2C_SDAOE);
- }
- i2c_delay();
- MM_WRITE(MM_BT656_I2C, MM_READ(MM_BT656_I2C) | BT656_I2C_SDC);
- i2c_delay();
- MM_WRITE(MM_BT656_I2C, MM_READ(MM_BT656_I2C) & ~BT656_I2C_SDC);
-}
-
-static int i2c_started;
-
-static void i2c_start_cond(void)
-{
- if(i2c_started) {
- /* set SDA to 1 */
- MM_WRITE(MM_BT656_I2C, BT656_I2C_SDAOE|BT656_I2C_SDAOUT);
- i2c_delay();
- MM_WRITE(MM_BT656_I2C, MM_READ(MM_BT656_I2C) | BT656_I2C_SDC);
- }
- /* SCL is high, set SDA from 1 to 0 */
- MM_WRITE(MM_BT656_I2C, BT656_I2C_SDAOE|BT656_I2C_SDC);
- i2c_delay();
- MM_WRITE(MM_BT656_I2C, BT656_I2C_SDAOE);
- i2c_started = 1;
-}
-
-static void i2c_stop_cond(void)
-{
- /* set SDA to 0 */
- MM_WRITE(MM_BT656_I2C, BT656_I2C_SDAOE);
- i2c_delay();
- /* Clock stretching */
- MM_WRITE(MM_BT656_I2C, BT656_I2C_SDAOE|BT656_I2C_SDC);
- /* SCL is high, set SDA from 0 to 1 */
- MM_WRITE(MM_BT656_I2C, BT656_I2C_SDC);
- i2c_delay();
- i2c_started = 0;
-}
-
-static unsigned int i2c_write(unsigned char byte)
-{
- unsigned int bit;
- unsigned int ack;
-
- for(bit = 0; bit < 8; bit++) {
- i2c_write_bit(byte & 0x80);
- byte <<= 1;
- }
- ack = !i2c_read_bit();
- return ack;
-}
-
-static unsigned char i2c_read(int ack)
-{
- unsigned char byte = 0;
- unsigned int bit;
-
- for(bit = 0; bit < 8; bit++) {
- byte <<= 1;
- byte |= i2c_read_bit();
- }
- i2c_write_bit(!ack);
- return byte;
-}
-
-static unsigned char read_reg(unsigned char addr)
-{
- unsigned char r;
-
- i2c_start_cond();
- i2c_write(0x40);
- i2c_write(addr);
- i2c_start_cond();
- i2c_write(0x41);
- r = i2c_read(0);
- i2c_stop_cond();
-
- return r;
-}
-
-static void write_reg(unsigned char addr, unsigned char val)
-{
- i2c_start_cond();
- i2c_write(0x40);
- i2c_write(addr);
- i2c_write(val);
- i2c_stop_cond();
-}
-
-static const char vreg_addr[] = {
- 0x1d, 0xc3, 0xc4
-};
-
-static const char vreg_dat[] = {
- 0x40, 0x05, 0x80
-};
-
-rtems_device_driver video_initialize(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_status_code sc;
- rtems_isr_entry dummy;
- int i;
-
- MM_WRITE(MM_BT656_I2C, BT656_I2C_SDC);
-
- sc = rtems_io_register_name(DEVICE_NAME, major, 0);
- RTEMS_CHECK_SC(sc, "create video input device");
-
- rtems_interrupt_catch(frame_handler, MM_IRQ_VIDEOIN, &dummy);
- bsp_interrupt_vector_enable(MM_IRQ_VIDEOIN);
-
- for(i=0;i<sizeof(vreg_addr);i++)
- write_reg(vreg_addr[i], vreg_dat[i]);
-
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver video_open(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- int i;
- int status;
-
- for(i=0;i<N_BUFFERS;i++) {
- status = posix_memalign(&buffers[i], 32, 2*FRAME_W*FRAME_H);
- if(status != 0) {
- i--;
- while(i > 0) {
- free(buffers[i]);
- i--;
- }
- return RTEMS_UNSATISFIED;
- }
- }
-
- last_buffer = -1;
- current_buffer = 0;
-
- MM_WRITE(MM_BT656_BASE, (unsigned int)buffers[current_buffer]);
- MM_WRITE(MM_BT656_FILTERSTATUS, BT656_FILTER_FIELD1);
-
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver video_close(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- int i;
-
- MM_WRITE(MM_BT656_FILTERSTATUS, 0);
- while(MM_READ(MM_BT656_FILTERSTATUS) & BT656_FILTER_INFRAME);
- for(i=0;i<N_BUFFERS;i++)
- free(buffers[i]);
- return RTEMS_SUCCESSFUL;
-}
-
-static void invalidate_caches(void)
-{
- volatile char *flushbase = (char *)FMLBRG_FLUSH_BASE;
- int i, offset;
-
- offset = 0;
- for (i=0;i<FMLBRG_LINE_COUNT;i++) {
- flushbase[offset] = 0;
- offset += FMLBRG_LINE_LENGTH;
- }
- __asm__ volatile( /* Invalidate Level-1 data cache */
- "wcsr DCC, r0\n"
- "nop\n"
- );
-}
-
-static void set_format(int format)
-{
- switch(format) {
- case VIDEO_FORMAT_CVBS6:
- write_reg(0x00, 0x00);
- write_reg(0xc3, 0x05);
- write_reg(0xc4, 0x80);
- break;
- case VIDEO_FORMAT_CVBS5:
- write_reg(0x00, 0x00);
- write_reg(0xc3, 0x0d);
- write_reg(0xc4, 0x80);
- break;
- case VIDEO_FORMAT_CVBS4:
- write_reg(0x00, 0x00);
- write_reg(0xc3, 0x04);
- write_reg(0xc4, 0x80);
- break;
- case VIDEO_FORMAT_SVIDEO:
- write_reg(0x00, 0x06);
- write_reg(0xc3, 0xd5);
- write_reg(0xc4, 0x80);
- break;
- case VIDEO_FORMAT_COMPONENT:
- write_reg(0x00, 0x09);
- write_reg(0xc3, 0x45);
- write_reg(0xc4, 0x8d);
- break;
- }
-}
-
-rtems_device_driver video_control(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_libio_ioctl_args_t *args = arg;
- unsigned int *a = (unsigned int *)args->buffer;
- rtems_status_code sc;
-
- switch (args->command) {
- case VIDEO_BUFFER_LOCK:
- if (last_buffer == -1) {
- *a = 0;
- } else {
- bsp_interrupt_vector_disable(MM_IRQ_VIDEOIN);
- if(*a) invalidate_caches();
- *a = (unsigned int)buffers[last_buffer];
- buffers_locked[last_buffer] = true;
- bsp_interrupt_vector_enable(MM_IRQ_VIDEOIN);
- }
- sc = RTEMS_SUCCESSFUL;
- break;
- case VIDEO_BUFFER_UNLOCK: {
- int i;
- for(i=0;i<N_BUFFERS;i++) {
- if ((unsigned int)buffers[i] == (unsigned int)a) {
- buffers_locked[i] = false;
- break;
- }
- }
- sc = RTEMS_SUCCESSFUL;
- break;
- }
-
- case VIDEO_SET_BRIGHTNESS:
- write_reg(0x0a, (unsigned int)a);
- sc = RTEMS_SUCCESSFUL;
- break;
- case VIDEO_GET_BRIGHTNESS:
- *a = read_reg(0x0a);
- sc = RTEMS_SUCCESSFUL;
- break;
- case VIDEO_SET_CONTRAST:
- write_reg(0x08, (unsigned int)a);
- sc = RTEMS_SUCCESSFUL;
- break;
- case VIDEO_GET_CONTRAST:
- *a = read_reg(0x08);
- sc = RTEMS_SUCCESSFUL;
- break;
- case VIDEO_SET_HUE:
- write_reg(0x0b, (unsigned int)a);
- sc = RTEMS_SUCCESSFUL;
- break;
- case VIDEO_GET_HUE:
- *a = read_reg(0x0b);
- sc = RTEMS_SUCCESSFUL;
- break;
-
- case VIDEO_GET_SIGNAL:
- *a = read_reg(0x10);
- sc = RTEMS_SUCCESSFUL;
- break;
-
- case VIDEO_SET_REGISTER:
- write_reg(((unsigned int)a & 0xffff0000) >> 16,
- (unsigned int)a & 0x0000ffff);
- sc = RTEMS_SUCCESSFUL;
- break;
- case VIDEO_GET_REGISTER:
- *a = read_reg(*a);
- sc = RTEMS_SUCCESSFUL;
- break;
-
- case VIDEO_SET_FORMAT:
- set_format((int)a);
- sc = RTEMS_SUCCESSFUL;
- break;
-
- default:
- sc = RTEMS_UNSATISFIED;
- break;
- }
-
- if (sc == RTEMS_SUCCESSFUL)
- args->ioctl_return = 0;
- else
- args->ioctl_return = -1;
-
- return sc;
-}