Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

447 lines
16 KiB

  1. /*++
  2. Copyright (C) Microsoft Corporation, 1992 - 1999
  3. Module Name:
  4. classkd.c
  5. Abstract:
  6. Debugger Extension Api for interpretting scsiport structures
  7. Author:
  8. ervinp
  9. Environment:
  10. User Mode.
  11. Revision History:
  12. --*/
  13. #include "pch.h"
  14. #include "classpnp.h" // #defines ALLOCATE_SRB_FROM_POOL as needed
  15. #include "classp.h" // Classpnp's private definitions
  16. #include "cdrom.h"
  17. #include "classkd.h" // routines that are useful for all class drivers
  18. char *DbgGetIoctlStr(ULONG ioctl)
  19. {
  20. char *ioctlStr = "?";
  21. switch (ioctl){
  22. #undef MAKE_CASE
  23. #define MAKE_CASE(ioctlCode) case ioctlCode: ioctlStr = #ioctlCode; break;
  24. MAKE_CASE(IOCTL_STORAGE_CHECK_VERIFY)
  25. MAKE_CASE(IOCTL_STORAGE_CHECK_VERIFY2)
  26. MAKE_CASE(IOCTL_STORAGE_MEDIA_REMOVAL)
  27. MAKE_CASE(IOCTL_STORAGE_EJECT_MEDIA)
  28. MAKE_CASE(IOCTL_STORAGE_LOAD_MEDIA)
  29. MAKE_CASE(IOCTL_STORAGE_LOAD_MEDIA2)
  30. MAKE_CASE(IOCTL_STORAGE_RESERVE)
  31. MAKE_CASE(IOCTL_STORAGE_RELEASE)
  32. MAKE_CASE(IOCTL_STORAGE_FIND_NEW_DEVICES)
  33. MAKE_CASE(IOCTL_STORAGE_EJECTION_CONTROL)
  34. MAKE_CASE(IOCTL_STORAGE_MCN_CONTROL)
  35. MAKE_CASE(IOCTL_STORAGE_GET_MEDIA_TYPES)
  36. MAKE_CASE(IOCTL_STORAGE_GET_MEDIA_TYPES_EX)
  37. MAKE_CASE(IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER)
  38. MAKE_CASE(IOCTL_STORAGE_GET_HOTPLUG_INFO)
  39. MAKE_CASE(IOCTL_STORAGE_RESET_BUS)
  40. MAKE_CASE(IOCTL_STORAGE_RESET_DEVICE)
  41. MAKE_CASE(IOCTL_STORAGE_GET_DEVICE_NUMBER)
  42. MAKE_CASE(IOCTL_STORAGE_PREDICT_FAILURE)
  43. MAKE_CASE(IOCTL_STORAGE_QUERY_PROPERTY)
  44. MAKE_CASE(OBSOLETE_IOCTL_STORAGE_RESET_BUS)
  45. MAKE_CASE(OBSOLETE_IOCTL_STORAGE_RESET_DEVICE)
  46. }
  47. return ioctlStr;
  48. }
  49. char *DbgGetScsiOpStr(UCHAR ScsiOp)
  50. {
  51. char *scsiOpStr = "?";
  52. switch (ScsiOp){
  53. #undef MAKE_CASE
  54. #define MAKE_CASE(scsiOpCode) case scsiOpCode: scsiOpStr = #scsiOpCode; break;
  55. MAKE_CASE(SCSIOP_TEST_UNIT_READY)
  56. MAKE_CASE(SCSIOP_REWIND) // aka SCSIOP_REZERO_UNIT
  57. MAKE_CASE(SCSIOP_REQUEST_BLOCK_ADDR)
  58. MAKE_CASE(SCSIOP_REQUEST_SENSE)
  59. MAKE_CASE(SCSIOP_FORMAT_UNIT)
  60. MAKE_CASE(SCSIOP_READ_BLOCK_LIMITS)
  61. MAKE_CASE(SCSIOP_INIT_ELEMENT_STATUS) // aka SCSIOP_REASSIGN_BLOCKS
  62. MAKE_CASE(SCSIOP_RECEIVE) // aka SCSIOP_READ6
  63. MAKE_CASE(SCSIOP_SEND) // aka SCSIOP_WRITE6, SCSIOP_PRINT
  64. MAKE_CASE(SCSIOP_SLEW_PRINT) // aka SCSIOP_SEEK6, SCSIOP_TRACK_SELECT
  65. MAKE_CASE(SCSIOP_SEEK_BLOCK)
  66. MAKE_CASE(SCSIOP_PARTITION)
  67. MAKE_CASE(SCSIOP_READ_REVERSE)
  68. MAKE_CASE(SCSIOP_FLUSH_BUFFER) // aka SCSIOP_WRITE_FILEMARKS
  69. MAKE_CASE(SCSIOP_SPACE)
  70. MAKE_CASE(SCSIOP_INQUIRY)
  71. MAKE_CASE(SCSIOP_VERIFY6)
  72. MAKE_CASE(SCSIOP_RECOVER_BUF_DATA)
  73. MAKE_CASE(SCSIOP_MODE_SELECT)
  74. MAKE_CASE(SCSIOP_RESERVE_UNIT)
  75. MAKE_CASE(SCSIOP_RELEASE_UNIT)
  76. MAKE_CASE(SCSIOP_COPY)
  77. MAKE_CASE(SCSIOP_ERASE)
  78. MAKE_CASE(SCSIOP_MODE_SENSE)
  79. MAKE_CASE(SCSIOP_START_STOP_UNIT) // aka SCSIOP_STOP_PRINT, SCSIOP_LOAD_UNLOAD
  80. MAKE_CASE(SCSIOP_RECEIVE_DIAGNOSTIC)
  81. MAKE_CASE(SCSIOP_SEND_DIAGNOSTIC)
  82. MAKE_CASE(SCSIOP_MEDIUM_REMOVAL)
  83. MAKE_CASE(SCSIOP_READ_FORMATTED_CAPACITY)
  84. MAKE_CASE(SCSIOP_READ_CAPACITY)
  85. MAKE_CASE(SCSIOP_READ)
  86. MAKE_CASE(SCSIOP_WRITE)
  87. MAKE_CASE(SCSIOP_SEEK) // aka SCSIOP_LOCATE, SCSIOP_POSITION_TO_ELEMENT
  88. MAKE_CASE(SCSIOP_WRITE_VERIFY)
  89. MAKE_CASE(SCSIOP_VERIFY)
  90. MAKE_CASE(SCSIOP_SEARCH_DATA_HIGH)
  91. MAKE_CASE(SCSIOP_SEARCH_DATA_EQUAL)
  92. MAKE_CASE(SCSIOP_SEARCH_DATA_LOW)
  93. MAKE_CASE(SCSIOP_SET_LIMITS)
  94. MAKE_CASE(SCSIOP_READ_POSITION)
  95. MAKE_CASE(SCSIOP_SYNCHRONIZE_CACHE)
  96. MAKE_CASE(SCSIOP_COMPARE)
  97. MAKE_CASE(SCSIOP_COPY_COMPARE)
  98. MAKE_CASE(SCSIOP_WRITE_DATA_BUFF)
  99. MAKE_CASE(SCSIOP_READ_DATA_BUFF)
  100. MAKE_CASE(SCSIOP_CHANGE_DEFINITION)
  101. MAKE_CASE(SCSIOP_READ_SUB_CHANNEL)
  102. MAKE_CASE(SCSIOP_READ_TOC)
  103. MAKE_CASE(SCSIOP_READ_HEADER)
  104. MAKE_CASE(SCSIOP_PLAY_AUDIO)
  105. MAKE_CASE(SCSIOP_GET_CONFIGURATION)
  106. MAKE_CASE(SCSIOP_PLAY_AUDIO_MSF)
  107. MAKE_CASE(SCSIOP_PLAY_TRACK_INDEX)
  108. MAKE_CASE(SCSIOP_PLAY_TRACK_RELATIVE)
  109. MAKE_CASE(SCSIOP_GET_EVENT_STATUS)
  110. MAKE_CASE(SCSIOP_PAUSE_RESUME)
  111. MAKE_CASE(SCSIOP_LOG_SELECT)
  112. MAKE_CASE(SCSIOP_LOG_SENSE)
  113. MAKE_CASE(SCSIOP_STOP_PLAY_SCAN)
  114. MAKE_CASE(SCSIOP_READ_DISK_INFORMATION)
  115. MAKE_CASE(SCSIOP_READ_TRACK_INFORMATION)
  116. MAKE_CASE(SCSIOP_RESERVE_TRACK_RZONE)
  117. MAKE_CASE(SCSIOP_SEND_OPC_INFORMATION)
  118. MAKE_CASE(SCSIOP_MODE_SELECT10)
  119. MAKE_CASE(SCSIOP_MODE_SENSE10)
  120. MAKE_CASE(SCSIOP_CLOSE_TRACK_SESSION)
  121. MAKE_CASE(SCSIOP_READ_BUFFER_CAPACITY)
  122. MAKE_CASE(SCSIOP_SEND_CUE_SHEET)
  123. MAKE_CASE(SCSIOP_PERSISTENT_RESERVE_IN)
  124. MAKE_CASE(SCSIOP_PERSISTENT_RESERVE_OUT)
  125. MAKE_CASE(SCSIOP_REPORT_LUNS)
  126. MAKE_CASE(SCSIOP_BLANK)
  127. MAKE_CASE(SCSIOP_SEND_KEY)
  128. MAKE_CASE(SCSIOP_REPORT_KEY)
  129. MAKE_CASE(SCSIOP_MOVE_MEDIUM)
  130. MAKE_CASE(SCSIOP_LOAD_UNLOAD_SLOT) // aka SCSIOP_EXCHANGE_MEDIUM
  131. MAKE_CASE(SCSIOP_SET_READ_AHEAD)
  132. MAKE_CASE(SCSIOP_READ_DVD_STRUCTURE)
  133. MAKE_CASE(SCSIOP_REQUEST_VOL_ELEMENT)
  134. MAKE_CASE(SCSIOP_SEND_VOLUME_TAG)
  135. MAKE_CASE(SCSIOP_READ_ELEMENT_STATUS)
  136. MAKE_CASE(SCSIOP_READ_CD_MSF)
  137. MAKE_CASE(SCSIOP_SCAN_CD)
  138. MAKE_CASE(SCSIOP_SET_CD_SPEED)
  139. MAKE_CASE(SCSIOP_PLAY_CD)
  140. MAKE_CASE(SCSIOP_MECHANISM_STATUS)
  141. MAKE_CASE(SCSIOP_READ_CD)
  142. MAKE_CASE(SCSIOP_SEND_DVD_STRUCTURE)
  143. MAKE_CASE(SCSIOP_INIT_ELEMENT_RANGE)
  144. }
  145. return scsiOpStr;
  146. }
  147. char *DbgGetSrbStatusStr(UCHAR SrbStat)
  148. {
  149. char *srbStatStr = "?";
  150. switch (SrbStat){
  151. #undef MAKE_CASE
  152. #define MAKE_CASE(srbStat) \
  153. case srbStat: \
  154. srbStatStr = #srbStat; \
  155. break; \
  156. case srbStat|SRB_STATUS_QUEUE_FROZEN: \
  157. srbStatStr = #srbStat "|SRB_STATUS_QUEUE_FROZEN"; \
  158. break; \
  159. case srbStat|SRB_STATUS_AUTOSENSE_VALID: \
  160. srbStatStr = #srbStat "|SRB_STATUS_AUTOSENSE_VALID"; \
  161. break; \
  162. case srbStat|SRB_STATUS_QUEUE_FROZEN|SRB_STATUS_AUTOSENSE_VALID: \
  163. srbStatStr = #srbStat "|SRB_STATUS_QUEUE_FROZEN|SRB_STATUS_AUTOSENSE_VALID"; \
  164. break;
  165. MAKE_CASE(SRB_STATUS_PENDING)
  166. MAKE_CASE(SRB_STATUS_SUCCESS)
  167. MAKE_CASE(SRB_STATUS_ABORTED)
  168. MAKE_CASE(SRB_STATUS_ABORT_FAILED)
  169. MAKE_CASE(SRB_STATUS_ERROR)
  170. MAKE_CASE(SRB_STATUS_BUSY)
  171. MAKE_CASE(SRB_STATUS_INVALID_REQUEST)
  172. MAKE_CASE(SRB_STATUS_INVALID_PATH_ID)
  173. MAKE_CASE(SRB_STATUS_NO_DEVICE)
  174. MAKE_CASE(SRB_STATUS_TIMEOUT)
  175. MAKE_CASE(SRB_STATUS_SELECTION_TIMEOUT)
  176. MAKE_CASE(SRB_STATUS_COMMAND_TIMEOUT)
  177. MAKE_CASE(SRB_STATUS_MESSAGE_REJECTED)
  178. MAKE_CASE(SRB_STATUS_BUS_RESET)
  179. MAKE_CASE(SRB_STATUS_PARITY_ERROR)
  180. MAKE_CASE(SRB_STATUS_REQUEST_SENSE_FAILED)
  181. MAKE_CASE(SRB_STATUS_NO_HBA)
  182. MAKE_CASE(SRB_STATUS_DATA_OVERRUN)
  183. MAKE_CASE(SRB_STATUS_UNEXPECTED_BUS_FREE)
  184. MAKE_CASE(SRB_STATUS_PHASE_SEQUENCE_FAILURE)
  185. MAKE_CASE(SRB_STATUS_BAD_SRB_BLOCK_LENGTH)
  186. MAKE_CASE(SRB_STATUS_REQUEST_FLUSHED)
  187. MAKE_CASE(SRB_STATUS_INVALID_LUN)
  188. MAKE_CASE(SRB_STATUS_INVALID_TARGET_ID)
  189. MAKE_CASE(SRB_STATUS_BAD_FUNCTION)
  190. MAKE_CASE(SRB_STATUS_ERROR_RECOVERY)
  191. MAKE_CASE(SRB_STATUS_NOT_POWERED)
  192. MAKE_CASE(SRB_STATUS_INTERNAL_ERROR)
  193. }
  194. return srbStatStr;
  195. }
  196. char *DbgGetSenseCodeStr(UCHAR SrbStat, ULONG64 SenseDataAddr)
  197. {
  198. char *senseCodeStr = "?";
  199. if (SrbStat & SRB_STATUS_AUTOSENSE_VALID){
  200. UCHAR senseCode;
  201. senseCode = GetUCHARField(SenseDataAddr, "classpnp!_SENSE_DATA", "SenseKey");
  202. if (senseCode != BAD_VALUE){
  203. senseCode &= 0x0f;
  204. switch (senseCode){
  205. #undef MAKE_CASE
  206. #define MAKE_CASE(snsCod) case snsCod: senseCodeStr = #snsCod; break;
  207. MAKE_CASE(SCSI_SENSE_NO_SENSE)
  208. MAKE_CASE(SCSI_SENSE_RECOVERED_ERROR)
  209. MAKE_CASE(SCSI_SENSE_NOT_READY)
  210. MAKE_CASE(SCSI_SENSE_MEDIUM_ERROR)
  211. MAKE_CASE(SCSI_SENSE_HARDWARE_ERROR)
  212. MAKE_CASE(SCSI_SENSE_ILLEGAL_REQUEST)
  213. MAKE_CASE(SCSI_SENSE_UNIT_ATTENTION)
  214. MAKE_CASE(SCSI_SENSE_DATA_PROTECT)
  215. MAKE_CASE(SCSI_SENSE_BLANK_CHECK)
  216. MAKE_CASE(SCSI_SENSE_UNIQUE)
  217. MAKE_CASE(SCSI_SENSE_COPY_ABORTED)
  218. MAKE_CASE(SCSI_SENSE_ABORTED_COMMAND)
  219. MAKE_CASE(SCSI_SENSE_EQUAL)
  220. MAKE_CASE(SCSI_SENSE_VOL_OVERFLOW)
  221. MAKE_CASE(SCSI_SENSE_MISCOMPARE)
  222. MAKE_CASE(SCSI_SENSE_RESERVED)
  223. }
  224. }
  225. }
  226. return senseCodeStr;
  227. }
  228. char *DbgGetAdditionalSenseCodeStr(UCHAR SrbStat, ULONG64 SenseDataAddr)
  229. {
  230. char *adSenseCodeStr = "?";
  231. if (SrbStat & SRB_STATUS_AUTOSENSE_VALID){
  232. UCHAR adSenseCode;
  233. adSenseCode = GetUCHARField(SenseDataAddr, "classpnp!_SENSE_DATA", "AdditionalSenseCode");
  234. if (adSenseCode != BAD_VALUE){
  235. switch (adSenseCode){
  236. #undef MAKE_CASE
  237. #define MAKE_CASE(adSnsCod) case adSnsCod: adSenseCodeStr = #adSnsCod; break;
  238. MAKE_CASE(SCSI_ADSENSE_NO_SENSE)
  239. MAKE_CASE(SCSI_ADSENSE_LUN_NOT_READY)
  240. MAKE_CASE(SCSI_ADSENSE_TRACK_ERROR)
  241. MAKE_CASE(SCSI_ADSENSE_SEEK_ERROR)
  242. MAKE_CASE(SCSI_ADSENSE_REC_DATA_NOECC)
  243. MAKE_CASE(SCSI_ADSENSE_REC_DATA_ECC)
  244. MAKE_CASE(SCSI_ADSENSE_ILLEGAL_COMMAND)
  245. MAKE_CASE(SCSI_ADSENSE_ILLEGAL_BLOCK)
  246. MAKE_CASE(SCSI_ADSENSE_INVALID_CDB)
  247. MAKE_CASE(SCSI_ADSENSE_INVALID_LUN)
  248. MAKE_CASE(SCSI_ADSENSE_WRITE_PROTECT) // aka SCSI_ADWRITE_PROTECT
  249. MAKE_CASE(SCSI_ADSENSE_MEDIUM_CHANGED)
  250. MAKE_CASE(SCSI_ADSENSE_BUS_RESET)
  251. MAKE_CASE(SCSI_ADSENSE_INVALID_MEDIA)
  252. MAKE_CASE(SCSI_ADSENSE_NO_MEDIA_IN_DEVICE)
  253. MAKE_CASE(SCSI_ADSENSE_POSITION_ERROR)
  254. MAKE_CASE(SCSI_ADSENSE_OPERATOR_REQUEST)
  255. MAKE_CASE(SCSI_ADSENSE_FAILURE_PREDICTION_THRESHOLD_EXCEEDED)
  256. MAKE_CASE(SCSI_ADSENSE_COPY_PROTECTION_FAILURE)
  257. MAKE_CASE(SCSI_ADSENSE_VENDOR_UNIQUE)
  258. MAKE_CASE(SCSI_ADSENSE_MUSIC_AREA)
  259. MAKE_CASE(SCSI_ADSENSE_DATA_AREA)
  260. MAKE_CASE(SCSI_ADSENSE_VOLUME_OVERFLOW)
  261. }
  262. }
  263. }
  264. return adSenseCodeStr;
  265. }
  266. char *DbgGetAdditionalSenseCodeQualifierStr(UCHAR SrbStat, ULONG64 SenseDataAddr)
  267. {
  268. char *adSenseCodeQualStr = "?";
  269. if (SrbStat & SRB_STATUS_AUTOSENSE_VALID){
  270. UCHAR adSenseCode, adSenseCodeQual;
  271. adSenseCode = GetUCHARField(SenseDataAddr, "classpnp!_SENSE_DATA", "AdditionalSenseCode");
  272. adSenseCodeQual = GetUCHARField(SenseDataAddr, "classpnp!_SENSE_DATA", "AdditionalSenseCodeQualifier");
  273. if ((adSenseCode != BAD_VALUE) && (adSenseCodeQual != BAD_VALUE)){
  274. switch (adSenseCode){
  275. #undef MAKE_CASE
  276. #define MAKE_CASE(adSnsCodQual) case adSnsCodQual: adSenseCodeQualStr = #adSnsCodQual; break;
  277. case SCSI_ADSENSE_LUN_NOT_READY:
  278. switch (adSenseCodeQual){
  279. MAKE_CASE(SCSI_SENSEQ_CAUSE_NOT_REPORTABLE)
  280. MAKE_CASE(SCSI_SENSEQ_BECOMING_READY)
  281. MAKE_CASE(SCSI_SENSEQ_INIT_COMMAND_REQUIRED)
  282. MAKE_CASE(SCSI_SENSEQ_MANUAL_INTERVENTION_REQUIRED)
  283. MAKE_CASE(SCSI_SENSEQ_FORMAT_IN_PROGRESS)
  284. MAKE_CASE(SCSI_SENSEQ_REBUILD_IN_PROGRESS)
  285. MAKE_CASE(SCSI_SENSEQ_RECALCULATION_IN_PROGRESS)
  286. MAKE_CASE(SCSI_SENSEQ_OPERATION_IN_PROGRESS)
  287. MAKE_CASE(SCSI_SENSEQ_LONG_WRITE_IN_PROGRESS)
  288. }
  289. break;
  290. case SCSI_ADSENSE_NO_SENSE:
  291. switch (adSenseCodeQual){
  292. MAKE_CASE(SCSI_SENSEQ_FILEMARK_DETECTED)
  293. MAKE_CASE(SCSI_SENSEQ_END_OF_MEDIA_DETECTED)
  294. MAKE_CASE(SCSI_SENSEQ_SETMARK_DETECTED)
  295. MAKE_CASE(SCSI_SENSEQ_BEGINNING_OF_MEDIA_DETECTED)
  296. }
  297. break;
  298. case SCSI_ADSENSE_ILLEGAL_BLOCK:
  299. switch (adSenseCodeQual){
  300. MAKE_CASE(SCSI_SENSEQ_ILLEGAL_ELEMENT_ADDR)
  301. }
  302. break;
  303. case SCSI_ADSENSE_POSITION_ERROR:
  304. switch (adSenseCodeQual){
  305. MAKE_CASE(SCSI_SENSEQ_DESTINATION_FULL)
  306. MAKE_CASE(SCSI_SENSEQ_SOURCE_EMPTY)
  307. }
  308. break;
  309. case SCSI_ADSENSE_INVALID_MEDIA:
  310. switch (adSenseCodeQual){
  311. MAKE_CASE(SCSI_SENSEQ_INCOMPATIBLE_MEDIA_INSTALLED)
  312. MAKE_CASE(SCSI_SENSEQ_UNKNOWN_FORMAT)
  313. MAKE_CASE(SCSI_SENSEQ_INCOMPATIBLE_FORMAT)
  314. MAKE_CASE(SCSI_SENSEQ_CLEANING_CARTRIDGE_INSTALLED)
  315. }
  316. break;
  317. case SCSI_ADSENSE_OPERATOR_REQUEST:
  318. switch (adSenseCodeQual){
  319. MAKE_CASE(SCSI_SENSEQ_STATE_CHANGE_INPUT)
  320. MAKE_CASE(SCSI_SENSEQ_MEDIUM_REMOVAL)
  321. MAKE_CASE(SCSI_SENSEQ_WRITE_PROTECT_ENABLE)
  322. MAKE_CASE(SCSI_SENSEQ_WRITE_PROTECT_DISABLE)
  323. }
  324. break;
  325. case SCSI_ADSENSE_COPY_PROTECTION_FAILURE:
  326. switch (adSenseCodeQual){
  327. MAKE_CASE(SCSI_SENSEQ_AUTHENTICATION_FAILURE)
  328. MAKE_CASE(SCSI_SENSEQ_KEY_NOT_PRESENT)
  329. MAKE_CASE(SCSI_SENSEQ_KEY_NOT_ESTABLISHED)
  330. MAKE_CASE(SCSI_SENSEQ_READ_OF_SCRAMBLED_SECTOR_WITHOUT_AUTHENTICATION)
  331. MAKE_CASE(SCSI_SENSEQ_MEDIA_CODE_MISMATCHED_TO_LOGICAL_UNIT)
  332. MAKE_CASE(SCSI_SENSEQ_LOGICAL_UNIT_RESET_COUNT_ERROR)
  333. }
  334. break;
  335. }
  336. }
  337. }
  338. return adSenseCodeQualStr;
  339. }
  340. /*
  341. * DbgGetMediaTypeStr
  342. *
  343. * Convert MEDIA_TYPE (defined in ntdddisk.h) to a string.
  344. */
  345. char *DbgGetMediaTypeStr(ULONG MediaType)
  346. {
  347. char *mediaTypeStr = "?";
  348. switch (MediaType){
  349. #undef MAKE_CASE
  350. #define MAKE_CASE(mtype) case mtype: mediaTypeStr = #mtype; break;
  351. MAKE_CASE(Unknown)
  352. MAKE_CASE(F5_1Pt2_512)
  353. MAKE_CASE(F3_1Pt44_512)
  354. MAKE_CASE(F3_2Pt88_512)
  355. MAKE_CASE(F3_20Pt8_512)
  356. MAKE_CASE(F3_720_512)
  357. MAKE_CASE(F5_360_512)
  358. MAKE_CASE(F5_320_512)
  359. MAKE_CASE(F5_320_1024)
  360. MAKE_CASE(F5_180_512)
  361. MAKE_CASE(F5_160_512)
  362. MAKE_CASE(RemovableMedia)
  363. MAKE_CASE(FixedMedia)
  364. MAKE_CASE(F3_120M_512)
  365. MAKE_CASE(F3_640_512)
  366. MAKE_CASE(F5_640_512)
  367. MAKE_CASE(F5_720_512)
  368. MAKE_CASE(F3_1Pt2_512)
  369. MAKE_CASE(F3_1Pt23_1024)
  370. MAKE_CASE(F5_1Pt23_1024)
  371. MAKE_CASE(F3_128Mb_512)
  372. MAKE_CASE(F3_230Mb_512)
  373. MAKE_CASE(F8_256_128)
  374. MAKE_CASE(F3_200Mb_512)
  375. MAKE_CASE(F3_240M_512)
  376. MAKE_CASE(F3_32M_512)
  377. }
  378. return mediaTypeStr;
  379. }