From: Lin Ming <ming.m.lin@intel.com>
To: Jeff Garzik <jgarzik@pobox.com>,
David Woodhouse <David.Woodhouse@intel.com>,
Aaron Lu <aaron.lu@amd.com>, Holger Macht <holger@homac.de>,
Matthew Garrett <mjg@redhat.com>
Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org,
linux-scsi@vger.kernel.org, linux-ide@vger.kernel.org,
linux-acpi@vger.kernel.org
Subject: [PATCH v4 11/13] [SCSI] sr: check support for device busy class events
Date: Mon, 28 May 2012 13:08:38 +0800 [thread overview]
Message-ID: <1338181720-4149-12-git-send-email-ming.m.lin@intel.com> (raw)
In-Reply-To: <1338181720-4149-1-git-send-email-ming.m.lin@intel.com>
From: Aaron Lu <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(+), 0 deletions(-)
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 @@ static int sr_probe(struct device *dev)
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..25f305c 100644
--- a/include/linux/cdrom.h
+++ b/include/linux/cdrom.h
@@ -727,6 +727,7 @@ struct request_sense {
/*
* feature profile
*/
+#define CDF_RM 0x0003 /* "Removeable 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.2.5
next prev parent reply other threads:[~2012-05-28 5:08 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-28 5:08 [PATCH v4 0/13] SATA ZPODD support Lin Ming
2012-05-28 5:08 ` [PATCH v4 01/13] [SCSI]: add wrapper to access and set scsi_bus_type in struct acpi_bus_type Lin Ming
2012-05-29 12:26 ` Sergei Shtylyov
2012-05-28 5:08 ` [PATCH v4 02/13] libata: bind the Linux device tree to the ACPI device tree Lin Ming
2012-05-28 9:51 ` Alan Cox
2012-06-13 8:03 ` Lin Ming
2012-06-13 11:00 ` Alan Cox
2012-06-14 7:43 ` Lin Ming
2012-05-28 5:08 ` [PATCH v4 03/13] libata: migrate ACPI code over to new bindings Lin Ming
2012-05-28 5:08 ` [PATCH v4 04/13] libata: use correct PCI devices Lin Ming
2012-05-29 12:22 ` Sergei Shtylyov
2012-05-28 5:08 ` [PATCH v4 05/13] libata-acpi: set acpi state for SATA port Lin Ming
2012-05-28 5:08 ` [PATCH v4 06/13] libata-acpi: add ata port runtime D3Cold support Lin Ming
2012-05-28 5:08 ` [PATCH v4 07/13] libata-acpi: register/unregister device to/from power resource Lin Ming
2012-05-28 5:08 ` [PATCH v4 08/13] libata: detect Device Attention support Lin Ming
2012-05-28 5:08 ` [PATCH v4 09/13] libata: tell scsi layer device supports runtime power off Lin Ming
2012-05-28 5:08 ` [PATCH v4 10/13] [SCSI] pm: resume device if suspend failed Lin Ming
2012-05-28 5:08 ` Lin Ming [this message]
2012-05-28 5:08 ` [PATCH v4 12/13] [SCSI] sr: support zero power ODD Lin Ming
2012-05-28 5:08 ` [PATCH v4 13/13] [SCSI] sr: make sure ODD is in resumed state in block ioctl Lin Ming
2012-05-28 9:44 ` [PATCH v4 0/13] SATA ZPODD support Alan Cox
2012-05-28 9:54 ` Alan Cox
2012-05-29 12:32 ` Lin Ming
2012-05-30 5:43 ` Aaron Lu
2012-05-30 9:06 ` Fuzhou Chen
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=1338181720-4149-12-git-send-email-ming.m.lin@intel.com \
--to=ming.m.lin@intel.com \
--cc=David.Woodhouse@intel.com \
--cc=aaron.lu@amd.com \
--cc=holger@homac.de \
--cc=jgarzik@pobox.com \
--cc=linux-acpi@vger.kernel.org \
--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=mjg@redhat.com \
/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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).