From 4c18d8c3d22d14a38acbe458107a2534ef305ef0 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Wed, 21 Jan 2009 18:08:32 +0000 Subject: 2009-01-21 Sebastian Huber * libchip/i2c/spi-sd-card.h, libchip/i2c/spi-sd-card.c: Fixed RTEMS_BLKDEV_CAPABILITIES ioctl which caused invalid multiple block writes. Fixed integer type in device structure. --- c/src/ChangeLog | 6 ++++++ c/src/libchip/i2c/spi-sd-card.c | 38 +++++++++++++++++++------------------- c/src/libchip/i2c/spi-sd-card.h | 2 +- 3 files changed, 26 insertions(+), 20 deletions(-) (limited to 'c') diff --git a/c/src/ChangeLog b/c/src/ChangeLog index 208647dc33..154b0e7648 100644 --- a/c/src/ChangeLog +++ b/c/src/ChangeLog @@ -1,3 +1,9 @@ +2009-01-21 Sebastian Huber + + * libchip/i2c/spi-sd-card.h, libchip/i2c/spi-sd-card.c: Fixed + RTEMS_BLKDEV_CAPABILITIES ioctl which caused invalid multiple block + writes. Fixed integer type in device structure. + 2009-01-05 Joel Sherrill * libchip/serial/ns16550.c: Turn on ns16550_process() for diff --git a/c/src/libchip/i2c/spi-sd-card.c b/c/src/libchip/i2c/spi-sd-card.c index bf2cf25b09..e632d78acb 100644 --- a/c/src/libchip/i2c/spi-sd-card.c +++ b/c/src/libchip/i2c/spi-sd-card.c @@ -887,26 +887,26 @@ sd_card_disk_block_write_cleanup: static int sd_card_disk_ioctl( dev_t dev, uint32_t req, void *arg) { RTEMS_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) diff --git a/c/src/libchip/i2c/spi-sd-card.h b/c/src/libchip/i2c/spi-sd-card.h index 97a7918c70..50662ff1dc 100644 --- a/c/src/libchip/i2c/spi-sd-card.h +++ b/c/src/libchip/i2c/spi-sd-card.h @@ -56,7 +56,7 @@ extern "C" { typedef struct { const char *device_name; - int bus; + rtems_device_minor_number bus; rtems_libi2c_tfr_mode_t transfer_mode; uint8_t command [SD_CARD_COMMAND_SIZE]; uint8_t response [SD_CARD_COMMAND_SIZE]; -- cgit v1.2.3