Changeset 4046b2f4 in mainline for uspace/srv/bd/ata_bd/ata_bd.c
- Timestamp:
- 2011-08-30T17:35:04Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 7a72ce1a
- Parents:
- c3d19ac
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/ata_bd/ata_bd.c
rc3d19ac r4046b2f4 118 118 static int ata_pcmd_inquiry(int dev_idx, void *obuf, size_t obuf_size); 119 119 static int ata_pcmd_read_12(int dev_idx, uint64_t ba, size_t cnt, 120 void *obuf, size_t obuf_size); 121 static int ata_pcmd_read_toc(int dev_idx, uint8_t ses, 120 122 void *obuf, size_t obuf_size); 121 123 static void disk_print_summary(disk_t *d); … … 353 355 UPPER32(disk[disk_id].blocks)); 354 356 continue; 357 case BD_READ_TOC: 358 cnt = IPC_GET_ARG1(call); 359 if (disk[disk_id].dev_type == ata_pkt_dev) 360 retval = ata_pcmd_read_toc(disk_id, cnt, fs_va, 361 disk[disk_id].block_size); 362 else 363 retval = EINVAL; 364 break; 355 365 default: 356 366 retval = EINVAL; … … 810 820 } 811 821 822 /** Issue ATAPI read TOC command. 823 * 824 * Read TOC in 'multi-session' format (first and last session number 825 * with last session LBA). 826 * 827 * http://suif.stanford.edu/~csapuntz/specs/INF-8020.PDF page 171 828 * 829 * Output buffer must be large enough to hold the data, otherwise the 830 * function will fail. 831 * 832 * @param dev_idx Device index (0 or 1) 833 * @param session Starting session 834 * @param obuf Buffer for storing inquiry data read from device 835 * @param obuf_size Size of obuf in bytes 836 * 837 * @return EOK on success, EIO on error. 838 */ 839 static int ata_pcmd_read_toc(int dev_idx, uint8_t session, void *obuf, 840 size_t obuf_size) 841 { 842 ata_pcmd_read_toc_t cp; 843 int rc; 844 845 memset(&cp, 0, sizeof(cp)); 846 847 cp.opcode = PCMD_READ_TOC; 848 cp.msf = 0; 849 cp.format = 0x01; /* 0x01 = multi-session mode */ 850 cp.start = session; 851 cp.size = host2uint16_t_be(obuf_size); 852 cp.oldformat = 0x40; /* 0x01 = multi-session mode (shifted to MSB) */ 853 854 rc = ata_cmd_packet(0, &cp, sizeof(cp), obuf, obuf_size); 855 if (rc != EOK) 856 return rc; 857 858 return EOK; 859 } 860 812 861 /** Read a physical from the device. 813 862 *
Note:
See TracChangeset
for help on using the changeset viewer.