|
@@ -176,6 +176,60 @@ struct ahci_uc_priv {
|
|
|
u32 link_port_map; /*linkup port map*/
|
|
|
};
|
|
|
|
|
|
+struct ahci_ops {
|
|
|
+ /**
|
|
|
+ * reset() - reset the controller
|
|
|
+ *
|
|
|
+ * @dev: Controller to reset
|
|
|
+ * @return 0 if OK, -ve on error
|
|
|
+ */
|
|
|
+ int (*reset)(struct udevice *dev);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * port_status() - get the status of a SATA port
|
|
|
+ *
|
|
|
+ * @dev: Controller to reset
|
|
|
+ * @port: Port number to check (0 for first)
|
|
|
+ * @return 0 if detected, -ENXIO if nothing on port, other -ve on error
|
|
|
+ */
|
|
|
+ int (*port_status)(struct udevice *dev, int port);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * scan() - scan SATA ports
|
|
|
+ *
|
|
|
+ * @dev: Controller to scan
|
|
|
+ * @return 0 if OK, -ve on error
|
|
|
+ */
|
|
|
+ int (*scan)(struct udevice *dev);
|
|
|
+};
|
|
|
+
|
|
|
+#define ahci_get_ops(dev) ((struct ahci_ops *)(dev)->driver->ops)
|
|
|
+
|
|
|
+/**
|
|
|
+ * sata_reset() - reset the controller
|
|
|
+ *
|
|
|
+ * @dev: Controller to reset
|
|
|
+ * @return 0 if OK, -ve on error
|
|
|
+ */
|
|
|
+int sata_reset(struct udevice *dev);
|
|
|
+
|
|
|
+/**
|
|
|
+ * sata_port_status() - get the status of a SATA port
|
|
|
+ *
|
|
|
+ * @dev: Controller to reset
|
|
|
+ * @port: Port number to check (0 for first)
|
|
|
+ * @return 0 if detected, -ENXIO if nothin on port, other -ve on error
|
|
|
+ */
|
|
|
+int sata_dm_port_status(struct udevice *dev, int port);
|
|
|
+
|
|
|
+/**
|
|
|
+ * sata_scan() - scan SATA ports
|
|
|
+ *
|
|
|
+ * @dev: Controller to scan
|
|
|
+ * @return 0 if OK, -ve on error
|
|
|
+ */
|
|
|
+int sata_scan(struct udevice *dev);
|
|
|
+
|
|
|
int ahci_init(void __iomem *base);
|
|
|
int ahci_reset(void __iomem *base);
|
|
|
|