Changeset b7fd2a0 in mainline for uspace/drv/block/ata_bd/ata_bd.c
- Timestamp:
- 2018-01-13T03:10:29Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- a53ed3a
- Parents:
- 36f0738
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/block/ata_bd/ata_bd.c
r36f0738 rb7fd2a0 82 82 static const size_t identify_data_size = 512; 83 83 84 static int ata_bd_init_io(ata_ctrl_t *ctrl);84 static errno_t ata_bd_init_io(ata_ctrl_t *ctrl); 85 85 static void ata_bd_fini_io(ata_ctrl_t *ctrl); 86 86 87 static int ata_bd_open(bd_srvs_t *, bd_srv_t *);88 static int ata_bd_close(bd_srv_t *);89 static int ata_bd_read_blocks(bd_srv_t *, uint64_t ba, size_t cnt, void *buf,87 static errno_t ata_bd_open(bd_srvs_t *, bd_srv_t *); 88 static errno_t ata_bd_close(bd_srv_t *); 89 static errno_t ata_bd_read_blocks(bd_srv_t *, uint64_t ba, size_t cnt, void *buf, 90 90 size_t); 91 static int ata_bd_read_toc(bd_srv_t *, uint8_t session, void *buf, size_t);92 static int ata_bd_write_blocks(bd_srv_t *, uint64_t ba, size_t cnt,91 static errno_t ata_bd_read_toc(bd_srv_t *, uint8_t session, void *buf, size_t); 92 static errno_t ata_bd_write_blocks(bd_srv_t *, uint64_t ba, size_t cnt, 93 93 const void *buf, size_t); 94 static int ata_bd_get_block_size(bd_srv_t *, size_t *);95 static int ata_bd_get_num_blocks(bd_srv_t *, aoff64_t *);96 static int ata_bd_sync_cache(bd_srv_t *, aoff64_t, size_t);97 98 static int ata_rcmd_read(disk_t *disk, uint64_t ba, size_t cnt,94 static errno_t ata_bd_get_block_size(bd_srv_t *, size_t *); 95 static errno_t ata_bd_get_num_blocks(bd_srv_t *, aoff64_t *); 96 static errno_t ata_bd_sync_cache(bd_srv_t *, aoff64_t, size_t); 97 98 static errno_t ata_rcmd_read(disk_t *disk, uint64_t ba, size_t cnt, 99 99 void *buf); 100 static int ata_rcmd_write(disk_t *disk, uint64_t ba, size_t cnt,100 static errno_t ata_rcmd_write(disk_t *disk, uint64_t ba, size_t cnt, 101 101 const void *buf); 102 static int ata_rcmd_flush_cache(disk_t *disk);103 static int disk_init(ata_ctrl_t *ctrl, disk_t *d, int disk_id);104 static int ata_identify_dev(disk_t *disk, void *buf);105 static int ata_identify_pkt_dev(disk_t *disk, void *buf);106 static int ata_cmd_packet(disk_t *disk, const void *cpkt, size_t cpkt_size,102 static errno_t ata_rcmd_flush_cache(disk_t *disk); 103 static errno_t disk_init(ata_ctrl_t *ctrl, disk_t *d, int disk_id); 104 static errno_t ata_identify_dev(disk_t *disk, void *buf); 105 static errno_t ata_identify_pkt_dev(disk_t *disk, void *buf); 106 static errno_t ata_cmd_packet(disk_t *disk, const void *cpkt, size_t cpkt_size, 107 107 void *obuf, size_t obuf_size, size_t *rcvd_size); 108 static int ata_pcmd_inquiry(disk_t *disk, void *obuf, size_t obuf_size,108 static errno_t ata_pcmd_inquiry(disk_t *disk, void *obuf, size_t obuf_size, 109 109 size_t *rcvd_size); 110 static int ata_pcmd_read_12(disk_t *disk, uint64_t ba, size_t cnt,110 static errno_t ata_pcmd_read_12(disk_t *disk, uint64_t ba, size_t cnt, 111 111 void *obuf, size_t obuf_size); 112 static int ata_pcmd_read_capacity(disk_t *disk, uint64_t *nblocks,112 static errno_t ata_pcmd_read_capacity(disk_t *disk, uint64_t *nblocks, 113 113 size_t *block_size); 114 static int ata_pcmd_read_toc(disk_t *disk, uint8_t ses,114 static errno_t ata_pcmd_read_toc(disk_t *disk, uint8_t ses, 115 115 void *obuf, size_t obuf_size); 116 116 static void disk_print_summary(disk_t *d); 117 static int coord_calc(disk_t *d, uint64_t ba, block_coord_t *bc);117 static errno_t coord_calc(disk_t *d, uint64_t ba, block_coord_t *bc); 118 118 static void coord_sc_program(ata_ctrl_t *ctrl, const block_coord_t *bc, 119 119 uint16_t scnt); 120 static int wait_status(ata_ctrl_t *ctrl, unsigned set, unsigned n_reset,120 static errno_t wait_status(ata_ctrl_t *ctrl, unsigned set, unsigned n_reset, 121 121 uint8_t *pstatus, unsigned timeout); 122 122 … … 143 143 144 144 /** Initialize ATA controller. */ 145 int ata_ctrl_init(ata_ctrl_t *ctrl, ata_base_t *res)145 errno_t ata_ctrl_init(ata_ctrl_t *ctrl, ata_base_t *res) 146 146 { 147 147 int i; 148 int rc;148 errno_t rc; 149 149 int n_disks; 150 150 … … 209 209 210 210 /** Remove ATA controller. */ 211 int ata_ctrl_remove(ata_ctrl_t *ctrl)211 errno_t ata_ctrl_remove(ata_ctrl_t *ctrl) 212 212 { 213 213 int i; 214 int rc;214 errno_t rc; 215 215 216 216 ddf_msg(LVL_DEBUG, ": ata_ctrl_remove()"); … … 234 234 235 235 /** Surprise removal of ATA controller. */ 236 int ata_ctrl_gone(ata_ctrl_t *ctrl)236 errno_t ata_ctrl_gone(ata_ctrl_t *ctrl) 237 237 { 238 238 int i; 239 int rc;239 errno_t rc; 240 240 241 241 ddf_msg(LVL_DEBUG, "ata_ctrl_gone()"); … … 308 308 309 309 /** Enable device I/O. */ 310 static int ata_bd_init_io(ata_ctrl_t *ctrl)311 { 312 int rc;310 static errno_t ata_bd_init_io(ata_ctrl_t *ctrl) 311 { 312 errno_t rc; 313 313 void *vaddr; 314 314 … … 344 344 * the disk structure. 345 345 */ 346 static int disk_init(ata_ctrl_t *ctrl, disk_t *d, int disk_id)346 static errno_t disk_init(ata_ctrl_t *ctrl, disk_t *d, int disk_id) 347 347 { 348 348 identify_data_t idata; … … 356 356 size_t block_size; 357 357 size_t pos, len; 358 int rc;358 errno_t rc; 359 359 unsigned i; 360 360 … … 498 498 } 499 499 500 static int ata_bd_open(bd_srvs_t *bds, bd_srv_t *bd)501 { 502 return EOK; 503 } 504 505 static int ata_bd_close(bd_srv_t *bd)500 static errno_t ata_bd_open(bd_srvs_t *bds, bd_srv_t *bd) 501 { 502 return EOK; 503 } 504 505 static errno_t ata_bd_close(bd_srv_t *bd) 506 506 { 507 507 return EOK; … … 509 509 510 510 /** Read multiple blocks from the device. */ 511 static int ata_bd_read_blocks(bd_srv_t *bd, uint64_t ba, size_t cnt,511 static errno_t ata_bd_read_blocks(bd_srv_t *bd, uint64_t ba, size_t cnt, 512 512 void *buf, size_t size) 513 513 { 514 514 disk_t *disk = bd_srv_disk(bd); 515 int rc;515 errno_t rc; 516 516 517 517 if (size < cnt * disk->block_size) … … 538 538 539 539 /** Read TOC from device. */ 540 static int ata_bd_read_toc(bd_srv_t *bd, uint8_t session, void *buf, size_t size)540 static errno_t ata_bd_read_toc(bd_srv_t *bd, uint8_t session, void *buf, size_t size) 541 541 { 542 542 disk_t *disk = bd_srv_disk(bd); … … 546 546 547 547 /** Write multiple blocks to the device. */ 548 static int ata_bd_write_blocks(bd_srv_t *bd, uint64_t ba, size_t cnt,548 static errno_t ata_bd_write_blocks(bd_srv_t *bd, uint64_t ba, size_t cnt, 549 549 const void *buf, size_t size) 550 550 { 551 551 disk_t *disk = bd_srv_disk(bd); 552 int rc;552 errno_t rc; 553 553 554 554 if (disk->dev_type != ata_reg_dev) … … 572 572 573 573 /** Get device block size. */ 574 static int ata_bd_get_block_size(bd_srv_t *bd, size_t *rbsize)574 static errno_t ata_bd_get_block_size(bd_srv_t *bd, size_t *rbsize) 575 575 { 576 576 disk_t *disk = bd_srv_disk(bd); … … 581 581 582 582 /** Get device number of blocks. */ 583 static int ata_bd_get_num_blocks(bd_srv_t *bd, aoff64_t *rnb)583 static errno_t ata_bd_get_num_blocks(bd_srv_t *bd, aoff64_t *rnb) 584 584 { 585 585 disk_t *disk = bd_srv_disk(bd); … … 590 590 591 591 /** Flush cache. */ 592 static int ata_bd_sync_cache(bd_srv_t *bd, uint64_t ba, size_t cnt)592 static errno_t ata_bd_sync_cache(bd_srv_t *bd, uint64_t ba, size_t cnt) 593 593 { 594 594 disk_t *disk = bd_srv_disk(bd); … … 602 602 603 603 /** PIO data-in command protocol. */ 604 static int ata_pio_data_in(disk_t *disk, void *obuf, size_t obuf_size,604 static errno_t ata_pio_data_in(disk_t *disk, void *obuf, size_t obuf_size, 605 605 size_t blk_size, size_t nblocks) 606 606 { … … 633 633 634 634 /** PIO data-out command protocol. */ 635 static int ata_pio_data_out(disk_t *disk, const void *buf, size_t buf_size,635 static errno_t ata_pio_data_out(disk_t *disk, const void *buf, size_t buf_size, 636 636 size_t blk_size, size_t nblocks) 637 637 { … … 662 662 663 663 /** PIO non-data command protocol. */ 664 static int ata_pio_nondata(disk_t *disk)664 static errno_t ata_pio_nondata(disk_t *disk) 665 665 { 666 666 ata_ctrl_t *ctrl = disk->ctrl; … … 687 687 * not present). EIO if device responds with error. 688 688 */ 689 static int ata_identify_dev(disk_t *disk, void *buf)689 static errno_t ata_identify_dev(disk_t *disk, void *buf) 690 690 { 691 691 ata_ctrl_t *ctrl = disk->ctrl; … … 739 739 * @param buf Pointer to a 512-byte buffer. 740 740 */ 741 static int ata_identify_pkt_dev(disk_t *disk, void *buf)741 static errno_t ata_identify_pkt_dev(disk_t *disk, void *buf) 742 742 { 743 743 ata_ctrl_t *ctrl = disk->ctrl; … … 772 772 * @return EOK on success, EIO on error. 773 773 */ 774 static int ata_cmd_packet(disk_t *disk, const void *cpkt, size_t cpkt_size,774 static errno_t ata_cmd_packet(disk_t *disk, const void *cpkt, size_t cpkt_size, 775 775 void *obuf, size_t obuf_size, size_t *rcvd_size) 776 776 { … … 860 860 * @return EOK on success, EIO on error. 861 861 */ 862 static int ata_pcmd_inquiry(disk_t *disk, void *obuf, size_t obuf_size,862 static errno_t ata_pcmd_inquiry(disk_t *disk, void *obuf, size_t obuf_size, 863 863 size_t *rcvd_size) 864 864 { 865 865 uint8_t cpb[12]; 866 866 scsi_cdb_inquiry_t *cp = (scsi_cdb_inquiry_t *)cpb; 867 int rc;867 errno_t rc; 868 868 869 869 memset(cpb, 0, sizeof(cpb)); … … 893 893 * @return EOK on success, EIO on error. 894 894 */ 895 static int ata_pcmd_read_capacity(disk_t *disk, uint64_t *nblocks,895 static errno_t ata_pcmd_read_capacity(disk_t *disk, uint64_t *nblocks, 896 896 size_t *block_size) 897 897 { … … 899 899 scsi_read_capacity_10_data_t data; 900 900 size_t rsize; 901 int rc;901 errno_t rc; 902 902 903 903 memset(&cdb, 0, sizeof(cdb)); … … 930 930 * @return EOK on success, EIO on error. 931 931 */ 932 static int ata_pcmd_read_12(disk_t *disk, uint64_t ba, size_t cnt,932 static errno_t ata_pcmd_read_12(disk_t *disk, uint64_t ba, size_t cnt, 933 933 void *obuf, size_t obuf_size) 934 934 { 935 935 scsi_cdb_read_12_t cp; 936 int rc;936 errno_t rc; 937 937 938 938 if (ba > UINT32_MAX) … … 969 969 * @return EOK on success, EIO on error. 970 970 */ 971 static int ata_pcmd_read_toc(disk_t *disk, uint8_t session, void *obuf,971 static errno_t ata_pcmd_read_toc(disk_t *disk, uint8_t session, void *obuf, 972 972 size_t obuf_size) 973 973 { 974 974 uint8_t cpb[12]; 975 975 scsi_cdb_read_toc_t *cp = (scsi_cdb_read_toc_t *)cpb; 976 int rc;976 errno_t rc; 977 977 978 978 memset(cpb, 0, sizeof(cpb)); … … 1001 1001 * @return EOK on success, EIO on error. 1002 1002 */ 1003 static int ata_rcmd_read(disk_t *disk, uint64_t ba, size_t blk_cnt,1003 static errno_t ata_rcmd_read(disk_t *disk, uint64_t ba, size_t blk_cnt, 1004 1004 void *buf) 1005 1005 { … … 1007 1007 uint8_t drv_head; 1008 1008 block_coord_t bc; 1009 int rc;1009 errno_t rc; 1010 1010 1011 1011 /* Silence warning. */ … … 1061 1061 * @return EOK on success, EIO on error. 1062 1062 */ 1063 static int ata_rcmd_write(disk_t *disk, uint64_t ba, size_t cnt,1063 static errno_t ata_rcmd_write(disk_t *disk, uint64_t ba, size_t cnt, 1064 1064 const void *buf) 1065 1065 { … … 1067 1067 uint8_t drv_head; 1068 1068 block_coord_t bc; 1069 int rc;1069 errno_t rc; 1070 1070 1071 1071 /* Silence warning. */ … … 1117 1117 * @return EOK on success, EIO on error. 1118 1118 */ 1119 static int ata_rcmd_flush_cache(disk_t *disk)1119 static errno_t ata_rcmd_flush_cache(disk_t *disk) 1120 1120 { 1121 1121 ata_ctrl_t *ctrl = disk->ctrl; 1122 1122 uint8_t drv_head; 1123 int rc;1123 errno_t rc; 1124 1124 1125 1125 /* New value for Drive/Head register */ … … 1159 1159 * @return EOK on success or EINVAL if block index is past end of device. 1160 1160 */ 1161 static int coord_calc(disk_t *d, uint64_t ba, block_coord_t *bc)1161 static errno_t coord_calc(disk_t *d, uint64_t ba, block_coord_t *bc) 1162 1162 { 1163 1163 uint64_t c; … … 1246 1246 * @return EOK on success, EIO on timeout. 1247 1247 */ 1248 static int wait_status(ata_ctrl_t *ctrl, unsigned set, unsigned n_reset,1248 static errno_t wait_status(ata_ctrl_t *ctrl, unsigned set, unsigned n_reset, 1249 1249 uint8_t *pstatus, unsigned timeout) 1250 1250 {
Note:
See TracChangeset
for help on using the changeset viewer.