* libchip/i2c/spi-sd-card.c: Fixed RTEMS_BLKDEV_CAPABILITIES ioctl
	which caused invalid multiple block writes.
This commit is contained in:
Joel Sherrill
2009-01-21 18:07:31 +00:00
parent 06c12dd640
commit 3a7df182ef
2 changed files with 24 additions and 19 deletions

View File

@@ -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

View File

@@ -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)