From: Ken Pizzini (ken@halcyon.com)
Date: 04/22/93


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;