diff options
| author | Alexander Viro <viro@math.psu.edu> | 2002-09-07 03:04:24 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2002-09-07 03:04:24 -0700 |
| commit | 3aa5472a7162949e602319c2709354ceaef8253c (patch) | |
| tree | bfa6e09af55b84aaafe39fc7b167ad9de15e8a0d /drivers | |
| parent | 62ea21cbc328eeccc8fc797c65dabce0459a2f32 (diff) | |
[PATCH] (14/25) sbpcd.c - use *current_drive instead of D_S[d]
sbpcd.[c,h] - uses of D_S[d] replaced with uses of *current_drive.
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/cdrom/sbpcd.c | 1074 | ||||
| -rw-r--r-- | drivers/cdrom/sbpcd.h | 58 |
2 files changed, 566 insertions, 566 deletions
diff --git a/drivers/cdrom/sbpcd.c b/drivers/cdrom/sbpcd.c index 50ffc0bf9eb0..f2a2823c77a0 100644 --- a/drivers/cdrom/sbpcd.c +++ b/drivers/cdrom/sbpcd.c @@ -1105,51 +1105,51 @@ static int ResponseInfo(void) /*==========================================================================*/ static void EvaluateStatus(int st) { - D_S[d].status_bits=0; - if (fam1_drive) D_S[d].status_bits=st|p_success; + current_drive->status_bits=0; + if (fam1_drive) current_drive->status_bits=st|p_success; else if (fam0_drive) { - if (st&p_caddin_old) D_S[d].status_bits |= p_door_closed|p_caddy_in; - if (st&p_spinning) D_S[d].status_bits |= p_spinning; - if (st&p_check) D_S[d].status_bits |= p_check; - if (st&p_success_old) D_S[d].status_bits |= p_success; - if (st&p_busy_old) D_S[d].status_bits |= p_busy_new; - if (st&p_disk_ok) D_S[d].status_bits |= p_disk_ok; + if (st&p_caddin_old) current_drive->status_bits |= p_door_closed|p_caddy_in; + if (st&p_spinning) current_drive->status_bits |= p_spinning; + if (st&p_check) current_drive->status_bits |= p_check; + if (st&p_success_old) current_drive->status_bits |= p_success; + if (st&p_busy_old) current_drive->status_bits |= p_busy_new; + if (st&p_disk_ok) current_drive->status_bits |= p_disk_ok; } else if (famLV_drive) { - D_S[d].status_bits |= p_success; - if (st&p_caddin_old) D_S[d].status_bits |= p_disk_ok|p_caddy_in; - if (st&p_spinning) D_S[d].status_bits |= p_spinning; - if (st&p_check) D_S[d].status_bits |= p_check; - if (st&p_busy_old) D_S[d].status_bits |= p_busy_new; - if (st&p_lcs_door_closed) D_S[d].status_bits |= p_door_closed; - if (st&p_lcs_door_locked) D_S[d].status_bits |= p_door_locked; + current_drive->status_bits |= p_success; + if (st&p_caddin_old) current_drive->status_bits |= p_disk_ok|p_caddy_in; + if (st&p_spinning) current_drive->status_bits |= p_spinning; + if (st&p_check) current_drive->status_bits |= p_check; + if (st&p_busy_old) current_drive->status_bits |= p_busy_new; + if (st&p_lcs_door_closed) current_drive->status_bits |= p_door_closed; + if (st&p_lcs_door_locked) current_drive->status_bits |= p_door_locked; } else if (fam2_drive) { - D_S[d].status_bits |= p_success; - if (st&p2_check) D_S[d].status_bits |= p1_check; - if (st&p2_door_closed) D_S[d].status_bits |= p1_door_closed; - if (st&p2_disk_in) D_S[d].status_bits |= p1_disk_in; - if (st&p2_busy1) D_S[d].status_bits |= p1_busy; - if (st&p2_busy2) D_S[d].status_bits |= p1_busy; - if (st&p2_spinning) D_S[d].status_bits |= p1_spinning; - if (st&p2_door_locked) D_S[d].status_bits |= p1_door_locked; - if (st&p2_disk_ok) D_S[d].status_bits |= p1_disk_ok; + current_drive->status_bits |= p_success; + if (st&p2_check) current_drive->status_bits |= p1_check; + if (st&p2_door_closed) current_drive->status_bits |= p1_door_closed; + if (st&p2_disk_in) current_drive->status_bits |= p1_disk_in; + if (st&p2_busy1) current_drive->status_bits |= p1_busy; + if (st&p2_busy2) current_drive->status_bits |= p1_busy; + if (st&p2_spinning) current_drive->status_bits |= p1_spinning; + if (st&p2_door_locked) current_drive->status_bits |= p1_door_locked; + if (st&p2_disk_ok) current_drive->status_bits |= p1_disk_ok; } else if (famT_drive) { return; /* still needs to get coded */ - D_S[d].status_bits |= p_success; - if (st&p2_check) D_S[d].status_bits |= p1_check; - if (st&p2_door_closed) D_S[d].status_bits |= p1_door_closed; - if (st&p2_disk_in) D_S[d].status_bits |= p1_disk_in; - if (st&p2_busy1) D_S[d].status_bits |= p1_busy; - if (st&p2_busy2) D_S[d].status_bits |= p1_busy; - if (st&p2_spinning) D_S[d].status_bits |= p1_spinning; - if (st&p2_door_locked) D_S[d].status_bits |= p1_door_locked; - if (st&p2_disk_ok) D_S[d].status_bits |= p1_disk_ok; + current_drive->status_bits |= p_success; + if (st&p2_check) current_drive->status_bits |= p1_check; + if (st&p2_door_closed) current_drive->status_bits |= p1_door_closed; + if (st&p2_disk_in) current_drive->status_bits |= p1_disk_in; + if (st&p2_busy1) current_drive->status_bits |= p1_busy; + if (st&p2_busy2) current_drive->status_bits |= p1_busy; + if (st&p2_spinning) current_drive->status_bits |= p1_spinning; + if (st&p2_door_locked) current_drive->status_bits |= p1_door_locked; + if (st&p2_disk_ok) current_drive->status_bits |= p1_disk_ok; } return; } @@ -1161,7 +1161,7 @@ static int get_state_T(void) static int cmd_out_T(void); clr_cmdbuf(); - D_S[d].n_bytes=1; + current_drive->n_bytes=1; drvcmd[0]=CMDT_STATUS; i=cmd_out_T(); if (i>=0) i=infobuf[0]; @@ -1172,33 +1172,33 @@ static int get_state_T(void) } if (i>=0) /* 2: closed, disk in */ - D_S[d].status_bits=p1_door_closed|p1_disk_in|p1_spinning|p1_disk_ok; - else if (D_S[d].error_state==6) + current_drive->status_bits=p1_door_closed|p1_disk_in|p1_spinning|p1_disk_ok; + else if (current_drive->error_state==6) { /* 3: closed, disk in, changed ("06 xx xx") */ - D_S[d].status_bits=p1_door_closed|p1_disk_in; - D_S[d].CD_changed=0xFF; - D_S[d].diskstate_flags &= ~toc_bit; + current_drive->status_bits=p1_door_closed|p1_disk_in; + current_drive->CD_changed=0xFF; + current_drive->diskstate_flags &= ~toc_bit; } - else if ((D_S[d].error_state!=2)||(D_S[d].b3!=0x3A)||(D_S[d].b4==0x00)) + else if ((current_drive->error_state!=2)||(current_drive->b3!=0x3A)||(current_drive->b4==0x00)) { /* 1: closed, no disk ("xx yy zz"or "02 3A 00") */ - D_S[d].status_bits=p1_door_closed; - D_S[d].open_count=0; + current_drive->status_bits=p1_door_closed; + current_drive->open_count=0; } - else if (D_S[d].b4==0x01) + else if (current_drive->b4==0x01) { /* 0: open ("02 3A 01") */ - D_S[d].status_bits=0; - D_S[d].open_count=0; + current_drive->status_bits=0; + current_drive->open_count=0; } else { /* 1: closed, no disk ("02 3A xx") */ - D_S[d].status_bits=p1_door_closed; - D_S[d].open_count=0; + current_drive->status_bits=p1_door_closed; + current_drive->open_count=0; } - return (D_S[d].status_bits); + return (current_drive->status_bits); } /*==========================================================================*/ static int ResponseStatus(void) @@ -1228,14 +1228,14 @@ static int ResponseStatus(void) { if ((flags_cmd_out & f_respo3) == 0) msg(DBG_STA,"ResponseStatus: timeout.\n"); - D_S[d].status_bits=0; + current_drive->status_bits=0; return (-401); } i=inb(CDi_info); msg(DBG_STA,"ResponseStatus: response %02X.\n", i); EvaluateStatus(i); - msg(DBG_STA,"status_bits=%02X, i=%02X\n",D_S[d].status_bits,i); - return (D_S[d].status_bits); + msg(DBG_STA,"status_bits=%02X, i=%02X\n",current_drive->status_bits,i); + return (current_drive->status_bits); } /*==========================================================================*/ static void cc_ReadStatus(void) @@ -1285,18 +1285,18 @@ static int cc_ReadError(void) drvcmd[0]=CMDT_READ_ERR; } i=cmd_out(); - D_S[d].error_byte=0; + current_drive->error_byte=0; msg(DBG_ERR,"cc_ReadError: cmd_out(CMDx_READ_ERR) returns %d (%02X)\n",i,i); if (i<0) return (i); if (fam0V_drive) i=1; else i=2; - D_S[d].error_byte=infobuf[i]; - msg(DBG_ERR,"cc_ReadError: infobuf[%d] is %d (%02X)\n",i,D_S[d].error_byte,D_S[d].error_byte); + current_drive->error_byte=infobuf[i]; + msg(DBG_ERR,"cc_ReadError: infobuf[%d] is %d (%02X)\n",i,current_drive->error_byte,current_drive->error_byte); i=sta2err(infobuf[i]); if (i==-ERR_DISKCHANGE) { - D_S[d].CD_changed=0xFF; - D_S[d].diskstate_flags &= ~toc_bit; + current_drive->CD_changed=0xFF; + current_drive->diskstate_flags &= ~toc_bit; } return (i); } @@ -1311,16 +1311,16 @@ static int cmd_out_T(void) int i, j, l=0, m, ntries; long flags; - D_S[d].error_state=0; - D_S[d].b3=0; - D_S[d].b4=0; - D_S[d].f_drv_error=0; + current_drive->error_state=0; + current_drive->b3=0; + current_drive->b4=0; + current_drive->f_drv_error=0; for (i=0;i<10;i++) sprintf(&msgbuf[i*3]," %02X",drvcmd[i]); msgbuf[i*3]=0; msg(DBG_CMD,"cmd_out_T:%s\n",msgbuf); OUT(CDo_sel_i_d,0); - OUT(CDo_enable,D_S[d].drv_sel); + OUT(CDo_enable,current_drive->drv_sel); i=inb(CDi_status); do_16bit=0; if ((f_16bit)&&(!(i&0x80))) @@ -1437,16 +1437,16 @@ static int cmd_out_T(void) sbp_sleep(1); } while (j<0); - D_S[d].error_state=infobuf[2]; - D_S[d].b3=infobuf[3]; - D_S[d].b4=infobuf[4]; - if (D_S[d].f_drv_error) + current_drive->error_state=infobuf[2]; + current_drive->b3=infobuf[3]; + current_drive->b4=infobuf[4]; + if (current_drive->f_drv_error) { - D_S[d].f_drv_error=0; + current_drive->f_drv_error=0; cc_DriveReset(); - D_S[d].error_state=2; + current_drive->error_state=2; } - return (-D_S[d].error_state-400); + return (-current_drive->error_state-400); } if (drvcmd[0]==CMDT_READ) return (0); /* handled elsewhere */ if ((teac==0)||(ntries<(CMDT_TRIES-5))) sbp_sleep(HZ/10); @@ -1454,9 +1454,9 @@ static int cmd_out_T(void) if (ntries>(CMDT_TRIES-50)) continue; msg(DBG_TEA,"cmd_out_T: next CMDT_TRIES (%02X): %d.\n", drvcmd[0], ntries-1); } - D_S[d].f_drv_error=1; + current_drive->f_drv_error=1; cc_DriveReset(); - D_S[d].error_state=2; + current_drive->error_state=2; return (-99); } /*==========================================================================*/ @@ -1489,7 +1489,7 @@ static int cmd_out(void) else i=ResponseInfo(); if (i<0) return (i); } - if (D_S[d].in_SpinUp) msg(DBG_SPI,"in_SpinUp: to CDi_stat_loop.\n"); + if (current_drive->in_SpinUp) msg(DBG_SPI,"in_SpinUp: to CDi_stat_loop.\n"); if (flags_cmd_out&f_lopsta) { i=CDi_stat_loop(); @@ -1498,13 +1498,13 @@ static int cmd_out(void) if (!(flags_cmd_out&f_getsta)) goto LOC_229; LOC_228: - if (D_S[d].in_SpinUp) msg(DBG_SPI,"in_SpinUp: to cc_ReadStatus.\n"); + if (current_drive->in_SpinUp) msg(DBG_SPI,"in_SpinUp: to cc_ReadStatus.\n"); cc_ReadStatus(); LOC_229: if (flags_cmd_out&f_ResponseStatus) { - if (D_S[d].in_SpinUp) msg(DBG_SPI,"in_SpinUp: to ResponseStatus.\n"); + if (current_drive->in_SpinUp) msg(DBG_SPI,"in_SpinUp: to ResponseStatus.\n"); i=ResponseStatus(); /* builds status_bits, returns orig. status or p_busy_new */ if (i<0) return (i); @@ -1520,9 +1520,9 @@ static int cmd_out(void) LOC_232: if (!(flags_cmd_out&f_obey_p_check)) return (0); if (!st_check) return (0); - if (D_S[d].in_SpinUp) msg(DBG_SPI,"in_SpinUp: to cc_ReadError.\n"); + if (current_drive->in_SpinUp) msg(DBG_SPI,"in_SpinUp: to cc_ReadError.\n"); i=cc_ReadError(); - if (D_S[d].in_SpinUp) msg(DBG_SPI,"in_SpinUp: to cmd_out OK.\n"); + if (current_drive->in_SpinUp) msg(DBG_SPI,"in_SpinUp: to cmd_out OK.\n"); msg(DBG_000,"cmd_out: cc_ReadError=%d\n", i); return (i); } @@ -1576,7 +1576,7 @@ static int cc_Seek(u_int pos, char f_blk_msf) drvcmd[3]=(pos>>16)&0x00FF; drvcmd[4]=(pos>>8)&0x00FF; drvcmd[5]=pos&0x00FF; - D_S[d].n_bytes=1; + current_drive->n_bytes=1; } response_count=0; i=cmd_out(); @@ -1588,7 +1588,7 @@ static int cc_SpinUp(void) int i; msg(DBG_SPI,"SpinUp.\n"); - D_S[d].in_SpinUp = 1; + current_drive->in_SpinUp = 1; clr_cmdbuf(); if (fam0LV_drive) { @@ -1617,7 +1617,7 @@ static int cc_SpinUp(void) } response_count=0; i=cmd_out(); - D_S[d].in_SpinUp = 0; + current_drive->in_SpinUp = 0; return (i); } /*==========================================================================*/ @@ -1678,15 +1678,15 @@ static int cc_set_mode_T(void) clr_cmdbuf(); response_count=1; drvcmd[0]=CMDT_SETMODE; - drvcmd[1]=D_S[d].speed_byte; - drvcmd[2]=D_S[d].frmsiz>>8; - drvcmd[3]=D_S[d].frmsiz&0x0FF; - drvcmd[4]=D_S[d].f_XA; /* 1: XA */ - drvcmd[5]=D_S[d].type_byte; /* 0, 1, 3 */ - drvcmd[6]=D_S[d].mode_xb_6; - drvcmd[7]=D_S[d].mode_yb_7|D_S[d].volume_control; - drvcmd[8]=D_S[d].mode_xb_8; - drvcmd[9]=D_S[d].delay; + drvcmd[1]=current_drive->speed_byte; + drvcmd[2]=current_drive->frmsiz>>8; + drvcmd[3]=current_drive->frmsiz&0x0FF; + drvcmd[4]=current_drive->f_XA; /* 1: XA */ + drvcmd[5]=current_drive->type_byte; /* 0, 1, 3 */ + drvcmd[6]=current_drive->mode_xb_6; + drvcmd[7]=current_drive->mode_yb_7|current_drive->volume_control; + drvcmd[8]=current_drive->mode_xb_8; + drvcmd[9]=current_drive->delay; i=cmd_out_T(); return (i); } @@ -1701,15 +1701,15 @@ static int cc_prep_mode_T(void) sprintf(&msgbuf[i*3], " %02X", infobuf[i]); msgbuf[i*3]=0; msg(DBG_TEA,"CMDT_GETMODE:%s\n", msgbuf); - D_S[d].speed_byte=0x02; /* 0x02: auto quad, 0x82: quad, 0x81: double, 0x80: single */ - D_S[d].frmsiz=make16(infobuf[2],infobuf[3]); - D_S[d].f_XA=infobuf[4]; - if (D_S[d].f_XA==0) D_S[d].type_byte=0; - else D_S[d].type_byte=1; - D_S[d].mode_xb_6=infobuf[6]; - D_S[d].mode_yb_7=1; - D_S[d].mode_xb_8=infobuf[8]; - D_S[d].delay=0; /* 0, 1, 2, 3 */ + current_drive->speed_byte=0x02; /* 0x02: auto quad, 0x82: quad, 0x81: double, 0x80: single */ + current_drive->frmsiz=make16(infobuf[2],infobuf[3]); + current_drive->f_XA=infobuf[4]; + if (current_drive->f_XA==0) current_drive->type_byte=0; + else current_drive->type_byte=1; + current_drive->mode_xb_6=infobuf[6]; + current_drive->mode_yb_7=1; + current_drive->mode_xb_8=infobuf[8]; + current_drive->delay=0; /* 0, 1, 2, 3 */ j=cc_set_mode_T(); i=cc_get_mode_T(); for (i=0;i<10;i++) @@ -1764,17 +1764,17 @@ static int cc_SetVolume(void) u_char channel0,channel1,volume0,volume1; u_char control0,value0,control1,value1; - D_S[d].diskstate_flags &= ~volume_bit; + current_drive->diskstate_flags &= ~volume_bit; clr_cmdbuf(); - channel0=D_S[d].vol_chan0; - volume0=D_S[d].vol_ctrl0; - channel1=control1=D_S[d].vol_chan1; - volume1=value1=D_S[d].vol_ctrl1; + channel0=current_drive->vol_chan0; + volume0=current_drive->vol_ctrl0; + channel1=control1=current_drive->vol_chan1; + volume1=value1=current_drive->vol_ctrl1; control0=value0=0; if (famV_drive) return (0); - if (((D_S[d].drv_options&audio_mono)!=0)&&(D_S[d].drv_type>=drv_211)) + if (((current_drive->drv_options&audio_mono)!=0)&&(current_drive->drv_type>=drv_211)) { if ((volume0!=0)&&(volume1==0)) { @@ -1843,7 +1843,7 @@ static int cc_SetVolume(void) } else if (fam0_drive) /* different firmware levels */ { - if (D_S[d].drv_type>=drv_300) + if (current_drive->drv_type>=drv_300) { control0=volume0&0xFC; value0=volume1&0xFC; @@ -1855,7 +1855,7 @@ static int cc_SetVolume(void) else { value0=(volume0>volume1)?volume0:volume1; - if (D_S[d].drv_type<drv_211) + if (current_drive->drv_type<drv_211) { if (channel0!=0) { @@ -1888,14 +1888,14 @@ static int cc_SetVolume(void) if (volume0==0xFF) volume1=0xFF; else if (volume1==0xFF) volume0=0xFF; } - else if (D_S[d].drv_type<drv_201) volume0=volume1=value0; + else if (current_drive->drv_type<drv_201) volume0=volume1=value0; - if (D_S[d].drv_type>=drv_201) + if (current_drive->drv_type>=drv_201) { if (volume0==0) control0 |= 0x80; if (volume1==0) control0 |= 0x40; } - if (D_S[d].drv_type>=drv_211) + if (current_drive->drv_type>=drv_211) { if (channel0!=0) control0 |= 0x20; if (channel1!=1) control0 |= 0x10; @@ -1909,9 +1909,9 @@ static int cc_SetVolume(void) } else if (famT_drive) { - D_S[d].volume_control=0; - if (!volume0) D_S[d].volume_control|=0x10; - if (!volume1) D_S[d].volume_control|=0x20; + current_drive->volume_control=0; + if (!volume0) current_drive->volume_control|=0x10; + if (!volume1) current_drive->volume_control|=0x20; i=cc_prep_mode_T(); if (i<0) return (i); } @@ -1921,7 +1921,7 @@ static int cc_SetVolume(void) i=cmd_out(); if (i<0) return (i); } - D_S[d].diskstate_flags |= volume_bit; + current_drive->diskstate_flags |= volume_bit; return (0); } /*==========================================================================*/ @@ -1961,7 +1961,7 @@ static int cc_DriveReset(void) else if (famT_drive) { OUT(CDo_sel_i_d,0); - OUT(CDo_enable,D_S[d].drv_sel); + OUT(CDo_enable,current_drive->drv_sel); OUT(CDo_command,CMDT_RESET); for (i=1;i<10;i++) OUT(CDo_command,0); } @@ -1978,7 +1978,7 @@ static int cc_DriveReset(void) i=GetStatus(); if (i<0) return i; if (!famT_drive) - if (D_S[d].error_byte!=aud_12) return -501; + if (current_drive->error_byte!=aud_12) return -501; return (0); } @@ -1987,12 +1987,12 @@ static int SetSpeed(void) { int i, speed; - if (!(D_S[d].drv_options&(speed_auto|speed_300|speed_150))) return (0); + if (!(current_drive->drv_options&(speed_auto|speed_300|speed_150))) return (0); speed=speed_auto; - if (!(D_S[d].drv_options&speed_auto)) + if (!(current_drive->drv_options&speed_auto)) { speed |= speed_300; - if (!(D_S[d].drv_options&speed_300)) speed=0; + if (!(current_drive->drv_options&speed_300)) speed=0; } i=cc_SetSpeed(speed,0,0); return (i); @@ -2028,7 +2028,7 @@ static int DriveReset(void) } while (!st_diskok); #if 000 - D_S[d].CD_changed=1; + current_drive->CD_changed=1; #endif if ((st_door_closed) && (st_caddy_in)) { @@ -2053,7 +2053,7 @@ static int cc_PlayAudio(int pos_audio_start,int pos_audio_end) { int i, j, n; - if (D_S[d].audio_state==audio_playing) return (-EINVAL); + if (current_drive->audio_state==audio_playing) return (-EINVAL); clr_cmdbuf(); response_count=0; if (famLV_drive) @@ -2143,7 +2143,7 @@ static int cc_Pause_Resume(int pau_res) } else if (famT_drive) { - if (pau_res==3) return (cc_PlayAudio(D_S[d].pos_audio_start,D_S[d].pos_audio_end)); + if (pau_res==3) return (cc_PlayAudio(current_drive->pos_audio_start,current_drive->pos_audio_end)); else if (pau_res==1) drvcmd[0]=CMDT_PAUSE; else return (-56); } @@ -2324,9 +2324,9 @@ static int sbpcd_tray_move(struct cdrom_device_info *cdi, int position) i = minor(cdi->dev); switch_drive(i); /* DUH! --AJK */ - if(D_S[d].CD_changed != 0xFF) { - D_S[d].CD_changed=0xFF; - D_S[d].diskstate_flags &= ~cd_size_bit; + if(current_drive->CD_changed != 0xFF) { + current_drive->CD_changed=0xFF; + current_drive->diskstate_flags &= ~cd_size_bit; } if (position == 1) { cc_SpinDown(); @@ -2341,7 +2341,7 @@ static int cc_ReadSubQ(void) { int i,j; - D_S[d].diskstate_flags &= ~subq_bit; + current_drive->diskstate_flags &= ~subq_bit; for (j=255;j>0;j--) { clr_cmdbuf(); @@ -2390,26 +2390,26 @@ static int cc_ReadSubQ(void) if (infobuf[0]!=0) break; if ((!st_spinning) || (j==1)) { - D_S[d].SubQ_ctl_adr=D_S[d].SubQ_trk=D_S[d].SubQ_pnt_idx=D_S[d].SubQ_whatisthis=0; - D_S[d].SubQ_run_tot=D_S[d].SubQ_run_trk=0; + current_drive->SubQ_ctl_adr=current_drive->SubQ_trk=current_drive->SubQ_pnt_idx=current_drive->SubQ_whatisthis=0; + current_drive->SubQ_run_tot=current_drive->SubQ_run_trk=0; return (0); } } - if (famT_drive) D_S[d].SubQ_ctl_adr=infobuf[1]; - else D_S[d].SubQ_ctl_adr=swap_nibbles(infobuf[1]); - D_S[d].SubQ_trk=byt2bcd(infobuf[2]); - D_S[d].SubQ_pnt_idx=byt2bcd(infobuf[3]); + if (famT_drive) current_drive->SubQ_ctl_adr=infobuf[1]; + else current_drive->SubQ_ctl_adr=swap_nibbles(infobuf[1]); + current_drive->SubQ_trk=byt2bcd(infobuf[2]); + current_drive->SubQ_pnt_idx=byt2bcd(infobuf[3]); if (fam0LV_drive) i=5; else if (fam12_drive) i=4; else if (famT_drive) i=8; - D_S[d].SubQ_run_tot=make32(make16(0,infobuf[i]),make16(infobuf[i+1],infobuf[i+2])); /* msf-bin */ + current_drive->SubQ_run_tot=make32(make16(0,infobuf[i]),make16(infobuf[i+1],infobuf[i+2])); /* msf-bin */ i=7; if (fam0LV_drive) i=9; else if (fam12_drive) i=7; else if (famT_drive) i=4; - D_S[d].SubQ_run_trk=make32(make16(0,infobuf[i]),make16(infobuf[i+1],infobuf[i+2])); /* msf-bin */ - D_S[d].SubQ_whatisthis=infobuf[i+3]; - D_S[d].diskstate_flags |= subq_bit; + current_drive->SubQ_run_trk=make32(make16(0,infobuf[i]),make16(infobuf[i+1],infobuf[i+2])); /* msf-bin */ + current_drive->SubQ_whatisthis=infobuf[i+3]; + current_drive->diskstate_flags |= subq_bit; return (0); } /*==========================================================================*/ @@ -2419,7 +2419,7 @@ static int cc_ModeSense(void) if (fam2_drive) return (0); if (famV_drive) return (0); - D_S[d].diskstate_flags &= ~frame_size_bit; + current_drive->diskstate_flags &= ~frame_size_bit; clr_cmdbuf(); if (fam1_drive) { @@ -2443,21 +2443,21 @@ static int cc_ModeSense(void) i=cmd_out(); if (i<0) return (i); i=0; - D_S[d].sense_byte=0; - if (fam1_drive) D_S[d].sense_byte=infobuf[i++]; + current_drive->sense_byte=0; + if (fam1_drive) current_drive->sense_byte=infobuf[i++]; else if (famT_drive) { - if (infobuf[4]==0x01) D_S[d].xa_byte=0x20; - else D_S[d].xa_byte=0; + if (infobuf[4]==0x01) current_drive->xa_byte=0x20; + else current_drive->xa_byte=0; i=2; } - D_S[d].frame_size=make16(infobuf[i],infobuf[i+1]); + current_drive->frame_size=make16(infobuf[i],infobuf[i+1]); for (i=0;i<response_count;i++) sprintf(&msgbuf[i*3], " %02X", infobuf[i]); msgbuf[i*3]=0; msg(DBG_XA1,"cc_ModeSense:%s\n", msgbuf); - D_S[d].diskstate_flags |= frame_size_bit; + current_drive->diskstate_flags |= frame_size_bit; return (0); } /*==========================================================================*/ @@ -2468,30 +2468,30 @@ static int cc_ModeSelect(int framesize) if (fam2_drive) return (0); if (famV_drive) return (0); - D_S[d].diskstate_flags &= ~frame_size_bit; + current_drive->diskstate_flags &= ~frame_size_bit; clr_cmdbuf(); - D_S[d].frame_size=framesize; - if (framesize==CD_FRAMESIZE_RAW) D_S[d].sense_byte=0x82; - else D_S[d].sense_byte=0x00; + current_drive->frame_size=framesize; + if (framesize==CD_FRAMESIZE_RAW) current_drive->sense_byte=0x82; + else current_drive->sense_byte=0x00; msg(DBG_XA1,"cc_ModeSelect: %02X %04X\n", - D_S[d].sense_byte, D_S[d].frame_size); + current_drive->sense_byte, current_drive->frame_size); if (fam1_drive) { drvcmd[0]=CMD1_SETMODE; drvcmd[1]=0x00; - drvcmd[2]=D_S[d].sense_byte; - drvcmd[3]=(D_S[d].frame_size>>8)&0xFF; - drvcmd[4]=D_S[d].frame_size&0xFF; + drvcmd[2]=current_drive->sense_byte; + drvcmd[3]=(current_drive->frame_size>>8)&0xFF; + drvcmd[4]=current_drive->frame_size&0xFF; flags_cmd_out=f_putcmd|f_ResponseStatus|f_obey_p_check; } else if (fam0L_drive) { drvcmd[0]=CMD0_SETMODE; drvcmd[1]=0x00; - drvcmd[2]=(D_S[d].frame_size>>8)&0xFF; - drvcmd[3]=D_S[d].frame_size&0xFF; + drvcmd[2]=(current_drive->frame_size>>8)&0xFF; + drvcmd[3]=current_drive->frame_size&0xFF; drvcmd[4]=0x00; if(famL_drive) flags_cmd_out=f_putcmd|f_lopsta|f_getsta|f_ResponseStatus|f_obey_p_check; @@ -2505,7 +2505,7 @@ static int cc_ModeSelect(int framesize) response_count=0; i=cmd_out(); if (i<0) return (i); - D_S[d].diskstate_flags |= frame_size_bit; + current_drive->diskstate_flags |= frame_size_bit; return (0); } /*==========================================================================*/ @@ -2519,7 +2519,7 @@ static int cc_GetVolume(void) u_char vol1=0; if (famV_drive) return (0); - D_S[d].diskstate_flags &= ~volume_bit; + current_drive->diskstate_flags &= ~volume_bit; clr_cmdbuf(); if (fam1_drive) { @@ -2595,14 +2595,14 @@ static int cc_GetVolume(void) chan0=0; chan1=1; vol0=vol1=infobuf[1]; - if (D_S[d].drv_type>=drv_201) + if (current_drive->drv_type>=drv_201) { - if (D_S[d].drv_type<drv_300) + if (current_drive->drv_type<drv_300) { switches=infobuf[0]; if ((switches&0x80)!=0) vol0=0; if ((switches&0x40)!=0) vol1=0; - if (D_S[d].drv_type>=drv_211) + if (current_drive->drv_type>=drv_211) { if ((switches&0x20)!=0) chan0=1; if ((switches&0x10)!=0) chan1=0; @@ -2622,25 +2622,25 @@ static int cc_GetVolume(void) } else if (famT_drive) { - D_S[d].volume_control=infobuf[7]; + current_drive->volume_control=infobuf[7]; chan0=0; chan1=1; - if (D_S[d].volume_control&0x10) vol0=0; + if (current_drive->volume_control&0x10) vol0=0; else vol0=0xff; - if (D_S[d].volume_control&0x20) vol1=0; + if (current_drive->volume_control&0x20) vol1=0; else vol1=0xff; } - D_S[d].vol_chan0=chan0; - D_S[d].vol_ctrl0=vol0; - D_S[d].vol_chan1=chan1; - D_S[d].vol_ctrl1=vol1; + current_drive->vol_chan0=chan0; + current_drive->vol_ctrl0=vol0; + current_drive->vol_chan1=chan1; + current_drive->vol_ctrl1=vol1; #if 000 - D_S[d].vol_chan2=2; - D_S[d].vol_ctrl2=0xFF; - D_S[d].vol_chan3=3; - D_S[d].vol_ctrl3=0xFF; + current_drive->vol_chan2=2; + current_drive->vol_ctrl2=0xFF; + current_drive->vol_chan3=3; + current_drive->vol_ctrl3=0xFF; #endif /* 000 */ - D_S[d].diskstate_flags |= volume_bit; + current_drive->diskstate_flags |= volume_bit; return (0); } /*==========================================================================*/ @@ -2651,7 +2651,7 @@ static int cc_ReadCapacity(void) if (fam2_drive) return (0); /* some firmware lacks this command */ if (famLV_drive) return (0); /* some firmware lacks this command */ if (famT_drive) return (0); /* done with cc_ReadTocDescr() */ - D_S[d].diskstate_flags &= ~cd_size_bit; + current_drive->diskstate_flags &= ~cd_size_bit; for (j=3;j>0;j--) { clr_cmdbuf(); @@ -2681,13 +2681,13 @@ static int cc_ReadCapacity(void) cc_ReadError(); } if (j==0) return (i); - if (fam1_drive) D_S[d].CDsize_frm=msf2blk(make32(make16(0,infobuf[0]),make16(infobuf[1],infobuf[2])))+CD_MSF_OFFSET; - else if (fam0_drive) D_S[d].CDsize_frm=make32(make16(0,infobuf[0]),make16(infobuf[1],infobuf[2])); + if (fam1_drive) current_drive->CDsize_frm=msf2blk(make32(make16(0,infobuf[0]),make16(infobuf[1],infobuf[2])))+CD_MSF_OFFSET; + else if (fam0_drive) current_drive->CDsize_frm=make32(make16(0,infobuf[0]),make16(infobuf[1],infobuf[2])); #if 00 - else if (fam2_drive) D_S[d].CDsize_frm=make32(make16(infobuf[0],infobuf[1]),make16(infobuf[2],infobuf[3])); + else if (fam2_drive) current_drive->CDsize_frm=make32(make16(infobuf[0],infobuf[1]),make16(infobuf[2],infobuf[3])); #endif - D_S[d].diskstate_flags |= cd_size_bit; - msg(DBG_000,"cc_ReadCapacity: %d frames.\n", D_S[d].CDsize_frm); + current_drive->diskstate_flags |= cd_size_bit; + msg(DBG_000,"cc_ReadCapacity: %d frames.\n", current_drive->CDsize_frm); return (0); } /*==========================================================================*/ @@ -2695,7 +2695,7 @@ static int cc_ReadTocDescr(void) { int i; - D_S[d].diskstate_flags &= ~toc_bit; + current_drive->diskstate_flags &= ~toc_bit; clr_cmdbuf(); if (fam1_drive) { @@ -2715,7 +2715,7 @@ static int cc_ReadTocDescr(void) else if (fam2_drive) { /* possibly longer timeout periods necessary */ - D_S[d].f_multisession=0; + current_drive->f_multisession=0; drvcmd[0]=CMD2_DISKINFO; drvcmd[1]=0x02; drvcmd[2]=0xAB; @@ -2725,7 +2725,7 @@ static int cc_ReadTocDescr(void) } else if (famT_drive) { - D_S[d].f_multisession=0; + current_drive->f_multisession=0; response_count=12; drvcmd[0]=CMDT_DISKINFO; drvcmd[1]=0x02; @@ -2737,25 +2737,25 @@ static int cc_ReadTocDescr(void) if (i<0) return (i); if ((famT_drive)&&(i<response_count)) return (-100-i); if ((fam1_drive)||(fam2_drive)||(fam0LV_drive)) - D_S[d].xa_byte=infobuf[0]; + current_drive->xa_byte=infobuf[0]; if (fam2_drive) { - D_S[d].first_session=infobuf[1]; - D_S[d].last_session=infobuf[2]; - D_S[d].n_first_track=infobuf[3]; - D_S[d].n_last_track=infobuf[4]; - if (D_S[d].first_session!=D_S[d].last_session) + current_drive->first_session=infobuf[1]; + current_drive->last_session=infobuf[2]; + current_drive->n_first_track=infobuf[3]; + current_drive->n_last_track=infobuf[4]; + if (current_drive->first_session!=current_drive->last_session) { - D_S[d].f_multisession=1; - D_S[d].lba_multi=msf2blk(make32(make16(0,infobuf[5]),make16(infobuf[6],infobuf[7]))); + current_drive->f_multisession=1; + current_drive->lba_multi=msf2blk(make32(make16(0,infobuf[5]),make16(infobuf[6],infobuf[7]))); } #if 0 - if (D_S[d].first_session!=D_S[d].last_session) + if (current_drive->first_session!=current_drive->last_session) { - if (D_S[d].last_session<=20) - zwanzig=D_S[d].last_session+1; + if (current_drive->last_session<=20) + zwanzig=current_drive->last_session+1; else zwanzig=20; - for (count=D_S[d].first_session;count<zwanzig;count++) + for (count=current_drive->first_session;count<zwanzig;count++) { drvcmd[0]=CMD2_DISKINFO; drvcmd[1]=0x02; @@ -2765,9 +2765,9 @@ static int cc_ReadTocDescr(void) flags_cmd_out=f_putcmd; i=cmd_out(); if (i<0) return (i); - D_S[d].msf_multi_n[count]=make32(make16(0,infobuf[5]),make16(infobuf[6],infobuf[7])); + current_drive->msf_multi_n[count]=make32(make16(0,infobuf[5]),make16(infobuf[6],infobuf[7])); } - D_S[d].diskstate_flags |= multisession_bit; + current_drive->diskstate_flags |= multisession_bit; } #endif drvcmd[0]=CMD2_DISKINFO; @@ -2778,34 +2778,34 @@ static int cc_ReadTocDescr(void) flags_cmd_out=f_putcmd; i=cmd_out(); if (i<0) return (i); - D_S[d].size_msf=make32(make16(0,infobuf[2]),make16(infobuf[3],infobuf[4])); - D_S[d].size_blk=msf2blk(D_S[d].size_msf); - D_S[d].CDsize_frm=D_S[d].size_blk+1; + current_drive->size_msf=make32(make16(0,infobuf[2]),make16(infobuf[3],infobuf[4])); + current_drive->size_blk=msf2blk(current_drive->size_msf); + current_drive->CDsize_frm=current_drive->size_blk+1; } else if (famT_drive) { - D_S[d].size_msf=make32(make16(infobuf[8],infobuf[9]),make16(infobuf[10],infobuf[11])); - D_S[d].size_blk=msf2blk(D_S[d].size_msf); - D_S[d].CDsize_frm=D_S[d].size_blk+1; - D_S[d].n_first_track=infobuf[2]; - D_S[d].n_last_track=infobuf[3]; + current_drive->size_msf=make32(make16(infobuf[8],infobuf[9]),make16(infobuf[10],infobuf[11])); + current_drive->size_blk=msf2blk(current_drive->size_msf); + current_drive->CDsize_frm=current_drive->size_blk+1; + current_drive->n_first_track=infobuf[2]; + current_drive->n_last_track=infobuf[3]; } else { - D_S[d].n_first_track=infobuf[1]; - D_S[d].n_last_track=infobuf[2]; - D_S[d].size_msf=make32(make16(0,infobuf[3]),make16(infobuf[4],infobuf[5])); - D_S[d].size_blk=msf2blk(D_S[d].size_msf); - if (famLV_drive) D_S[d].CDsize_frm=D_S[d].size_blk+1; + current_drive->n_first_track=infobuf[1]; + current_drive->n_last_track=infobuf[2]; + current_drive->size_msf=make32(make16(0,infobuf[3]),make16(infobuf[4],infobuf[5])); + current_drive->size_blk=msf2blk(current_drive->size_msf); + if (famLV_drive) current_drive->CDsize_frm=current_drive->size_blk+1; } - D_S[d].diskstate_flags |= toc_bit; + current_drive->diskstate_flags |= toc_bit; msg(DBG_TOC,"TocDesc: xa %02X firstt %02X lastt %02X size %08X firstses %02X lastsess %02X\n", - D_S[d].xa_byte, - D_S[d].n_first_track, - D_S[d].n_last_track, - D_S[d].size_msf, - D_S[d].first_session, - D_S[d].last_session); + current_drive->xa_byte, + current_drive->n_first_track, + current_drive->n_last_track, + current_drive->size_msf, + current_drive->first_session, + current_drive->last_session); return (0); } /*==========================================================================*/ @@ -2855,36 +2855,36 @@ static int cc_ReadTocEntry(int num) if ((famT_drive)&&(i<response_count)) return (-100-i); if ((fam1_drive)||(fam0LV_drive)) { - D_S[d].TocEnt_nixbyte=infobuf[0]; + current_drive->TocEnt_nixbyte=infobuf[0]; i=1; } else if (fam2_drive) i=0; else if (famT_drive) i=5; - D_S[d].TocEnt_ctl_adr=swap_nibbles(infobuf[i++]); + current_drive->TocEnt_ctl_adr=swap_nibbles(infobuf[i++]); if ((fam1_drive)||(fam0L_drive)) { - D_S[d].TocEnt_number=infobuf[i++]; - D_S[d].TocEnt_format=infobuf[i]; + current_drive->TocEnt_number=infobuf[i++]; + current_drive->TocEnt_format=infobuf[i]; } else { - D_S[d].TocEnt_number=num; - D_S[d].TocEnt_format=0; + current_drive->TocEnt_number=num; + current_drive->TocEnt_format=0; } if (fam1_drive) i=4; else if (fam0LV_drive) i=5; else if (fam2_drive) i=2; else if (famT_drive) i=9; - D_S[d].TocEnt_address=make32(make16(0,infobuf[i]), + current_drive->TocEnt_address=make32(make16(0,infobuf[i]), make16(infobuf[i+1],infobuf[i+2])); for (i=0;i<response_count;i++) sprintf(&msgbuf[i*3], " %02X", infobuf[i]); msgbuf[i*3]=0; msg(DBG_ECS,"TocEntry:%s\n", msgbuf); msg(DBG_TOC,"TocEntry: %02X %02X %02X %02X %08X\n", - D_S[d].TocEnt_nixbyte, D_S[d].TocEnt_ctl_adr, - D_S[d].TocEnt_number, D_S[d].TocEnt_format, - D_S[d].TocEnt_address); + current_drive->TocEnt_nixbyte, current_drive->TocEnt_ctl_adr, + current_drive->TocEnt_number, current_drive->TocEnt_format, + current_drive->TocEnt_address); return (0); } /*==========================================================================*/ @@ -2915,11 +2915,11 @@ static int convert_UPC(u_char *p) if (fam0L_drive) p[13]=0; for (i=0;i<7;i++) { - if (fam1_drive) D_S[d].UPC_buf[i]=swap_nibbles(*p++); + if (fam1_drive) current_drive->UPC_buf[i]=swap_nibbles(*p++); else if (fam0L_drive) { - D_S[d].UPC_buf[i]=((*p++)<<4)&0xFF; - D_S[d].UPC_buf[i] |= *p++; + current_drive->UPC_buf[i]=((*p++)<<4)&0xFF; + current_drive->UPC_buf[i] |= *p++; } else if (famT_drive) { @@ -2930,7 +2930,7 @@ static int convert_UPC(u_char *p) return (-1); } } - D_S[d].UPC_buf[6] &= 0xF0; + current_drive->UPC_buf[6] &= 0xF0; return (0); } /*==========================================================================*/ @@ -2948,7 +2948,7 @@ static int cc_ReadUPC(void) if (fam0_drive) return (0); /* but it should work */ #endif - D_S[d].diskstate_flags &= ~upc_bit; + current_drive->diskstate_flags &= ~upc_bit; #if TEST_UPC for (block=CD_MSF_OFFSET+1;block<CD_MSF_OFFSET+200;block++) { @@ -3017,20 +3017,20 @@ static int cc_ReadUPC(void) if ((checksum&0x7F)!=0) break; } #endif /* TEST_UPC */ - D_S[d].UPC_ctl_adr=0; + current_drive->UPC_ctl_adr=0; if (fam1_drive) i=0; else i=2; if ((infobuf[i]&0x80)!=0) { convert_UPC(&infobuf[i]); - D_S[d].UPC_ctl_adr = (D_S[d].TocEnt_ctl_adr & 0xF0) | 0x02; + current_drive->UPC_ctl_adr = (current_drive->TocEnt_ctl_adr & 0xF0) | 0x02; } for (i=0;i<7;i++) - sprintf(&msgbuf[i*3], " %02X", D_S[d].UPC_buf[i]); - sprintf(&msgbuf[i*3], " (%02X)", D_S[d].UPC_ctl_adr); + sprintf(&msgbuf[i*3], " %02X", current_drive->UPC_buf[i]); + sprintf(&msgbuf[i*3], " (%02X)", current_drive->UPC_ctl_adr); msgbuf[i*3+5]=0; msg(DBG_UPC,"UPC code:%s\n", msgbuf); - D_S[d].diskstate_flags |= upc_bit; + current_drive->diskstate_flags |= upc_bit; return (0); } @@ -3040,7 +3040,7 @@ static int sbpcd_get_mcn(struct cdrom_device_info *cdi, struct cdrom_mcn *mcn) unsigned char *mcnp = mcn->medium_catalog_number; unsigned char *resp; - D_S[d].diskstate_flags &= ~upc_bit; + current_drive->diskstate_flags &= ~upc_bit; clr_cmdbuf(); if (fam1_drive) { @@ -3079,7 +3079,7 @@ static int sbpcd_get_mcn(struct cdrom_device_info *cdi, struct cdrom_mcn *mcn) return (i); } } - D_S[d].UPC_ctl_adr=0; + current_drive->UPC_ctl_adr=0; if (fam1_drive) i=0; else i=2; @@ -3102,7 +3102,7 @@ static int sbpcd_get_mcn(struct cdrom_device_info *cdi, struct cdrom_mcn *mcn) } *mcnp = '\0'; - D_S[d].diskstate_flags |= upc_bit; + current_drive->diskstate_flags |= upc_bit; return (0); } @@ -3112,8 +3112,8 @@ static int cc_CheckMultiSession(void) int i; if (fam2_drive) return (0); - D_S[d].f_multisession=0; - D_S[d].lba_multi=0; + current_drive->f_multisession=0; + current_drive->lba_multi=0; if (fam0_drive) return (0); clr_cmdbuf(); if (fam1_drive) @@ -3125,8 +3125,8 @@ static int cc_CheckMultiSession(void) if (i<0) return (i); if ((infobuf[0]&0x80)!=0) { - D_S[d].f_multisession=1; - D_S[d].lba_multi=msf2blk(make32(make16(0,infobuf[1]), + current_drive->f_multisession=1; + current_drive->lba_multi=msf2blk(make32(make16(0,infobuf[1]), make16(infobuf[2],infobuf[3]))); } } @@ -3139,7 +3139,7 @@ static int cc_CheckMultiSession(void) flags_cmd_out=f_putcmd; i=cmd_out(); if (i<0) return (i); - D_S[d].lba_multi=msf2blk(make32(make16(0,infobuf[5]), + current_drive->lba_multi=msf2blk(make32(make16(0,infobuf[5]), make16(infobuf[6],infobuf[7]))); } else if (famT_drive) @@ -3153,23 +3153,23 @@ static int cc_CheckMultiSession(void) i=cmd_out(); if (i<0) return (i); if (i<response_count) return (-100-i); - D_S[d].first_session=infobuf[2]; - D_S[d].last_session=infobuf[3]; - D_S[d].track_of_last_session=infobuf[6]; - if (D_S[d].first_session!=D_S[d].last_session) + current_drive->first_session=infobuf[2]; + current_drive->last_session=infobuf[3]; + current_drive->track_of_last_session=infobuf[6]; + if (current_drive->first_session!=current_drive->last_session) { - D_S[d].f_multisession=1; - D_S[d].lba_multi=msf2blk(make32(make16(0,infobuf[9]),make16(infobuf[10],infobuf[11]))); + current_drive->f_multisession=1; + current_drive->lba_multi=msf2blk(make32(make16(0,infobuf[9]),make16(infobuf[10],infobuf[11]))); } } for (i=0;i<response_count;i++) sprintf(&msgbuf[i*3], " %02X", infobuf[i]); msgbuf[i*3]=0; - msg(DBG_MUL,"MultiSession Info:%s (%d)\n", msgbuf, D_S[d].lba_multi); - if (D_S[d].lba_multi>200) + msg(DBG_MUL,"MultiSession Info:%s (%d)\n", msgbuf, current_drive->lba_multi); + if (current_drive->lba_multi>200) { - D_S[d].f_multisession=1; - msg(DBG_MUL,"MultiSession base: %06X\n", D_S[d].lba_multi); + current_drive->f_multisession=1; + msg(DBG_MUL,"MultiSession base: %06X\n", current_drive->lba_multi); } return (0); } @@ -3186,7 +3186,7 @@ static int cc_SubChanInfo(int frame, int count, u_char *buffer) return (-1); } #if 0 - if (D_S[d].audio_state!=audio_playing) return (-ENODATA); + if (current_drive->audio_state!=audio_playing) return (-ENODATA); #endif clr_cmdbuf(); drvcmd[0]=CMD1_SUBCHANINF; @@ -3197,7 +3197,7 @@ static int cc_SubChanInfo(int frame, int count, u_char *buffer) drvcmd[6]=count&0xFF; flags_cmd_out=f_putcmd|f_respo2|f_ResponseStatus|f_obey_p_check; cmd_type=READ_SC; - D_S[d].frame_size=CD_FRAMESIZE_SUB; + current_drive->frame_size=CD_FRAMESIZE_SUB; i=cmd_out(); /* which buffer to use? */ return (i); } @@ -3281,7 +3281,7 @@ static void __init ask_mail(void) msg(DBG_INF, "(don't mail if you are not using the actual kernel):\n"); msg(DBG_INF, "%s\n", VERSION); msg(DBG_INF, "address %03X, type %s, drive %s (ID %d)\n", - CDo_command, type, D_S[d].drive_model, D_S[d].drv_id); + CDo_command, type, current_drive->drive_model, current_drive->drv_id); for (i=0;i<12;i++) sprintf(&msgbuf[i*3], " %02X", infobuf[i]); msgbuf[i*3]=0; @@ -3297,8 +3297,8 @@ static int __init check_version(void) int i, j, l; int teac_possible=0; - msg(DBG_INI,"check_version: id=%d, d=%d.\n", D_S[d].drv_id, d); - D_S[d].drv_type=0; + msg(DBG_INI,"check_version: id=%d, d=%d.\n", current_drive->drv_id, d); + current_drive->drv_type=0; /* check for CR-52x, CR-56x, LCS-7260 and ECS-AT */ /* clear any pending error state */ @@ -3333,54 +3333,54 @@ static int __init check_version(void) for (i=0;i<4;i++) if (infobuf[i]!=family1[i]) break; if (i==4) { - D_S[d].drive_model[0]='C'; - D_S[d].drive_model[1]='R'; - D_S[d].drive_model[2]='-'; - D_S[d].drive_model[3]='5'; - D_S[d].drive_model[4]=infobuf[i++]; - D_S[d].drive_model[5]=infobuf[i++]; - D_S[d].drive_model[6]=0; - D_S[d].drv_type=drv_fam1; + current_drive->drive_model[0]='C'; + current_drive->drive_model[1]='R'; + current_drive->drive_model[2]='-'; + current_drive->drive_model[3]='5'; + current_drive->drive_model[4]=infobuf[i++]; + current_drive->drive_model[5]=infobuf[i++]; + current_drive->drive_model[6]=0; + current_drive->drv_type=drv_fam1; } - if (!D_S[d].drv_type) + if (!current_drive->drv_type) { for (i=0;i<8;i++) if (infobuf[i]!=family0[i]) break; if (i==8) { - D_S[d].drive_model[0]='C'; - D_S[d].drive_model[1]='R'; - D_S[d].drive_model[2]='-'; - D_S[d].drive_model[3]='5'; - D_S[d].drive_model[4]='2'; - D_S[d].drive_model[5]='x'; - D_S[d].drive_model[6]=0; - D_S[d].drv_type=drv_fam0; + current_drive->drive_model[0]='C'; + current_drive->drive_model[1]='R'; + current_drive->drive_model[2]='-'; + current_drive->drive_model[3]='5'; + current_drive->drive_model[4]='2'; + current_drive->drive_model[5]='x'; + current_drive->drive_model[6]=0; + current_drive->drv_type=drv_fam0; } } - if (!D_S[d].drv_type) + if (!current_drive->drv_type) { for (i=0;i<8;i++) if (infobuf[i]!=familyL[i]) break; if (i==8) { for (j=0;j<8;j++) - D_S[d].drive_model[j]=infobuf[j]; - D_S[d].drive_model[8]=0; - D_S[d].drv_type=drv_famL; + current_drive->drive_model[j]=infobuf[j]; + current_drive->drive_model[8]=0; + current_drive->drv_type=drv_famL; } } - if (!D_S[d].drv_type) + if (!current_drive->drv_type) { for (i=0;i<6;i++) if (infobuf[i]!=familyV[i]) break; if (i==6) { for (j=0;j<6;j++) - D_S[d].drive_model[j]=infobuf[j]; - D_S[d].drive_model[6]=0; - D_S[d].drv_type=drv_famV; + current_drive->drive_model[j]=infobuf[j]; + current_drive->drive_model[6]=0; + current_drive->drv_type=drv_famV; i+=2; /* 2 blanks before version */ } } - if (!D_S[d].drv_type) + if (!current_drive->drv_type) { /* check for CD200 */ clr_cmdbuf(); @@ -3397,7 +3397,7 @@ static int __init check_version(void) #if 0 OUT(CDo_reset,0); sbp_sleep(6*HZ); - OUT(CDo_enable,D_S[d].drv_sel); + OUT(CDo_enable,current_drive->drv_sel); #endif drvcmd[0]=CMD2_READ_VER; response_count=12; @@ -3423,37 +3423,37 @@ static int __init check_version(void) for (i=0;i<5;i++) if (infobuf[i]!=family2[i]) break; if (i==5) { - D_S[d].drive_model[0]='C'; - D_S[d].drive_model[1]='D'; - D_S[d].drive_model[2]='2'; - D_S[d].drive_model[3]='0'; - D_S[d].drive_model[4]='0'; - D_S[d].drive_model[5]=infobuf[i++]; - D_S[d].drive_model[6]=infobuf[i++]; - D_S[d].drive_model[7]=0; - D_S[d].drv_type=drv_fam2; + current_drive->drive_model[0]='C'; + current_drive->drive_model[1]='D'; + current_drive->drive_model[2]='2'; + current_drive->drive_model[3]='0'; + current_drive->drive_model[4]='0'; + current_drive->drive_model[5]=infobuf[i++]; + current_drive->drive_model[6]=infobuf[i++]; + current_drive->drive_model[7]=0; + current_drive->drv_type=drv_fam2; } } } - if (!D_S[d].drv_type) + if (!current_drive->drv_type) { /* check for TEAC CD-55A */ msg(DBG_TEA,"teac_possible: %d\n",teac_possible); - for (j=1;j<=((D_S[d].drv_id==0)?3:1);j++) + for (j=1;j<=((current_drive->drv_id==0)?3:1);j++) { - for (l=1;l<=((D_S[d].drv_id==0)?10:1);l++) + for (l=1;l<=((current_drive->drv_id==0)?10:1);l++) { msg(DBG_TEA,"TEAC reset #%d-%d.\n", j, l); if (sbpro_type==1) OUT(CDo_reset,0); else { - OUT(CDo_enable,D_S[d].drv_sel); + OUT(CDo_enable,current_drive->drv_sel); OUT(CDo_sel_i_d,0); OUT(CDo_command,CMDT_RESET); for (i=0;i<9;i++) OUT(CDo_command,0); } sbp_sleep(5*HZ/10); - OUT(CDo_enable,D_S[d].drv_sel); + OUT(CDo_enable,current_drive->drv_sel); OUT(CDo_sel_i_d,0); i=inb(CDi_status); msg(DBG_TEA,"TEAC CDi_status: %02X.\n",i); @@ -3480,82 +3480,82 @@ static int __init check_version(void) for (i=1;i<6;i++) if (infobuf[i]!=familyT[i-1]) break; if (i==6) { - D_S[d].drive_model[0]='C'; - D_S[d].drive_model[1]='D'; - D_S[d].drive_model[2]='-'; - D_S[d].drive_model[3]='5'; - D_S[d].drive_model[4]='5'; - D_S[d].drive_model[5]=0; - D_S[d].drv_type=drv_famT; + current_drive->drive_model[0]='C'; + current_drive->drive_model[1]='D'; + current_drive->drive_model[2]='-'; + current_drive->drive_model[3]='5'; + current_drive->drive_model[4]='5'; + current_drive->drive_model[5]=0; + current_drive->drv_type=drv_famT; } } } - if (!D_S[d].drv_type) + if (!current_drive->drv_type) { - msg(DBG_TEA,"no drive found at address %03X under ID %d.\n",CDo_command,D_S[d].drv_id); + msg(DBG_TEA,"no drive found at address %03X under ID %d.\n",CDo_command,current_drive->drv_id); return (-522); } - for (j=0;j<4;j++) D_S[d].firmware_version[j]=infobuf[i+j]; + for (j=0;j<4;j++) current_drive->firmware_version[j]=infobuf[i+j]; if (famL_drive) { u_char lcs_firm_e1[]="A E1"; u_char lcs_firm_f4[]="A4F4"; for (j=0;j<4;j++) - if (D_S[d].firmware_version[j]!=lcs_firm_e1[j]) break; - if (j==4) D_S[d].drv_type=drv_e1; + if (current_drive->firmware_version[j]!=lcs_firm_e1[j]) break; + if (j==4) current_drive->drv_type=drv_e1; for (j=0;j<4;j++) - if (D_S[d].firmware_version[j]!=lcs_firm_f4[j]) break; - if (j==4) D_S[d].drv_type=drv_f4; + if (current_drive->firmware_version[j]!=lcs_firm_f4[j]) break; + if (j==4) current_drive->drv_type=drv_f4; - if (D_S[d].drv_type==drv_famL) ask_mail(); + if (current_drive->drv_type==drv_famL) ask_mail(); } else if (famT_drive) { j=infobuf[4]; /* one-byte version??? - here: 0x15 */ if (j=='5') { - D_S[d].firmware_version[0]=infobuf[7]; - D_S[d].firmware_version[1]=infobuf[8]; - D_S[d].firmware_version[2]=infobuf[10]; - D_S[d].firmware_version[3]=infobuf[11]; + current_drive->firmware_version[0]=infobuf[7]; + current_drive->firmware_version[1]=infobuf[8]; + current_drive->firmware_version[2]=infobuf[10]; + current_drive->firmware_version[3]=infobuf[11]; } else { if (j!=0x15) ask_mail(); - D_S[d].firmware_version[0]='0'; - D_S[d].firmware_version[1]='.'; - D_S[d].firmware_version[2]='0'+(j>>4); - D_S[d].firmware_version[3]='0'+(j&0x0f); + current_drive->firmware_version[0]='0'; + current_drive->firmware_version[1]='.'; + current_drive->firmware_version[2]='0'+(j>>4); + current_drive->firmware_version[3]='0'+(j&0x0f); } } else /* CR-52x, CR-56x, CD200, ECS-AT */ { - j = (D_S[d].firmware_version[0] & 0x0F) * 100 + - (D_S[d].firmware_version[2] & 0x0F) *10 + - (D_S[d].firmware_version[3] & 0x0F); + j = (current_drive->firmware_version[0] & 0x0F) * 100 + + (current_drive->firmware_version[2] & 0x0F) *10 + + (current_drive->firmware_version[3] & 0x0F); if (fam0_drive) { - if (j<200) D_S[d].drv_type=drv_199; - else if (j<201) D_S[d].drv_type=drv_200; - else if (j<210) D_S[d].drv_type=drv_201; - else if (j<211) D_S[d].drv_type=drv_210; - else if (j<300) D_S[d].drv_type=drv_211; - else if (j>=300) D_S[d].drv_type=drv_300; + if (j<200) current_drive->drv_type=drv_199; + else if (j<201) current_drive->drv_type=drv_200; + else if (j<210) current_drive->drv_type=drv_201; + else if (j<211) current_drive->drv_type=drv_210; + else if (j<300) current_drive->drv_type=drv_211; + else if (j>=300) current_drive->drv_type=drv_300; } else if (fam1_drive) { - if (j<100) D_S[d].drv_type=drv_099; + if (j<100) current_drive->drv_type=drv_099; else { - D_S[d].drv_type=drv_100; + current_drive->drv_type=drv_100; if ((j!=500)&&(j!=102)) ask_mail(); } } else if (fam2_drive) { - if (D_S[d].drive_model[5]=='F') + if (current_drive->drive_model[5]=='F') { if ((j!=1)&&(j!=35)&&(j!=200)&&(j!=210)) ask_mail(); /* unknown version at time */ @@ -3569,11 +3569,11 @@ static int __init check_version(void) } else if (famV_drive) { - if ((j==100)||(j==150)) D_S[d].drv_type=drv_at; + if ((j==100)||(j==150)) current_drive->drv_type=drv_at; ask_mail(); /* hopefully we get some feedback by this */ } } - msg(DBG_LCS,"drive type %02X\n",D_S[d].drv_type); + msg(DBG_LCS,"drive type %02X\n",current_drive->drv_type); msg(DBG_INI,"check_version done.\n"); return (0); } @@ -3582,8 +3582,8 @@ static void switch_drive(int i) { d=i; current_drive = D_S + i; - OUT(CDo_enable,D_S[d].drv_sel); - msg(DBG_DID,"drive %d (ID=%d) activated.\n", i, D_S[d].drv_id); + OUT(CDo_enable,current_drive->drv_sel); + msg(DBG_DID,"drive %d (ID=%d) activated.\n", i, current_drive->drv_id); return; } /*==========================================================================*/ @@ -3713,13 +3713,13 @@ static int __init check_drives(void) if (i<0) msg(DBG_INI,"check_version returns %d.\n",i); else { - D_S[d].drv_options=drv_pattern[j]; - if (fam0L_drive) D_S[d].drv_options&=~(speed_auto|speed_300|speed_150); + current_drive->drv_options=drv_pattern[j]; + if (fam0L_drive) current_drive->drv_options&=~(speed_auto|speed_300|speed_150); msg(DBG_INF, "Drive %d (ID=%d): %.9s (%.4s) at 0x%03X (type %d)\n", d, - D_S[d].drv_id, - D_S[d].drive_model, - D_S[d].firmware_version, + current_drive->drv_id, + current_drive->drive_model, + current_drive->firmware_version, CDo_command, sbpro_type); ndrives++; @@ -3855,7 +3855,7 @@ static int seek_pos_audio_end(void) { int i; - i=msf2blk(D_S[d].pos_audio_end)-1; + i=msf2blk(current_drive->pos_audio_end)-1; if (i<0) return (-1); i=cc_Seek(i,0); return (i); @@ -3865,24 +3865,24 @@ static int seek_pos_audio_end(void) static int ReadToC(void) { int i, j; - D_S[d].diskstate_flags &= ~toc_bit; - D_S[d].ored_ctl_adr=0; + current_drive->diskstate_flags &= ~toc_bit; + current_drive->ored_ctl_adr=0; /* special handling of CD-I HE */ - if ((D_S[d].n_first_track == 2 && D_S[d].n_last_track == 2) || - D_S[d].xa_byte == 0x10) + if ((current_drive->n_first_track == 2 && current_drive->n_last_track == 2) || + current_drive->xa_byte == 0x10) { - D_S[d].TocBuffer[1].nixbyte=0; - D_S[d].TocBuffer[1].ctl_adr=0x40; - D_S[d].TocBuffer[1].number=1; - D_S[d].TocBuffer[1].format=0; - D_S[d].TocBuffer[1].address=blk2msf(0); - D_S[d].ored_ctl_adr |= 0x40; - D_S[d].n_first_track = 1; - D_S[d].n_last_track = 1; - D_S[d].xa_byte = 0x10; + current_drive->TocBuffer[1].nixbyte=0; + current_drive->TocBuffer[1].ctl_adr=0x40; + current_drive->TocBuffer[1].number=1; + current_drive->TocBuffer[1].format=0; + current_drive->TocBuffer[1].address=blk2msf(0); + current_drive->ored_ctl_adr |= 0x40; + current_drive->n_first_track = 1; + current_drive->n_last_track = 1; + current_drive->xa_byte = 0x10; j = 2; } else - for (j=D_S[d].n_first_track;j<=D_S[d].n_last_track;j++) + for (j=current_drive->n_first_track;j<=current_drive->n_last_track;j++) { i=cc_ReadTocEntry(j); if (i<0) @@ -3890,21 +3890,21 @@ static int ReadToC(void) msg(DBG_INF,"cc_ReadTocEntry(%d) returns %d.\n",j,i); return (i); } - D_S[d].TocBuffer[j].nixbyte=D_S[d].TocEnt_nixbyte; - D_S[d].TocBuffer[j].ctl_adr=D_S[d].TocEnt_ctl_adr; - D_S[d].TocBuffer[j].number=D_S[d].TocEnt_number; - D_S[d].TocBuffer[j].format=D_S[d].TocEnt_format; - D_S[d].TocBuffer[j].address=D_S[d].TocEnt_address; - D_S[d].ored_ctl_adr |= D_S[d].TocEnt_ctl_adr; + current_drive->TocBuffer[j].nixbyte=current_drive->TocEnt_nixbyte; + current_drive->TocBuffer[j].ctl_adr=current_drive->TocEnt_ctl_adr; + current_drive->TocBuffer[j].number=current_drive->TocEnt_number; + current_drive->TocBuffer[j].format=current_drive->TocEnt_format; + current_drive->TocBuffer[j].address=current_drive->TocEnt_address; + current_drive->ored_ctl_adr |= current_drive->TocEnt_ctl_adr; } /* fake entry for LeadOut Track */ - D_S[d].TocBuffer[j].nixbyte=0; - D_S[d].TocBuffer[j].ctl_adr=0; - D_S[d].TocBuffer[j].number=CDROM_LEADOUT; - D_S[d].TocBuffer[j].format=0; - D_S[d].TocBuffer[j].address=D_S[d].size_msf; + current_drive->TocBuffer[j].nixbyte=0; + current_drive->TocBuffer[j].ctl_adr=0; + current_drive->TocBuffer[j].number=CDROM_LEADOUT; + current_drive->TocBuffer[j].format=0; + current_drive->TocBuffer[j].address=current_drive->size_msf; - D_S[d].diskstate_flags |= toc_bit; + current_drive->diskstate_flags |= toc_bit; return (0); } /*==========================================================================*/ @@ -3912,7 +3912,7 @@ static int DiskInfo(void) { int i, j; - D_S[d].mode=READ_M1; + current_drive->mode=READ_M1; #undef LOOP_COUNT #define LOOP_COUNT 10 /* needed for some "old" drives */ @@ -3962,9 +3962,9 @@ static int DiskInfo(void) msg(DBG_INF,"DiskInfo: cc_CheckMultiSession returns %d\n", i); return (i); } - if (D_S[d].f_multisession) D_S[d].sbp_bufsiz=1; /* possibly a weird PhotoCD */ - else D_S[d].sbp_bufsiz=buffers; - i=cc_ReadTocEntry(D_S[d].n_first_track); + if (current_drive->f_multisession) current_drive->sbp_bufsiz=1; /* possibly a weird PhotoCD */ + else current_drive->sbp_bufsiz=buffers; + i=cc_ReadTocEntry(current_drive->n_first_track); if (i<0) { msg(DBG_INF,"DiskInfo: cc_ReadTocEntry(1) returns %d\n", i); @@ -3972,7 +3972,7 @@ static int DiskInfo(void) } i=cc_ReadUPC(); if (i<0) msg(DBG_INF,"DiskInfo: cc_ReadUPC returns %d\n", i); - if ((fam0L_drive) && (D_S[d].xa_byte==0x20 || D_S[d].xa_byte == 0x10)) + if ((fam0L_drive) && (current_drive->xa_byte==0x20 || current_drive->xa_byte == 0x10)) { /* XA disk with old drive */ cc_ModeSelect(CD_FRAMESIZE_RAW1); @@ -4040,10 +4040,10 @@ static int prepare(u_char func, u_char subfunc) else if (fam1_drive) GetStatus(); else if (fam2_drive) GetStatus(); else if (famT_drive) GetStatus(); - if (D_S[d].CD_changed==0xFF) + if (current_drive->CD_changed==0xFF) { - D_S[d].diskstate_flags=0; - D_S[d].audio_state=0; + current_drive->diskstate_flags=0; + current_drive->audio_state=0; if (!st_diskok) { i=check_allowed1(func,subfunc); @@ -4054,7 +4054,7 @@ static int prepare(u_char func, u_char subfunc) i=check_allowed3(func,subfunc); if (i<0) { - D_S[d].CD_changed=1; + current_drive->CD_changed=1; return (-15); } } @@ -4063,8 +4063,8 @@ static int prepare(u_char func, u_char subfunc) { if (!st_diskok) { - D_S[d].diskstate_flags=0; - D_S[d].audio_state=0; + current_drive->diskstate_flags=0; + current_drive->audio_state=0; i=check_allowed1(func,subfunc); if (i<0) return (-2); } @@ -4072,7 +4072,7 @@ static int prepare(u_char func, u_char subfunc) { if (st_busy) { - if (D_S[d].audio_state!=audio_pausing) + if (current_drive->audio_state!=audio_pausing) { i=check_allowed2(func,subfunc); if (i<0) return (-2); @@ -4080,16 +4080,16 @@ static int prepare(u_char func, u_char subfunc) } else { - if (D_S[d].audio_state==audio_playing) seek_pos_audio_end(); - D_S[d].audio_state=0; + if (current_drive->audio_state==audio_playing) seek_pos_audio_end(); + current_drive->audio_state=0; } if (!frame_size_valid) { i=DiskInfo(); if (i<0) { - D_S[d].diskstate_flags=0; - D_S[d].audio_state=0; + current_drive->diskstate_flags=0; + current_drive->audio_state=0; i=check_allowed1(func,subfunc); if (i<0) return (-2); } @@ -4189,52 +4189,52 @@ static int sbpcd_dev_ioctl(struct cdrom_device_info *cdi, u_int cmd, case CDROMRESET: /* hard reset the drive */ msg(DBG_IOC,"ioctl: CDROMRESET entered.\n"); i=DriveReset(); - D_S[d].audio_state=0; + current_drive->audio_state=0; RETURN_UP(i); case CDROMREADMODE1: msg(DBG_IOC,"ioctl: CDROMREADMODE1 requested.\n"); #if SAFE_MIXED - if (D_S[d].has_data>1) RETURN_UP(-EBUSY); + if (current_drive->has_data>1) RETURN_UP(-EBUSY); #endif /* SAFE_MIXED */ cc_ModeSelect(CD_FRAMESIZE); cc_ModeSense(); - D_S[d].mode=READ_M1; + current_drive->mode=READ_M1; RETURN_UP(0); case CDROMREADMODE2: /* not usable at the moment */ msg(DBG_IOC,"ioctl: CDROMREADMODE2 requested.\n"); #if SAFE_MIXED - if (D_S[d].has_data>1) RETURN_UP(-EBUSY); + if (current_drive->has_data>1) RETURN_UP(-EBUSY); #endif /* SAFE_MIXED */ cc_ModeSelect(CD_FRAMESIZE_RAW1); cc_ModeSense(); - D_S[d].mode=READ_M2; + current_drive->mode=READ_M2; RETURN_UP(0); case CDROMAUDIOBUFSIZ: /* configure the audio buffer size */ msg(DBG_IOC,"ioctl: CDROMAUDIOBUFSIZ entered.\n"); - if (D_S[d].sbp_audsiz>0) vfree(D_S[d].aud_buf); - D_S[d].aud_buf=NULL; - D_S[d].sbp_audsiz=arg; + if (current_drive->sbp_audsiz>0) vfree(current_drive->aud_buf); + current_drive->aud_buf=NULL; + current_drive->sbp_audsiz=arg; - if (D_S[d].sbp_audsiz>16) + if (current_drive->sbp_audsiz>16) { - D_S[d].sbp_audsiz = 0; - RETURN_UP(D_S[d].sbp_audsiz); + current_drive->sbp_audsiz = 0; + RETURN_UP(current_drive->sbp_audsiz); } - if (D_S[d].sbp_audsiz>0) + if (current_drive->sbp_audsiz>0) { - D_S[d].aud_buf=(u_char *) vmalloc(D_S[d].sbp_audsiz*CD_FRAMESIZE_RAW); - if (D_S[d].aud_buf==NULL) + current_drive->aud_buf=(u_char *) vmalloc(current_drive->sbp_audsiz*CD_FRAMESIZE_RAW); + if (current_drive->aud_buf==NULL) { - msg(DBG_INF,"audio buffer (%d frames) not available.\n",D_S[d].sbp_audsiz); - D_S[d].sbp_audsiz=0; + msg(DBG_INF,"audio buffer (%d frames) not available.\n",current_drive->sbp_audsiz); + current_drive->sbp_audsiz=0; } - else msg(DBG_INF,"audio buffer size: %d frames.\n",D_S[d].sbp_audsiz); + else msg(DBG_INF,"audio buffer size: %d frames.\n",current_drive->sbp_audsiz); } - RETURN_UP(D_S[d].sbp_audsiz); + RETURN_UP(current_drive->sbp_audsiz); case CDROMREADAUDIO: { /* start of CDROMREADAUDIO */ @@ -4254,13 +4254,13 @@ static int sbpcd_dev_ioctl(struct cdrom_device_info *cdi, u_int cmd, if (famV_drive) RETURN_UP(-EINVAL); if (famT_drive) RETURN_UP(-EINVAL); #if SAFE_MIXED - if (D_S[d].has_data>1) RETURN_UP(-EBUSY); + if (current_drive->has_data>1) RETURN_UP(-EBUSY); #endif /* SAFE_MIXED */ - if (D_S[d].aud_buf==NULL) RETURN_UP(-EINVAL); + if (current_drive->aud_buf==NULL) RETURN_UP(-EINVAL); if (copy_from_user(&read_audio, (void *)arg, sizeof(struct cdrom_read_audio))) RETURN_UP(-EFAULT); - if (read_audio.nframes < 0 || read_audio.nframes>D_S[d].sbp_audsiz) RETURN_UP(-EINVAL); + if (read_audio.nframes < 0 || read_audio.nframes>current_drive->sbp_audsiz) RETURN_UP(-EINVAL); i=verify_area(VERIFY_WRITE, read_audio.buf, read_audio.nframes*CD_FRAMESIZE_RAW); if (i) RETURN_UP(i); @@ -4285,7 +4285,7 @@ static int sbpcd_dev_ioctl(struct cdrom_device_info *cdi, u_int cmd, for (data_tries=5; data_tries>0; data_tries--) { msg(DBG_AUD,"data_tries=%d ...\n", data_tries); - D_S[d].mode=READ_AU; + current_drive->mode=READ_AU; cc_ModeSelect(CD_FRAMESIZE_RAW); cc_ModeSense(); for (status_tries=3; status_tries > 0; status_tries--) @@ -4375,13 +4375,13 @@ static int sbpcd_dev_ioctl(struct cdrom_device_info *cdi, u_int cmd, } msg(DBG_AUD,"read_audio: before reading data.\n"); error_flag=0; - p = D_S[d].aud_buf; + p = current_drive->aud_buf; if (sbpro_type==1) OUT(CDo_sel_i_d,1); if (do_16bit) { u_short *p2 = (u_short *) p; - for (; (u_char *) p2 < D_S[d].aud_buf + read_audio.nframes*CD_FRAMESIZE_RAW;) + for (; (u_char *) p2 < current_drive->aud_buf + read_audio.nframes*CD_FRAMESIZE_RAW;) { if ((inb_p(CDi_status)&s_not_data_ready)) continue; @@ -4390,7 +4390,7 @@ static int sbpcd_dev_ioctl(struct cdrom_device_info *cdi, u_int cmd, *p2++ = inw_p(CDi_data); } } else { - for (; p < D_S[d].aud_buf + read_audio.nframes*CD_FRAMESIZE_RAW;) + for (; p < current_drive->aud_buf + read_audio.nframes*CD_FRAMESIZE_RAW;) { if ((inb_p(CDi_status)&s_not_data_ready)) continue; @@ -4445,7 +4445,7 @@ static int sbpcd_dev_ioctl(struct cdrom_device_info *cdi, u_int cmd, i=ResponseStatus(); /* builds status_bits, returns orig. status (old) or faked p_success (new) */ if (i<0) { msg(DBG_AUD, "read_audio: cc_ReadStatus error after read: %02X\n", - D_S[d].status_bits); + current_drive->status_bits); continue; /* FIXME */ } } @@ -4457,7 +4457,7 @@ static int sbpcd_dev_ioctl(struct cdrom_device_info *cdi, u_int cmd, continue; } if (copy_to_user((u_char *)read_audio.buf, - (u_char *) D_S[d].aud_buf, + (u_char *) current_drive->aud_buf, read_audio.nframes * CD_FRAMESIZE_RAW)) RETURN_UP(-EFAULT); msg(DBG_AUD,"read_audio: copy_to_user done.\n"); @@ -4465,7 +4465,7 @@ static int sbpcd_dev_ioctl(struct cdrom_device_info *cdi, u_int cmd, } cc_ModeSelect(CD_FRAMESIZE); cc_ModeSense(); - D_S[d].mode=READ_M1; + current_drive->mode=READ_M1; #if OLD_BUSY busy_audio=0; #endif /* OLD_BUSY */ @@ -4510,7 +4510,7 @@ static int sbpcd_audio_ioctl(struct cdrom_device_info *cdi, u_int cmd, /* or reset the starting and ending locations when in PAUSED mode. */ /* If applicable, at the next stopping point it reaches */ /* the drive will discontinue playing. */ - switch (D_S[d].audio_state) + switch (current_drive->audio_state) { case audio_playing: if (famL_drive) i=cc_ReadSubQ(); @@ -4519,11 +4519,11 @@ static int sbpcd_audio_ioctl(struct cdrom_device_info *cdi, u_int cmd, if (famL_drive) i=cc_Pause_Resume(1); else i=cc_ReadSubQ(); if (i<0) RETURN_UP(-EIO); - D_S[d].pos_audio_start=D_S[d].SubQ_run_tot; - D_S[d].audio_state=audio_pausing; + current_drive->pos_audio_start=current_drive->SubQ_run_tot; + current_drive->audio_state=audio_pausing; RETURN_UP(0); case audio_pausing: - i=cc_Seek(D_S[d].pos_audio_start,1); + i=cc_Seek(current_drive->pos_audio_start,1); if (i<0) RETURN_UP(-EIO); RETURN_UP(0); default: @@ -4535,56 +4535,56 @@ static int sbpcd_audio_ioctl(struct cdrom_device_info *cdi, u_int cmd, /* resume playing audio tracks when a previous PLAY AUDIO call has */ /* been paused with a PAUSE command. */ /* It will resume playing from the location saved in SubQ_run_tot. */ - if (D_S[d].audio_state!=audio_pausing) RETURN_UP(-EINVAL); + if (current_drive->audio_state!=audio_pausing) RETURN_UP(-EINVAL); if (famL_drive) - i=cc_PlayAudio(D_S[d].pos_audio_start, - D_S[d].pos_audio_end); + i=cc_PlayAudio(current_drive->pos_audio_start, + current_drive->pos_audio_end); else i=cc_Pause_Resume(3); if (i<0) RETURN_UP(-EIO); - D_S[d].audio_state=audio_playing; + current_drive->audio_state=audio_playing; RETURN_UP(0); case CDROMPLAYMSF: msg(DBG_IOC,"ioctl: CDROMPLAYMSF entered.\n"); #if SAFE_MIXED - if (D_S[d].has_data>1) RETURN_UP(-EBUSY); + if (current_drive->has_data>1) RETURN_UP(-EBUSY); #endif /* SAFE_MIXED */ - if (D_S[d].audio_state==audio_playing) + if (current_drive->audio_state==audio_playing) { i=cc_Pause_Resume(1); if (i<0) RETURN_UP(-EIO); i=cc_ReadSubQ(); if (i<0) RETURN_UP(-EIO); - D_S[d].pos_audio_start=D_S[d].SubQ_run_tot; - i=cc_Seek(D_S[d].pos_audio_start,1); + current_drive->pos_audio_start=current_drive->SubQ_run_tot; + i=cc_Seek(current_drive->pos_audio_start,1); } memcpy(&msf, (void *) arg, sizeof(struct cdrom_msf)); /* values come as msf-bin */ - D_S[d].pos_audio_start = (msf.cdmsf_min0<<16) | + current_drive->pos_audio_start = (msf.cdmsf_min0<<16) | (msf.cdmsf_sec0<<8) | msf.cdmsf_frame0; - D_S[d].pos_audio_end = (msf.cdmsf_min1<<16) | + current_drive->pos_audio_end = (msf.cdmsf_min1<<16) | (msf.cdmsf_sec1<<8) | msf.cdmsf_frame1; msg(DBG_IOX,"ioctl: CDROMPLAYMSF %08X %08X\n", - D_S[d].pos_audio_start,D_S[d].pos_audio_end); - i=cc_PlayAudio(D_S[d].pos_audio_start,D_S[d].pos_audio_end); + current_drive->pos_audio_start,current_drive->pos_audio_end); + i=cc_PlayAudio(current_drive->pos_audio_start,current_drive->pos_audio_end); if (i<0) { msg(DBG_INF,"ioctl: cc_PlayAudio returns %d\n",i); DriveReset(); - D_S[d].audio_state=0; + current_drive->audio_state=0; RETURN_UP(-EIO); } - D_S[d].audio_state=audio_playing; + current_drive->audio_state=audio_playing; RETURN_UP(0); case CDROMPLAYTRKIND: /* Play a track. This currently ignores index. */ msg(DBG_IOC,"ioctl: CDROMPLAYTRKIND entered.\n"); #if SAFE_MIXED - if (D_S[d].has_data>1) RETURN_UP(-EBUSY); + if (current_drive->has_data>1) RETURN_UP(-EBUSY); #endif /* SAFE_MIXED */ - if (D_S[d].audio_state==audio_playing) + if (current_drive->audio_state==audio_playing) { msg(DBG_IOX,"CDROMPLAYTRKIND: already audio_playing.\n"); #if 1 @@ -4596,27 +4596,27 @@ static int sbpcd_audio_ioctl(struct cdrom_device_info *cdi, u_int cmd, memcpy(&ti,(void *) arg,sizeof(struct cdrom_ti)); msg(DBG_IOX,"ioctl: trk0: %d, ind0: %d, trk1:%d, ind1:%d\n", ti.cdti_trk0,ti.cdti_ind0,ti.cdti_trk1,ti.cdti_ind1); - if (ti.cdti_trk0<D_S[d].n_first_track) RETURN_UP(-EINVAL); - if (ti.cdti_trk0>D_S[d].n_last_track) RETURN_UP(-EINVAL); + if (ti.cdti_trk0<current_drive->n_first_track) RETURN_UP(-EINVAL); + if (ti.cdti_trk0>current_drive->n_last_track) RETURN_UP(-EINVAL); if (ti.cdti_trk1<ti.cdti_trk0) ti.cdti_trk1=ti.cdti_trk0; - if (ti.cdti_trk1>D_S[d].n_last_track) ti.cdti_trk1=D_S[d].n_last_track; - D_S[d].pos_audio_start=D_S[d].TocBuffer[ti.cdti_trk0].address; - D_S[d].pos_audio_end=D_S[d].TocBuffer[ti.cdti_trk1+1].address; - i=cc_PlayAudio(D_S[d].pos_audio_start,D_S[d].pos_audio_end); + if (ti.cdti_trk1>current_drive->n_last_track) ti.cdti_trk1=current_drive->n_last_track; + current_drive->pos_audio_start=current_drive->TocBuffer[ti.cdti_trk0].address; + current_drive->pos_audio_end=current_drive->TocBuffer[ti.cdti_trk1+1].address; + i=cc_PlayAudio(current_drive->pos_audio_start,current_drive->pos_audio_end); if (i<0) { msg(DBG_INF,"ioctl: cc_PlayAudio returns %d\n",i); DriveReset(); - D_S[d].audio_state=0; + current_drive->audio_state=0; RETURN_UP(-EIO); } - D_S[d].audio_state=audio_playing; + current_drive->audio_state=audio_playing; RETURN_UP(0); case CDROMREADTOCHDR: /* Read the table of contents header */ msg(DBG_IOC,"ioctl: CDROMREADTOCHDR entered.\n"); - tochdr.cdth_trk0=D_S[d].n_first_track; - tochdr.cdth_trk1=D_S[d].n_last_track; + tochdr.cdth_trk0=current_drive->n_first_track; + tochdr.cdth_trk1=current_drive->n_last_track; memcpy((void *) arg, &tochdr, sizeof(struct cdrom_tochdr)); RETURN_UP(0); @@ -4624,20 +4624,20 @@ static int sbpcd_audio_ioctl(struct cdrom_device_info *cdi, u_int cmd, msg(DBG_IOC,"ioctl: CDROMREADTOCENTRY entered.\n"); memcpy(&tocentry, (void *) arg, sizeof(struct cdrom_tocentry)); i=tocentry.cdte_track; - if (i==CDROM_LEADOUT) i=D_S[d].n_last_track+1; - else if (i<D_S[d].n_first_track||i>D_S[d].n_last_track) + if (i==CDROM_LEADOUT) i=current_drive->n_last_track+1; + else if (i<current_drive->n_first_track||i>current_drive->n_last_track) RETURN_UP(-EINVAL); - tocentry.cdte_adr=D_S[d].TocBuffer[i].ctl_adr&0x0F; - tocentry.cdte_ctrl=(D_S[d].TocBuffer[i].ctl_adr>>4)&0x0F; - tocentry.cdte_datamode=D_S[d].TocBuffer[i].format; + tocentry.cdte_adr=current_drive->TocBuffer[i].ctl_adr&0x0F; + tocentry.cdte_ctrl=(current_drive->TocBuffer[i].ctl_adr>>4)&0x0F; + tocentry.cdte_datamode=current_drive->TocBuffer[i].format; if (tocentry.cdte_format==CDROM_MSF) /* MSF-bin required */ { - tocentry.cdte_addr.msf.minute=(D_S[d].TocBuffer[i].address>>16)&0x00FF; - tocentry.cdte_addr.msf.second=(D_S[d].TocBuffer[i].address>>8)&0x00FF; - tocentry.cdte_addr.msf.frame=D_S[d].TocBuffer[i].address&0x00FF; + tocentry.cdte_addr.msf.minute=(current_drive->TocBuffer[i].address>>16)&0x00FF; + tocentry.cdte_addr.msf.second=(current_drive->TocBuffer[i].address>>8)&0x00FF; + tocentry.cdte_addr.msf.frame=current_drive->TocBuffer[i].address&0x00FF; } else if (tocentry.cdte_format==CDROM_LBA) /* blk required */ - tocentry.cdte_addr.lba=msf2blk(D_S[d].TocBuffer[i].address); + tocentry.cdte_addr.lba=msf2blk(current_drive->TocBuffer[i].address); else RETURN_UP(-EINVAL); memcpy((void *) arg, &tocentry, sizeof(struct cdrom_tocentry)); RETURN_UP(0); @@ -4645,10 +4645,10 @@ static int sbpcd_audio_ioctl(struct cdrom_device_info *cdi, u_int cmd, case CDROMSTOP: /* Spin down the drive */ msg(DBG_IOC,"ioctl: CDROMSTOP entered.\n"); #if SAFE_MIXED - if (D_S[d].has_data>1) RETURN_UP(-EBUSY); + if (current_drive->has_data>1) RETURN_UP(-EBUSY); #endif /* SAFE_MIXED */ i=cc_Pause_Resume(1); - D_S[d].audio_state=0; + current_drive->audio_state=0; #if 0 cc_DriveReset(); #endif @@ -4657,16 +4657,16 @@ static int sbpcd_audio_ioctl(struct cdrom_device_info *cdi, u_int cmd, case CDROMSTART: /* Spin up the drive */ msg(DBG_IOC,"ioctl: CDROMSTART entered.\n"); cc_SpinUp(); - D_S[d].audio_state=0; + current_drive->audio_state=0; RETURN_UP(0); case CDROMVOLCTRL: /* Volume control */ msg(DBG_IOC,"ioctl: CDROMVOLCTRL entered.\n"); memcpy(&volctrl,(char *) arg,sizeof(volctrl)); - D_S[d].vol_chan0=0; - D_S[d].vol_ctrl0=volctrl.channel0; - D_S[d].vol_chan1=1; - D_S[d].vol_ctrl1=volctrl.channel1; + current_drive->vol_chan0=0; + current_drive->vol_ctrl0=volctrl.channel0; + current_drive->vol_chan1=1; + current_drive->vol_ctrl1=volctrl.channel1; i=cc_SetVolume(); RETURN_UP(0); @@ -4674,8 +4674,8 @@ static int sbpcd_audio_ioctl(struct cdrom_device_info *cdi, u_int cmd, msg(DBG_IOC,"ioctl: CDROMVOLREAD entered.\n"); st=cc_GetVolume(); if (st<0) RETURN_UP(st); - volctrl.channel0=D_S[d].vol_ctrl0; - volctrl.channel1=D_S[d].vol_ctrl1; + volctrl.channel0=current_drive->vol_ctrl0; + volctrl.channel1=current_drive->vol_ctrl1; volctrl.channel2=0; volctrl.channel2=0; memcpy((void *)arg,&volctrl,sizeof(volctrl)); @@ -4692,22 +4692,22 @@ static int sbpcd_audio_ioctl(struct cdrom_device_info *cdi, u_int cmd, i=cc_ReadSubQ(); if (i<0) { j=cc_ReadError(); /* clear out error status from drive */ - D_S[d].audio_state=CDROM_AUDIO_NO_STATUS; + current_drive->audio_state=CDROM_AUDIO_NO_STATUS; /* get and set the disk state here, probably not the right place, but who cares! It makes it work properly! --AJK */ - if (D_S[d].CD_changed==0xFF) { + if (current_drive->CD_changed==0xFF) { msg(DBG_000,"Disk changed detect\n"); - D_S[d].diskstate_flags &= ~cd_size_bit; + current_drive->diskstate_flags &= ~cd_size_bit; } RETURN_UP(-EIO); } - if (D_S[d].CD_changed==0xFF) { + if (current_drive->CD_changed==0xFF) { /* reread the TOC because the disk has changed! --AJK */ msg(DBG_000,"Disk changed STILL detected, rereading TOC!\n"); i=DiskInfo(); if(i==0) { - D_S[d].CD_changed=0x00; /* cd has changed, procede, */ + current_drive->CD_changed=0x00; /* cd has changed, procede, */ RETURN_UP(-EIO); /* and get TOC, etc on next try! --AJK */ } else { RETURN_UP(-EIO); /* we weren't ready yet! --AJK */ @@ -4728,12 +4728,12 @@ static int sbpcd_audio_ioctl(struct cdrom_device_info *cdi, u_int cmd, msg(DBG_000,"Drive Status: spinning =%d.\n", st_spinning); msg(DBG_000,"Drive Status: busy =%d.\n", st_busy); /* st_busy indicates if it's _ACTUALLY_ playing audio */ - switch (D_S[d].audio_state) + switch (current_drive->audio_state) { case audio_playing: if(st_busy==0) { /* CD has stopped playing audio --AJK */ - D_S[d].audio_state=audio_completed; + current_drive->audio_state=audio_completed; SC.cdsc_audiostatus=CDROM_AUDIO_COMPLETED; } else { SC.cdsc_audiostatus=CDROM_AUDIO_PLAY; @@ -4749,23 +4749,23 @@ static int sbpcd_audio_ioctl(struct cdrom_device_info *cdi, u_int cmd, SC.cdsc_audiostatus=CDROM_AUDIO_NO_STATUS; break; } - SC.cdsc_adr=D_S[d].SubQ_ctl_adr; - SC.cdsc_ctrl=D_S[d].SubQ_ctl_adr>>4; - SC.cdsc_trk=bcd2bin(D_S[d].SubQ_trk); - SC.cdsc_ind=bcd2bin(D_S[d].SubQ_pnt_idx); + SC.cdsc_adr=current_drive->SubQ_ctl_adr; + SC.cdsc_ctrl=current_drive->SubQ_ctl_adr>>4; + SC.cdsc_trk=bcd2bin(current_drive->SubQ_trk); + SC.cdsc_ind=bcd2bin(current_drive->SubQ_pnt_idx); if (SC.cdsc_format==CDROM_LBA) { - SC.cdsc_absaddr.lba=msf2blk(D_S[d].SubQ_run_tot); - SC.cdsc_reladdr.lba=msf2blk(D_S[d].SubQ_run_trk); + SC.cdsc_absaddr.lba=msf2blk(current_drive->SubQ_run_tot); + SC.cdsc_reladdr.lba=msf2blk(current_drive->SubQ_run_trk); } else /* not only if (SC.cdsc_format==CDROM_MSF) */ { - SC.cdsc_absaddr.msf.minute=(D_S[d].SubQ_run_tot>>16)&0x00FF; - SC.cdsc_absaddr.msf.second=(D_S[d].SubQ_run_tot>>8)&0x00FF; - SC.cdsc_absaddr.msf.frame=D_S[d].SubQ_run_tot&0x00FF; - SC.cdsc_reladdr.msf.minute=(D_S[d].SubQ_run_trk>>16)&0x00FF; - SC.cdsc_reladdr.msf.second=(D_S[d].SubQ_run_trk>>8)&0x00FF; - SC.cdsc_reladdr.msf.frame=D_S[d].SubQ_run_trk&0x00FF; + SC.cdsc_absaddr.msf.minute=(current_drive->SubQ_run_tot>>16)&0x00FF; + SC.cdsc_absaddr.msf.second=(current_drive->SubQ_run_tot>>8)&0x00FF; + SC.cdsc_absaddr.msf.frame=current_drive->SubQ_run_tot&0x00FF; + SC.cdsc_reladdr.msf.minute=(current_drive->SubQ_run_trk>>16)&0x00FF; + SC.cdsc_reladdr.msf.second=(current_drive->SubQ_run_trk>>8)&0x00FF; + SC.cdsc_reladdr.msf.frame=current_drive->SubQ_run_trk&0x00FF; } memcpy((void *) arg, &SC, sizeof(struct cdrom_subchnl)); msg(DBG_IOS,"CDROMSUBCHNL: %1X %02X %08X %08X %02X %02X %06X %06X\n", @@ -4789,11 +4789,11 @@ static void sbp_transfer(struct request *req) long offs; while ( (req->nr_sectors > 0) && - (req->sector/4 >= D_S[d].sbp_first_frame) && - (req->sector/4 <= D_S[d].sbp_last_frame) ) + (req->sector/4 >= current_drive->sbp_first_frame) && + (req->sector/4 <= current_drive->sbp_last_frame) ) { - offs = (req->sector - D_S[d].sbp_first_frame * 4) * 512; - memcpy(req->buffer, D_S[d].sbp_buf + offs, 512); + offs = (req->sector - current_drive->sbp_first_frame * 4) * 512; + memcpy(req->buffer, current_drive->sbp_buf + offs, 512); req->nr_sectors--; req->sector++; req->buffer += 512; @@ -4942,7 +4942,7 @@ static void do_sbpcd_request(request_queue_t * q) if (sbp_data(req) != 0) { #if SAFE_MIXED - D_S[d].has_data=2; /* is really a data disk */ + current_drive->has_data=2; /* is really a data disk */ #endif /* SAFE_MIXED */ #ifdef DEBUG_GTL printk(" do_sbpcd_request[%do](%p:%ld+%ld) end 3, Time:%li\n", @@ -4980,20 +4980,20 @@ static void sbp_read_cmd(struct request *req) int i; int block; - D_S[d].sbp_first_frame=D_S[d].sbp_last_frame=-1; /* purge buffer */ - D_S[d].sbp_current = 0; + current_drive->sbp_first_frame=current_drive->sbp_last_frame=-1; /* purge buffer */ + current_drive->sbp_current = 0; block=req->sector/4; - if (block+D_S[d].sbp_bufsiz <= D_S[d].CDsize_frm) - D_S[d].sbp_read_frames = D_S[d].sbp_bufsiz; + if (block+current_drive->sbp_bufsiz <= current_drive->CDsize_frm) + current_drive->sbp_read_frames = current_drive->sbp_bufsiz; else { - D_S[d].sbp_read_frames=D_S[d].CDsize_frm-block; + current_drive->sbp_read_frames=current_drive->CDsize_frm-block; /* avoid reading past end of data */ - if (D_S[d].sbp_read_frames < 1) + if (current_drive->sbp_read_frames < 1) { msg(DBG_INF,"requested frame %d, CD size %d ???\n", - block, D_S[d].CDsize_frm); - D_S[d].sbp_read_frames=1; + block, current_drive->CDsize_frm); + current_drive->sbp_read_frames=1; } } @@ -5006,27 +5006,27 @@ static void sbp_read_cmd(struct request *req) bin2bcdx(&drvcmd[1]); bin2bcdx(&drvcmd[2]); bin2bcdx(&drvcmd[3]); - drvcmd[4]=D_S[d].sbp_read_frames>>8; - drvcmd[5]=D_S[d].sbp_read_frames&0xff; + drvcmd[4]=current_drive->sbp_read_frames>>8; + drvcmd[5]=current_drive->sbp_read_frames&0xff; drvcmd[6]=0x02; /* flag "msf-bcd" */ } else if (fam0L_drive) { flags_cmd_out |= f_lopsta | f_getsta | f_bit1; - if (D_S[d].xa_byte==0x20) + if (current_drive->xa_byte==0x20) { cmd_type=READ_M2; drvcmd[0]=CMD0_READ_XA; /* "read XA frames", old drives */ drvcmd[1]=(block>>16)&0x0ff; drvcmd[2]=(block>>8)&0x0ff; drvcmd[3]=block&0x0ff; - drvcmd[4]=(D_S[d].sbp_read_frames>>8)&0x0ff; - drvcmd[5]=D_S[d].sbp_read_frames&0x0ff; + drvcmd[4]=(current_drive->sbp_read_frames>>8)&0x0ff; + drvcmd[5]=current_drive->sbp_read_frames&0x0ff; } else { drvcmd[0]=CMD0_READ; /* "read frames", old drives */ - if (D_S[d].drv_type>=drv_201) + if (current_drive->drv_type>=drv_201) { lba2msf(block,&drvcmd[1]); /* msf-bcd format required */ bin2bcdx(&drvcmd[1]); @@ -5039,24 +5039,24 @@ static void sbp_read_cmd(struct request *req) drvcmd[2]=(block>>8)&0x0ff; drvcmd[3]=block&0x0ff; } - drvcmd[4]=(D_S[d].sbp_read_frames>>8)&0x0ff; - drvcmd[5]=D_S[d].sbp_read_frames&0x0ff; - drvcmd[6]=(D_S[d].drv_type<drv_201)?0:2; /* flag "lba or msf-bcd format" */ + drvcmd[4]=(current_drive->sbp_read_frames>>8)&0x0ff; + drvcmd[5]=current_drive->sbp_read_frames&0x0ff; + drvcmd[6]=(current_drive->drv_type<drv_201)?0:2; /* flag "lba or msf-bcd format" */ } } else if (fam1_drive) { drvcmd[0]=CMD1_READ; lba2msf(block,&drvcmd[1]); /* msf-bin format required */ - drvcmd[5]=(D_S[d].sbp_read_frames>>8)&0x0ff; - drvcmd[6]=D_S[d].sbp_read_frames&0x0ff; + drvcmd[5]=(current_drive->sbp_read_frames>>8)&0x0ff; + drvcmd[6]=current_drive->sbp_read_frames&0x0ff; } else if (fam2_drive) { drvcmd[0]=CMD2_READ; lba2msf(block,&drvcmd[1]); /* msf-bin format required */ - drvcmd[4]=(D_S[d].sbp_read_frames>>8)&0x0ff; - drvcmd[5]=D_S[d].sbp_read_frames&0x0ff; + drvcmd[4]=(current_drive->sbp_read_frames>>8)&0x0ff; + drvcmd[5]=current_drive->sbp_read_frames&0x0ff; drvcmd[6]=0x02; } else if (famT_drive) @@ -5066,8 +5066,8 @@ static void sbp_read_cmd(struct request *req) drvcmd[3]=(block>>16)&0x0ff; drvcmd[4]=(block>>8)&0x0ff; drvcmd[5]=block&0x0ff; - drvcmd[7]=(D_S[d].sbp_read_frames>>8)&0x0ff; - drvcmd[8]=D_S[d].sbp_read_frames&0x0ff; + drvcmd[7]=(current_drive->sbp_read_frames>>8)&0x0ff; + drvcmd[8]=current_drive->sbp_read_frames&0x0ff; } flags_cmd_out=f_putcmd; response_count=0; @@ -5078,7 +5078,7 @@ static void sbp_read_cmd(struct request *req) /*==========================================================================*/ /* * Check the completion of the read-data command. On success, read - * the D_S[d].sbp_bufsiz * 2048 bytes of data from the disk into buffer. + * the current_drive->sbp_bufsiz * 2048 bytes of data from the disk into buffer. */ static int sbp_data(struct request *req) { @@ -5101,11 +5101,11 @@ static int sbp_data(struct request *req) #if LONG_TIMING max_latency=9*HZ; #else - if (D_S[d].f_multisession) max_latency=15*HZ; + if (current_drive->f_multisession) max_latency=15*HZ; else max_latency=5*HZ; #endif duration=jiffies; - for (frame=0;frame<D_S[d].sbp_read_frames&&!error_flag; frame++) + for (frame=0;frame<current_drive->sbp_read_frames&&!error_flag; frame++) { SBPCD_CLI; @@ -5115,7 +5115,7 @@ static int sbp_data(struct request *req) add_timer(&data_timer); while (!timed_out_data) { - if (D_S[d].f_multisession) try=maxtim_data*4; + if (current_drive->f_multisession) try=maxtim_data*4; else try=maxtim_data; msg(DBG_000,"sbp_data: CDi_status loop: try=%d.\n",try); for ( ; try!=0;try--) @@ -5158,7 +5158,7 @@ static int sbp_data(struct request *req) } if (j&s_not_data_ready) { - if ((D_S[d].ored_ctl_adr&0x40)==0) + if ((current_drive->ored_ctl_adr&0x40)==0) msg(DBG_INF, "CD contains no data tracks.\n"); else msg(DBG_INF, "sbp_data: DATA_READY timeout (%02X).\n", j); error_flag++; @@ -5167,7 +5167,7 @@ static int sbp_data(struct request *req) if (error_flag) break; msg(DBG_000, "sbp_data: beginning to read.\n"); - p = D_S[d].sbp_buf + frame * CD_FRAMESIZE; + p = current_drive->sbp_buf + frame * CD_FRAMESIZE; if (sbpro_type==1) OUT(CDo_sel_i_d,1); if (cmd_type==READ_M2) { if (do_16bit) insw(CDi_data, xa_head_buf, CD_XA_HEAD>>1); @@ -5179,7 +5179,7 @@ static int sbp_data(struct request *req) if (do_16bit) insw(CDi_data, xa_tail_buf, CD_XA_TAIL>>1); else insb(CDi_data, xa_tail_buf, CD_XA_TAIL); } - D_S[d].sbp_current++; + current_drive->sbp_current++; if (sbpro_type==1) OUT(CDo_sel_i_d,0); if (cmd_type==READ_M2) { @@ -5258,9 +5258,9 @@ static int sbp_data(struct request *req) sbp_sleep(1); } while (j<0); - D_S[d].error_state=infobuf[2]; - D_S[d].b3=infobuf[3]; - D_S[d].b4=infobuf[4]; + current_drive->error_state=infobuf[2]; + current_drive->b3=infobuf[3]; + current_drive->b4=infobuf[4]; } break; } @@ -5330,7 +5330,7 @@ static int sbp_data(struct request *req) #endif if (i<0) { - msg(DBG_INF,"bad cc_ReadStatus after read: %02X\n", D_S[d].status_bits); + msg(DBG_INF,"bad cc_ReadStatus after read: %02X\n", current_drive->status_bits); return (0); } } @@ -5344,14 +5344,14 @@ static int sbp_data(struct request *req) if (fatal_err) { fatal_err=0; - D_S[d].sbp_first_frame=D_S[d].sbp_last_frame=-1; /* purge buffer */ - D_S[d].sbp_current = 0; + current_drive->sbp_first_frame=current_drive->sbp_last_frame=-1; /* purge buffer */ + current_drive->sbp_current = 0; msg(DBG_INF,"sbp_data: fatal_err - retrying.\n"); return (0); } - D_S[d].sbp_first_frame = req -> sector / 4; - D_S[d].sbp_last_frame = D_S[d].sbp_first_frame + D_S[d].sbp_read_frames - 1; + current_drive->sbp_first_frame = req -> sector / 4; + current_drive->sbp_last_frame = current_drive->sbp_first_frame + current_drive->sbp_read_frames - 1; sbp_transfer(req); return (1); } @@ -5382,23 +5382,23 @@ static int sbpcd_open(struct cdrom_device_info *cdi, int purpose) * try to keep an "open" counter here and lock the door if 0->1. */ msg(DBG_LCK,"open_count: %d -> %d\n", - D_S[d].open_count,D_S[d].open_count+1); - if (++D_S[d].open_count<=1) + current_drive->open_count,current_drive->open_count+1); + if (++current_drive->open_count<=1) { i=LockDoor(); - D_S[d].open_count=1; + current_drive->open_count=1; if (famT_drive) msg(DBG_TEA,"sbpcd_open: before i=DiskInfo();.\n"); i=DiskInfo(); if (famT_drive) msg(DBG_TEA,"sbpcd_open: after i=DiskInfo();.\n"); - if ((D_S[d].ored_ctl_adr&0x40)==0) + if ((current_drive->ored_ctl_adr&0x40)==0) { msg(DBG_INF,"CD contains no data tracks.\n"); #if SAFE_MIXED - D_S[d].has_data=0; + current_drive->has_data=0; #endif /* SAFE_MIXED */ } #if SAFE_MIXED - else if (D_S[d].has_data<1) D_S[d].has_data=1; + else if (current_drive->has_data<1) current_drive->has_data=1; #endif /* SAFE_MIXED */ } if (!st_spinning) cc_SpinUp(); @@ -5424,18 +5424,18 @@ static void sbpcd_release(struct cdrom_device_info * cdi) * try to keep an "open" counter here and unlock the door if 1->0. */ msg(DBG_LCK,"open_count: %d -> %d\n", - D_S[d].open_count,D_S[d].open_count-1); - if (D_S[d].open_count>-2) /* CDROMEJECT may have been done */ + current_drive->open_count,current_drive->open_count-1); + if (current_drive->open_count>-2) /* CDROMEJECT may have been done */ { - if (--D_S[d].open_count<=0) + if (--current_drive->open_count<=0) { - D_S[d].sbp_first_frame=D_S[d].sbp_last_frame=-1; - if (D_S[d].audio_state!=audio_playing) - if (D_S[d].f_eject) cc_SpinDown(); - D_S[d].diskstate_flags &= ~cd_size_bit; - D_S[d].open_count=0; + current_drive->sbp_first_frame=current_drive->sbp_last_frame=-1; + if (current_drive->audio_state!=audio_playing) + if (current_drive->f_eject) cc_SpinDown(); + current_drive->diskstate_flags &= ~cd_size_bit; + current_drive->open_count=0; #if SAFE_MIXED - D_S[d].has_data=0; + current_drive->has_data=0; #endif /* SAFE_MIXED */ } } @@ -5907,10 +5907,10 @@ static int sbpcd_chk_disk_change(kdev_t full_dev) msg(DBG_CHK,"medium changed (drive %d)\n", i); /* BUG! Should invalidate buffers! --AJK */ /* Why should it do the above at all?! --mdcki */ - D_S[d].diskstate_flags &= ~toc_bit; - D_S[d].diskstate_flags &= ~cd_size_bit; + current_drive->diskstate_flags &= ~toc_bit; + current_drive->diskstate_flags &= ~cd_size_bit; #if SAFE_MIXED - D_S[d].has_data=0; + current_drive->has_data=0; #endif /* SAFE_MIXED */ return (1); diff --git a/drivers/cdrom/sbpcd.h b/drivers/cdrom/sbpcd.h index 74255554611d..16a0208a2598 100644 --- a/drivers/cdrom/sbpcd.h +++ b/drivers/cdrom/sbpcd.h @@ -242,12 +242,12 @@ /* * disk states (bits of diskstate_flags): */ -#define upc_valid (D_S[d].diskstate_flags&upc_bit) -#define volume_valid (D_S[d].diskstate_flags&volume_bit) -#define toc_valid (D_S[d].diskstate_flags&toc_bit) -#define cd_size_valid (D_S[d].diskstate_flags&cd_size_bit) -#define subq_valid (D_S[d].diskstate_flags&subq_bit) -#define frame_size_valid (D_S[d].diskstate_flags&frame_size_bit) +#define upc_valid (current_drive->diskstate_flags&upc_bit) +#define volume_valid (current_drive->diskstate_flags&volume_bit) +#define toc_valid (current_drive->diskstate_flags&toc_bit) +#define cd_size_valid (current_drive->diskstate_flags&cd_size_bit) +#define subq_valid (current_drive->diskstate_flags&subq_bit) +#define frame_size_valid (current_drive->diskstate_flags&frame_size_bit) /* * the status_bits variable @@ -324,13 +324,13 @@ /* * used drive states: */ -#define st_door_closed (D_S[d].status_bits&p_door_closed) -#define st_caddy_in (D_S[d].status_bits&p_caddy_in) -#define st_spinning (D_S[d].status_bits&p_spinning) -#define st_check (D_S[d].status_bits&p_check) -#define st_busy (D_S[d].status_bits&p_busy_new) -#define st_door_locked (D_S[d].status_bits&p_door_locked) -#define st_diskok (D_S[d].status_bits&p_disk_ok) +#define st_door_closed (current_drive->status_bits&p_door_closed) +#define st_caddy_in (current_drive->status_bits&p_caddy_in) +#define st_spinning (current_drive->status_bits&p_spinning) +#define st_check (current_drive->status_bits&p_check) +#define st_busy (current_drive->status_bits&p_busy_new) +#define st_door_locked (current_drive->status_bits&p_door_locked) +#define st_diskok (current_drive->status_bits&p_disk_ok) /* * bits of the CDi_status register: @@ -372,22 +372,22 @@ #define drv_famV 0x2000 /* ECS-AT (vertos-100) family */ #define drv_at (drv_famV+0x01) /* ECS-AT, firmware "1.00" */ -#define fam0_drive (D_S[d].drv_type&drv_fam0) -#define famL_drive (D_S[d].drv_type&drv_famL) -#define famV_drive (D_S[d].drv_type&drv_famV) -#define fam1_drive (D_S[d].drv_type&drv_fam1) -#define fam2_drive (D_S[d].drv_type&drv_fam2) -#define famT_drive (D_S[d].drv_type&drv_famT) -#define fam0L_drive (D_S[d].drv_type&(drv_fam0|drv_famL)) -#define fam0V_drive (D_S[d].drv_type&(drv_fam0|drv_famV)) -#define famLV_drive (D_S[d].drv_type&(drv_famL|drv_famV)) -#define fam0LV_drive (D_S[d].drv_type&(drv_fam0|drv_famL|drv_famV)) -#define fam1L_drive (D_S[d].drv_type&(drv_fam1|drv_famL)) -#define fam1V_drive (D_S[d].drv_type&(drv_fam1|drv_famV)) -#define fam1LV_drive (D_S[d].drv_type&(drv_fam1|drv_famL|drv_famV)) -#define fam01_drive (D_S[d].drv_type&(drv_fam0|drv_fam1)) -#define fam12_drive (D_S[d].drv_type&(drv_fam1|drv_fam2)) -#define fam2T_drive (D_S[d].drv_type&(drv_fam2|drv_famT)) +#define fam0_drive (current_drive->drv_type&drv_fam0) +#define famL_drive (current_drive->drv_type&drv_famL) +#define famV_drive (current_drive->drv_type&drv_famV) +#define fam1_drive (current_drive->drv_type&drv_fam1) +#define fam2_drive (current_drive->drv_type&drv_fam2) +#define famT_drive (current_drive->drv_type&drv_famT) +#define fam0L_drive (current_drive->drv_type&(drv_fam0|drv_famL)) +#define fam0V_drive (current_drive->drv_type&(drv_fam0|drv_famV)) +#define famLV_drive (current_drive->drv_type&(drv_famL|drv_famV)) +#define fam0LV_drive (current_drive->drv_type&(drv_fam0|drv_famL|drv_famV)) +#define fam1L_drive (current_drive->drv_type&(drv_fam1|drv_famL)) +#define fam1V_drive (current_drive->drv_type&(drv_fam1|drv_famV)) +#define fam1LV_drive (current_drive->drv_type&(drv_fam1|drv_famL|drv_famV)) +#define fam01_drive (current_drive->drv_type&(drv_fam0|drv_fam1)) +#define fam12_drive (current_drive->drv_type&(drv_fam1|drv_fam2)) +#define fam2T_drive (current_drive->drv_type&(drv_fam2|drv_famT)) /* * audio states: |
