Ticket #1355: sd-card-4.9.patch

File sd-card-4.9.patch, 2.5 KB (added by Joel Sherrill, on 01/16/09 at 17:33:13)

Sebastian's patch for 4.9

  • c/src/ChangeLog

    RCS file: /usr1/CVS/rtems/c/src/ChangeLog,v
    retrieving revision 1.414.2.3
    diff -u -r1.414.2.3 ChangeLog
     
     12009-01-16      Sebastian Huber <sebastian.huber@embedded-brains.de>
     2
     3        * libchip/i2c/spi-sd-card.c: Fixed RTEMS_BLKDEV_CAPABILITIES ioctl
     4        which caused invalid multiple block writes.
     5
    162008-11-13      Sebastian Huber <sebastian.huber@embedded-brains.de>
    27
    38        * libchip/serial/ns16550.c: Transmit the character in the polled write
  • c/src/libchip/i2c/spi-sd-card.c

    RCS file: /usr1/CVS/rtems/c/src/libchip/i2c/spi-sd-card.c,v
    retrieving revision 1.6
    diff -u -r1.6 spi-sd-card.c
     
    747747static int sd_card_disk_ioctl( dev_t dev, uint32_t req, void *arg)
    748748{
    749749        DEBUG_PRINT( "dev = %u, req = %u, arg = 0x08%x\n", dev, req, arg);
    750         if (req == RTEMS_BLKIO_REQUEST) {
    751                 rtems_device_minor_number minor = rtems_filesystem_dev_minor_t( dev);
     750        if (req == RTEMS_BLKIO_REQUEST) {
     751                rtems_device_minor_number minor = rtems_filesystem_dev_minor_t( dev);
    752752                sd_card_driver_entry *e = &sd_card_driver_table [minor];
    753                 rtems_blkdev_request *r = (rtems_blkdev_request *) arg;
    754                 switch (r->req) {
    755                         case RTEMS_BLKDEV_REQ_READ:
    756                                 return sd_card_disk_block_read( e, r);
    757                         case RTEMS_BLKDEV_REQ_WRITE:
    758                                 return sd_card_disk_block_write( e, r);
    759                         case RTEMS_BLKDEV_CAPABILITIES:
    760                                 *((uint32_t*) arg)  = RTEMS_BLKDEV_CAP_MULTISECTOR_CONT;
    761                                 return 0;
    762                         default:
    763                                 errno = EBADRQC;
    764                                 return -1;
    765                 }
    766         } else {
    767                 errno = EBADRQC;
    768                 return -1;
    769         }
     753                rtems_blkdev_request *r = (rtems_blkdev_request *) arg;
     754                switch (r->req) {
     755                        case RTEMS_BLKDEV_REQ_READ:
     756                                return sd_card_disk_block_read( e, r);
     757                        case RTEMS_BLKDEV_REQ_WRITE:
     758                                return sd_card_disk_block_write( e, r);
     759                        default:
     760                                errno = EBADRQC;
     761                                return -1;
     762                }
     763        } else if (req == RTEMS_BLKDEV_CAPABILITIES) {
     764                *(uint32_t *) arg = RTEMS_BLKDEV_CAP_MULTISECTOR_CONT;
     765                return 0;
     766        } else {
     767                errno = EBADRQC;
     768                return -1;
     769        }
    770770}
    771771
    772772static rtems_status_code sd_card_disk_init( rtems_device_major_number major, rtems_device_minor_number minor, void *arg)