summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2012-03-26 10:19:30 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-03-26 10:19:30 +0200
commit8dce37226bdb657f8d38f0641f6e48e4f55287f9 (patch)
treebd08611f110f17ad5dc081235ed72b6b25749ecf
parentNew USB device specific controller files (diff)
downloadrtems-libbsd-8dce37226bdb657f8d38f0641f6e48e4f55287f9.tar.bz2
Use new block device API
-rw-r--r--rtemsbsd/src/rtems-bsd-cam.c32
1 files changed, 9 insertions, 23 deletions
diff --git a/rtemsbsd/src/rtems-bsd-cam.c b/rtemsbsd/src/rtems-bsd-cam.c
index db6deb9b..65337394 100644
--- a/rtemsbsd/src/rtems-bsd-cam.c
+++ b/rtemsbsd/src/rtems-bsd-cam.c
@@ -7,7 +7,7 @@
*/
/*
- * Copyright (c) 2009, 2010 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2009-2012 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Obere Lagerstr. 30
@@ -284,7 +284,7 @@ static int rtems_bsd_sim_disk_ioctl(rtems_disk_device *dd, uint32_t req, void *a
return 0;
} else {
- return -1;
+ return rtems_blkdev_ioctl(dd, req, arg);
}
}
@@ -303,34 +303,26 @@ static rtems_status_code
rtems_bsd_sim_attach_worker(rtems_media_state state, const char *src, char **dest, void *arg)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
- rtems_device_major_number major = UINT32_MAX;
struct cam_sim *sim = arg;
char *disk = NULL;
if (state == RTEMS_MEDIA_STATE_READY) {
- dev_t dev = 0;
unsigned retries = 0;
struct scsi_inquiry_data inq_data;
uint32_t block_count = 0;
uint32_t block_size = 0;
- sc = rtems_io_register_driver(0, &rtems_blkdev_generic_ops, &major);
- if (sc != RTEMS_SUCCESSFUL) {
- BSD_PRINTF("OOPS: register driver failed\n");
- goto error;
- }
-
- disk = rtems_media_create_path("/dev", src, major);
+ disk = rtems_media_create_path("/dev", src, cam_sim_unit(sim));
if (disk == NULL) {
BSD_PRINTF("OOPS: create path failed\n");
- goto unregister_and_error;
+ goto error;
}
sc = rtems_bsd_scsi_inquiry(&sim->ccb, &inq_data);
if (sc != RTEMS_SUCCESSFUL) {
BSD_PRINTF("OOPS: inquiry failed\n");
- goto unregister_and_error;
+ goto error;
}
scsi_print_inquiry(&inq_data);
@@ -342,22 +334,20 @@ rtems_bsd_sim_attach_worker(rtems_media_state state, const char *src, char **des
}
if (sc != RTEMS_SUCCESSFUL) {
BSD_PRINTF("OOPS: test unit ready failed\n");
- goto unregister_and_error;
+ goto error;
}
sc = rtems_bsd_scsi_read_capacity(&sim->ccb, &block_count, &block_size);
if (sc != RTEMS_SUCCESSFUL) {
BSD_PRINTF("OOPS: read capacity failed\n");
- goto unregister_and_error;
+ goto error;
}
BSD_PRINTF("read capacity: block count %u, block size %u\n", block_count, block_size);
- dev = rtems_filesystem_make_dev_t(major, 0);
-
- sc = rtems_disk_create_phys(dev, block_size, block_count, rtems_bsd_sim_disk_ioctl, sim, disk);
+ sc = rtems_blkdev_create(disk, block_size, block_count, rtems_bsd_sim_disk_ioctl, sim);
if (sc != RTEMS_SUCCESSFUL) {
- goto unregister_and_error;
+ goto error;
}
/* FIXME */
@@ -374,10 +364,6 @@ rtems_bsd_sim_attach_worker(rtems_media_state state, const char *src, char **des
return RTEMS_SUCCESSFUL;
-unregister_and_error:
-
- rtems_io_unregister_driver(major);
-
error:
free(disk, M_RTEMS_HEAP);