Lines Matching refs:buf
39 static void padstr8(uint8_t *buf, int buf_size, const char *src) in padstr8() argument
44 buf[i] = *src++; in padstr8()
46 buf[i] = ' '; in padstr8()
50 static void lba_to_msf(uint8_t *buf, int lba) in lba_to_msf() argument
53 buf[0] = (lba / 75) / 60; in lba_to_msf()
54 buf[1] = (lba / 75) % 60; in lba_to_msf()
55 buf[2] = lba % 75; in lba_to_msf()
74 static void cd_data_to_raw(uint8_t *buf, int lba) in cd_data_to_raw() argument
77 buf[0] = 0x00; in cd_data_to_raw()
78 memset(buf + 1, 0xff, 10); in cd_data_to_raw()
79 buf[11] = 0x00; in cd_data_to_raw()
80 buf += 12; in cd_data_to_raw()
82 lba_to_msf(buf, lba); in cd_data_to_raw()
83 buf[3] = 0x01; /* mode 1 data */ in cd_data_to_raw()
84 buf += 4; in cd_data_to_raw()
86 buf += 2048; in cd_data_to_raw()
88 memset(buf, 0, 288); in cd_data_to_raw()
155 void *buf; in cd_read_sector() local
162 buf = (s->cd_sector_size == 2352) ? s->io_buffer + 16 : s->io_buffer; in cd_read_sector()
163 qemu_iovec_init_buf(&s->qiov, buf, ATAPI_SECTOR_SIZE); in cd_read_sector()
466 static inline uint8_t ide_atapi_set_profile(uint8_t *buf, uint8_t *index, in ide_atapi_set_profile() argument
469 uint8_t *buf_profile = buf + 12; /* start of profiles */ in ide_atapi_set_profile()
473 buf_profile[2] = ((buf_profile[0] == buf[6]) && (buf_profile[1] == buf[7])); in ide_atapi_set_profile()
477 buf[11] += 4; /* Additional Length */ in ide_atapi_set_profile()
483 const uint8_t *packet, uint8_t *buf) in ide_dvd_read_structure() argument
499 buf[4] = 1; /* DVD-ROM, part version 1 */ in ide_dvd_read_structure()
500 buf[5] = 0xf; /* 120mm disc, minimum rate unspecified */ in ide_dvd_read_structure()
501 buf[6] = 1; /* one layer, read-only (per MMC-2 spec) */ in ide_dvd_read_structure()
502 buf[7] = 0; /* default densities */ in ide_dvd_read_structure()
505 stl_be_p(buf + 8, 0); /* start sector */ in ide_dvd_read_structure()
506 stl_be_p(buf + 12, total_sectors - 1); /* end sector */ in ide_dvd_read_structure()
507 stl_be_p(buf + 16, total_sectors - 1); /* l0 end sector */ in ide_dvd_read_structure()
510 stw_be_p(buf, 2048 + 2); in ide_dvd_read_structure()
517 buf[4] = 0; /* no copyright data */ in ide_dvd_read_structure()
518 buf[5] = 0; /* no region restrictions */ in ide_dvd_read_structure()
521 stw_be_p(buf, 4 + 2); in ide_dvd_read_structure()
531 stw_be_p(buf, 2048 + 2); in ide_dvd_read_structure()
542 buf[4] = 0x00; /* Physical format */ in ide_dvd_read_structure()
543 buf[5] = 0x40; /* Not writable, is readable */ in ide_dvd_read_structure()
544 stw_be_p(buf + 6, 2048 + 4); in ide_dvd_read_structure()
546 buf[8] = 0x01; /* Copyright info */ in ide_dvd_read_structure()
547 buf[9] = 0x40; /* Not writable, is readable */ in ide_dvd_read_structure()
548 stw_be_p(buf + 10, 4 + 4); in ide_dvd_read_structure()
550 buf[12] = 0x03; /* BCA info */ in ide_dvd_read_structure()
551 buf[13] = 0x40; /* Not writable, is readable */ in ide_dvd_read_structure()
552 stw_be_p(buf + 14, 188 + 4); in ide_dvd_read_structure()
554 buf[16] = 0x04; /* Manufacturing info */ in ide_dvd_read_structure()
555 buf[17] = 0x40; /* Not writable, is readable */ in ide_dvd_read_structure()
556 stw_be_p(buf + 18, 2048 + 4); in ide_dvd_read_structure()
559 stw_be_p(buf, 16 + 2); in ide_dvd_read_structure()
570 uint8_t *buf) in event_status_media() argument
593 buf[4] = event_code; in event_status_media()
594 buf[5] = media_status; in event_status_media()
597 buf[6] = 0; in event_status_media()
598 buf[7] = 0; in event_status_media()
621 uint8_t *buf) in cmd_get_event_status_notification() argument
623 const uint8_t *packet = buf; in cmd_get_event_status_notification()
643 gesn_event_header = (void *)buf; in cmd_get_event_status_notification()
681 used_len = event_status_media(s, buf); in cmd_get_event_status_notification()
691 static void cmd_request_sense(IDEState *s, uint8_t *buf) in cmd_request_sense() argument
693 int max_len = buf[4]; in cmd_request_sense()
695 memset(buf, 0, 18); in cmd_request_sense()
696 buf[0] = 0x70 | (1 << 7); in cmd_request_sense()
697 buf[2] = s->sense_key; in cmd_request_sense()
698 buf[7] = 10; in cmd_request_sense()
699 buf[12] = s->asc; in cmd_request_sense()
708 static void cmd_inquiry(IDEState *s, uint8_t *buf) in cmd_inquiry() argument
710 uint8_t page_code = buf[2]; in cmd_inquiry()
711 int max_len = buf[4]; in cmd_inquiry()
719 if (buf[1] & 0x01) { in cmd_inquiry()
723 buf[idx++] = 0x05; /* CD-ROM */ in cmd_inquiry()
724 buf[idx++] = page_code; /* Page Code */ in cmd_inquiry()
725 buf[idx++] = 0x00; /* reserved */ in cmd_inquiry()
731 buf[idx++] = 0x00; /* 0x00: Supported Pages, and: */ in cmd_inquiry()
732 buf[idx++] = 0x83; /* 0x83: Device Identification. */ in cmd_inquiry()
748 buf[idx++] = 0x02; /* Ascii */ in cmd_inquiry()
749 buf[idx++] = 0x00; /* Vendor Specific */ in cmd_inquiry()
750 buf[idx++] = 0x00; in cmd_inquiry()
751 buf[idx++] = 20; /* Remaining length */ in cmd_inquiry()
752 padstr8(buf + idx, 20, s->drive_serial_str); in cmd_inquiry()
760 buf[idx++] = 0x02; /* Ascii */ in cmd_inquiry()
761 buf[idx++] = 0x01; /* T10 Vendor */ in cmd_inquiry()
762 buf[idx++] = 0x00; in cmd_inquiry()
763 buf[idx++] = 68; in cmd_inquiry()
764 padstr8(buf + idx, 8, "ATA"); /* Generic T10 vendor */ in cmd_inquiry()
766 padstr8(buf + idx, 40, s->drive_model_str); in cmd_inquiry()
768 padstr8(buf + idx, 20, s->drive_serial_str); in cmd_inquiry()
774 buf[idx++] = 0x01; /* Binary */ in cmd_inquiry()
775 buf[idx++] = 0x03; /* NAA */ in cmd_inquiry()
776 buf[idx++] = 0x00; in cmd_inquiry()
777 buf[idx++] = 0x08; in cmd_inquiry()
778 stq_be_p(&buf[idx], s->wwn); in cmd_inquiry()
793 buf[0] = 0x05; /* CD-ROM */ in cmd_inquiry()
794 buf[1] = 0x80; /* removable */ in cmd_inquiry()
795 buf[2] = 0x00; /* ISO */ in cmd_inquiry()
796 buf[3] = 0x21; /* ATAPI-2 (XXX: put ATAPI-4 ?) */ in cmd_inquiry()
798 buf[5] = 0; /* reserved */ in cmd_inquiry()
799 buf[6] = 0; /* reserved */ in cmd_inquiry()
800 buf[7] = 0; /* reserved */ in cmd_inquiry()
801 padstr8(buf + 8, 8, "QEMU"); in cmd_inquiry()
802 padstr8(buf + 16, 16, "QEMU DVD-ROM"); in cmd_inquiry()
803 padstr8(buf + 32, 4, s->version); in cmd_inquiry()
808 buf[size_idx] = idx - preamble_len; in cmd_inquiry()
812 static void cmd_get_configuration(IDEState *s, uint8_t *buf) in cmd_get_configuration() argument
819 if (buf[2] != 0 || buf[3] != 0) { in cmd_get_configuration()
826 max_len = lduw_be_p(buf + 7); in cmd_get_configuration()
840 memset(buf, 0, max_len); in cmd_get_configuration()
846 stw_be_p(buf + 6, MMC_PROFILE_DVD_ROM); in cmd_get_configuration()
848 stw_be_p(buf + 6, MMC_PROFILE_CD_ROM); in cmd_get_configuration()
851 buf[10] = 0x02 | 0x01; /* persistent and current */ in cmd_get_configuration()
853 len += ide_atapi_set_profile(buf, &index, MMC_PROFILE_DVD_ROM); in cmd_get_configuration()
854 len += ide_atapi_set_profile(buf, &index, MMC_PROFILE_CD_ROM); in cmd_get_configuration()
855 stl_be_p(buf, len - 4); /* data length */ in cmd_get_configuration()
860 static void cmd_mode_sense(IDEState *s, uint8_t *buf) in cmd_mode_sense() argument
865 max_len = lduw_be_p(buf + 7); in cmd_mode_sense()
866 action = buf[2] >> 6; in cmd_mode_sense()
867 code = buf[2] & 0x3f; in cmd_mode_sense()
873 stw_be_p(&buf[0], 16 - 2); in cmd_mode_sense()
874 buf[2] = 0x70; in cmd_mode_sense()
875 buf[3] = 0; in cmd_mode_sense()
876 buf[4] = 0; in cmd_mode_sense()
877 buf[5] = 0; in cmd_mode_sense()
878 buf[6] = 0; in cmd_mode_sense()
879 buf[7] = 0; in cmd_mode_sense()
881 buf[8] = MODE_PAGE_R_W_ERROR; in cmd_mode_sense()
882 buf[9] = 16 - 10; in cmd_mode_sense()
883 buf[10] = 0x00; in cmd_mode_sense()
884 buf[11] = 0x05; in cmd_mode_sense()
885 buf[12] = 0x00; in cmd_mode_sense()
886 buf[13] = 0x00; in cmd_mode_sense()
887 buf[14] = 0x00; in cmd_mode_sense()
888 buf[15] = 0x00; in cmd_mode_sense()
892 stw_be_p(&buf[0], 24 - 2); in cmd_mode_sense()
893 buf[2] = 0x70; in cmd_mode_sense()
894 buf[3] = 0; in cmd_mode_sense()
895 buf[4] = 0; in cmd_mode_sense()
896 buf[5] = 0; in cmd_mode_sense()
897 buf[6] = 0; in cmd_mode_sense()
898 buf[7] = 0; in cmd_mode_sense()
900 buf[8] = MODE_PAGE_AUDIO_CTL; in cmd_mode_sense()
901 buf[9] = 24 - 10; in cmd_mode_sense()
903 buf[17] = 0; in cmd_mode_sense()
904 buf[19] = 0; in cmd_mode_sense()
905 buf[21] = 0; in cmd_mode_sense()
906 buf[23] = 0; in cmd_mode_sense()
911 stw_be_p(&buf[0], 30 - 2); in cmd_mode_sense()
912 buf[2] = 0x70; in cmd_mode_sense()
913 buf[3] = 0; in cmd_mode_sense()
914 buf[4] = 0; in cmd_mode_sense()
915 buf[5] = 0; in cmd_mode_sense()
916 buf[6] = 0; in cmd_mode_sense()
917 buf[7] = 0; in cmd_mode_sense()
919 buf[8] = MODE_PAGE_CAPABILITIES; in cmd_mode_sense()
920 buf[9] = 30 - 10; in cmd_mode_sense()
921 buf[10] = 0x3b; /* read CDR/CDRW/DVDROM/DVDR/DVDRAM */ in cmd_mode_sense()
922 buf[11] = 0x00; in cmd_mode_sense()
926 buf[12] = 0x71; in cmd_mode_sense()
927 buf[13] = 3 << 5; in cmd_mode_sense()
928 buf[14] = (1 << 0) | (1 << 3) | (1 << 5); in cmd_mode_sense()
930 buf[14] |= 1 << 1; in cmd_mode_sense()
932 buf[15] = 0x00; /* No volume & mute control, no changer */ in cmd_mode_sense()
933 stw_be_p(&buf[16], 704); /* 4x read speed */ in cmd_mode_sense()
934 buf[18] = 0; /* Two volume levels */ in cmd_mode_sense()
935 buf[19] = 2; in cmd_mode_sense()
936 stw_be_p(&buf[20], 512); /* 512k buffer */ in cmd_mode_sense()
937 stw_be_p(&buf[22], 704); /* 4x read speed current */ in cmd_mode_sense()
938 buf[24] = 0; in cmd_mode_sense()
939 buf[25] = 0; in cmd_mode_sense()
940 buf[26] = 0; in cmd_mode_sense()
941 buf[27] = 0; in cmd_mode_sense()
942 buf[28] = 0; in cmd_mode_sense()
943 buf[29] = 0; in cmd_mode_sense()
966 static void cmd_test_unit_ready(IDEState *s, uint8_t *buf) in cmd_test_unit_ready() argument
973 static void cmd_prevent_allow_medium_removal(IDEState *s, uint8_t* buf) in cmd_prevent_allow_medium_removal() argument
975 s->tray_locked = buf[4] & 1; in cmd_prevent_allow_medium_removal()
976 blk_lock_medium(s->blk, buf[4] & 1); in cmd_prevent_allow_medium_removal()
980 static void cmd_read(IDEState *s, uint8_t* buf) in cmd_read() argument
987 if (buf[0] == GPCMD_READ_10) { in cmd_read()
988 nb_sectors = lduw_be_p(buf + 7); in cmd_read()
990 nb_sectors = ldl_be_p(buf + 6); in cmd_read()
997 lba = ldl_be_p(buf + 2); in cmd_read()
1006 static void cmd_read_cd(IDEState *s, uint8_t* buf) in cmd_read_cd() argument
1013 nb_sectors = (buf[6] << 16) | (buf[7] << 8) | buf[8]; in cmd_read_cd()
1019 lba = ldl_be_p(buf + 2); in cmd_read_cd()
1025 transfer_request = buf[9] & 0xf8; in cmd_read_cd()
1053 static void cmd_seek(IDEState *s, uint8_t* buf) in cmd_seek() argument
1058 lba = ldl_be_p(buf + 2); in cmd_seek()
1067 static void cmd_start_stop_unit(IDEState *s, uint8_t* buf) in cmd_start_stop_unit() argument
1070 bool start = buf[4] & 1; in cmd_start_stop_unit()
1071 bool loej = buf[4] & 2; /* load on start, eject on !start */ in cmd_start_stop_unit()
1072 int pwrcnd = buf[4] & 0xf0; in cmd_start_stop_unit()
1097 static void cmd_mechanism_status(IDEState *s, uint8_t* buf) in cmd_mechanism_status() argument
1099 int max_len = lduw_be_p(buf + 8); in cmd_mechanism_status()
1101 stw_be_p(buf, 0); in cmd_mechanism_status()
1103 buf[2] = 0; in cmd_mechanism_status()
1104 buf[3] = 0; in cmd_mechanism_status()
1105 buf[4] = 0; in cmd_mechanism_status()
1106 buf[5] = 1; in cmd_mechanism_status()
1107 stw_be_p(buf + 6, 0); in cmd_mechanism_status()
1111 static void cmd_read_toc_pma_atip(IDEState *s, uint8_t* buf) in cmd_read_toc_pma_atip() argument
1117 max_len = lduw_be_p(buf + 7); in cmd_read_toc_pma_atip()
1118 format = buf[9] >> 6; in cmd_read_toc_pma_atip()
1119 msf = (buf[1] >> 1) & 1; in cmd_read_toc_pma_atip()
1120 start_track = buf[6]; in cmd_read_toc_pma_atip()
1124 len = cdrom_read_toc(total_sectors, buf, msf, start_track); in cmd_read_toc_pma_atip()
1131 memset(buf, 0, 12); in cmd_read_toc_pma_atip()
1132 buf[1] = 0x0a; in cmd_read_toc_pma_atip()
1133 buf[2] = 0x01; in cmd_read_toc_pma_atip()
1134 buf[3] = 0x01; in cmd_read_toc_pma_atip()
1138 len = cdrom_read_toc_raw(total_sectors, buf, msf, start_track); in cmd_read_toc_pma_atip()
1150 static void cmd_read_cdvd_capacity(IDEState *s, uint8_t* buf) in cmd_read_cdvd_capacity() argument
1155 stl_be_p(buf, total_sectors - 1); in cmd_read_cdvd_capacity()
1156 stl_be_p(buf + 4, 2048); in cmd_read_cdvd_capacity()
1160 static void cmd_read_disc_information(IDEState *s, uint8_t* buf) in cmd_read_disc_information() argument
1162 uint8_t type = buf[1] & 7; in cmd_read_disc_information()
1163 uint32_t max_len = lduw_be_p(buf + 7); in cmd_read_disc_information()
1172 memset(buf, 0, 34); in cmd_read_disc_information()
1173 buf[1] = 32; in cmd_read_disc_information()
1174 buf[2] = 0xe; /* last session complete, disc finalized */ in cmd_read_disc_information()
1175 buf[3] = 1; /* first track on disc */ in cmd_read_disc_information()
1176 buf[4] = 1; /* # of sessions */ in cmd_read_disc_information()
1177 buf[5] = 1; /* first track of last session */ in cmd_read_disc_information()
1178 buf[6] = 1; /* last track of last session */ in cmd_read_disc_information()
1179 buf[7] = 0x20; /* unrestricted use */ in cmd_read_disc_information()
1180 buf[8] = 0x00; /* CD-ROM or DVD-ROM */ in cmd_read_disc_information()
1190 static void cmd_read_dvd_structure(IDEState *s, uint8_t* buf) in cmd_read_dvd_structure() argument
1193 int media = buf[1]; in cmd_read_dvd_structure()
1194 int format = buf[7]; in cmd_read_dvd_structure()
1197 max_len = lduw_be_p(buf + 8); in cmd_read_dvd_structure()
1211 memset(buf, 0, max_len > IDE_DMA_BUF_SECTORS * BDRV_SECTOR_SIZE + 4 ? in cmd_read_dvd_structure()
1218 ret = ide_dvd_read_structure(s, format, buf, buf); in cmd_read_dvd_structure()
1244 static void cmd_set_speed(IDEState *s, uint8_t* buf) in cmd_set_speed() argument
1281 void (*handler)(IDEState *s, uint8_t *buf);
1307 uint8_t *buf = s->io_buffer; in ide_atapi_cmd() local
1314 qemu_hexdump_line(NULL, buf, ATAPI_PACKET_SIZE, 1, 0); in ide_atapi_cmd()
1369 cmd->handler(s, buf); in ide_atapi_cmd()