From: Aaron Lu <aaron.lu@amd.com> To: James Bottomley <James.Bottomley@HansenPartnership.com>, Alan Stern <stern@rowland.harvard.edu> Cc: Jeff Garzik <jgarzik@pobox.com>, Lin Ming <minggr@gmail.com>, Jeff Wu <jeff.wu@amd.com>, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, linux-scsi@vger.kernel.org, linux-ide@vger.kernel.org, Aaron Lu <aaron.lwe@gmail.com>, Aaron Lu <aaron.lu@amd.com> Subject: [PATCH v3 1/7] scsi: sr: check support for device busy class events Date: Thu, 26 Jul 2012 18:05:23 +0800 [thread overview] Message-ID: <1343297129-28174-2-git-send-email-aaron.lu@amd.com> (raw) In-Reply-To: <1343297129-28174-1-git-send-email-aaron.lu@amd.com> Signed-off-by: Aaron Lu <aaron.lu@amd.com> --- drivers/scsi/sr.c | 23 +++++++++++++++++++++++ drivers/scsi/sr.h | 1 + include/linux/cdrom.h | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+) diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c index 5fc97d2..abfefab 100644 --- a/drivers/scsi/sr.c +++ b/drivers/scsi/sr.c @@ -101,6 +101,7 @@ static DEFINE_MUTEX(sr_ref_mutex); static int sr_open(struct cdrom_device_info *, int); static void sr_release(struct cdrom_device_info *); +static void check_dbml(struct scsi_cd *); static void get_sectorsize(struct scsi_cd *); static void get_capabilities(struct scsi_cd *); @@ -728,6 +729,28 @@ fail: return error; } +static void check_dbml(struct scsi_cd *cd) +{ + struct packet_command cgc; + unsigned char buffer[16]; + struct rm_feature_desc *rfd; + + init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_READ); + cgc.cmd[0] = GPCMD_GET_CONFIGURATION; + cgc.cmd[3] = CDF_RM; + cgc.cmd[8] = sizeof(buffer); + cgc.quiet = 1; + + if (cd->cdi.ops->generic_packet(&cd->cdi, &cgc)) + return; + + rfd = (struct rm_feature_desc *)&buffer[sizeof(struct feature_header)]; + if (be16_to_cpu(rfd->feature_code) != CDF_RM) + return; + + if (rfd->dbml) + cd->dbml = 1; +} static void get_sectorsize(struct scsi_cd *cd) { diff --git a/drivers/scsi/sr.h b/drivers/scsi/sr.h index 37c8f6b..7cc40ad 100644 --- a/drivers/scsi/sr.h +++ b/drivers/scsi/sr.h @@ -41,6 +41,7 @@ typedef struct scsi_cd { unsigned readcd_known:1; /* drive supports READ_CD (0xbe) */ unsigned readcd_cdda:1; /* reading audio data using READ_CD */ unsigned media_present:1; /* media is present */ + unsigned dbml:1; /* generates device busy class events */ /* GET_EVENT spurious event handling, blk layer guarantees exclusion */ int tur_mismatch; /* nr of get_event TUR mismatches */ diff --git a/include/linux/cdrom.h b/include/linux/cdrom.h index dfd7f18..962be39 100644 --- a/include/linux/cdrom.h +++ b/include/linux/cdrom.h @@ -727,6 +727,7 @@ struct request_sense { /* * feature profile */ +#define CDF_RM 0x0003 /* "Removable Medium" */ #define CDF_RWRT 0x0020 /* "Random Writable" */ #define CDF_HWDM 0x0024 /* "Hardware Defect Management" */ #define CDF_MRW 0x0028 @@ -739,6 +740,48 @@ struct request_sense { #define CDM_MRW_BGFORMAT_ACTIVE 2 #define CDM_MRW_BGFORMAT_COMPLETE 3 +/* Removable medium feature descriptor */ +struct rm_feature_desc { + __be16 feature_code; +#if defined(__BIG_ENDIAN_BITFIELD) + __u8 reserved1 : 2; + __u8 feature_version : 4; + __u8 persistent : 1; + __u8 curr : 1; +#elif defined(__LITTLE_ENDIAN_BITFIELD) + __u8 curr : 1; + __u8 persistent : 1; + __u8 feature_version : 4; + __u8 reserved1 : 2; +#endif + __u8 add_len; +#if defined(__BIG_ENDIAN_BITFIELD) + __u8 mech_type : 3; + __u8 load : 1; + __u8 eject : 1; + __u8 pvnt_jmpr : 1; + __u8 dbml : 1; + __u8 lock : 1; +#elif defined(__LITTLE_ENDIAN_BITFIELD) + __u8 lock : 1; + __u8 dbml : 1; + __u8 pvnt_jmpr : 1; + __u8 eject : 1; + __u8 load : 1; + __u8 mech_type : 3; +#endif + __u8 reserved2; + __u8 reserved3; + __u8 reserved4; +}; + +struct device_busy_event_desc { + __u8 device_busy_event : 4; + __u8 reserved1 : 4; + __u8 device_busy_status; + __u8 time; +}; + /* * mrw address spaces */ -- 1.7.11.3
WARNING: multiple messages have this Message-ID (diff)
From: Aaron Lu <aaron.lu@amd.com> To: James Bottomley <James.Bottomley@HansenPartnership.com>, Alan Stern <stern@rowland.harvard.edu> Cc: Jeff Garzik <jgarzik@pobox.com>, Lin Ming <minggr@gmail.com>, Jeff Wu <jeff.wu@amd.com>, <linux-kernel@vger.kernel.org>, <linux-pm@vger.kernel.org>, <linux-scsi@vger.kernel.org>, <linux-ide@vger.kernel.org>, Aaron Lu <aaron.lwe@gmail.com>, Aaron Lu <aaron.lu@amd.com> Subject: [PATCH v3 1/7] scsi: sr: check support for device busy class events Date: Thu, 26 Jul 2012 18:05:23 +0800 [thread overview] Message-ID: <1343297129-28174-2-git-send-email-aaron.lu@amd.com> (raw) In-Reply-To: <1343297129-28174-1-git-send-email-aaron.lu@amd.com> Signed-off-by: Aaron Lu <aaron.lu@amd.com> --- drivers/scsi/sr.c | 23 +++++++++++++++++++++++ drivers/scsi/sr.h | 1 + include/linux/cdrom.h | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+) diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c index 5fc97d2..abfefab 100644 --- a/drivers/scsi/sr.c +++ b/drivers/scsi/sr.c @@ -101,6 +101,7 @@ static DEFINE_MUTEX(sr_ref_mutex); static int sr_open(struct cdrom_device_info *, int); static void sr_release(struct cdrom_device_info *); +static void check_dbml(struct scsi_cd *); static void get_sectorsize(struct scsi_cd *); static void get_capabilities(struct scsi_cd *); @@ -728,6 +729,28 @@ fail: return error; } +static void check_dbml(struct scsi_cd *cd) +{ + struct packet_command cgc; + unsigned char buffer[16]; + struct rm_feature_desc *rfd; + + init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_READ); + cgc.cmd[0] = GPCMD_GET_CONFIGURATION; + cgc.cmd[3] = CDF_RM; + cgc.cmd[8] = sizeof(buffer); + cgc.quiet = 1; + + if (cd->cdi.ops->generic_packet(&cd->cdi, &cgc)) + return; + + rfd = (struct rm_feature_desc *)&buffer[sizeof(struct feature_header)]; + if (be16_to_cpu(rfd->feature_code) != CDF_RM) + return; + + if (rfd->dbml) + cd->dbml = 1; +} static void get_sectorsize(struct scsi_cd *cd) { diff --git a/drivers/scsi/sr.h b/drivers/scsi/sr.h index 37c8f6b..7cc40ad 100644 --- a/drivers/scsi/sr.h +++ b/drivers/scsi/sr.h @@ -41,6 +41,7 @@ typedef struct scsi_cd { unsigned readcd_known:1; /* drive supports READ_CD (0xbe) */ unsigned readcd_cdda:1; /* reading audio data using READ_CD */ unsigned media_present:1; /* media is present */ + unsigned dbml:1; /* generates device busy class events */ /* GET_EVENT spurious event handling, blk layer guarantees exclusion */ int tur_mismatch; /* nr of get_event TUR mismatches */ diff --git a/include/linux/cdrom.h b/include/linux/cdrom.h index dfd7f18..962be39 100644 --- a/include/linux/cdrom.h +++ b/include/linux/cdrom.h @@ -727,6 +727,7 @@ struct request_sense { /* * feature profile */ +#define CDF_RM 0x0003 /* "Removable Medium" */ #define CDF_RWRT 0x0020 /* "Random Writable" */ #define CDF_HWDM 0x0024 /* "Hardware Defect Management" */ #define CDF_MRW 0x0028 @@ -739,6 +740,48 @@ struct request_sense { #define CDM_MRW_BGFORMAT_ACTIVE 2 #define CDM_MRW_BGFORMAT_COMPLETE 3 +/* Removable medium feature descriptor */ +struct rm_feature_desc { + __be16 feature_code; +#if defined(__BIG_ENDIAN_BITFIELD) + __u8 reserved1 : 2; + __u8 feature_version : 4; + __u8 persistent : 1; + __u8 curr : 1; +#elif defined(__LITTLE_ENDIAN_BITFIELD) + __u8 curr : 1; + __u8 persistent : 1; + __u8 feature_version : 4; + __u8 reserved1 : 2; +#endif + __u8 add_len; +#if defined(__BIG_ENDIAN_BITFIELD) + __u8 mech_type : 3; + __u8 load : 1; + __u8 eject : 1; + __u8 pvnt_jmpr : 1; + __u8 dbml : 1; + __u8 lock : 1; +#elif defined(__LITTLE_ENDIAN_BITFIELD) + __u8 lock : 1; + __u8 dbml : 1; + __u8 pvnt_jmpr : 1; + __u8 eject : 1; + __u8 load : 1; + __u8 mech_type : 3; +#endif + __u8 reserved2; + __u8 reserved3; + __u8 reserved4; +}; + +struct device_busy_event_desc { + __u8 device_busy_event : 4; + __u8 reserved1 : 4; + __u8 device_busy_status; + __u8 time; +}; + /* * mrw address spaces */ -- 1.7.11.3
next prev parent reply other threads:[~2012-07-26 10:05 UTC|newest] Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-07-26 10:05 [PATCH v3 0/7] ZPODD patches for scsi tree Aaron Lu 2012-07-26 10:05 ` Aaron Lu 2012-07-26 10:05 ` Aaron Lu [this message] 2012-07-26 10:05 ` [PATCH v3 1/7] scsi: sr: check support for device busy class events Aaron Lu 2012-07-26 10:05 ` [PATCH v3 2/7] scsi: pm: use autosuspend if device supports it Aaron Lu 2012-07-26 10:05 ` Aaron Lu 2012-07-26 10:44 ` Oliver Neukum 2012-07-26 12:43 ` Aaron Lu 2012-07-26 13:01 ` Oliver Neukum 2012-07-26 10:05 ` [PATCH v3 3/7] scsi: sr: support zero power ODD(ZPODD) Aaron Lu 2012-07-26 10:05 ` Aaron Lu 2012-07-26 10:05 ` [PATCH v3 4/7] scsi: sr: block events when runtime suspended Aaron Lu 2012-07-26 10:05 ` Aaron Lu 2012-07-26 10:05 ` [PATCH v3 5/7] scsi: pm: use runtime resume callback if available Aaron Lu 2012-07-26 10:05 ` Aaron Lu 2012-07-26 10:05 ` [PATCH v3 6/7] scsi: sr: balance sr disk events block depth Aaron Lu 2012-07-26 10:05 ` Aaron Lu 2012-07-26 10:54 ` Sergei Shtylyov 2012-07-26 12:47 ` Aaron Lu 2012-07-26 10:05 ` [PATCH v3 7/7] block: genhd: add an interface to set disk's poll interval Aaron Lu 2012-07-26 10:05 ` Aaron Lu 2012-07-26 13:43 ` [PATCH v3 0/7] ZPODD patches for scsi tree Jeff Garzik 2012-07-26 14:41 ` Aaron Lu 2012-07-26 18:04 ` Jeff Garzik
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1343297129-28174-2-git-send-email-aaron.lu@amd.com \ --to=aaron.lu@amd.com \ --cc=James.Bottomley@HansenPartnership.com \ --cc=aaron.lwe@gmail.com \ --cc=jeff.wu@amd.com \ --cc=jgarzik@pobox.com \ --cc=linux-ide@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-pm@vger.kernel.org \ --cc=linux-scsi@vger.kernel.org \ --cc=minggr@gmail.com \ --cc=stern@rowland.harvard.edu \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.