--==_Exmh_-11858096660
Content-Type: text/plain; charset=us-ascii
This is really a repriese of the the dma_mask move patch posted a while ago, 
tidied up with everyones's feedback.  The patch also removes the struct 
pci_dev in the Scsi_Host.
The second patch below it adds using the dma_mask to drivers/mca
All of the patches are also available in the bitkeeper tree at:
http://linux-voyager.bkbits.net/mca-sysfs-2.5
James
--==_Exmh_-11858096660
Content-Type: text/plain ; name="dma_mask.diff"; charset=us-ascii
Content-Description: dma_mask.diff
Content-Disposition: attachment; filename="dma_mask.diff"
# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#	           ChangeSet	1.844   -> 1.845  
#	drivers/scsi/hosts.h	1.38    -> 1.39   
#	   drivers/scsi/st.c	1.44    -> 1.45   
#	 drivers/pci/probe.c	1.18    -> 1.19   
#	drivers/scsi/scsi_scan.c	1.37    -> 1.38   
#	include/linux/device.h	1.60    -> 1.61   
#	drivers/scsi/scsi_ioctl.c	1.12    -> 1.13   
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/11/21	jejb@mulgrave.(none)	1.845
# move dma_mask into struct device
# 
# Attached is a patch which moves dma_mask into struct device and cleans up the 
# scsi mid-layer to use it (instead of using struct pci_dev).  The advantage to 
# doing this is probably most apparent on non-pci bus architectures where 
# currently you have to construct a fake pci_dev just so you can get the bounce 
# buffers to work correctly.
# 
# The patch tries to perturb the minimum amount of code, so dma_mask in struct 
# device is simply a pointer to the one in pci_dev.  However, it will make it 
# easy for me now to add generic device to MCA without having to go the fake pci 
# route.
# 
# This patch completely removes knowledge of pci devices from the SCSI mid-layer.
# 
# I have compiled and tested this, but obviously, since I have an MCA machine, 
# it's not of much value to the pci code changes, so if someone with a PCI 
# machine could check those out, I'd be grateful.
# 
# The main problem SCSI has with this is the scsi_ioctl_get_pci which is used to 
# get the pci slot name.  Although, this can be fixed up afterwards with Matthew 
# Wilcox's name change patch.
# 
# I'd like to see this as the beginning of a move away from bus specific code to 
# using generic device code (where possible).  Comments and feedback welcome.
# --------------------------------------------
#
diff -Nru a/drivers/pci/probe.c b/drivers/pci/probe.c
--- a/drivers/pci/probe.c	Thu Nov 21 14:33:31 2002
+++ b/drivers/pci/probe.c	Thu Nov 21 14:33:31 2002
@@ -448,6 +448,7 @@
 
 	/* now put in global tree */
 	strcpy(dev->dev.bus_id,dev->slot_name);
+	dev->dev.dma_mask = &dev->dma_mask;
 
 	device_register(&dev->dev);
 	return dev;
diff -Nru a/drivers/scsi/hosts.h b/drivers/scsi/hosts.h
--- a/drivers/scsi/hosts.h	Thu Nov 21 14:33:31 2002
+++ b/drivers/scsi/hosts.h	Thu Nov 21 14:33:31 2002
@@ -467,12 +467,6 @@
      */
     unsigned int max_host_blocked;
 
-    /*
-     * For SCSI hosts which are PCI devices, set pci_dev so that
-     * we can do BIOS EDD 3.0 mappings
-     */
-    struct pci_dev *pci_dev;
-
     /* 
      * Support for driverfs filesystem
      */
@@ -517,11 +511,16 @@
 	shost->host_lock = lock;
 }
 
+static inline void scsi_set_device(struct Scsi_Host *shost,
+                                   struct device *dev)
+{
+        shost->host_driverfs_dev.parent = dev;
+}
+
 static inline void scsi_set_pci_device(struct Scsi_Host *shost,
                                        struct pci_dev *pdev)
 {
-	shost->pci_dev = pdev;
-	shost->host_driverfs_dev.parent=&pdev->dev;
+        scsi_set_device(shost, &pdev->dev);
 }
 
 
diff -Nru a/drivers/scsi/scsi_ioctl.c b/drivers/scsi/scsi_ioctl.c
--- a/drivers/scsi/scsi_ioctl.c	Thu Nov 21 14:33:31 2002
+++ b/drivers/scsi/scsi_ioctl.c	Thu Nov 21 14:33:31 2002
@@ -393,12 +393,13 @@
  *          any copy_to_user() error on failure there
  */
 static int
