diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2009-01-21 18:07:31 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2009-01-21 18:07:31 +0000 |
commit | 3a7df182ef63a455147299dc10e338e647dbb17e (patch) | |
tree | a131092dff761a4cbe2bca318ed00849049fce7b /c | |
parent | 2009-01-21 Eric Norum <norume@aps.anl.gov> (diff) | |
download | rtems-3a7df182ef63a455147299dc10e338e647dbb17e.tar.bz2 |
2009-01-21 Sebastian Huber <sebastian.huber@embedded-brains.de>
* libchip/i2c/spi-sd-card.c: Fixed RTEMS_BLKDEV_CAPABILITIES ioctl
which caused invalid multiple block writes.
Diffstat (limited to 'c')
-rw-r--r-- | c/src/ChangeLog | 5 | ||||
-rw-r--r-- | c/src/libchip/i2c/spi-sd-card.c | 38 |
2 files changed, 24 insertions, 19 deletions
diff --git a/c/src/ChangeLog b/c/src/ChangeLog index acfc31cc96..561ee630f2 100644 --- a/c/src/ChangeLog +++ b/c/src/ChangeLog @@ -1,3 +1,8 @@ +2009-01-21 Sebastian Huber <sebastian.huber@embedded-brains.de> + + * libchip/i2c/spi-sd-card.c: Fixed RTEMS_BLKDEV_CAPABILITIES ioctl + which caused invalid multiple block writes. + 2008-11-13 Sebastian Huber <sebastian.huber@embedded-brains.de> * libchip/serial/ns16550.c: Transmit the character in the polled write diff --git a/c/src/libchip/i2c/spi-sd-card.c b/c/src/libchip/i2c/spi-sd-card.c index 3fa76d7ca3..eed8529a14 100644 --- a/c/src/libchip/i2c/spi-sd-card.c +++ b/c/src/libchip/i2c/spi-sd-card.c @@ -747,26 +747,26 @@ sd_card_disk_block_write_cleanup: static int sd_card_disk_ioctl( dev_t dev, uint32_t req, void *arg) { DEBUG_PRINT( "dev = %u, req = %u, arg = 0x08%x\n", dev, req, arg); - if (req == RTEMS_BLKIO_REQUEST) { - rtems_device_minor_number minor = rtems_filesystem_dev_minor_t( dev); + if (req == RTEMS_BLKIO_REQUEST) { + rtems_device_minor_number minor = rtems_filesystem_dev_minor_t( dev); sd_card_driver_entry *e = &sd_card_driver_table [minor]; - rtems_blkdev_request *r = (rtems_blkdev_request *) arg; - switch (r->req) { - case RTEMS_BLKDEV_REQ_READ: - return sd_card_disk_block_read( e, r); - case RTEMS_BLKDEV_REQ_WRITE: - return sd_card_disk_block_write( e, r); - case RTEMS_BLKDEV_CAPABILITIES: - *((uint32_t*) arg) = RTEMS_BLKDEV_CAP_MULTISECTOR_CONT; - return 0; - default: - errno = EBADRQC; - return -1; - } - } else { - errno = EBADRQC; - return -1; - } + rtems_blkdev_request *r = (rtems_blkdev_request *) arg; + switch (r->req) { + case RTEMS_BLKDEV_REQ_READ: + return sd_card_disk_block_read( e, r); + case RTEMS_BLKDEV_REQ_WRITE: + return sd_card_disk_block_write( e, r); + default: + errno = EBADRQC; + return -1; + } + } else if (req == RTEMS_BLKDEV_CAPABILITIES) { + *(uint32_t *) arg = RTEMS_BLKDEV_CAP_MULTISECTOR_CONT; + return 0; + } else { + errno = EBADRQC; + return -1; + } } static rtems_status_code sd_card_disk_init( rtems_device_major_number major, rtems_device_minor_number minor, void *arg) |