patch-2_6_7-vs1_9_1_12
[linux-2.6.git] / drivers / cdrom / cdrom.c
index 1f65c1e..d82006c 100644 (file)
@@ -318,11 +318,11 @@ static const char *mrw_address_space[] = { "DMA", "GAA" };
 
 /* These are used to simplify getting data in from and back to user land */
 #define IOCTL_IN(arg, type, in)                                        \
-       if (copy_from_user(&(in), (type *) (arg), sizeof (in))) \
+       if (copy_from_user(&(in), (type __user *) (arg), sizeof (in)))  \
                return -EFAULT;
 
 #define IOCTL_OUT(arg, type, out) \
-       if (copy_to_user((type *) (arg), &(out), sizeof (out))) \
+       if (copy_to_user((type __user *) (arg), &(out), sizeof (out)))  \
                return -EFAULT;
 
 /* The (cdo->capability & ~cdi->mask & CDC_XXX) construct was used in
@@ -455,7 +455,7 @@ int unregister_cdrom(struct cdrom_device_info *unreg)
 int cdrom_get_media_event(struct cdrom_device_info *cdi,
                          struct media_event_desc *med)
 {
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
        unsigned char buffer[8];
        struct event_header *eh = (struct event_header *) buffer;
 
@@ -482,7 +482,7 @@ int cdrom_get_media_event(struct cdrom_device_info *cdi,
  */
 int cdrom_mrw_probe_pc(struct cdrom_device_info *cdi)
 {
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
        char buffer[16];
 
        init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_READ);
