]> Pileus Git - ~andy/linux/blobdiff - drivers/net/ethernet/mellanox/mlx4/main.c
net/mlx4_en: Add HW timestamping (TS) support
[~andy/linux] / drivers / net / ethernet / mellanox / mlx4 / main.c
index e81840faa6c69b3c3b92ae1a0c30a40f83b9d548..0d32a82458bfb0d10f95ebd6f914f05b6d5e4682 100644 (file)
@@ -1228,6 +1228,28 @@ static void unmap_bf_area(struct mlx4_dev *dev)
                io_mapping_free(mlx4_priv(dev)->bf_mapping);
 }
 
+cycle_t mlx4_read_clock(struct mlx4_dev *dev)
+{
+       u32 clockhi, clocklo, clockhi1;
+       cycle_t cycles;
+       int i;
+       struct mlx4_priv *priv = mlx4_priv(dev);
+
+       for (i = 0; i < 10; i++) {
+               clockhi = swab32(readl(priv->clock_mapping));
+               clocklo = swab32(readl(priv->clock_mapping + 4));
+               clockhi1 = swab32(readl(priv->clock_mapping));
+               if (clockhi == clockhi1)
+                       break;
+       }
+
+       cycles = (u64) clockhi << 32 | (u64) clocklo;
+
+       return cycles;
+}
+EXPORT_SYMBOL_GPL(mlx4_read_clock);
+
+
 static int map_internal_clock(struct mlx4_dev *dev)
 {
        struct mlx4_priv *priv = mlx4_priv(dev);