+ DebugPrint(DEBUG_INFO, SECTION_TAPE,_("##### STOP GenericClean (%d)\n"),ret);
+ return(ret);
+}
+
+int
+SCSI_LogSenseClean(
+ char * Device)
+{
+ extern OpenFiles_T *pDev;
+ CDB_T CDB;
+ RequestSense_T *pRequestSense;
+ int ret = 0;
+ u_char *buffer;
+ size_t size = 128;
+
+ (void)Device; /* Quiet unused parameter warning */
+ DebugPrint(DEBUG_INFO, SECTION_TAPE,"##### START SCSI_LogSenseClean\n");
+ if (pDev[INDEX_TAPECTL].SCSI == 0)
+ {
+ DebugPrint(DEBUG_ERROR, SECTION_TAPE,"SCSILogSenseClean : can't send SCSI commands\n");
+ DebugPrint(DEBUG_ERROR, SECTION_TAPE,"##### STOP SCSI_LogSenseClean\n");
+ return(0);
+ /*NOTREACHED*/
+ }
+
+ if (NULL == (buffer = alloc(size))){
+ DebugPrint(DEBUG_ERROR, SECTION_TAPE,"SCSI_LogSenseClean : can't alloc buffer\n");
+ DebugPrint(DEBUG_ERROR, SECTION_TAPE,"##### STOP SCSI_LogSenseClean\n");
+ return(0);
+ }
+ if (NULL == (pRequestSense = alloc(SIZEOF(RequestSense_T)))){
+ DebugPrint(DEBUG_ERROR, SECTION_TAPE,"SCSI_LogSenseClean : can't alloc memory\n");
+ DebugPrint(DEBUG_ERROR, SECTION_TAPE,"##### STOP SCSI_LogSenseClean\n");
+ return(0);
+ }
+
+ memset(buffer, 0, size);
+ CDB[0] = SC_COM_LOG_SENSE;
+ CDB[1] = 0;
+ CDB[2] = (u_char)(0x40 | 0x33);/* 0x40 for current values 0x33 Head Cleaning Page*/
+ CDB[3] = 0;
+ CDB[4] = 0;
+ CDB[5] = 0;
+ CDB[6] = 00;
+ MSB2(&CDB[7], size);
+ CDB[9] = 0;
+
+ if (SCSI_Run(INDEX_TAPECTL, Input, CDB, 10,
+ buffer,
+ size,
+ pRequestSense,
+ SIZEOF(RequestSense_T)) != 0)
+ {
+ DecodeSense(pRequestSense, "SCSI_LogSenseClean : ",debug_file);
+ free(pRequestSense);
+ free(buffer);
+ DebugPrint(DEBUG_ERROR, SECTION_TAPE,"##### STOP SCSI_LogSenseClean (0) Page could not be read.\n");
+ return(0);
+ /*NOTREACHED*/
+ }
+ if (1==(0x1 & buffer[8])){ /* Bit 0 of the 4th byte in the Clean Head Log Parameter, which are the bytes */
+ /* 4 to 8 on the Log Sense Page 0x33 */
+ ret = 1;
+ }else {
+ ret = 0;
+ }
+ DebugPrint(DEBUG_INFO, SECTION_TAPE,"##### STOP SCSI_LogSenseClean (%d)\n",ret);
+ free(pRequestSense);
+ free(buffer);