@@ -503,7 +503,7 @@ int cdrom_mrw_probe_pc(struct cdrom_device_info *cdi)
 
 int cdrom_is_mrw(struct cdrom_device_info *cdi, int *write)
 {
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
        struct mrw_feature_desc *mfd;
        unsigned char buffer[16];
        int ret;
@@ -529,7 +529,7 @@ int cdrom_is_mrw(struct cdrom_device_info *cdi, int *write)
 
 static int cdrom_mrw_bgformat(struct cdrom_device_info *cdi, int cont)
 {
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
        unsigned char buffer[12];
        int ret;
 
@@ -570,7 +570,7 @@ static int cdrom_mrw_bgformat(struct cdrom_device_info *cdi, int cont)
 
 static int cdrom_mrw_bgformat_susp(struct cdrom_device_info *cdi, int immed)
 {
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
 
        init_cdrom_command(&cgc, NULL, 0, CGC_DATA_NONE);
        cgc.cmd[0] = GPCMD_CLOSE_TRACK;
@@ -588,7 +588,7 @@ static int cdrom_mrw_bgformat_susp(struct cdrom_device_info *cdi, int immed)
 
 static int cdrom_flush_cache(struct cdrom_device_info *cdi)
 {
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
 
        init_cdrom_command(&cgc, NULL, 0, CGC_DATA_NONE);
        cgc.cmd[0] = GPCMD_FLUSH_CACHE;
@@ -619,7 +619,7 @@ static int cdrom_mrw_exit(struct cdrom_device_info *cdi)
 
 static int cdrom_mrw_set_lba_space(struct cdrom_device_info *cdi, int space)
 {
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
        struct mode_page_header *mph;
        char buffer[16];
        int ret, offset, size;
@@ -649,9 +649,8 @@ static int cdrom_mrw_set_lba_space(struct cdrom_device_info *cdi, int space)
 int cdrom_get_random_writable(struct cdrom_device_info *cdi,
                              struct rwrt_feature_desc *rfd)
 {
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
        char buffer[24];
-       struct feature_header *fh;
        int ret;
 
        init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_READ);
@@ -664,43 +663,32 @@ int cdrom_get_random_writable(struct cdrom_device_info *cdi,
        if ((ret = cdi->ops->generic_packet(cdi, &cgc)))
                return ret;
 
-       fh = (struct feature_header *)&buffer[0];
-       if (be32_to_cpu(fh->data_len) >= (sizeof(struct feature_header)+
-                                         sizeof(struct rwrt_feature_desc)))
-               memcpy(rfd, &buffer[sizeof(struct feature_header)],
-                      sizeof (*rfd));
-       else
-               memset(rfd, 0, sizeof(*rfd));
-
+       memcpy(rfd, &buffer[sizeof(struct feature_header)], sizeof (*rfd));
        return 0;
 }
 
 int cdrom_has_defect_mgt(struct cdrom_device_info *cdi)
 {
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
        char buffer[16];
-       struct feature_header *fh;
        __u16 *feature_code;
        int ret;
 
        init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_READ);
 
-       cgc.cmd[0] = GPCMD_GET_CONFIGURATION;   /* often 0x46 */
-       cgc.cmd[3] = CDF_HWDM;                  /* often 0x0024 */
-       cgc.cmd[8] = sizeof(buffer);            /* often 0x10 */
+       cgc.cmd[0] = GPCMD_GET_CONFIGURATION;
+       cgc.cmd[3] = CDF_HWDM;
+       cgc.cmd[8] = sizeof(buffer);
        cgc.quiet = 1;
 
        if ((ret = cdi->ops->generic_packet(cdi, &cgc)))
                return ret;
 
-       fh = (struct feature_header *)&buffer[0];
-       ret = 1;
-       if (be32_to_cpu(fh->data_len) >= (sizeof(struct feature_header)+8)) {
-               feature_code = (__u16 *)&buffer[sizeof(struct feature_header)];
-               if (CDF_HWDM == be16_to_cpu(*feature_code))
-                       ret = 0;
-       }
-       return ret;
+       feature_code = (__u16 *) &buffer[sizeof(struct feature_header)];
+       if (be16_to_cpu(*feature_code) == CDF_HWDM)
+               return 0;
+
+       return 1;
 }
 
 
@@ -785,7 +773,7 @@ static int cdrom_mrw_open_write(struct cdrom_device_info *cdi)
 
 static int mo_open_write(struct cdrom_device_info *cdi)
 {
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
        char buffer[255];
        int ret;
 
@@ -1102,7 +1090,7 @@ int cdrom_release(struct cdrom_device_info *cdi, struct file *fp)
 static int cdrom_read_mech_status(struct cdrom_device_info *cdi, 
                                  struct cdrom_changer_info *buf)
 {
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
        struct cdrom_device_ops *cdo = cdi->ops;
        int length;
 
@@ -1185,7 +1173,7 @@ int cdrom_number_of_slots(struct cdrom_device_info *cdi)
 /* If SLOT < 0, unload the current slot.  Otherwise, try to load SLOT. */
 static int cdrom_load_unload(struct cdrom_device_info *cdi, int slot) 
 {
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
 
        cdinfo(CD_CHANGER, "entering cdrom_load_unload()\n"); 
        if (cdi->sanyo_slot && slot < 0)
@@ -1384,10 +1372,10 @@ void sanitize_format(union cdrom_addr *addr,
        *curr = requested;
 }
 
-void init_cdrom_command(struct cdrom_generic_command *cgc, void *buf, int len,
+void init_cdrom_command(struct packet_command *cgc, void *buf, int len,
                        int type)
 {
-       memset(cgc, 0, sizeof(struct cdrom_generic_command));
+       memset(cgc, 0, sizeof(struct packet_command));
        if (buf)
                memset(buf, 0, len);
        cgc->buffer = (char *) buf;
@@ -1401,7 +1389,7 @@ void init_cdrom_command(struct cdrom_generic_command *cgc, void *buf, int len,
 #define copy_key(dest,src)     memcpy((dest), (src), sizeof(dvd_key))
 #define copy_chal(dest,src)    memcpy((dest), (src), sizeof(dvd_challenge))
 
-static void setup_report_key(struct cdrom_generic_command *cgc, unsigned agid, unsigned type)
+static void setup_report_key(struct packet_command *cgc, unsigned agid, unsigned type)
 {
        cgc->cmd[0] = GPCMD_REPORT_KEY;
        cgc->cmd[10] = type | (agid << 6);
@@ -1423,7 +1411,7 @@ static void setup_report_key(struct cdrom_generic_command *cgc, unsigned agid, u
        cgc->data_direction = CGC_DATA_READ;
 }
 
-static void setup_send_key(struct cdrom_generic_command *cgc, unsigned agid, unsigned type)
+static void setup_send_key(struct packet_command *cgc, unsigned agid, unsigned type)
 {
        cgc->cmd[0] = GPCMD_SEND_KEY;
        cgc->cmd[10] = type | (agid << 6);
@@ -1449,7 +1437,7 @@ static int dvd_do_auth(struct cdrom_device_info *cdi, dvd_authinfo *ai)
 {
        int ret;
        u_char buf[20];
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
        struct cdrom_device_ops *cdo = cdi->ops;
        rpc_state_t rpc_state;
 
@@ -1595,7 +1583,7 @@ static int dvd_read_physical(struct cdrom_device_info *cdi, dvd_struct *s)
 {
        unsigned char buf[21], *base;
        struct dvd_layer *layer;
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
        struct cdrom_device_ops *cdo = cdi->ops;
        int ret, layer_num = s->physical.layer_num;
 
@@ -1645,7 +1633,7 @@ static int dvd_read_copyright(struct cdrom_device_info *cdi, dvd_struct *s)
 {
        int ret;
        u_char buf[8];
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
        struct cdrom_device_ops *cdo = cdi->ops;
 
        init_cdrom_command(&cgc, buf, sizeof(buf), CGC_DATA_READ);
@@ -1668,7 +1656,7 @@ static int dvd_read_disckey(struct cdrom_device_info *cdi, dvd_struct *s)
 {
        int ret, size;
        u_char *buf;
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
        struct cdrom_device_ops *cdo = cdi->ops;
 
        size = sizeof(s->disckey.value) + 4;
@@ -1694,7 +1682,7 @@ static int dvd_read_bca(struct cdrom_device_info *cdi, dvd_struct *s)
 {
        int ret;
        u_char buf[4 + 188];
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
        struct cdrom_device_ops *cdo = cdi->ops;
 
        init_cdrom_command(&cgc, buf, sizeof(buf), CGC_DATA_READ);
@@ -1719,7 +1707,7 @@ static int dvd_read_manufact(struct cdrom_device_info *cdi, dvd_struct *s)
 {
        int ret = 0, size;
        u_char *buf;
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
        struct cdrom_device_ops *cdo = cdi->ops;
 
        size = sizeof(s->manufact.value) + 4;
@@ -1777,7 +1765,7 @@ static int dvd_read_struct(struct cdrom_device_info *cdi, dvd_struct *s)
 }
 
 int cdrom_mode_sense(struct cdrom_device_info *cdi,
-                    struct cdrom_generic_command *cgc,
+                    struct packet_command *cgc,
                     int page_code, int page_control)
 {
        struct cdrom_device_ops *cdo = cdi->ops;
@@ -1793,7 +1781,7 @@ int cdrom_mode_sense(struct cdrom_device_info *cdi,
 }
 
 int cdrom_mode_select(struct cdrom_device_info *cdi,
-                     struct cdrom_generic_command *cgc)
+                     struct packet_command *cgc)
 {
        struct cdrom_device_ops *cdo = cdi->ops;
 
@@ -1811,7 +1799,7 @@ static int cdrom_read_subchannel(struct cdrom_device_info *cdi,
                                 struct cdrom_subchnl *subchnl, int mcn)
 {
        struct cdrom_device_ops *cdo = cdi->ops;
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
        char buffer[32];
        int ret;
 
@@ -1845,7 +1833,7 @@ static int cdrom_read_subchannel(struct cdrom_device_info *cdi,
  * Specific READ_10 interface
  */
 static int cdrom_read_cd(struct cdrom_device_info *cdi,
-                        struct cdrom_generic_command *cgc, int lba,
+                        struct packet_command *cgc, int lba,
                         int blocksize, int nblocks)
 {
        struct cdrom_device_ops *cdo = cdi->ops;
@@ -1865,7 +1853,7 @@ static int cdrom_read_cd(struct cdrom_device_info *cdi,
 
 /* very generic interface for reading the various types of blocks */
 static int cdrom_read_block(struct cdrom_device_info *cdi,
-                           struct cdrom_generic_command *cgc,
+                           struct packet_command *cgc,
                            int lba, int nblocks, int format, int blksize)
 {
        struct cdrom_device_ops *cdo = cdi->ops;
@@ -1899,7 +1887,7 @@ static int cdrom_read_block(struct cdrom_device_info *cdi,
 static int cdrom_read_cdda_old(struct cdrom_device_info *cdi, __u8 __user *ubuf,
                               int lba, int nframes)
 {
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
        int nr, ret;
 
        memset(&cgc, 0, sizeof(cgc));
@@ -2052,7 +2040,7 @@ int cdrom_ioctl(struct cdrom_device_info *cdi, struct inode *ip,
        int ret;
 
        /* Try the generic SCSI command ioctl's first.. */
-       ret = scsi_cmd_ioctl(ip->i_bdev->bd_disk, cmd, arg);
+       ret = scsi_cmd_ioctl(ip->i_bdev->bd_disk, cmd, (void __user *)arg);
        if (ret != -ENOTTY)
                return ret;
 
@@ -2446,7 +2434,7 @@ int msf_to_lba(char m, char s, char f)
 static int cdrom_switch_blocksize(struct cdrom_device_info *cdi, int size)
 {
        struct cdrom_device_ops *cdo = cdi->ops;
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
        struct modesel_head mh;
 
        memset(&mh, 0, sizeof(mh));
@@ -2472,7 +2460,7 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
                     unsigned long arg)
 {              
        struct cdrom_device_ops *cdo = cdi->ops;
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
        struct request_sense sense;
        char buffer[32];
        int ret = 0;
@@ -2526,7 +2514,7 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
                        ret = cdrom_read_cd(cdi, &cgc, lba, blocksize, 1);
                        ret |= cdrom_switch_blocksize(cdi, blocksize);
                }
-               if (!ret && copy_to_user((char *)arg, cgc.buffer, blocksize))
+               if (!ret && copy_to_user((char __user *)arg, cgc.buffer, blocksize))
                        ret = -EFAULT;
                kfree(cgc.buffer);
                return ret;
@@ -2678,7 +2666,7 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
                if ((s = (dvd_struct *) kmalloc(size, GFP_KERNEL)) == NULL)
                        return -ENOMEM;
                cdinfo(CD_DO_IOCTL, "entering DVD_READ_STRUCT\n"); 
-               if (copy_from_user(s, (dvd_struct *)arg, size)) {
+               if (copy_from_user(s, (dvd_struct __user *)arg, size)) {
                        kfree(s);
                        return -EFAULT;
                }
@@ -2686,7 +2674,7 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
                        kfree(s);
                        return ret;
                }
-               if (copy_to_user((dvd_struct *)arg, s, size))
+               if (copy_to_user((dvd_struct __user *)arg, s, size))
                        ret = -EFAULT;
                kfree(s);
                return ret;
@@ -2729,7 +2717,7 @@ static int cdrom_get_track_info(struct cdrom_device_info *cdi, __u16 track, __u8
                         track_information *ti)
 {
        struct cdrom_device_ops *cdo = cdi->ops;
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
        int ret;
 
        init_cdrom_command(&cgc, ti, 8, CGC_DATA_READ);
@@ -2757,7 +2745,7 @@ static int cdrom_get_track_info(struct cdrom_device_info *cdi, __u16 track, __u8
 static int cdrom_get_disc_info(struct cdrom_device_info *cdi, disc_information *di)
 {
        struct cdrom_device_ops *cdo = cdi->ops;
-       struct cdrom_generic_command cgc;
+       struct packet_command cgc;
        int ret;
 
        /* set up command and get the disc info */
@@ -2906,7 +2894,7 @@ struct cdrom_sysctl_settings {
 } cdrom_sysctl_settings;
 
 int cdrom_sysctl_info(ctl_table *ctl, int write, struct file * filp,
-                           void *buffer, size_t *lenp)
+                           void __user *buffer, size_t *lenp)
 {
         int pos;
        struct cdrom_device_info *cdi;
@@ -3033,7 +3021,7 @@ void cdrom_update_settings(void)
 }
 
 static int cdrom_sysctl_handler(ctl_table *ctl, int write, struct file * filp,
-                               void *buffer, size_t *lenp)
+                               void __user *buffer, size_t *lenp)
 {
        int *valp = ctl->data;
        int val = *valp;