From: ken@halcyon.com (Ken Pizzini) Subject: Re: HELP: Sony CDU-531 info req. Date: 22 Apr 1993 17:26:38 -0700
In article <1r77iu$66g@nwfocus.wa.com> I wrote:
>Ron Jeppesen (ronj.an@site007.saic.com) has made a driver for the Sony
>CDU-535, which is compatible with the Sony CDU-531, based on Corey
>Minyard's Sony CDU-31A driver. Look for sony535-0.1.tar.Z
>in /pub/Linux/kernel/cdrom on sunsite.unc.edu. I have one of those
>DAK drives you mention, and am quite happy with Ron's handiwork.
A post script: The sony525-0.1 release was for Linux 0.99p4 (which
should also work with p5); enclosed are the diffs for 0.99p8 (which
probably also work with p6 and p7).
--Ken Pizzini
*** kernel/blk_drv/sonycd535.c-orig Thu Feb 25 23:23:56 1993
--- kernel/blk_drv/sonycd535.c Mon Apr 12 22:46:39 1993
***************
*** 231,237 ****
* setting a timeout doesn't work, so just loop for a while.
*/
static inline void
! sony_sleep()
{
if (initialized) /* Reschedule if called from a task */
{
--- 231,237 ----
* setting a timeout doesn't work, so just loop for a while.
*/
static inline void
! sony_sleep(void)
{
if (initialized) /* Reschedule if called from a task */
{
***************
*** 922,928 ****
return -EIO;
}
! verify_area((char *) arg, sizeof(schi));
memcpy_fromfs(&schi, (char *) arg, sizeof(schi));
--- 922,928 ----
return -EIO;
}
! verify_area(VERIFY_WRITE /* and read */, (char *) arg, sizeof(schi));
memcpy_fromfs(&schi, (char *) arg, sizeof(schi));
***************
*** 1089,1095 ****
break;
case CDROMPLAYMSF: /* Play starting at the given MSF address. */
! verify_area((char *) arg, 6);
spin_up_drive( status );
set_drive_mode( SONY535_AUDIO_DRIVE_MODE, status );
memcpy_fromfs(params, (void *) arg, 6);
--- 1089,1095 ----
break;
case CDROMPLAYMSF: /* Play starting at the given MSF address. */
! verify_area(VERIFY_READ, (char *) arg, 6);
spin_up_drive( status );
set_drive_mode( SONY535_AUDIO_DRIVE_MODE, status );
memcpy_fromfs(params, (void *) arg, 6);
***************
*** 1133,1139 ****
}
hdr = (struct cdrom_tochdr *) arg;
! verify_area(hdr, sizeof(*hdr));
loc_hdr.cdth_trk0 = bcd_to_int(sony_toc->first_track_num);
loc_hdr.cdth_trk1 = bcd_to_int(sony_toc->last_track_num);
memcpy_tofs(hdr, &loc_hdr, sizeof(*hdr));
--- 1133,1139 ----
}
hdr = (struct cdrom_tochdr *) arg;
! verify_area(VERIFY_WRITE, hdr, sizeof(*hdr));
loc_hdr.cdth_trk0 = bcd_to_int(sony_toc->first_track_num);
loc_hdr.cdth_trk1 = bcd_to_int(sony_toc->last_track_num);
memcpy_tofs(hdr, &loc_hdr, sizeof(*hdr));
***************
*** 1155,1161 ****
}
entry = (struct cdrom_tocentry *) arg;
! verify_area(entry, sizeof(*entry));
memcpy_fromfs(&loc_entry, entry, sizeof(loc_entry));
--- 1155,1161 ----
}
entry = (struct cdrom_tocentry *) arg;
! verify_area(VERIFY_WRITE /* and read */, entry, sizeof(*entry));
memcpy_fromfs(&loc_entry, entry, sizeof(loc_entry));
***************
*** 1206,1212 ****
return -EIO;
}
! verify_area((char *) arg, sizeof(ti));
memcpy_fromfs(&ti, (char *) arg, sizeof(ti));
if ( (ti.cdti_trk0 < sony_toc->first_track_num)
--- 1206,1212 ----
return -EIO;
}
! verify_area(VERIFY_READ, (char *) arg, sizeof(ti));
memcpy_fromfs(&ti, (char *) arg, sizeof(ti));
if ( (ti.cdti_trk0 < sony_toc->first_track_num)
***************
*** 1284,1290 ****
{
struct cdrom_volctrl volctrl;
! verify_area((char *) arg, sizeof(volctrl));
memcpy_fromfs(&volctrl, (char *) arg, sizeof(volctrl));
cmd_buff[0] = SONY535_SET_VOLUME;
--- 1284,1290 ----
{
struct cdrom_volctrl volctrl;
! verify_area(VERIFY_READ, (char *) arg, sizeof(volctrl));
memcpy_fromfs(&volctrl, (char *) arg, sizeof(volctrl));
cmd_buff[0] = SONY535_SET_VOLUME;
***************
*** 1504,1511 ****
drive_config.product_rev_level );
printk(" using %d byte buffer\n", sony_buffer_size);
blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST;
- blkdev_fops[MAJOR_NR] = &scd_fops;
read_ahead[MAJOR_NR] = 8; /* 8 sector (4kB) read-ahead */
sony_toc = (struct s535_sony_toc *) mem_start;
--- 1504,1514 ----
drive_config.product_rev_level );
printk(" using %d byte buffer\n", sony_buffer_size);
+ if (register_blkdev(MAJOR_NR,"scd",&scd_fops)) {
+ printk("Unable to get major %d for sony cd\n",MAJOR_NR);
+ return;
+ }
blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST;
read_ahead[MAJOR_NR] = 8; /* 8 sector (4kB) read-ahead */
sony_toc = (struct s535_sony_toc *) mem_start;