-scsi_ioctl_get_pci(Scsi_Device * dev, void *arg)
+scsi_ioctl_get_pci(Scsi_Device * sdev, void *arg)
 {
+	struct device *dev = sdev->host->host_driverfs_dev.parent;
 
-        if (!dev->host->pci_dev) return -ENXIO;
-        return copy_to_user(arg, dev->host->pci_dev->slot_name,
-                            sizeof(dev->host->pci_dev->slot_name));
+        if (!dev) return -ENXIO;
+        return copy_to_user(arg, dev->bus_id,
+                            sizeof(dev->bus_id));
 }
 
 
diff -Nru a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
--- a/drivers/scsi/scsi_scan.c	Thu Nov 21 14:33:31 2002
+++ b/drivers/scsi/scsi_scan.c	Thu Nov 21 14:33:31 2002
@@ -433,11 +433,12 @@
 {
 	request_queue_t *q = &sd->request_queue;
 	struct Scsi_Host *sh = sd->host;
+	struct device *dev = sh->host_driverfs_dev.parent;
 	u64 bounce_limit;
 
 	if (sh->highmem_io) {
-		if (sh->pci_dev && PCI_DMA_BUS_IS_PHYS) {
-			bounce_limit = sh->pci_dev->dma_mask;
+		if (dev && dev->dma_mask && PCI_DMA_BUS_IS_PHYS) {
+			bounce_limit = *dev->dma_mask;
 		} else {
 			/*
 			 * Platforms with virtual-DMA translation
diff -Nru a/drivers/scsi/st.c b/drivers/scsi/st.c
--- a/drivers/scsi/st.c	Thu Nov 21 14:33:31 2002
+++ b/drivers/scsi/st.c	Thu Nov 21 14:33:31 2002
@@ -3780,13 +3780,14 @@
 	tpnt->try_dio = try_direct_io && !SDp->host->unchecked_isa_dma;
 	bounce_limit = BLK_BOUNCE_HIGH; /* Borrowed from scsi_merge.c */
 	if (SDp->host->highmem_io) {
+		struct device *dev = SDp->host->host_driverfs_dev.parent;
 		if (!PCI_DMA_BUS_IS_PHYS)
 			/* Platforms with virtual-DMA translation
 			 * hardware have no practical limit.
 			 */
 			bounce_limit = BLK_BOUNCE_ANY;
-		else if (SDp->host->pci_dev)
-			bounce_limit = SDp->host->pci_dev->dma_mask;
+		else if (dev && dev->dma_mask)
+			bounce_limit = *dev->dma_mask;
 	} else if (SDp->host->unchecked_isa_dma)
 		bounce_limit = BLK_BOUNCE_ISA;
 	bounce_limit >>= PAGE_SHIFT;
diff -Nru a/include/linux/device.h b/include/linux/device.h
--- a/include/linux/device.h	Thu Nov 21 14:33:31 2002
+++ b/include/linux/device.h	Thu Nov 21 14:33:31 2002
@@ -303,6 +303,7 @@
 					   being off. */
 
 	unsigned char *saved_state;	/* saved device state */
+	u64		*dma_mask;	/* dma mask (if dma'able device) */
 
 	void	(*release)(struct device * dev);
 };
--==_Exmh_-11858096660
Content-Type: text/plain ; name="mca-sysfs-III.diff"; charset=us-ascii
Content-Description: mca-sysfs-III.diff
Content-Disposition: attachment; filename="mca-sysfs-III.diff"
# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#	           ChangeSet	1.845   -> 1.846  
#	drivers/mca/mca-bus.c	1.1     -> 1.2    
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/11/21	jejb@mulgrave.(none)	1.846
# make mca-bus.c use generic device dma_mask
# --------------------------------------------
#
diff -Nru a/drivers/mca/mca-bus.c b/drivers/mca/mca-bus.c
--- a/drivers/mca/mca-bus.c	Thu Nov 21 14:33:46 2002
+++ b/drivers/mca/mca-bus.c	Thu Nov 21 14:33:46 2002
@@ -143,9 +143,7 @@
 	mca_dev->dev.bus = &mca_bus_type;
 	sprintf (mca_dev->dev.bus_id, "%02d:%02X", bus, mca_dev->slot);
 	mca_dev->dma_mask = mca_bus->default_dma_mask;
-	/* FIXME: uncomment this when we get a global idea of where
-	 * dma_mask goes */
-	//mca_dev->dev.dma_mask = &mca_dev->dma_mask;
+	mca_dev->dev.dma_mask = &mca_dev->dma_mask;
 
 	if (device_register(&mca_dev->dev))
 		return 0;
--==_Exmh_-11858096660--
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/