forked from Imagelibrary/rtems
@@ -26,7 +26,6 @@
|
||||
#include <inttypes.h>
|
||||
|
||||
#include <rtems/blkdev.h>
|
||||
#include <rtems/diskdevs.h>
|
||||
#include <rtems/nvdisk.h>
|
||||
#include <rtems/thread.h>
|
||||
|
||||
@@ -93,10 +92,8 @@ typedef struct rtems_nvdisk_device_ctl
|
||||
* The NV disk control structure for a single disk. There is one
|
||||
* for each minor disk in the system.
|
||||
*/
|
||||
typedef struct rtems_mvdisk
|
||||
typedef struct
|
||||
{
|
||||
rtems_device_major_number major; /**< The driver's major number. */
|
||||
rtems_device_minor_number minor; /**< The driver's minor number. */
|
||||
uint32_t flags; /**< configuration flags. */
|
||||
uint32_t block_size; /**< The block size for this disk. */
|
||||
uint32_t block_count; /**< The number of available blocks. */
|
||||
@@ -107,16 +104,6 @@ typedef struct rtems_mvdisk
|
||||
uint32_t info_level; /**< The info trace level. */
|
||||
} rtems_nvdisk;
|
||||
|
||||
/**
|
||||
* The array of NV disks we support.
|
||||
*/
|
||||
static rtems_nvdisk* rtems_nvdisks;
|
||||
|
||||
/**
|
||||
* The number of NV disks we have.
|
||||
*/
|
||||
static uint32_t rtems_nvdisk_count;
|
||||
|
||||
/**
|
||||
* The CRC16 factor table. Created during initialisation.
|
||||
*/
|
||||
@@ -688,17 +675,10 @@ rtems_nvdisk_erase_disk (rtems_nvdisk* nvd)
|
||||
static int
|
||||
rtems_nvdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
|
||||
{
|
||||
dev_t dev = rtems_disk_get_device_identifier (dd);
|
||||
rtems_device_minor_number minor = rtems_filesystem_dev_minor_t (dev);
|
||||
rtems_blkdev_request* r = argp;
|
||||
rtems_nvdisk* nvd = rtems_disk_get_driver_data (dd);
|
||||
rtems_blkdev_request* r = argp;
|
||||
|
||||
if (minor >= rtems_nvdisk_count)
|
||||
{
|
||||
errno = ENODEV;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (rtems_nvdisks[minor].device_count == 0)
|
||||
if (nvd->device_count == 0)
|
||||
{
|
||||
errno = ENODEV;
|
||||
return -1;
|
||||
@@ -706,7 +686,7 @@ rtems_nvdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
|
||||
|
||||
errno = 0;
|
||||
|
||||
rtems_mutex_lock (&rtems_nvdisks[minor].lock);
|
||||
rtems_mutex_lock (&nvd->lock);
|
||||
|
||||
switch (req)
|
||||
{
|
||||
@@ -714,11 +694,11 @@ rtems_nvdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
|
||||
switch (r->req)
|
||||
{
|
||||
case RTEMS_BLKDEV_REQ_READ:
|
||||
errno = rtems_nvdisk_read (&rtems_nvdisks[minor], r);
|
||||
errno = rtems_nvdisk_read (nvd, r);
|
||||
break;
|
||||
|
||||
case RTEMS_BLKDEV_REQ_WRITE:
|
||||
errno = rtems_nvdisk_write (&rtems_nvdisks[minor], r);
|
||||
errno = rtems_nvdisk_write (nvd, r);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -728,11 +708,11 @@ rtems_nvdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
|
||||
break;
|
||||
|
||||
case RTEMS_NVDISK_IOCTL_ERASE_DISK:
|
||||
errno = rtems_nvdisk_erase_disk (&rtems_nvdisks[minor]);
|
||||
errno = rtems_nvdisk_erase_disk (nvd);
|
||||
break;
|
||||
|
||||
case RTEMS_NVDISK_IOCTL_INFO_LEVEL:
|
||||
rtems_nvdisks[minor].info_level = (uintptr_t) argp;
|
||||
nvd->info_level = (uintptr_t) argp;
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -740,7 +720,7 @@ rtems_nvdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
|
||||
break;
|
||||
}
|
||||
|
||||
rtems_mutex_unlock (&rtems_nvdisks[minor].lock);
|
||||
rtems_mutex_unlock (&nvd->lock);
|
||||
|
||||
return errno == 0 ? 0 : -1;
|
||||
}
|
||||
@@ -755,41 +735,31 @@ rtems_nvdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
|
||||
* @param arg Initialization argument, not applicable.
|
||||
*/
|
||||
rtems_device_driver
|
||||
rtems_nvdisk_initialize (rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
rtems_nvdisk_initialize (rtems_device_major_number major RTEMS_UNUSED,
|
||||
rtems_device_minor_number minor RTEMS_UNUSED,
|
||||
void* arg RTEMS_UNUSED)
|
||||
{
|
||||
const rtems_nvdisk_config* c = rtems_nvdisk_configuration;
|
||||
rtems_nvdisk* nvd;
|
||||
rtems_status_code sc;
|
||||
|
||||
sc = rtems_disk_io_initialize ();
|
||||
if (sc != RTEMS_SUCCESSFUL)
|
||||
return sc;
|
||||
uint32_t i;
|
||||
|
||||
sc = rtems_nvdisk_crc16_gen_factors (0x8408);
|
||||
if (sc != RTEMS_SUCCESSFUL)
|
||||
return sc;
|
||||
|
||||
rtems_nvdisks = calloc (rtems_nvdisk_configuration_size,
|
||||
sizeof (rtems_nvdisk));
|
||||
|
||||
if (!rtems_nvdisks)
|
||||
nvd = calloc (rtems_nvdisk_configuration_size, sizeof (*nvd));
|
||||
if (!nvd)
|
||||
return RTEMS_NO_MEMORY;
|
||||
|
||||
for (minor = 0; minor < rtems_nvdisk_configuration_size; minor++, c++)
|
||||
for (i = 0; i < rtems_nvdisk_configuration_size; i++, c++, nvd++)
|
||||
{
|
||||
char name[] = RTEMS_NVDISK_DEVICE_BASE_NAME "a";
|
||||
dev_t dev = rtems_filesystem_make_dev_t (major, minor);
|
||||
uint32_t device;
|
||||
uint32_t blocks = 0;
|
||||
|
||||
nvd = &rtems_nvdisks[minor];
|
||||
name [sizeof(RTEMS_NVDISK_DEVICE_BASE_NAME)] += i;
|
||||
|
||||
name [sizeof(RTEMS_NVDISK_DEVICE_BASE_NAME)] += minor;
|
||||
|
||||
nvd->major = major;
|
||||
nvd->minor = minor;
|
||||
nvd->flags = c->flags;
|
||||
nvd->block_size = c->block_size;
|
||||
nvd->info_level = c->info_level;
|
||||
@@ -815,8 +785,8 @@ rtems_nvdisk_initialize (rtems_device_major_number major,
|
||||
nvd->block_count = blocks;
|
||||
nvd->device_count = c->device_count;
|
||||
|
||||
sc = rtems_disk_create_phys(dev, c->block_size, blocks,
|
||||
rtems_nvdisk_ioctl, NULL, name);
|
||||
sc = rtems_blkdev_create(name, c->block_size, blocks,
|
||||
rtems_nvdisk_ioctl, nvd);
|
||||
if (sc != RTEMS_SUCCESSFUL)
|
||||
{
|
||||
rtems_nvdisk_error ("disk create phy failed");
|
||||
@@ -826,7 +796,5 @@ rtems_nvdisk_initialize (rtems_device_major_number major,
|
||||
rtems_mutex_init (&nvd->lock, "NV Disk");
|
||||
}
|
||||
|
||||
rtems_nvdisk_count = rtems_nvdisk_configuration_size;
|
||||
|
||||
return RTEMS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
@@ -75,58 +75,6 @@ const rtems_nvdisk_config rtems_nvdisk_configuration[] =
|
||||
*/
|
||||
uint32_t rtems_nvdisk_configuration_size = 1;
|
||||
|
||||
/**
|
||||
* Create the NV Disk Driver entry.
|
||||
*/
|
||||
rtems_driver_address_table rtems_nvdisk_io_ops = {
|
||||
initialization_entry: rtems_nvdisk_initialize,
|
||||
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
|
||||
};
|
||||
|
||||
#if 0
|
||||
int
|
||||
setup_nvdisk (const char* mntpath)
|
||||
{
|
||||
rtems_device_major_number major;
|
||||
rtems_status_code sc;
|
||||
|
||||
/*
|
||||
* For our test we do not have any static RAM or EEPROM devices so
|
||||
* we allocate the memory from the heap.
|
||||
*/
|
||||
rtems_nv_heap_device_descriptor[0].base =
|
||||
malloc (rtems_nv_heap_device_descriptor[0].size);
|
||||
|
||||
if (!rtems_nv_heap_device_descriptor[0].base)
|
||||
{
|
||||
printf ("error: no memory for NV disk\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Register the NV Disk driver.
|
||||
*/
|
||||
printf ("Register NV Disk Driver: ");
|
||||
sc = rtems_io_register_driver (RTEMS_DRIVER_AUTO_MAJOR,
|
||||
&rtems_nvdisk_io_ops,
|
||||
&major);
|
||||
if (sc != RTEMS_SUCCESSFUL)
|
||||
{
|
||||
printf ("error: nvdisk driver not initialised: %s\n",
|
||||
rtems_status_text (sc));
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf ("successful\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Table of FAT file systems that will be mounted
|
||||
* with the "fsmount" function.
|
||||
@@ -473,7 +421,6 @@ create_ramdisk (int argc, char *argv[])
|
||||
static int
|
||||
create_nvdisk (int argc, char *argv[])
|
||||
{
|
||||
rtems_device_major_number major;
|
||||
rtems_status_code sc;
|
||||
int arg;
|
||||
uint32_t size = 0;
|
||||
@@ -485,7 +432,7 @@ create_nvdisk (int argc, char *argv[])
|
||||
{
|
||||
if (argv[arg][0] == '-')
|
||||
{
|
||||
switch (argv[arg][0])
|
||||
switch (argv[arg][1])
|
||||
{
|
||||
case 's':
|
||||
++arg;
|
||||
@@ -545,10 +492,8 @@ create_nvdisk (int argc, char *argv[])
|
||||
" block-size=%" PRIu32"]:",
|
||||
rtems_nv_heap_device_descriptor[0].size,
|
||||
rtems_nvdisk_configuration[0].block_size);
|
||||
|
||||
sc = rtems_io_register_driver (RTEMS_DRIVER_AUTO_MAJOR,
|
||||
&rtems_nvdisk_io_ops,
|
||||
&major);
|
||||
|
||||
sc = rtems_nvdisk_initialize (0, 0, NULL);
|
||||
if (sc != RTEMS_SUCCESSFUL)
|
||||
{
|
||||
printf ("error: nvdisk driver not initialised: %s\n",
|
||||
|
||||
@@ -35,7 +35,6 @@ rtems_task Init(
|
||||
#include <libchip/ide_ctrl.h> /* for general ide driver prototype */
|
||||
#endif
|
||||
|
||||
#define CONFIGURE_MAXIMUM_DRIVERS 4
|
||||
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
|
||||
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
|
||||
#ifdef RTEMS_BSP_HAS_IDE_DRIVER
|
||||
|
||||
Reference in New Issue
Block a user