#include <asm/io.h>
#include <asm/uaccess.h>
-#include "scsi.h"
-#include "hosts.h"
+#include <scsi/scsi.h>
+#include <scsi/scsi_dbg.h>
+#include <scsi/scsi_device.h>
+#include <scsi/scsi_eh.h>
+#include <scsi/scsi_host.h>
#include <scsi/scsi_ioctl.h>
+#include <scsi/scsi_request.h>
#include "sr.h"
{
struct cdrom_tocentry trk0_te, trk1_te;
struct cdrom_tochdr tochdr;
- struct cdrom_generic_command cgc;
+ struct packet_command cgc;
int ntracks, ret;
if ((ret = sr_audio_ioctl(cdi, CDROMREADTOCHDR, &tochdr)))
if ((ret = sr_audio_ioctl(cdi, CDROMREADTOCENTRY, &trk1_te)))
return ret;
- memset(&cgc, 0, sizeof(struct cdrom_generic_command));
+ memset(&cgc, 0, sizeof(struct packet_command));
cgc.cmd[0] = GPCMD_PLAY_AUDIO_MSF;
cgc.cmd[3] = trk0_te.cdte_addr.msf.minute;
cgc.cmd[4] = trk0_te.cdte_addr.msf.second;
cgc.cmd[6] = trk1_te.cdte_addr.msf.minute;
cgc.cmd[7] = trk1_te.cdte_addr.msf.second;
cgc.cmd[8] = trk1_te.cdte_addr.msf.frame;
- cgc.data_direction = SCSI_DATA_NONE;
+ cgc.data_direction = DMA_NONE;
cgc.timeout = IOCTL_TIMEOUT;
return sr_do_ioctl(cdi->handle, &cgc);
}
error code is. Normally the UNIT_ATTENTION code will automatically
clear after one error */
-int sr_do_ioctl(Scsi_CD *cd, struct cdrom_generic_command *cgc)
+int sr_do_ioctl(Scsi_CD *cd, struct packet_command *cgc)
{
struct scsi_request *SRpnt;
struct scsi_device *SDev;
if (!cgc->quiet)
printk(KERN_INFO "%s: CDROM not ready. Make sure there is a disc in the drive.\n", cd->cdi.name);
#ifdef DEBUG
- print_req_sense("sr", SRpnt);
+ scsi_print_req_sense("sr", SRpnt);
#endif
err = -ENOMEDIUM;
break;
/* sense: Invalid command operation code */
err = -EDRIVE_CANT_DO_THIS;
#ifdef DEBUG
- print_command(cgc->cmd);
- print_req_sense("sr", SRpnt);
+ __scsi_print_command(cgc->cmd);
+ scsi_print_req_sense("sr", SRpnt);
#endif
break;
default:
printk(KERN_ERR "%s: CDROM (ioctl) error, command: ", cd->cdi.name);
- print_command(cgc->cmd);
- print_req_sense("sr", SRpnt);
+ __scsi_print_command(cgc->cmd);
+ scsi_print_req_sense("sr", SRpnt);
err = -EIO;
}
}
static int test_unit_ready(Scsi_CD *cd)
{
- struct cdrom_generic_command cgc;
+ struct packet_command cgc;
- memset(&cgc, 0, sizeof(struct cdrom_generic_command));
+ memset(&cgc, 0, sizeof(struct packet_command));
cgc.cmd[0] = GPCMD_TEST_UNIT_READY;
cgc.quiet = 1;
- cgc.data_direction = SCSI_DATA_NONE;
+ cgc.data_direction = DMA_NONE;
cgc.timeout = IOCTL_TIMEOUT;
return sr_do_ioctl(cd, &cgc);
}
int sr_tray_move(struct cdrom_device_info *cdi, int pos)
{
Scsi_CD *cd = cdi->handle;
- struct cdrom_generic_command cgc;
+ struct packet_command cgc;
- memset(&cgc, 0, sizeof(struct cdrom_generic_command));
+ memset(&cgc, 0, sizeof(struct packet_command));
cgc.cmd[0] = GPCMD_START_STOP_UNIT;
cgc.cmd[4] = (pos == 0) ? 0x03 /* close */ : 0x02 /* eject */ ;
- cgc.data_direction = SCSI_DATA_NONE;
+ cgc.data_direction = DMA_NONE;
cgc.timeout = IOCTL_TIMEOUT;
return sr_do_ioctl(cd, &cgc);
}
int sr_get_mcn(struct cdrom_device_info *cdi, struct cdrom_mcn *mcn)
{
Scsi_CD *cd = cdi->handle;
- struct cdrom_generic_command cgc;
+ struct packet_command cgc;
char *buffer = kmalloc(32, GFP_KERNEL | SR_GFP_DMA(cd));
int result;
- memset(&cgc, 0, sizeof(struct cdrom_generic_command));
+ memset(&cgc, 0, sizeof(struct packet_command));
cgc.cmd[0] = GPCMD_READ_SUBCHANNEL;
cgc.cmd[2] = 0x40; /* I do want the subchannel info */
cgc.cmd[3] = 0x02; /* Give me medium catalog number info */
cgc.cmd[8] = 24;
cgc.buffer = buffer;
cgc.buflen = 24;
- cgc.data_direction = SCSI_DATA_READ;
+ cgc.data_direction = DMA_FROM_DEVICE;
cgc.timeout = IOCTL_TIMEOUT;
result = sr_do_ioctl(cd, &cgc);
int sr_select_speed(struct cdrom_device_info *cdi, int speed)
{
Scsi_CD *cd = cdi->handle;
- struct cdrom_generic_command cgc;
+ struct packet_command cgc;
if (speed == 0)
speed = 0xffff; /* set to max */
else
speed *= 177; /* Nx to kbyte/s */
- memset(&cgc, 0, sizeof(struct cdrom_generic_command));
+ memset(&cgc, 0, sizeof(struct packet_command));
cgc.cmd[0] = GPCMD_SET_SPEED; /* SET CD SPEED */
cgc.cmd[2] = (speed >> 8) & 0xff; /* MSB for speed (in kbytes/sec) */
cgc.cmd[3] = speed & 0xff; /* LSB */
- cgc.data_direction = SCSI_DATA_NONE;
+ cgc.data_direction = DMA_NONE;
cgc.timeout = IOCTL_TIMEOUT;
if (sr_do_ioctl(cd, &cgc))
int sr_audio_ioctl(struct cdrom_device_info *cdi, unsigned int cmd, void *arg)
{
Scsi_CD *cd = cdi->handle;
- struct cdrom_generic_command cgc;
+ struct packet_command cgc;
int result;
unsigned char *buffer = kmalloc(32, GFP_KERNEL | SR_GFP_DMA(cd));
- memset(&cgc, 0, sizeof(struct cdrom_generic_command));
+ if (!buffer)
+ return -ENOMEM;
+
+ memset(&cgc, 0, sizeof(struct packet_command));
cgc.timeout = IOCTL_TIMEOUT;
switch (cmd) {
cgc.buffer = buffer;
cgc.buflen = 12;
cgc.quiet = 1;
- cgc.data_direction = SCSI_DATA_READ;
+ cgc.data_direction = DMA_FROM_DEVICE;
result = sr_do_ioctl(cd, &cgc);
cgc.cmd[8] = 12; /* LSB of length */
cgc.buffer = buffer;
cgc.buflen = 12;
- cgc.data_direction = SCSI_DATA_READ;
+ cgc.data_direction = DMA_FROM_DEVICE;
result = sr_do_ioctl(cd, &cgc);
cgc.cmd[5] = ti->cdti_ind0;
cgc.cmd[7] = ti->cdti_trk1;
cgc.cmd[8] = ti->cdti_ind1;
- cgc.data_direction = SCSI_DATA_NONE;
+ cgc.data_direction = DMA_NONE;
result = sr_do_ioctl(cd, &cgc);
if (result == -EDRIVE_CANT_DO_THIS)
static int sr_read_cd(Scsi_CD *cd, unsigned char *dest, int lba, int format, int blksize)
{
- struct cdrom_generic_command cgc;
+ struct packet_command cgc;
#ifdef DEBUG
printk("%s: sr_read_cd lba=%d format=%d blksize=%d\n",
cd->cdi.name, lba, format, blksize);
#endif
- memset(&cgc, 0, sizeof(struct cdrom_generic_command));
+ memset(&cgc, 0, sizeof(struct packet_command));
cgc.cmd[0] = GPCMD_READ_CD; /* READ_CD */
cgc.cmd[1] = ((format & 7) << 2);
cgc.cmd[2] = (unsigned char) (lba >> 24) & 0xff;
}
cgc.buffer = dest;
cgc.buflen = blksize;
- cgc.data_direction = SCSI_DATA_READ;
+ cgc.data_direction = DMA_FROM_DEVICE;
cgc.timeout = IOCTL_TIMEOUT;
return sr_do_ioctl(cd, &cgc);
}
static int sr_read_sector(Scsi_CD *cd, int lba, int blksize, unsigned char *dest)
{
- struct cdrom_generic_command cgc;
+ struct packet_command cgc;
int rc;
/* we try the READ CD command first... */
printk("%s: sr_read_sector lba=%d blksize=%d\n", cd->cdi.name, lba, blksize);
#endif
- memset(&cgc, 0, sizeof(struct cdrom_generic_command));
+ memset(&cgc, 0, sizeof(struct packet_command));
cgc.cmd[0] = GPCMD_READ_10;
cgc.cmd[2] = (unsigned char) (lba >> 24) & 0xff;
cgc.cmd[3] = (unsigned char) (lba >> 16) & 0xff;
cgc.cmd[8] = 1;
cgc.buffer = dest;
cgc.buflen = blksize;
- cgc.data_direction = SCSI_DATA_READ;
+ cgc.data_direction = DMA_FROM_DEVICE;
cgc.timeout = IOCTL_TIMEOUT;
rc = sr_do_ioctl(cd, &cgc);
unsigned int cmd, unsigned long arg)
{
Scsi_CD *cd = cdi->handle;
- return scsi_ioctl(cd->device, cmd, (void *)arg);
+ return scsi_ioctl(cd->device, cmd, (void __user *)arg);
}