libata: make SFF support optional
authorTejun Heo <htejun@gmail.com>
Mon, 7 Apr 2008 13:47:21 +0000 (22:47 +0900)
committerJeff Garzik <jgarzik@redhat.com>
Thu, 17 Apr 2008 19:44:24 +0000 (15:44 -0400)
Now that SFF support is completely separated out from the core layer,
it can be made optional.  Add CONFIG_ATA_SFF and let SFF drivers
depend on it.  If CONFIG_ATA_SFF isn't set, all codes in libata-sff.c
and data structures for SFF support are disabled.  This saves good
number of bytes for small systems.

Signed-off-by: Tejun Heo <htejun@gmail.com>
drivers/ata/Kconfig
drivers/ata/Makefile
drivers/ata/libata-core.c
drivers/ata/libata-scsi.c
drivers/ata/libata.h
include/linux/libata.h

index ea665c249035027a32162853b3861cc13776253a..48c8fc55391ec15dc23d51fb94e882a63eb9d9b1 100644 (file)
@@ -49,6 +49,32 @@ config SATA_AHCI
 
          If unsure, say N.
 
+config SATA_SIL24
+       tristate "Silicon Image 3124/3132 SATA support"
+       depends on PCI
+       help
+         This option enables support for Silicon Image 3124/3132 Serial ATA.
+
+         If unsure, say N.
+
+config SATA_FSL
+       tristate "Freescale 3.0Gbps SATA support"
+       depends on FSL_SOC
+       help
+         This option enables support for Freescale 3.0Gbps SATA controller.
+         It can be found on MPC837x and MPC8315.
+
+         If unsure, say N.
+
+config ATA_SFF
+       bool "ATA SFF support"
+       default y
+       help
+         This option adds support for ATA controllers with SFF
+         compliant or similar programming interface.
+
+if ATA_SFF
+
 config SATA_SVW
        tristate "ServerWorks Frodo / Apple K2 SATA support"
        depends on PCI
@@ -125,14 +151,6 @@ config SATA_SIL
 
          If unsure, say N.
 
-config SATA_SIL24
-       tristate "Silicon Image 3124/3132 SATA support"
-       depends on PCI
-       help
-         This option enables support for Silicon Image 3124/3132 Serial ATA.
-
-         If unsure, say N.
-
 config SATA_SIS
        tristate "SiS 964/965/966/180 SATA support"
        depends on PCI
@@ -183,15 +201,6 @@ config PATA_ACPI
          firmware in the BIOS. This driver can sometimes handle
          otherwise unsupported hardware.
 
-config SATA_FSL
-       tristate "Freescale 3.0Gbps SATA support"
-       depends on FSL_SOC
-       help
-         This option enables support for Freescale 3.0Gbps SATA controller.
-         It can be found on MPC837x and MPC8315.
-
-         If unsure, say N.
-
 config PATA_ALI
        tristate "ALi PATA support (Experimental)"
        depends on PCI && EXPERIMENTAL
@@ -679,4 +688,5 @@ config PATA_BF54X
 
          If unsure, say N.
 
+endif # ATA_SFF
 endif # ATA
index 0511e6f0bb581be847fd1987a4b16019d0d11f73..e6e41b2c731cd0cb83638c0d3f2e2cf72f74ae94 100644 (file)
@@ -78,6 +78,6 @@ obj-$(CONFIG_ATA_GENERIC)     += ata_generic.o
 # Should be last libata driver
 obj-$(CONFIG_PATA_LEGACY)      += pata_legacy.o
 
-libata-objs    := libata-core.o libata-scsi.o libata-sff.o libata-eh.o \
-                  libata-pmp.o
+libata-objs    := libata-core.o libata-scsi.o libata-eh.o libata-pmp.o
+libata-$(CONFIG_ATA_SFF)       += libata-sff.o
 libata-$(CONFIG_ATA_ACPI)      += libata-acpi.o
index 3a94c69c7fe752e40cbc91e6177c8b767ea495e3..ca60af0cb051a593ea94c6f035b11b94c894e162 100644 (file)
@@ -5195,7 +5195,9 @@ struct ata_port *ata_port_alloc(struct ata_host *host)
        ap->msg_enable = ATA_MSG_DRV | ATA_MSG_ERR | ATA_MSG_WARN;
 #endif
 
+#ifdef CONFIG_ATA_SFF
        INIT_DELAYED_WORK(&ap->port_task, ata_pio_task);
