From 5d5cdc9bf5fd378f5d3fd1b66ff288388b172865 Mon Sep 17 00:00:00 2001 From: Alexander Viro Date: Sat, 29 May 2004 02:16:22 -0700 Subject: [PATCH] [PATCH] sparse: cdrom_generic_command split into kernel/user The kernel instance (packet_command) has kernel pointers, userland one - __user ones. Surprise. --- drivers/block/paride/pcd.c | 4 +-- drivers/cdrom/cdrom.c | 64 +++++++++++++++++++------------------- drivers/ide/ide-cd.c | 6 ++-- drivers/scsi/sr.c | 4 +-- drivers/scsi/sr.h | 2 +- drivers/scsi/sr_ioctl.c | 34 ++++++++++---------- drivers/scsi/sr_vendor.c | 8 ++--- include/linux/cdrom.h | 28 ++++++++++++----- 8 files changed, 81 insertions(+), 69 deletions(-) diff --git a/drivers/block/paride/pcd.c b/drivers/block/paride/pcd.c index 46beeab5d3e7d..4ab5efad0fe59 100644 --- a/drivers/block/paride/pcd.c +++ b/drivers/block/paride/pcd.c @@ -198,7 +198,7 @@ static int pcd_get_mcn(struct cdrom_device_info *cdi, struct cdrom_mcn *mcn); static int pcd_audio_ioctl(struct cdrom_device_info *cdi, unsigned int cmd, void *arg); static int pcd_packet(struct cdrom_device_info *cdi, - struct cdrom_generic_command *cgc); + struct packet_command *cgc); static int pcd_detect(void); static void pcd_probe_capabilities(void); @@ -501,7 +501,7 @@ static int pcd_atapi(struct pcd_unit *cd, char *cmd, int dlen, char *buf, char * return r; } -static int pcd_packet(struct cdrom_device_info *cdi, struct cdrom_generic_command *cgc) +static int pcd_packet(struct cdrom_device_info *cdi, struct packet_command *cgc) { return pcd_atapi(cdi->handle, cgc->cmd, cgc->buflen, cgc->buffer, "generic packet"); diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c index 1f65c1e72ec1d..8e1acfa512527 100644 --- a/drivers/cdrom/cdrom.c +++ b/drivers/cdrom/cdrom.c @@ -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,7 +649,7 @@ 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; @@ -677,7 +677,7 @@ int cdrom_get_random_writable(struct cdrom_device_info *cdi, 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; @@ -785,7 +785,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 +1102,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 +1185,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 +1384,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 +1401,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 +1423,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 +1449,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 +1595,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 +1645,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 +1668,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 +1694,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 +1719,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 +1777,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 +1793,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 +1811,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 +1845,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 +1865,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 +1899,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)); @@ -2446,7 +2446,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 +2472,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; @@ -2729,7 +2729,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 +2757,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 */ diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c index 6cbb27bda33af..1bb668b4f15c0 100644 --- a/drivers/ide/ide-cd.c +++ b/drivers/ide/ide-cd.c @@ -2491,7 +2491,7 @@ static int cdrom_get_toc_entry(ide_drive_t *drive, int track, /* the generic packet interface to cdrom.c */ static int ide_cdrom_packet(struct cdrom_device_info *cdi, - struct cdrom_generic_command *cgc) + struct packet_command *cgc) { struct request req; ide_drive_t *drive = (ide_drive_t*) cdi->handle; @@ -2524,7 +2524,7 @@ static int ide_cdrom_dev_ioctl (struct cdrom_device_info *cdi, unsigned int cmd, unsigned long arg) { - struct cdrom_generic_command cgc; + struct packet_command cgc; char buffer[16]; int stat; @@ -2908,7 +2908,7 @@ int ide_cdrom_get_capabilities(ide_drive_t *drive, struct atapi_capabilities_pag { struct cdrom_info *info = drive->driver_data; struct cdrom_device_info *cdi = &info->devinfo; - struct cdrom_generic_command cgc; + struct packet_command cgc; int stat, attempts = 3, size = sizeof(*cap); /* diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c index d73ac18fb109b..2d7dc6cfbda04 100644 --- a/drivers/scsi/sr.c +++ b/drivers/scsi/sr.c @@ -99,7 +99,7 @@ static void get_sectorsize(struct scsi_cd *); static void get_capabilities(struct scsi_cd *); static int sr_media_change(struct cdrom_device_info *, int); -static int sr_packet(struct cdrom_device_info *, struct cdrom_generic_command *); +static int sr_packet(struct cdrom_device_info *, struct packet_command *); static struct cdrom_device_ops sr_dops = { .open = sr_open, @@ -908,7 +908,7 @@ static void get_capabilities(struct scsi_cd *cd) * by the Uniform CD-ROM layer. */ static int sr_packet(struct cdrom_device_info *cdi, - struct cdrom_generic_command *cgc) + struct packet_command *cgc) { if (cgc->timeout <= 0) cgc->timeout = IOCTL_TIMEOUT; diff --git a/drivers/scsi/sr.h b/drivers/scsi/sr.h index b77847496e949..bfbabb6a484f5 100644 --- a/drivers/scsi/sr.h +++ b/drivers/scsi/sr.h @@ -43,7 +43,7 @@ typedef struct scsi_cd { struct gendisk *disk; } Scsi_CD; -int sr_do_ioctl(Scsi_CD *, struct cdrom_generic_command *); +int sr_do_ioctl(Scsi_CD *, struct packet_command *); int sr_lock_door(struct cdrom_device_info *, int); int sr_tray_move(struct cdrom_device_info *, int); diff --git a/drivers/scsi/sr_ioctl.c b/drivers/scsi/sr_ioctl.c index 0416030f717fb..d82dd4ffecf7f 100644 --- a/drivers/scsi/sr_ioctl.c +++ b/drivers/scsi/sr_ioctl.c @@ -34,7 +34,7 @@ static int sr_fake_playtrkind(struct cdrom_device_info *cdi, struct cdrom_ti *ti { struct cdrom_tocentry trk0_te, trk1_te; struct cdrom_tochdr tochdr; - struct cdrom_generic_command cgc; + struct packet_command cgc; int ntracks, ret; if ((ret = sr_audio_ioctl(cdi, CDROMREADTOCHDR, &tochdr))) @@ -57,7 +57,7 @@ static int sr_fake_playtrkind(struct cdrom_device_info *cdi, struct cdrom_ti *ti if ((ret = sr_audio_ioctl(cdi, CDROMREADTOCENTRY, &trk1_te))) return ret; - memset(&cgc, 0, sizeof(struct cdrom_generic_command)); + memset(&cgc, 0, sizeof(struct packet_command)); cgc.cmd[0] = GPCMD_PLAY_AUDIO_MSF; cgc.cmd[3] = trk0_te.cdte_addr.msf.minute; cgc.cmd[4] = trk0_te.cdte_addr.msf.second; @@ -74,7 +74,7 @@ static int sr_fake_playtrkind(struct cdrom_device_info *cdi, struct cdrom_ti *ti error code is. Normally the UNIT_ATTENTION code will automatically clear after one error */ -int sr_do_ioctl(Scsi_CD *cd, struct cdrom_generic_command *cgc) +int sr_do_ioctl(Scsi_CD *cd, struct packet_command *cgc) { struct scsi_request *SRpnt; struct scsi_device *SDev; @@ -178,9 +178,9 @@ int sr_do_ioctl(Scsi_CD *cd, struct cdrom_generic_command *cgc) static int test_unit_ready(Scsi_CD *cd) { - struct cdrom_generic_command cgc; + struct packet_command cgc; - memset(&cgc, 0, sizeof(struct cdrom_generic_command)); + memset(&cgc, 0, sizeof(struct packet_command)); cgc.cmd[0] = GPCMD_TEST_UNIT_READY; cgc.quiet = 1; cgc.data_direction = SCSI_DATA_NONE; @@ -191,9 +191,9 @@ static int test_unit_ready(Scsi_CD *cd) int sr_tray_move(struct cdrom_device_info *cdi, int pos) { Scsi_CD *cd = cdi->handle; - struct cdrom_generic_command cgc; + struct packet_command cgc; - memset(&cgc, 0, sizeof(struct cdrom_generic_command)); + memset(&cgc, 0, sizeof(struct packet_command)); cgc.cmd[0] = GPCMD_START_STOP_UNIT; cgc.cmd[4] = (pos == 0) ? 0x03 /* close */ : 0x02 /* eject */ ; cgc.data_direction = SCSI_DATA_NONE; @@ -269,11 +269,11 @@ int sr_get_last_session(struct cdrom_device_info *cdi, int sr_get_mcn(struct cdrom_device_info *cdi, struct cdrom_mcn *mcn) { Scsi_CD *cd = cdi->handle; - struct cdrom_generic_command cgc; + struct packet_command cgc; char *buffer = kmalloc(32, GFP_KERNEL | SR_GFP_DMA(cd)); int result; - memset(&cgc, 0, sizeof(struct cdrom_generic_command)); + memset(&cgc, 0, sizeof(struct packet_command)); cgc.cmd[0] = GPCMD_READ_SUBCHANNEL; cgc.cmd[2] = 0x40; /* I do want the subchannel info */ cgc.cmd[3] = 0x02; /* Give me medium catalog number info */ @@ -299,14 +299,14 @@ int sr_reset(struct cdrom_device_info *cdi) int sr_select_speed(struct cdrom_device_info *cdi, int speed) { Scsi_CD *cd = cdi->handle; - struct cdrom_generic_command cgc; + struct packet_command cgc; if (speed == 0) speed = 0xffff; /* set to max */ else speed *= 177; /* Nx to kbyte/s */ - memset(&cgc, 0, sizeof(struct cdrom_generic_command)); + memset(&cgc, 0, sizeof(struct packet_command)); cgc.cmd[0] = GPCMD_SET_SPEED; /* SET CD SPEED */ cgc.cmd[2] = (speed >> 8) & 0xff; /* MSB for speed (in kbytes/sec) */ cgc.cmd[3] = speed & 0xff; /* LSB */ @@ -327,11 +327,11 @@ int sr_select_speed(struct cdrom_device_info *cdi, int speed) int sr_audio_ioctl(struct cdrom_device_info *cdi, unsigned int cmd, void *arg) { Scsi_CD *cd = cdi->handle; - struct cdrom_generic_command cgc; + struct packet_command cgc; int result; unsigned char *buffer = kmalloc(32, GFP_KERNEL | SR_GFP_DMA(cd)); - memset(&cgc, 0, sizeof(struct cdrom_generic_command)); + memset(&cgc, 0, sizeof(struct packet_command)); cgc.timeout = IOCTL_TIMEOUT; switch (cmd) { @@ -428,14 +428,14 @@ int sr_audio_ioctl(struct cdrom_device_info *cdi, unsigned int cmd, void *arg) static int sr_read_cd(Scsi_CD *cd, unsigned char *dest, int lba, int format, int blksize) { - struct cdrom_generic_command cgc; + struct packet_command cgc; #ifdef DEBUG printk("%s: sr_read_cd lba=%d format=%d blksize=%d\n", cd->cdi.name, lba, format, blksize); #endif - memset(&cgc, 0, sizeof(struct cdrom_generic_command)); + memset(&cgc, 0, sizeof(struct packet_command)); cgc.cmd[0] = GPCMD_READ_CD; /* READ_CD */ cgc.cmd[1] = ((format & 7) << 2); cgc.cmd[2] = (unsigned char) (lba >> 24) & 0xff; @@ -470,7 +470,7 @@ static int sr_read_cd(Scsi_CD *cd, unsigned char *dest, int lba, int format, int static int sr_read_sector(Scsi_CD *cd, int lba, int blksize, unsigned char *dest) { - struct cdrom_generic_command cgc; + struct packet_command cgc; int rc; /* we try the READ CD command first... */ @@ -491,7 +491,7 @@ static int sr_read_sector(Scsi_CD *cd, int lba, int blksize, unsigned char *dest printk("%s: sr_read_sector lba=%d blksize=%d\n", cd->cdi.name, lba, blksize); #endif - memset(&cgc, 0, sizeof(struct cdrom_generic_command)); + memset(&cgc, 0, sizeof(struct packet_command)); cgc.cmd[0] = GPCMD_READ_10; cgc.cmd[2] = (unsigned char) (lba >> 24) & 0xff; cgc.cmd[3] = (unsigned char) (lba >> 16) & 0xff; diff --git a/drivers/scsi/sr_vendor.c b/drivers/scsi/sr_vendor.c index 6fb97529c4c6d..2f7894e70aa40 100644 --- a/drivers/scsi/sr_vendor.c +++ b/drivers/scsi/sr_vendor.c @@ -107,7 +107,7 @@ void sr_vendor_init(Scsi_CD *cd) int sr_set_blocklength(Scsi_CD *cd, int blocklength) { unsigned char *buffer; /* the buffer for the ioctl */ - struct cdrom_generic_command cgc; + struct packet_command cgc; struct ccs_modesel_head *modesel; int rc, density = 0; @@ -123,7 +123,7 @@ int sr_set_blocklength(Scsi_CD *cd, int blocklength) #ifdef DEBUG printk("%s: MODE SELECT 0x%x/%d\n", cd->cdi.name, density, blocklength); #endif - memset(&cgc, 0, sizeof(struct cdrom_generic_command)); + memset(&cgc, 0, sizeof(struct packet_command)); cgc.cmd[0] = MODE_SELECT; cgc.cmd[1] = (1 << 4); cgc.cmd[4] = 12; @@ -157,7 +157,7 @@ int sr_cd_check(struct cdrom_device_info *cdi) Scsi_CD *cd = cdi->handle; unsigned long sector; unsigned char *buffer; /* the buffer for the ioctl */ - struct cdrom_generic_command cgc; + struct packet_command cgc; int rc, no_multi; if (cd->cdi.mask & CDC_MULTI_SESSION) @@ -171,7 +171,7 @@ int sr_cd_check(struct cdrom_device_info *cdi) no_multi = 0; /* flag: the drive can't handle multisession */ rc = 0; - memset(&cgc, 0, sizeof(struct cdrom_generic_command)); + memset(&cgc, 0, sizeof(struct packet_command)); switch (cd->vendor) { diff --git a/include/linux/cdrom.h b/include/linux/cdrom.h index 8fcf9bc9cf2bd..a1727a02c6df1 100644 --- a/include/linux/cdrom.h +++ b/include/linux/cdrom.h @@ -280,17 +280,16 @@ struct cdrom_blk struct cdrom_generic_command { unsigned char cmd[CDROM_PACKET_SIZE]; - unsigned char *buffer; + unsigned char __user *buffer; unsigned int buflen; int stat; - struct request_sense *sense; + struct request_sense __user *sense; unsigned char data_direction; int quiet; int timeout; - void *reserved[1]; + void __user *reserved[1]; /* unused, actually */ }; - /* * A CD-ROM physical sector size is 2048, 2052, 2056, 2324, 2332, 2336, * 2340, or 2352 bytes long. @@ -907,6 +906,19 @@ struct mode_page_header { #include /* not really needed, later.. */ #include +struct packet_command +{ + unsigned char cmd[CDROM_PACKET_SIZE]; + unsigned char *buffer; + unsigned int buflen; + int stat; + struct request_sense *sense; + unsigned char data_direction; + int quiet; + int timeout; + void *reserved[1]; +}; + /* * _OLD will use PIO transfer on atapi devices, _BPC_* will use DMA */ @@ -965,7 +977,7 @@ struct cdrom_device_ops { int n_minors; /* number of active minor devices */ /* handle uniform packets for scsi type devices (scsi,atapi) */ int (*generic_packet) (struct cdrom_device_info *, - struct cdrom_generic_command *); + struct packet_command *); }; /* the general block_device operations structure: */ @@ -990,11 +1002,11 @@ typedef struct { extern int cdrom_get_last_written(struct cdrom_device_info *cdi, long *last_written); extern int cdrom_number_of_slots(struct cdrom_device_info *cdi); extern int cdrom_mode_select(struct cdrom_device_info *cdi, - struct cdrom_generic_command *cgc); + struct packet_command *cgc); extern int cdrom_mode_sense(struct cdrom_device_info *cdi, - struct cdrom_generic_command *cgc, + struct packet_command *cgc, int page_code, int page_control); -extern void init_cdrom_command(struct cdrom_generic_command *cgc, +extern void init_cdrom_command(struct packet_command *cgc, void *buffer, int len, int type); /* The SCSI spec says there could be 256 slots. */ -- 2.53.0