136 lines
3.3 KiB
C
136 lines
3.3 KiB
C
/*
|
|
* driver_vec.c
|
|
*
|
|
* Expose BaS drivers to OS
|
|
*
|
|
* This file is part of BaS_gcc.
|
|
*
|
|
* BaS_gcc is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* BaS_gcc is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with BaS_gcc. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*
|
|
* Created on: 24.10.2013
|
|
* Author: Markus Fröschle
|
|
*/
|
|
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
#include "version.h"
|
|
#include "xhdi_sd.h"
|
|
#include "dma.h"
|
|
#include "driver_vec.h"
|
|
#include "driver_mem.h"
|
|
|
|
/*
|
|
* driver interface struct for the SD card BaS driver
|
|
*/
|
|
static struct xhdi_driver_interface xhdi_call_interface =
|
|
{
|
|
xhdi_call
|
|
};
|
|
|
|
/*
|
|
* driver interface struct for the BaS multichannel DMA driver
|
|
* This is exactly the same thing FireTOS provides and the MiNT FEC drivers expect.
|
|
* It can be directly used in TOS to register the corresponding cookie ("DMAC").
|
|
*/
|
|
static struct dma_driver_interface dma_interface =
|
|
{
|
|
.version = 0x0101,
|
|
.magic = 0x444d4143, /* 'DMAC' */
|
|
.dma_set_initiator = dma_set_initiator,
|
|
.dma_get_initiator = dma_get_initiator,
|
|
.dma_free_initiator = dma_free_initiator,
|
|
.dma_set_channel = dma_set_channel,
|
|
.dma_get_channel = dma_get_channel,
|
|
.dma_free_channel = dma_free_channel,
|
|
.dma_clear_channel = dma_clear_channel,
|
|
.MCD_startDma = MCD_startDma,
|
|
.MCD_dmaStatus = MCD_dmaStatus,
|
|
.MCD_XferProgrQuery = MCD_XferProgrQuery,
|
|
.MCD_killDma = MCD_killDma,
|
|
.MCD_continDma = MCD_continDma,
|
|
.MCD_pauseDma = MCD_pauseDma,
|
|
.MCD_resumeDma = MCD_resumeDma,
|
|
.MCD_csumQuery = MCD_csumQuery,
|
|
.dma_malloc = driver_mem_alloc,
|
|
.dma_free = driver_mem_free
|
|
};
|
|
|
|
extern const struct fb_info *info_fb;
|
|
|
|
/*
|
|
* driver interface struct for the BaS framebuffer video driver
|
|
*/
|
|
static struct framebuffer_driver_interface framebuffer_interface =
|
|
{
|
|
.framebuffer_info = &info_fb
|
|
};
|
|
|
|
static struct generic_interface interfaces[] =
|
|
{
|
|
{
|
|
/* BaS SD-card driver interface */
|
|
|
|
.type = XHDI_DRIVER,
|
|
.name = "SDCARD",
|
|
.description = "BaS SD Card driver",
|
|
.version = 0,
|
|
.revision = 1,
|
|
.interface.xhdi = &xhdi_call_interface
|
|
},
|
|
{
|
|
.type = MCD_DRIVER,
|
|
.name = "MCDDMA",
|
|
.description = "BaS Multichannel DMA driver",
|
|
.version = 0,
|
|
.revision = 1,
|
|
.interface.dma = &dma_interface,
|
|
},
|
|
{
|
|
.type = VIDEO_DRIVER,
|
|
.name = "RADEON",
|
|
.description = "BaS RADEON framebuffer driver",
|
|
.version = 0,
|
|
.revision = 1,
|
|
.interface.fb = &framebuffer_interface,
|
|
},
|
|
|
|
/* insert new drivers here */
|
|
|
|
{
|
|
.type = END_OF_DRIVERS
|
|
}
|
|
};
|
|
|
|
/*
|
|
* this is the driver table we expose to the OS
|
|
*/
|
|
static struct driver_table bas_drivers =
|
|
{
|
|
.bas_version = MAJOR_VERSION,
|
|
.bas_revision = MINOR_VERSION,
|
|
.remove_handler = NULL,
|
|
.interfaces = { interfaces }
|
|
};
|
|
|
|
void __attribute__((interrupt)) get_bas_drivers(void)
|
|
{
|
|
__asm__ __volatile__(
|
|
"move.l #%[drivers],d0\n\t"
|
|
: /* no output */
|
|
: [drivers] "o" (bas_drivers) /* input */
|
|
: /* clobber */
|
|
);
|
|
}
|