Changeset f049983 in rtems for c/src/libchip
- Timestamp:
- Oct 10, 2008, 3:52:41 PM (11 years ago)
- Branches:
- 4.10, 4.11, master
- Children:
- 06c3530
- Parents:
- da6142f
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
c/src/libchip/i2c/spi-sd-card.c
rda6142f rf049983 309 309 /* Query busy tokens */ 310 310 rv = sd_card_query( e, e->response, n); 311 CHECK_RV( rv, "Busy");311 RTEMS_CHECK_RV( rv, "Busy"); 312 312 313 313 /* Search for non busy tokens */ … … 342 342 /* Wait until card is not busy */ 343 343 rv = sd_card_wait( e); 344 CHECK_RV( rv, "Wait");344 RTEMS_CHECK_RV( rv, "Wait"); 345 345 346 346 /* Write command and read response */ … … 348 348 SD_CARD_COMMAND_SET_ARGUMENT( e->command, argument); 349 349 rv = rtems_libi2c_ioctl( e->minor, RTEMS_LIBI2C_IOCTL_READ_WRITE, &rw); 350 CHECK_RV( rv, "Write command and read response");350 RTEMS_CHECK_RV( rv, "Write command and read response"); 351 351 352 352 /* Check respose */ 353 353 for (r = SD_CARD_COMMAND_RESPONSE_START; r < SD_CARD_COMMAND_SIZE; ++r) { 354 DEBUG_PRINT( "Token [%02u]: 0x%02x\n", r, e->response [r]);354 RTEMS_DEBUG_PRINT( "Token [%02u]: 0x%02x\n", r, e->response [r]); 355 355 e->response_index = r; 356 356 if (SD_CARD_IS_RESPONSE( e->response [r])) { … … 358 358 return 0; 359 359 } else { 360 SYSLOG_ERROR( "Command error [%02i]: 0x%02" PRIx8 "\n", r, e->response [r]);360 RTEMS_SYSLOG_ERROR( "Command error [%02i]: 0x%02" PRIx8 "\n", r, e->response [r]); 361 361 goto sd_card_send_command_error; 362 362 } 363 363 } else if (e->response [r] != SD_CARD_IDLE_TOKEN) { 364 SYSLOG_ERROR( "Unexpected token [%02i]: 0x%02" PRIx8 "\n", r, e->response [r]);364 RTEMS_SYSLOG_ERROR( "Unexpected token [%02i]: 0x%02" PRIx8 "\n", r, e->response [r]); 365 365 goto sd_card_send_command_error; 366 366 } 367 367 } 368 368 369 SYSLOG_ERROR( "Timeout\n");369 RTEMS_SYSLOG_ERROR( "Timeout\n"); 370 370 371 371 sd_card_send_command_error: 372 372 373 SYSLOG_ERROR( "Response:");373 RTEMS_SYSLOG_ERROR( "Response:"); 374 374 for (r = 0; r < SD_CARD_COMMAND_SIZE; ++r) { 375 375 if (e->response_index == r) { 376 SYSLOG_PRINT( " %02" PRIx8 ":[%02" PRIx8 "]", e->command [r], e->response [r]);376 RTEMS_SYSLOG_PRINT( " %02" PRIx8 ":[%02" PRIx8 "]", e->command [r], e->response [r]); 377 377 } else { 378 SYSLOG_PRINT( " %02" PRIx8 ":%02" PRIx8 "", e->command [r], e->response [r]);378 RTEMS_SYSLOG_PRINT( " %02" PRIx8 ":%02" PRIx8 "", e->command [r], e->response [r]); 379 379 } 380 380 } 381 SYSLOG_PRINT( "\n");381 RTEMS_SYSLOG_PRINT( "\n"); 382 382 383 383 return -RTEMS_IO_ERROR; … … 390 390 SD_CARD_COMMAND_SET_COMMAND( e->command, SD_CARD_CMD_STOP_TRANSMISSION); 391 391 rv = rtems_libi2c_write_bytes( e->minor, e->command, SD_CARD_COMMAND_SIZE); 392 CHECK_RV( rv, "Write stop transfer token");392 RTEMS_CHECK_RV( rv, "Write stop transfer token"); 393 393 394 394 return 0; … … 402 402 /* Wait until card is not busy */ 403 403 rv = sd_card_wait( e); 404 CHECK_RV( rv, "Wait");404 RTEMS_CHECK_RV( rv, "Wait"); 405 405 406 406 /* Send stop token */ 407 407 rv = rtems_libi2c_write_bytes( e->minor, stop_transfer, 3); 408 CHECK_RV( rv, "Write stop transfer token");408 RTEMS_CHECK_RV( rv, "Write stop transfer token"); 409 409 410 410 /* Card is now busy */ … … 436 436 437 437 while (1) { 438 DEBUG_PRINT( "Search from %u to %u\n", r, response_size - 1);438 RTEMS_DEBUG_PRINT( "Search from %u to %u\n", r, response_size - 1); 439 439 440 440 /* Search the data start token in in current response buffer */ 441 441 while (r < response_size) { 442 DEBUG_PRINT( "Token [%02u]: 0x%02x\n", r, e->response [r]);442 RTEMS_DEBUG_PRINT( "Token [%02u]: 0x%02x\n", r, e->response [r]); 443 443 if (n_ac > e->n_ac_max) { 444 SYSLOG_ERROR( "Timeout\n");444 RTEMS_SYSLOG_ERROR( "Timeout\n"); 445 445 return -RTEMS_IO_ERROR; 446 446 } else if (e->response [r] == start_token) { … … 449 449 goto sd_card_read_start; 450 450 } else if (SD_CARD_IS_DATA_ERROR( e->response [r])) { 451 SYSLOG_ERROR( "Data error token [%02i]: 0x%02" PRIx8 "\n", r, e->response [r]);451 RTEMS_SYSLOG_ERROR( "Data error token [%02i]: 0x%02" PRIx8 "\n", r, e->response [r]); 452 452 return -RTEMS_IO_ERROR; 453 453 } else if (e->response [r] != SD_CARD_IDLE_TOKEN) { 454 SYSLOG_ERROR( "Unexpected token [%02i]: 0x%02" PRIx8 "\n", r, e->response [r]);454 RTEMS_SYSLOG_ERROR( "Unexpected token [%02i]: 0x%02" PRIx8 "\n", r, e->response [r]); 455 455 return -RTEMS_IO_ERROR; 456 456 } … … 461 461 /* Query more */ 462 462 rv = sd_card_query( e, e->response, next_response_size); 463 CHECK_RV( rv, "Query data start token");463 RTEMS_CHECK_RV( rv, "Query data start token"); 464 464 465 465 /* Set standard query size */ … … 481 481 if (i < n) { 482 482 rv = sd_card_query( e, &in [i], n - i); 483 CHECK_RV( rv, "Read data");483 RTEMS_CHECK_RV( rv, "Read data"); 484 484 i += rv; 485 485 } … … 487 487 /* Read CRC 16 and N_RC */ 488 488 rv = sd_card_query( e, e->response, 3); 489 CHECK_RV( rv, "Read CRC 16");489 RTEMS_CHECK_RV( rv, "Read CRC 16"); 490 490 491 491 return i; … … 502 502 /* Wait until card is not busy */ 503 503 rv = sd_card_wait( e); 504 CHECK_RV( rv, "Wait");504 RTEMS_CHECK_RV( rv, "Wait"); 505 505 506 506 /* Write data start token */ 507 507 rv = rtems_libi2c_write_bytes( e->minor, &start_token, 1); 508 CHECK_RV( rv, "Write data start token");508 RTEMS_CHECK_RV( rv, "Write data start token"); 509 509 510 510 /* Write data */ 511 511 o = rtems_libi2c_write_bytes( e->minor, out, n); 512 CHECK_RV( o, "Write data");512 RTEMS_CHECK_RV( o, "Write data"); 513 513 514 514 /* Write CRC 16 */ 515 515 rv = rtems_libi2c_write_bytes( e->minor, crc16, 2); 516 CHECK_RV( rv, "Write CRC 16");516 RTEMS_CHECK_RV( rv, "Write CRC 16"); 517 517 518 518 /* Read data response */ 519 519 rv = sd_card_query( e, e->response, 2); 520 CHECK_RV( rv, "Read data response");520 RTEMS_CHECK_RV( rv, "Read data response"); 521 521 if (SD_CARD_IS_DATA_REJECTED( e->response [0])) { 522 SYSLOG_ERROR( "Data rejected: 0x%02" PRIx8 "\n", e->response [0]);522 RTEMS_SYSLOG_ERROR( "Data rejected: 0x%02" PRIx8 "\n", e->response [0]); 523 523 return -RTEMS_IO_ERROR; 524 524 } … … 536 536 537 537 sc = rtems_libi2c_send_start( e->minor); 538 CHECK_SC( sc, "Send start");538 RTEMS_CHECK_SC( sc, "Send start"); 539 539 540 540 rv = rtems_libi2c_ioctl( e->minor, RTEMS_LIBI2C_IOCTL_SET_TFRMODE, &e->transfer_mode); 541 CHECK_RVSC( rv, "Set transfer mode");541 RTEMS_CHECK_RV_SC( rv, "Set transfer mode"); 542 542 543 543 sc = rtems_libi2c_send_addr( e->minor, 1); 544 CHECK_SC( sc, "Send address");544 RTEMS_CHECK_SC( sc, "Send address"); 545 545 546 546 return RTEMS_SUCCESSFUL; … … 552 552 553 553 sc = rtems_libi2c_send_stop( e->minor); 554 CHECK_SC( sc, "Send stop");554 RTEMS_CHECK_SC( sc, "Send stop"); 555 555 556 556 return RTEMS_SUCCESSFUL; … … 570 570 uint32_t i = 0; 571 571 572 DEBUG_PRINT( "start = %u, bufnum = %u\n", r->start, r->bufnum);572 RTEMS_DEBUG_PRINT( "start = %u, bufnum = %u\n", r->start, r->bufnum); 573 573 574 574 #ifdef DEBUG 575 575 /* Check request */ 576 576 if (r->bufs[0].block >= e->block_number) { 577 SYSLOG_ERROR( "Start block number out of range");577 RTEMS_SYSLOG_ERROR( "Start block number out of range"); 578 578 return -RTEMS_INTERNAL_ERROR; 579 579 } else if (r->bufnum > e->block_number - RTEMS_BLKDEV_START_BLOCK (r)) { 580 SYSLOG_ERROR( "Block count out of range");580 RTEMS_SYSLOG_ERROR( "Block count out of range"); 581 581 return -RTEMS_INTERNAL_ERROR; 582 582 } … … 585 585 /* Start */ 586 586 sc = sd_card_start( e); 587 CLEANUP_SCRV( sc, rv, sd_card_disk_block_read_cleanup, "Start");587 RTEMS_CLEANUP_SC_RV( sc, rv, sd_card_disk_block_read_cleanup, "Start"); 588 588 589 589 if (r->bufnum == 1) { … … 591 591 /* Check buffer */ 592 592 if (r->bufs [0].length != e->block_size) { 593 DO_CLEANUP_RV( -RTEMS_INTERNAL_ERROR, rv, sd_card_disk_block_read_cleanup, "Buffer and disk block size are not equal");593 RTEMS_DO_CLEANUP_RV( -RTEMS_INTERNAL_ERROR, rv, sd_card_disk_block_read_cleanup, "Buffer and disk block size are not equal"); 594 594 } 595 DEBUG_PRINT( "[%02u]: buffer = 0x%08x, size = %u\n", 0, r->bufs [0].buffer, r->bufs [0].length);595 RTEMS_DEBUG_PRINT( "[%02u]: buffer = 0x%08x, size = %u\n", 0, r->bufs [0].buffer, r->bufs [0].length); 596 596 #endif /* DEBUG */ 597 597 598 598 /* Single block read */ 599 599 rv = sd_card_send_command( e, SD_CARD_CMD_READ_SINGLE_BLOCK, start_address); 600 CLEANUP_RV( rv, sd_card_disk_block_read_cleanup, "Send: SD_CARD_CMD_READ_SINGLE_BLOCK");600 RTEMS_CLEANUP_RV( rv, sd_card_disk_block_read_cleanup, "Send: SD_CARD_CMD_READ_SINGLE_BLOCK"); 601 601 rv = sd_card_read( e, SD_CARD_START_BLOCK_SINGLE_BLOCK_READ, (uint8_t *) r->bufs [0].buffer, (int) e->block_size); 602 CLEANUP_RV( rv, sd_card_disk_block_read_cleanup, "Read: SD_CARD_CMD_READ_SINGLE_BLOCK");602 RTEMS_CLEANUP_RV( rv, sd_card_disk_block_read_cleanup, "Read: SD_CARD_CMD_READ_SINGLE_BLOCK"); 603 603 } else { 604 604 /* Start multiple block read */ 605 605 rv = sd_card_send_command( e, SD_CARD_CMD_READ_MULTIPLE_BLOCK, start_address); 606 CLEANUP_RV( rv, sd_card_disk_block_read_stop_cleanup, "Send: SD_CARD_CMD_READ_MULTIPLE_BLOCK");606 RTEMS_CLEANUP_RV( rv, sd_card_disk_block_read_stop_cleanup, "Send: SD_CARD_CMD_READ_MULTIPLE_BLOCK"); 607 607 608 608 /* Multiple block read */ … … 611 611 /* Check buffer */ 612 612 if (r->bufs [i].length != e->block_size) { 613 DO_CLEANUP_RV( -RTEMS_INTERNAL_ERROR, rv, sd_card_disk_block_read_stop_cleanup, "Buffer and disk block size are not equal");613 RTEMS_DO_CLEANUP_RV( -RTEMS_INTERNAL_ERROR, rv, sd_card_disk_block_read_stop_cleanup, "Buffer and disk block size are not equal"); 614 614 } 615 DEBUG_PRINT( "[%02u]: buffer = 0x%08x, size = %u\n", i, r->bufs [i].buffer, r->bufs [i].length);615 RTEMS_DEBUG_PRINT( "[%02u]: buffer = 0x%08x, size = %u\n", i, r->bufs [i].buffer, r->bufs [i].length); 616 616 #endif /* DEBUG */ 617 617 618 618 rv = sd_card_read( e, SD_CARD_START_BLOCK_MULTIPLE_BLOCK_READ, (uint8_t *) r->bufs [i].buffer, (int) e->block_size); 619 CLEANUP_RV( rv, sd_card_disk_block_read_stop_cleanup, "Read block");619 RTEMS_CLEANUP_RV( rv, sd_card_disk_block_read_stop_cleanup, "Read block"); 620 620 } 621 621 622 622 /* Stop multiple block read */ 623 623 rv = sd_card_stop_multiple_block_read( e); 624 CLEANUP_RV( rv, sd_card_disk_block_read_cleanup, "Stop multiple block read");624 RTEMS_CLEANUP_RV( rv, sd_card_disk_block_read_cleanup, "Stop multiple block read"); 625 625 } 626 626 627 627 /* Stop */ 628 628 sc = sd_card_stop( e); 629 CHECK_SCRV( sc, "Stop");629 RTEMS_CHECK_SC_RV( sc, "Stop"); 630 630 631 631 /* Done */ … … 657 657 uint32_t i = 0; 658 658 659 DEBUG_PRINT( "start = %u, count = %u, bufnum = %u\n", r->start, r->count, r->bufnum);659 RTEMS_DEBUG_PRINT( "start = %u, count = %u, bufnum = %u\n", r->start, r->count, r->bufnum); 660 660 661 661 #ifdef DEBUG 662 662 /* Check request */ 663 663 if (r->bufs[0].block >= e->block_number) { 664 SYSLOG_ERROR( "Start block number out of range");664 RTEMS_SYSLOG_ERROR( "Start block number out of range"); 665 665 return -RTEMS_INTERNAL_ERROR; 666 666 } else if (r->bufnum > e->block_number - RTEMS_BLKDEV_START_BLOCK (r)) { 667 SYSLOG_ERROR( "Block count out of range");667 RTEMS_SYSLOG_ERROR( "Block count out of range"); 668 668 return -RTEMS_INTERNAL_ERROR; 669 669 } … … 672 672 /* Start */ 673 673 sc = sd_card_start( e); 674 CLEANUP_SCRV( sc, rv, sd_card_disk_block_write_cleanup, "Start");674 RTEMS_CLEANUP_SC_RV( sc, rv, sd_card_disk_block_write_cleanup, "Start"); 675 675 676 676 if (r->bufnum == 1) { … … 678 678 /* Check buffer */ 679 679 if (r->bufs [0].length != e->block_size) { 680 DO_CLEANUP_RV( -RTEMS_INTERNAL_ERROR, rv, sd_card_disk_block_write_cleanup, "Buffer and disk block size are not equal");680 RTEMS_DO_CLEANUP_RV( -RTEMS_INTERNAL_ERROR, rv, sd_card_disk_block_write_cleanup, "Buffer and disk block size are not equal"); 681 681 } 682 DEBUG_PRINT( "[%02u]: buffer = 0x%08x, size = %u\n", 0, r->bufs [0].buffer, r->bufs [0].length);682 RTEMS_DEBUG_PRINT( "[%02u]: buffer = 0x%08x, size = %u\n", 0, r->bufs [0].buffer, r->bufs [0].length); 683 683 #endif /* DEBUG */ 684 684 685 685 /* Single block write */ 686 686 rv = sd_card_send_command( e, SD_CARD_CMD_WRITE_BLOCK, start_address); 687 CLEANUP_RV( rv, sd_card_disk_block_write_cleanup, "Send: SD_CARD_CMD_WRITE_BLOCK");687 RTEMS_CLEANUP_RV( rv, sd_card_disk_block_write_cleanup, "Send: SD_CARD_CMD_WRITE_BLOCK"); 688 688 rv = sd_card_write( e, SD_CARD_START_BLOCK_SINGLE_BLOCK_WRITE, (uint8_t *) r->bufs [0].buffer, (int) e->block_size); 689 CLEANUP_RV( rv, sd_card_disk_block_write_cleanup, "Write: SD_CARD_CMD_WRITE_BLOCK");689 RTEMS_CLEANUP_RV( rv, sd_card_disk_block_write_cleanup, "Write: SD_CARD_CMD_WRITE_BLOCK"); 690 690 } else { 691 691 /* Start multiple block write */ 692 692 rv = sd_card_send_command( e, SD_CARD_CMD_WRITE_MULTIPLE_BLOCK, start_address); 693 CLEANUP_RV( rv, sd_card_disk_block_write_stop_cleanup, "Send: SD_CARD_CMD_WRITE_MULTIPLE_BLOCK");693 RTEMS_CLEANUP_RV( rv, sd_card_disk_block_write_stop_cleanup, "Send: SD_CARD_CMD_WRITE_MULTIPLE_BLOCK"); 694 694 695 695 /* Multiple block write */ … … 698 698 /* Check buffer */ 699 699 if (r->bufs [i].length != e->block_size) { 700 DO_CLEANUP_RV( -RTEMS_INTERNAL_ERROR, rv, sd_card_disk_block_write_stop_cleanup, "Buffer and disk block size are not equal");700 RTEMS_DO_CLEANUP_RV( -RTEMS_INTERNAL_ERROR, rv, sd_card_disk_block_write_stop_cleanup, "Buffer and disk block size are not equal"); 701 701 } 702 DEBUG_PRINT( "[%02u]: buffer = 0x%08x, size = %u\n", i, r->bufs [i].buffer, r->bufs [i].length);702 RTEMS_DEBUG_PRINT( "[%02u]: buffer = 0x%08x, size = %u\n", i, r->bufs [i].buffer, r->bufs [i].length); 703 703 #endif /* DEBUG */ 704 704 705 705 rv = sd_card_write( e, SD_CARD_START_BLOCK_MULTIPLE_BLOCK_WRITE, (uint8_t *) r->bufs [i].buffer, (int) e->block_size); 706 CLEANUP_RV( rv, sd_card_disk_block_write_stop_cleanup, "Write block");706 RTEMS_CLEANUP_RV( rv, sd_card_disk_block_write_stop_cleanup, "Write block"); 707 707 } 708 708 709 709 /* Stop multiple block write */ 710 710 rv = sd_card_stop_multiple_block_write( e); 711 CLEANUP_RV( rv, sd_card_disk_block_write_cleanup, "Stop multiple block write");711 RTEMS_CLEANUP_RV( rv, sd_card_disk_block_write_cleanup, "Stop multiple block write"); 712 712 } 713 713 714 714 /* Get card status */ 715 715 rv = sd_card_send_command( e, SD_CARD_CMD_SEND_STATUS, 0); 716 CHECK_RV( rv, "Send: SD_CARD_CMD_SEND_STATUS");716 RTEMS_CHECK_RV( rv, "Send: SD_CARD_CMD_SEND_STATUS"); 717 717 718 718 /* Stop */ 719 719 sc = sd_card_stop( e); 720 CHECK_SCRV( sc, "Stop");720 RTEMS_CHECK_SC_RV( sc, "Stop"); 721 721 722 722 /* Done */ … … 734 734 /* Get card status */ 735 735 rv = sd_card_send_command( e, SD_CARD_CMD_SEND_STATUS, 0); 736 CHECK_RV( rv, "Send: SD_CARD_CMD_SEND_STATUS");736 RTEMS_CHECK_RV( rv, "Send: SD_CARD_CMD_SEND_STATUS"); 737 737 738 738 /* Stop */ … … 747 747 static int sd_card_disk_ioctl( dev_t dev, uint32_t req, void *arg) 748 748 { 749 DEBUG_PRINT( "dev = %u, req = %u, arg = 0x08%x\n", dev, req, arg);749 RTEMS_DEBUG_PRINT( "dev = %u, req = %u, arg = 0x08%x\n", dev, req, arg); 750 750 if (req == RTEMS_BLKIO_REQUEST) { 751 751 rtems_device_minor_number minor = rtems_filesystem_dev_minor_t( dev); … … 815 815 /* Get driver entry */ 816 816 rv = sd_card_driver_get_entry( minor, &e); 817 CHECK_RVSC( rv, "Get driver entry");817 RTEMS_CHECK_RV_SC( rv, "Get driver entry"); 818 818 819 819 /* Start */ 820 820 sc = sd_card_start( e); 821 CLEANUP_SC( sc, sd_card_driver_init_cleanup, "Start");821 RTEMS_CLEANUP_SC( sc, sd_card_driver_init_cleanup, "Start"); 822 822 823 823 /* Save minor number for disk operations */ … … 828 828 sd_card_driver_first = 0; 829 829 sc = rtems_io_register_driver( 0, &sd_card_disk_ops, &sd_card_disk_major); 830 CLEANUP_SC( sc, sd_card_driver_init_cleanup, "Register disk IO driver");830 RTEMS_CLEANUP_SC( sc, sd_card_driver_init_cleanup, "Register disk IO driver"); 831 831 } 832 832 833 833 /* Wait until card is not busy */ 834 834 rv = sd_card_wait( e); 835 CLEANUP_RVSC( rv, sc, sd_card_driver_init_cleanup, "Wait");835 RTEMS_CLEANUP_RV_SC( rv, sc, sd_card_driver_init_cleanup, "Wait"); 836 836 837 837 /* Send idle tokens for at least 74 clock cycles with active chip select */ 838 838 memset( block, SD_CARD_IDLE_TOKEN, SD_CARD_BLOCK_SIZE_DEFAULT); 839 839 rv = rtems_libi2c_write_bytes( e->minor, block, SD_CARD_BLOCK_SIZE_DEFAULT); 840 CLEANUP_RVSC( rv, sc, sd_card_driver_init_cleanup, "Active chip select delay");840 RTEMS_CLEANUP_RV_SC( rv, sc, sd_card_driver_init_cleanup, "Active chip select delay"); 841 841 842 842 /* Stop */ 843 843 sc = sd_card_stop( e); 844 CHECK_SC( sc, "Stop");844 RTEMS_CHECK_SC( sc, "Stop"); 845 845 846 846 /* Start with inactive chip select */ 847 847 sc = rtems_libi2c_send_start( e->minor); 848 CHECK_SC( sc, "Send start");848 RTEMS_CHECK_SC( sc, "Send start"); 849 849 850 850 /* Set transfer mode */ 851 851 rv = rtems_libi2c_ioctl( e->minor, RTEMS_LIBI2C_IOCTL_SET_TFRMODE, &e->transfer_mode); 852 CLEANUP_RVSC( rv, sc, sd_card_driver_init_cleanup, "Set transfer mode");852 RTEMS_CLEANUP_RV_SC( rv, sc, sd_card_driver_init_cleanup, "Set transfer mode"); 853 853 854 854 /* Send idle tokens with inactive chip select */ 855 855 rv = sd_card_query( e, e->response, SD_CARD_COMMAND_SIZE); 856 CLEANUP_RVSC( rv, sc, sd_card_driver_init_cleanup, "Inactive chip select delay");856 RTEMS_CLEANUP_RV_SC( rv, sc, sd_card_driver_init_cleanup, "Inactive chip select delay"); 857 857 858 858 /* Activate chip select */ 859 859 sc = rtems_libi2c_send_addr( e->minor, 1); 860 CLEANUP_SC( sc, sd_card_driver_init_cleanup, "Send address");860 RTEMS_CLEANUP_SC( sc, sd_card_driver_init_cleanup, "Send address"); 861 861 862 862 /* Stop multiple block write */ … … 871 871 /* Switch to SPI mode */ 872 872 rv = sd_card_send_command( e, SD_CARD_CMD_GO_IDLE_STATE, 0); 873 CLEANUP_RVSC( rv, sc, sd_card_driver_init_cleanup, "Send: SD_CARD_CMD_GO_IDLE_STATE");873 RTEMS_CLEANUP_RV_SC( rv, sc, sd_card_driver_init_cleanup, "Send: SD_CARD_CMD_GO_IDLE_STATE"); 874 874 875 875 /* Initialize card */ 876 876 while (1) { 877 877 rv = sd_card_send_command( e, SD_CARD_CMD_APP_CMD, 0); 878 CLEANUP_RVSC( rv, sc, sd_card_driver_init_cleanup, "Send: SD_CARD_CMD_APP_CMD");878 RTEMS_CLEANUP_RV_SC( rv, sc, sd_card_driver_init_cleanup, "Send: SD_CARD_CMD_APP_CMD"); 879 879 rv = sd_card_send_command( e, SD_CARD_ACMD_SD_SEND_OP_COND, 0); 880 CLEANUP_RVSC( rv, sc, sd_card_driver_init_cleanup, "Send: SD_CARD_ACMD_SD_SEND_OP_COND");880 RTEMS_CLEANUP_RV_SC( rv, sc, sd_card_driver_init_cleanup, "Send: SD_CARD_ACMD_SD_SEND_OP_COND"); 881 881 882 882 /* Not idle? */ … … 892 892 if (e->verbose) { 893 893 rv = sd_card_send_command( e, SD_CARD_CMD_SEND_CID, 0); 894 CLEANUP_RVSC( rv, sc, sd_card_driver_init_cleanup, "Send: SD_CARD_CMD_SEND_CID");894 RTEMS_CLEANUP_RV_SC( rv, sc, sd_card_driver_init_cleanup, "Send: SD_CARD_CMD_SEND_CID"); 895 895 rv = sd_card_read( e, SD_CARD_START_BLOCK_SINGLE_BLOCK_READ, block, SD_CARD_CID_SIZE); 896 CLEANUP_RVSC( rv, sc, sd_card_driver_init_cleanup, "Read: SD_CARD_CMD_SEND_CID");897 SYSLOG( "*** Card Identification ***\n");898 SYSLOG( "Manufacturer ID : %" PRIu8 "\n", SD_CARD_CID_GET_MID( block));899 SYSLOG( "OEM/Application ID : %" PRIu16 "\n", SD_CARD_CID_GET_OID( block));900 SYSLOG(896 RTEMS_CLEANUP_RV_SC( rv, sc, sd_card_driver_init_cleanup, "Read: SD_CARD_CMD_SEND_CID"); 897 RTEMS_SYSLOG( "*** Card Identification ***\n"); 898 RTEMS_SYSLOG( "Manufacturer ID : %" PRIu8 "\n", SD_CARD_CID_GET_MID( block)); 899 RTEMS_SYSLOG( "OEM/Application ID : %" PRIu16 "\n", SD_CARD_CID_GET_OID( block)); 900 RTEMS_SYSLOG( 901 901 "Product name : %c%c%c%c%c%c\n", 902 902 SD_CARD_CID_GET_PNM( block, 0), … … 907 907 SD_CARD_CID_GET_PNM( block, 5) 908 908 ); 909 SYSLOG( "Product revision : %" PRIu8 "\n", SD_CARD_CID_GET_PRV( block));910 SYSLOG( "Product serial number : %" PRIu32 "\n", SD_CARD_CID_GET_PSN( block));911 SYSLOG( "Manufacturing date : %" PRIu8 "\n", SD_CARD_CID_GET_MDT( block));912 SYSLOG( "7-bit CRC checksum : %" PRIu8 "\n", SD_CARD_CID_GET_CRC7( block));909 RTEMS_SYSLOG( "Product revision : %" PRIu8 "\n", SD_CARD_CID_GET_PRV( block)); 910 RTEMS_SYSLOG( "Product serial number : %" PRIu32 "\n", SD_CARD_CID_GET_PSN( block)); 911 RTEMS_SYSLOG( "Manufacturing date : %" PRIu8 "\n", SD_CARD_CID_GET_MDT( block)); 912 RTEMS_SYSLOG( "7-bit CRC checksum : %" PRIu8 "\n", SD_CARD_CID_GET_CRC7( block)); 913 913 } 914 914 915 915 /* Card Specific Data */ 916 916 rv = sd_card_send_command( e, SD_CARD_CMD_SEND_CSD, 0); 917 CLEANUP_RVSC( rv, sc, sd_card_driver_init_cleanup, "Send: SD_CARD_CMD_SEND_CSD");917 RTEMS_CLEANUP_RV_SC( rv, sc, sd_card_driver_init_cleanup, "Send: SD_CARD_CMD_SEND_CSD"); 918 918 rv = sd_card_read( e, SD_CARD_START_BLOCK_SINGLE_BLOCK_READ, block, SD_CARD_CSD_SIZE); 919 CLEANUP_RVSC( rv, sc, sd_card_driver_init_cleanup, "Read: SD_CARD_CMD_SEND_CSD");919 RTEMS_CLEANUP_RV_SC( rv, sc, sd_card_driver_init_cleanup, "Read: SD_CARD_CMD_SEND_CSD"); 920 920 transfer_speed = sd_card_transfer_speed( block); 921 921 e->transfer_mode.baudrate = transfer_speed; … … 925 925 write_block_size = 1U << e->block_size_shift; 926 926 if (read_block_size < write_block_size) { 927 SYSLOG_ERROR( "Read block size smaller than write block size\n");927 RTEMS_SYSLOG_ERROR( "Read block size smaller than write block size\n"); 928 928 return -RTEMS_IO_ERROR; 929 929 } … … 931 931 e->block_number = sd_card_block_number( block); 932 932 if (e->verbose) { 933 SYSLOG( "*** Card Specific Data ***\n");934 SYSLOG( "CSD structure : %" PRIu8 "\n", SD_CARD_CSD_GET_CSD_STRUCTURE( block));935 SYSLOG( "Spec version : %" PRIu8 "\n", SD_CARD_CSD_GET_SPEC_VERS( block));936 SYSLOG( "Access time [ns] : %" PRIu32 "\n", sd_card_access_time( block));937 SYSLOG( "Max access time [N] : %" PRIu32 "\n", e->n_ac_max);938 SYSLOG( "Max read block size [B] : %" PRIu32 "\n", read_block_size);939 SYSLOG( "Max write block size [B] : %" PRIu32 "\n", write_block_size);940 SYSLOG( "Block size [B] : %" PRIu32 "\n", e->block_size);941 SYSLOG( "Block number : %" PRIu32 "\n", e->block_number);942 SYSLOG( "Capacity [B] : %" PRIu32 "\n", sd_card_capacity( block));943 SYSLOG( "Max transfer speed [b/s] : %" PRIu32 "\n", transfer_speed);933 RTEMS_SYSLOG( "*** Card Specific Data ***\n"); 934 RTEMS_SYSLOG( "CSD structure : %" PRIu8 "\n", SD_CARD_CSD_GET_CSD_STRUCTURE( block)); 935 RTEMS_SYSLOG( "Spec version : %" PRIu8 "\n", SD_CARD_CSD_GET_SPEC_VERS( block)); 936 RTEMS_SYSLOG( "Access time [ns] : %" PRIu32 "\n", sd_card_access_time( block)); 937 RTEMS_SYSLOG( "Max access time [N] : %" PRIu32 "\n", e->n_ac_max); 938 RTEMS_SYSLOG( "Max read block size [B] : %" PRIu32 "\n", read_block_size); 939 RTEMS_SYSLOG( "Max write block size [B] : %" PRIu32 "\n", write_block_size); 940 RTEMS_SYSLOG( "Block size [B] : %" PRIu32 "\n", e->block_size); 941 RTEMS_SYSLOG( "Block number : %" PRIu32 "\n", e->block_number); 942 RTEMS_SYSLOG( "Capacity [B] : %" PRIu32 "\n", sd_card_capacity( block)); 943 RTEMS_SYSLOG( "Max transfer speed [b/s] : %" PRIu32 "\n", transfer_speed); 944 944 } 945 945 946 946 /* Set read block size */ 947 947 rv = sd_card_send_command( e, SD_CARD_CMD_SET_BLOCKLEN, e->block_size); 948 CLEANUP_RVSC( rv, sc, sd_card_driver_init_cleanup, "Send: SD_CARD_CMD_SET_BLOCKLEN");948 RTEMS_CLEANUP_RV_SC( rv, sc, sd_card_driver_init_cleanup, "Send: SD_CARD_CMD_SET_BLOCKLEN"); 949 949 950 950 /* Create disk device */ 951 951 dev = rtems_filesystem_make_dev_t( sd_card_disk_major, (rtems_device_minor_number) e->table_index); 952 952 sc = rtems_disk_io_initialize(); 953 CLEANUP_SC( sc, sd_card_driver_init_cleanup, "Initialize RTEMS disk IO");953 RTEMS_CLEANUP_SC( sc, sd_card_driver_init_cleanup, "Initialize RTEMS disk IO"); 954 954 sc = rtems_disk_create_phys( dev, (int) e->block_size, (int) e->block_number, sd_card_disk_ioctl, e->disk_device_name); 955 CLEANUP_SC( sc, sd_card_driver_init_cleanup, "Create disk device");955 RTEMS_CLEANUP_SC( sc, sd_card_driver_init_cleanup, "Create disk device"); 956 956 957 957 /* Stop */ 958 958 sc = sd_card_stop( e); 959 CHECK_SC( sc, "Stop");959 RTEMS_CHECK_SC( sc, "Stop"); 960 960 961 961 return RTEMS_SUCCESSFUL; … … 985 985 /* Get driver entry */ 986 986 rv = sd_card_driver_get_entry( minor, &e); 987 CHECK_RVSC( rv, "Get driver entry");987 RTEMS_CHECK_RV_SC( rv, "Get driver entry"); 988 988 989 989 /* Start */ 990 990 sc = sd_card_start( e); 991 CLEANUP_SC( sc, sd_card_driver_read_cleanup, "Start");991 RTEMS_CLEANUP_SC( sc, sd_card_driver_read_cleanup, "Start"); 992 992 993 993 /* Check arguments */ … … 996 996 start_block = (uint32_t) rw->offset >> e->block_size_shift; 997 997 if (rw->offset & block_size_mask) { 998 DO_CLEANUP_SC( RTEMS_INVALID_ADDRESS, sc, sd_card_driver_read_cleanup, "Invalid offset");998 RTEMS_DO_CLEANUP_SC( RTEMS_INVALID_ADDRESS, sc, sd_card_driver_read_cleanup, "Invalid offset"); 999 999 } else if ((rw->count & block_size_mask) || (start_block >= e->block_number) || (block_count > e->block_number - start_block)) { 1000 DO_CLEANUP_SC( RTEMS_INVALID_NUMBER, sc, sd_card_driver_read_cleanup, "Invalid count or out of range");1000 RTEMS_DO_CLEANUP_SC( RTEMS_INVALID_NUMBER, sc, sd_card_driver_read_cleanup, "Invalid count or out of range"); 1001 1001 } 1002 1002 … … 1006 1006 /* Single block read */ 1007 1007 rv = sd_card_send_command( e, SD_CARD_CMD_READ_SINGLE_BLOCK, (uint32_t) rw->offset); 1008 CLEANUP_RVSC( rv, sc, sd_card_driver_read_cleanup, "Send: SD_CARD_CMD_READ_SINGLE_BLOCK");1008 RTEMS_CLEANUP_RV_SC( rv, sc, sd_card_driver_read_cleanup, "Send: SD_CARD_CMD_READ_SINGLE_BLOCK"); 1009 1009 rv = sd_card_read( e, SD_CARD_START_BLOCK_SINGLE_BLOCK_READ, (uint8_t *) rw->buffer, (int) e->block_size); 1010 CLEANUP_RVSC( rv, sc, sd_card_driver_read_cleanup, "Read: SD_CARD_CMD_READ_SINGLE_BLOCK");1010 RTEMS_CLEANUP_RV_SC( rv, sc, sd_card_driver_read_cleanup, "Read: SD_CARD_CMD_READ_SINGLE_BLOCK"); 1011 1011 1012 1012 /* Set moved bytes counter */ … … 1015 1015 /* Start multiple block read */ 1016 1016 rv = sd_card_send_command( e, SD_CARD_CMD_READ_MULTIPLE_BLOCK, (uint32_t) rw->offset); 1017 CLEANUP_RVSC( rv, sc, sd_card_driver_read_stop_cleanup, "Send: SD_CARD_CMD_READ_MULTIPLE_BLOCK");1017 RTEMS_CLEANUP_RV_SC( rv, sc, sd_card_driver_read_stop_cleanup, "Send: SD_CARD_CMD_READ_MULTIPLE_BLOCK"); 1018 1018 1019 1019 /* Multiple block read */ 1020 1020 for (i = 0; i < block_count; ++i) { 1021 1021 rv = sd_card_read( e, SD_CARD_START_BLOCK_MULTIPLE_BLOCK_READ, (uint8_t *) rw->buffer + (i << e->block_size_shift), (int) e->block_size); 1022 CLEANUP_RVSC( rv, sc, sd_card_driver_read_stop_cleanup, "Read block");1022 RTEMS_CLEANUP_RV_SC( rv, sc, sd_card_driver_read_stop_cleanup, "Read block"); 1023 1023 1024 1024 /* Update moved bytes counter */ … … 1028 1028 /* Stop multiple block read */ 1029 1029 rv = sd_card_stop_multiple_block_read( e); 1030 CLEANUP_RVSC( rv, sc, sd_card_driver_read_cleanup, "Stop multiple block read");1030 RTEMS_CLEANUP_RV_SC( rv, sc, sd_card_driver_read_cleanup, "Stop multiple block read"); 1031 1031 } 1032 1032 1033 1033 /* Stop */ 1034 1034 sc = sd_card_stop( e); 1035 CHECK_SC( sc, "Stop");1035 RTEMS_CHECK_SC( sc, "Stop"); 1036 1036 1037 1037 return RTEMS_SUCCESSFUL; … … 1066 1066 /* Get driver entry */ 1067 1067 rv = sd_card_driver_get_entry( minor, &e); 1068 CHECK_RVSC( rv, "Get driver entry");1068 RTEMS_CHECK_RV_SC( rv, "Get driver entry"); 1069 1069 1070 1070 /* Start */ 1071 1071 sc = sd_card_start( e); 1072 CLEANUP_SC( sc, sd_card_driver_write_cleanup, "Start");1072 RTEMS_CLEANUP_SC( sc, sd_card_driver_write_cleanup, "Start"); 1073 1073 1074 1074 /* Check arguments */ … … 1077 1077 start_block = (uint32_t) rw->offset >> e->block_size_shift; 1078 1078 if (rw->offset & block_size_mask) { 1079 DO_CLEANUP_SC( RTEMS_INVALID_ADDRESS, sc, sd_card_driver_write_cleanup, "Invalid offset");1079 RTEMS_DO_CLEANUP_SC( RTEMS_INVALID_ADDRESS, sc, sd_card_driver_write_cleanup, "Invalid offset"); 1080 1080 } else if ((rw->count & block_size_mask) || (start_block >= e->block_number) || (block_count > e->block_number - start_block)) { 1081 DO_CLEANUP_SC( RTEMS_INVALID_NUMBER, sc, sd_card_driver_write_cleanup, "Invalid count or out of range");1081 RTEMS_DO_CLEANUP_SC( RTEMS_INVALID_NUMBER, sc, sd_card_driver_write_cleanup, "Invalid count or out of range"); 1082 1082 } 1083 1083 … … 1087 1087 /* Single block write */ 1088 1088 rv = sd_card_send_command( e, SD_CARD_CMD_WRITE_BLOCK, (uint32_t) rw->offset); 1089 CLEANUP_RVSC( rv, sc, sd_card_driver_write_cleanup, "Send: SD_CARD_CMD_WRITE_BLOCK");1089 RTEMS_CLEANUP_RV_SC( rv, sc, sd_card_driver_write_cleanup, "Send: SD_CARD_CMD_WRITE_BLOCK"); 1090 1090 rv = sd_card_write( e, SD_CARD_START_BLOCK_SINGLE_BLOCK_WRITE, (uint8_t *) rw->buffer, (int) e->block_size); 1091 CLEANUP_RVSC( rv, sc, sd_card_driver_write_cleanup, "Write: SD_CARD_CMD_WRITE_BLOCK");1091 RTEMS_CLEANUP_RV_SC( rv, sc, sd_card_driver_write_cleanup, "Write: SD_CARD_CMD_WRITE_BLOCK"); 1092 1092 1093 1093 /* Set moved bytes counter */ … … 1096 1096 /* Start multiple block write */ 1097 1097 rv = sd_card_send_command( e, SD_CARD_CMD_WRITE_MULTIPLE_BLOCK, (uint32_t) rw->offset); 1098 CLEANUP_RVSC( rv, sc, sd_card_driver_write_stop_cleanup, "Send: SD_CARD_CMD_WRITE_MULTIPLE_BLOCK");1098 RTEMS_CLEANUP_RV_SC( rv, sc, sd_card_driver_write_stop_cleanup, "Send: SD_CARD_CMD_WRITE_MULTIPLE_BLOCK"); 1099 1099 1100 1100 /* Multiple block write */ 1101 1101 for (i = 0; i < block_count; ++i) { 1102 1102 rv = sd_card_write( e, SD_CARD_START_BLOCK_MULTIPLE_BLOCK_WRITE, (uint8_t *) rw->buffer + (i << e->block_size_shift), (int) e->block_size); 1103 CLEANUP_RVSC( rv, sc, sd_card_driver_write_stop_cleanup, "Write: SD_CARD_CMD_WRITE_MULTIPLE_BLOCK");1103 RTEMS_CLEANUP_RV_SC( rv, sc, sd_card_driver_write_stop_cleanup, "Write: SD_CARD_CMD_WRITE_MULTIPLE_BLOCK"); 1104 1104 1105 1105 /* Update moved bytes counter */ … … 1109 1109 /* Stop multiple block write */ 1110 1110 rv = sd_card_stop_multiple_block_write( e); 1111 CLEANUP_RVSC( rv, sc, sd_card_driver_write_cleanup, "Stop multiple block write");1111 RTEMS_CLEANUP_RV_SC( rv, sc, sd_card_driver_write_cleanup, "Stop multiple block write"); 1112 1112 } 1113 1113 1114 1114 /* Get card status */ 1115 1115 rv = sd_card_send_command( e, SD_CARD_CMD_SEND_STATUS, 0); 1116 CHECK_RV( rv, "Send: SD_CARD_CMD_SEND_STATUS");1116 RTEMS_CHECK_RV( rv, "Send: SD_CARD_CMD_SEND_STATUS"); 1117 1117 1118 1118 /* Stop */ 1119 1119 sc = sd_card_stop( e); 1120 CHECK_SC( sc, "Stop");1120 RTEMS_CHECK_SC( sc, "Stop"); 1121 1121 1122 1122 return RTEMS_SUCCESSFUL; … … 1131 1131 /* Get card status */ 1132 1132 rv = sd_card_send_command( e, SD_CARD_CMD_SEND_STATUS, 0); 1133 CHECK_RV( rv, "Send: SD_CARD_CMD_SEND_STATUS");1133 RTEMS_CHECK_RV( rv, "Send: SD_CARD_CMD_SEND_STATUS"); 1134 1134 1135 1135 /* Stop */
Note: See TracChangeset
for help on using the changeset viewer.