+#endif
        INIT_DELAYED_WORK(&ap->hotplug_task, ata_scsi_hotplug);
        INIT_WORK(&ap->scsi_rescan_task, ata_scsi_dev_rescan);
        INIT_LIST_HEAD(&ap->eh_done_q);
index f8be92836a6e8748a444d0ac2f20c2758ac9888e..a70881c408e51424edb47e64d03e2768e4bd8fb0 100644 (file)
@@ -2393,7 +2393,9 @@ static void atapi_request_sense(struct ata_queued_cmd *qc)
        /* FIXME: is this needed? */
        memset(cmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
 
+#ifdef CONFIG_ATA_SFF
        ap->ops->sff_tf_read(ap, &qc->tf);
+#endif
 
        /* fill these in, for the case where they are -not- overwritten */
        cmd->sense_buffer[0] = 0x70;
index 87f54a1db3b0037a13a3221c9834bf294953e048..6b70a624828c08633f1bb68b03cd531109abff4e 100644 (file)
@@ -42,8 +42,10 @@ static inline int ata_is_builtin_hardreset(ata_reset_fn_t reset)
 {
        if (reset == sata_std_hardreset)
                return 1;
+#ifdef CONFIG_ATA_SFF
        if (reset == sata_sff_hardreset)
                return 1;
+#endif
        return 0;
 }
 
@@ -206,9 +208,11 @@ extern int ata_eh_recover(struct ata_port *ap, ata_prereset_fn_t prereset,
 extern void ata_eh_finish(struct ata_port *ap);
 
 /* libata-sff.c */
+#ifdef CONFIG_ATA_SFF
 extern void ata_dev_select(struct ata_port *ap, unsigned int device,
                            unsigned int wait, unsigned int can_sleep);
 extern u8 ata_irq_on(struct ata_port *ap);
 extern void ata_pio_task(struct work_struct *work);
+#endif /* CONFIG_ATA_SFF */
 
 #endif /* __LIBATA_H__ */
index 037db1883baebb792a09d71226946215ac007918..db77b90003fdc3d56d11b8a96b8b711982e0b81e 100644 (file)
@@ -445,6 +445,7 @@ enum link_pm {
 };
 extern struct class_device_attribute class_device_attr_link_power_management_policy;
 
+#ifdef CONFIG_ATA_SFF
 struct ata_ioports {
        void __iomem            *cmd_addr;
        void __iomem            *data_addr;
@@ -462,6 +463,7 @@ struct ata_ioports {
        void __iomem            *bmdma_addr;
        void __iomem            *scr_addr;
 };
+#endif /* CONFIG_ATA_SFF */
 
 struct ata_host {
        spinlock_t              lock;
@@ -648,7 +650,9 @@ struct ata_port {
        struct ata_prd          *prd;    /* our SG list */
        dma_addr_t              prd_dma; /* and its DMA mapping */
 
+#ifdef CONFIG_ATA_SFF
        struct ata_ioports      ioaddr; /* ATA cmd/ctl/dma register blocks */
+#endif /* CONFIG_ATA_SFF */
 
        u8                      ctl;    /* cache of ATA control register */
        u8                      last_ctl;       /* Cache last written value */
@@ -760,6 +764,7 @@ struct ata_port_operations {
        void (*port_stop)(struct ata_port *ap);
        void (*host_stop)(struct ata_host *host);
 
+#ifdef CONFIG_ATA_SFF
        /*
         * SFF / taskfile oriented ops
         */
@@ -779,6 +784,7 @@ struct ata_port_operations {
        void (*bmdma_start)(struct ata_queued_cmd *qc);
        void (*bmdma_stop)(struct ata_queued_cmd *qc);
        u8   (*bmdma_status)(struct ata_port *ap);
+#endif /* CONFIG_ATA_SFF */
 
        /*
         * Obsolete
@@ -1349,6 +1355,8 @@ static inline struct ata_port *ata_shost_to_port(struct Scsi_Host *host)
 /**************************************************************************
  * SFF - drivers/ata/libata-sff.c
  */
+#ifdef CONFIG_ATA_SFF
+
 extern const struct ata_port_operations ata_sff_port_ops;
 extern const struct ata_port_operations ata_bmdma_port_ops;
 
@@ -1489,5 +1497,6 @@ static inline u8 ata_wait_idle(struct ata_port *ap)
 
        return status;
 }
+#endif /* CONFIG_ATA_SFF */
 
 #endif /* __LINUX_LIBATA_H__ */