HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/share/doc/scsitools/kpatch.sraw
*** scsi_ioctl.c.~2~	Sat Sep 11 18:19:39 1993
--- scsi_ioctl.c	Tue Sep 14 00:52:50 1993
***************
*** 214,219 ****
--- 214,278 ----
  #endif
  }
  
+ /* Only used for benchmarking the low-level scsi code.  This will use
+ the ramdisk as the temporary buffer */
+ 
+ extern char * rd_start;
+ extern int rd_length;
+ 
+ static int benchmark_ioctl_command(Scsi_Device *dev, void *buffer)
+ {
+ 	char * buf;
+ 	char cmd[12];
+ 	char * cmd_in;
+ 	Scsi_Cmnd * SCpnt;
+ 	unsigned char opcode;
+ 	int inlen, outlen, cmdlen;
+ 	int needed;
+ 	int result;
+ 
+ 	if (!buffer)
+ 		return -EINVAL;
+ 	
+ 	inlen = get_fs_long((unsigned long *) buffer);
+ 	outlen = get_fs_long( ((unsigned long *) buffer) + 1);
+ 
+ 	cmd_in = (char *) ( ((int *)buffer) + 2);
+ 	opcode = get_fs_byte(cmd_in); 
+ 
+ 	needed = (inlen > outlen ? inlen : outlen);
+ 	if(needed) {
+ 		if(needed > rd_length) return -EINVAL;
+ 		buf = rd_start;
+ 	} else
+ 		buf = NULL;
+ 
+ 	memcpy_fromfs ((void *) cmd,  cmd_in,  cmdlen = COMMAND_SIZE (opcode));
+ 	memcpy_fromfs ((void *) buf,  (void *) (cmd_in + cmdlen), inlen);
+ 
+ 	cmd[1] = ( cmd[1] & 0x1f ) | (dev->lun << 5);
+ 
+ 	SCpnt = allocate_device(NULL, dev->index, 1);
+ 
+ 	scsi_do_cmd(SCpnt,  cmd,  buf, outlen,  scsi_ioctl_done,  MAX_TIMEOUT, 
+ 			MAX_RETRIES);
+ 
+ 	if (SCpnt->request.dev != 0xfffe){
+ 	  SCpnt->request.waiting = current;
+ 	  current->state = TASK_UNINTERRUPTIBLE;
+ 	  while (SCpnt->request.dev != 0xfffe) schedule();
+ 	};
+ 
+ 	result = verify_area(VERIFY_WRITE, cmd_in, outlen);
+ 	if (result)
+ 		return result;
+ 	memcpy_tofs ((void *) cmd_in,  buf, outlen);
+ 	result = SCpnt->result;
+ 	SCpnt->request.dev = -1;  /* Mark as not busy */
+ 	wake_up(&scsi_devices[SCpnt->index].device_wait);
+ 	return result;
+ }
+ 
  	
  
  /*
***************
*** 236,241 ****
--- 295,302 ----
  			return 0;
  		case SCSI_IOCTL_PROBE_HOST:
  			return ioctl_probe(dev->host, arg);
+ 		case SCSI_IOCTL_BENCHMARK_COMMAND:
+ 			return benchmark_ioctl_command((Scsi_Device *) dev, arg);
  		case SCSI_IOCTL_SEND_COMMAND:
  			return ioctl_command((Scsi_Device *) dev, arg);
  		case SCSI_IOCTL_DOORLOCK:
*** scsi_ioctl.h.~1~	Tue Sep  7 01:38:47 1993
--- scsi_ioctl.h	Mon Sep 13 23:53:39 1993
***************
*** 4,9 ****
--- 4,10 ----
  #define SCSI_IOCTL_PROBE_HOST 0
  #define SCSI_IOCTL_SEND_COMMAND 1
  #define SCSI_IOCTL_TEST_UNIT_READY 2
+ #define SCSI_IOCTL_BENCHMARK_COMMAND 3
  /* The door lock/unlock constants are compatible with Sun constants for
     the cdrom */
  #define SCSI_IOCTL_DOORLOCK 0x5380		/* lock the eject mechanism */