oxnas: reboot target
[openwrt/openwrt.git] / target / linux / oxnas / files / drivers / ata / sata_oxnas.c
index 291a06f959821810d95eaa7530992ad30b3431b5..64afa728a18c3ab0b804791ccfeca280585e552b 100644 (file)
 #include <linux/clk.h>
 #include <linux/reset.h>
 
-#include <mach/utils.h>
+#include <linux/io.h>
+#include <linux/sizes.h>
+
+static inline void oxnas_register_clear_mask(void __iomem *p, unsigned mask)
+{
+       u32 val = readl_relaxed(p);
+
+       val &= ~mask;
+       writel_relaxed(val, p);
+}
+
+static inline void oxnas_register_set_mask(void __iomem *p, unsigned mask)
+{
+       u32 val = readl_relaxed(p);
+
+       val |= mask;
+       writel_relaxed(val, p);
+}
+
+static inline void oxnas_register_value_mask(void __iomem *p,
+                                            unsigned mask, unsigned new_value)
+{
+       /* TODO sanity check mask & new_value = new_value */
+       u32 val = readl_relaxed(p);
+
+       val &= ~mask;
+       val |= new_value;
+       writel_relaxed(val, p);
+}
 
 /* sgdma request structure */
 struct sgdma_request {
@@ -848,7 +876,7 @@ wait_for_lock:
                 * list so want to give reentrant accessors a chance to get
                 * access ASAP
                 */
-               if (!list_empty(&hd->scsi_wait_queue.task_list))
+               if (!list_empty(&hd->scsi_wait_queue.head))
                        wake_up(&hd->scsi_wait_queue);
        }
 
@@ -867,7 +895,7 @@ int sata_core_has_fast_waiters(struct ata_host *ah)
        struct sata_oxnas_host_priv *hd = ah->private_data;
 
        spin_lock_irqsave(&hd->core_lock, flags);
-       has_waiters = !list_empty(&hd->fast_wait_queue.task_list);
+       has_waiters = !list_empty(&hd->fast_wait_queue.head);
        spin_unlock_irqrestore(&hd->core_lock, flags);
 
        return has_waiters;
@@ -882,7 +910,7 @@ int sata_core_has_scsi_waiters(struct ata_host *ah)
 
        spin_lock_irqsave(&hd->core_lock, flags);
        has_waiters = hd->scsi_nonblocking_attempts ||
-                     !list_empty(&hd->scsi_wait_queue.task_list);
+                     !list_empty(&hd->scsi_wait_queue.head);
        spin_unlock_irqrestore(&hd->core_lock, flags);
 
        return has_waiters;
@@ -954,7 +982,7 @@ static void sata_oxnas_release_hw(struct ata_port *ap)
                        hd->locker_uid = 0;
                        hd->core_locked = 0;
                        released = 1;
-                       wake_up(!list_empty(&hd->scsi_wait_queue.task_list) ?
+                       wake_up(!list_empty(&hd->scsi_wait_queue.head) ?
                                                &hd->scsi_wait_queue :
                                                &hd->fast_wait_queue);
                }