patch-2.3.13 linux/drivers/scsi/sr_ioctl.c
Next file: linux/drivers/scsi/st.c
Previous file: linux/drivers/scsi/sr.c
Back to the patch index
Back to the overall index
- Lines: 258
- Date:
Thu Aug 5 16:24:15 1999
- Orig file:
v2.3.12/linux/drivers/scsi/sr_ioctl.c
- Orig date:
Sat May 15 23:43:04 1999
diff -u --recursive --new-file v2.3.12/linux/drivers/scsi/sr_ioctl.c linux/drivers/scsi/sr_ioctl.c
@@ -240,9 +240,8 @@
int sr_get_mcn(struct cdrom_device_info *cdi,struct cdrom_mcn *mcn)
{
u_char sr_cmd[10];
- char * buffer;
+ char buffer[32];
int result;
- unsigned long flags;
sr_cmd[0] = SCMD_READ_SUBCHANNEL;
sr_cmd[1] = ((scsi_CDs[MINOR(cdi->dev)].device->lun) << 5);
@@ -254,20 +253,11 @@
sr_cmd[8] = 24;
sr_cmd[9] = 0;
- spin_lock_irqsave(&io_request_lock, flags);
- buffer = (unsigned char*) scsi_malloc(512);
- spin_unlock_irqrestore(&io_request_lock, flags);
- if(!buffer) return -ENOMEM;
-
result = sr_do_ioctl(MINOR(cdi->dev), sr_cmd, buffer, 24, 0);
memcpy (mcn->medium_catalog_number, buffer + 9, 13);
mcn->medium_catalog_number[13] = 0;
- spin_lock_irqsave(&io_request_lock, flags);
- scsi_free(buffer, 512);
- spin_unlock_irqrestore(&io_request_lock, flags);
-
return result;
}
@@ -395,8 +385,7 @@
case CDROMREADTOCHDR:
{
struct cdrom_tochdr* tochdr = (struct cdrom_tochdr*)arg;
- char * buffer;
- unsigned long flags;
+ char buffer[32];
sr_cmd[0] = SCMD_READ_TOC;
sr_cmd[1] = ((scsi_CDs[target].device->lun) << 5);
@@ -406,27 +395,18 @@
sr_cmd[8] = 12; /* LSB of length */
sr_cmd[9] = 0;
- spin_lock_irqsave(&io_request_lock, flags);
- buffer = (unsigned char *) scsi_malloc(512);
- spin_unlock_irqrestore(&io_request_lock, flags);
- if(!buffer) return -ENOMEM;
-
result = sr_do_ioctl(target, sr_cmd, buffer, 12, 1);
tochdr->cdth_trk0 = buffer[2];
tochdr->cdth_trk1 = buffer[3];
- spin_lock_irqsave(&io_request_lock, flags);
- scsi_free(buffer, 512);
- spin_unlock_irqrestore(&io_request_lock, flags);
break;
}
case CDROMREADTOCENTRY:
{
struct cdrom_tocentry* tocentry = (struct cdrom_tocentry*)arg;
- unsigned char * buffer;
- unsigned long flags;
+ unsigned char buffer[32];
sr_cmd[0] = SCMD_READ_TOC;
sr_cmd[1] = ((scsi_CDs[target].device->lun) << 5) |
@@ -437,11 +417,6 @@
sr_cmd[8] = 12; /* LSB of length */
sr_cmd[9] = 0;
- spin_lock_irqsave(&io_request_lock, flags);
- buffer = (unsigned char *) scsi_malloc(512);
- spin_unlock_irqrestore(&io_request_lock, flags);
- if(!buffer) return -ENOMEM;
-
result = sr_do_ioctl (target, sr_cmd, buffer, 12, 0);
tocentry->cdte_ctrl = buffer[5] & 0xf;
@@ -455,151 +430,13 @@
tocentry->cdte_addr.lba = (((((buffer[8] << 8) + buffer[9]) << 8)
+ buffer[10]) << 8) + buffer[11];
- spin_lock_irqsave(&io_request_lock, flags);
- scsi_free(buffer, 512);
- spin_unlock_irqrestore(&io_request_lock, flags);
- break;
- }
-
- case CDROMSTOP:
- sr_cmd[0] = START_STOP;
- sr_cmd[1] = ((scsi_CDs[target].device->lun) << 5) | 1;
- sr_cmd[2] = sr_cmd[3] = sr_cmd[5] = 0;
- sr_cmd[4] = 0;
-
- result = sr_do_ioctl(target, sr_cmd, NULL, 255, 0);
- break;
-
- case CDROMSTART:
- sr_cmd[0] = START_STOP;
- sr_cmd[1] = ((scsi_CDs[target].device->lun) << 5) | 1;
- sr_cmd[2] = sr_cmd[3] = sr_cmd[5] = 0;
- sr_cmd[4] = 1;
-
- result = sr_do_ioctl(target, sr_cmd, NULL, 255, 0);
- break;
-
- case CDROMVOLCTRL:
- {
- char * buffer, * mask;
- struct cdrom_volctrl* volctrl = (struct cdrom_volctrl*)arg;
- unsigned long flags;
-
- /* First we get the current params so we can just twiddle the volume */
-
- sr_cmd[0] = MODE_SENSE;
- sr_cmd[1] = (scsi_CDs[target].device -> lun) << 5;
- sr_cmd[2] = 0xe; /* Want mode page 0xe, CDROM audio params */
- sr_cmd[3] = 0;
- sr_cmd[4] = 28;
- sr_cmd[5] = 0;
-
- spin_lock_irqsave(&io_request_lock, flags);
- buffer = (unsigned char *) scsi_malloc(512);
- spin_unlock_irqrestore(&io_request_lock, flags);
- if(!buffer) return -ENOMEM;
-
- if ((result = sr_do_ioctl (target, sr_cmd, buffer, 28, 0))) {
- printk ("Hosed while obtaining audio mode page\n");
- spin_lock_irqsave(&io_request_lock, flags);
- scsi_free(buffer, 512);
- spin_unlock_irqrestore(&io_request_lock, flags);
- break;
- }
-
- sr_cmd[0] = MODE_SENSE;
- sr_cmd[1] = (scsi_CDs[target].device -> lun) << 5;
- sr_cmd[2] = 0x4e; /* Want the mask for mode page 0xe */
- sr_cmd[3] = 0;
- sr_cmd[4] = 28;
- sr_cmd[5] = 0;
-
- spin_lock_irqsave(&io_request_lock, flags);
- mask = (unsigned char *) scsi_malloc(512);
- spin_unlock_irqrestore(&io_request_lock, flags);
- if(!mask) {
- spin_lock_irqsave(&io_request_lock, flags);
- scsi_free(buffer, 512);
- spin_unlock_irqrestore(&io_request_lock, flags);
- result = -ENOMEM;
- break;
- };
-
- if ((result = sr_do_ioctl (target, sr_cmd, mask, 28, 0))) {
- printk ("Hosed while obtaining mask for audio mode page\n");
- spin_lock_irqsave(&io_request_lock, flags);
- scsi_free(buffer, 512);
- scsi_free(mask, 512);
- spin_unlock_irqrestore(&io_request_lock, flags);
- break;
- }
-
- /* Now mask and substitute our own volume and reuse the rest */
- buffer[0] = 0; /* Clear reserved field */
-
- buffer[21] = volctrl->channel0 & mask[21];
- buffer[23] = volctrl->channel1 & mask[23];
- buffer[25] = volctrl->channel2 & mask[25];
- buffer[27] = volctrl->channel3 & mask[27];
-
- sr_cmd[0] = MODE_SELECT;
- sr_cmd[1] = ((scsi_CDs[target].device -> lun) << 5) | 0x10; /* Params are SCSI-2 */
- sr_cmd[2] = sr_cmd[3] = 0;
- sr_cmd[4] = 28;
- sr_cmd[5] = 0;
-
- result = sr_do_ioctl (target, sr_cmd, buffer, 28, 0);
- spin_lock_irqsave(&io_request_lock, flags);
- scsi_free(buffer, 512);
- scsi_free(mask, 512);
- spin_unlock_irqrestore(&io_request_lock, flags);
- break;
- }
-
- case CDROMVOLREAD:
- {
- char * buffer;
- struct cdrom_volctrl* volctrl = (struct cdrom_volctrl*)arg;
- unsigned long flags;
-
- /* Get the current params */
-
- sr_cmd[0] = MODE_SENSE;
- sr_cmd[1] = (scsi_CDs[target].device -> lun) << 5;
- sr_cmd[2] = 0xe; /* Want mode page 0xe, CDROM audio params */
- sr_cmd[3] = 0;
- sr_cmd[4] = 28;
- sr_cmd[5] = 0;
-
- spin_lock_irqsave(&io_request_lock, flags);
- buffer = (unsigned char *) scsi_malloc(512);
- spin_unlock_irqrestore(&io_request_lock, flags);
- if(!buffer) return -ENOMEM;
-
- if ((result = sr_do_ioctl (target, sr_cmd, buffer, 28, 0))) {
- printk ("(CDROMVOLREAD) Hosed while obtaining audio mode page\n");
- spin_lock_irqsave(&io_request_lock, flags);
- scsi_free(buffer, 512);
- spin_unlock_irqrestore(&io_request_lock, flags);
- break;
- }
-
- volctrl->channel0 = buffer[21];
- volctrl->channel1 = buffer[23];
- volctrl->channel2 = buffer[25];
- volctrl->channel3 = buffer[27];
-
- spin_lock_irqsave(&io_request_lock, flags);
- scsi_free(buffer, 512);
- spin_unlock_irqrestore(&io_request_lock, flags);
break;
}
case CDROMSUBCHNL:
{
struct cdrom_subchnl* subchnl = (struct cdrom_subchnl*)arg;
- char * buffer;
- unsigned long flags;
+ char buffer[32];
sr_cmd[0] = SCMD_READ_SUBCHANNEL;
sr_cmd[1] = ((scsi_CDs[target].device->lun) << 5) | 0x02; /* MSF format */
@@ -611,11 +448,6 @@
sr_cmd[8] = 16;
sr_cmd[9] = 0;
- spin_lock_irqsave(&io_request_lock, flags);
- buffer = (unsigned char *) scsi_malloc(512);
- spin_unlock_irqrestore(&io_request_lock, flags);
- if(!buffer) return -ENOMEM;
-
result = sr_do_ioctl(target, sr_cmd, buffer, 16, 0);
subchnl->cdsc_audiostatus = buffer[1];
@@ -631,9 +463,6 @@
subchnl->cdsc_absaddr.msf.second = buffer[10];
subchnl->cdsc_absaddr.msf.frame = buffer[11];
- spin_lock_irqsave(&io_request_lock, flags);
- scsi_free(buffer, 512);
- spin_unlock_irqrestore(&io_request_lock, flags);
break;
}
default:
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)