[ofw] patch: move eq defenitions to a common header file

Tzachi Dar tzachid at mellanox.co.il
Wed Jul 9 02:38:32 PDT 2008


This patch is in order to allow other users of the eqs to use the code
that reads data from the eq.
(no new code is introduced, only moving code from .c file to .h file) 
 
Thanks
Tzachi
 
Index: inc/eq.h
 
===================================================================
 
--- inc/eq.h (revision 0)
 
+++ inc/eq.h (revision 0)
 
@@ -0,0 +1,129 @@
 
+/*
 
+ * Copyright (c) 2008 Mellanox Technologies.  All rights reserved.
 
+ * Portions Copyright (c) 2008 Microsoft Corporation.  All rights
reserved.
 
+ *
 
+ * This software is available to you under the OpenIB.org BSD license
 
+ * below:
 
+ *
 
+ *     Redistribution and use in source and binary forms, with or
 
+ *     without modification, are permitted provided that the following
 
+ *     conditions are met:
 
+ *
 
+ *      - Redistributions of source code must retain the above
 
+ *        copyright notice, this list of conditions and the following
 
+ *        disclaimer.
 
+ *
 
+ *      - Redistributions in binary form must reproduce the above
 
+ *        copyright notice, this list of conditions and the following
 
+ *        disclaimer in the documentation and/or other materials
 
+ *        provided with the distribution.
 
+ *
 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
 
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 
+ * SOFTWARE.
 
+ *
 
+ * $Id: ipoib_port.h 1310 2008-06-30 18:09:25Z ftillier $
 
+ */
 
+
 
+#ifndef MLX4_EQ_H
 
+#define MLX4_EQ_H
 
+
 
+enum {
+ MLX4_NUM_ASYNC_EQE = 0x100,
+ MLX4_NUM_SPARE_EQE = 0x80,
+ MLX4_EQ_ENTRY_SIZE = 0x20
+};
 
+
 
+struct mlx4_eq {
+ struct mlx4_dev        *dev;
+ void __iomem        *doorbell;
+ int   eqn;
+ u32   cons_index;
+ u16   irq;
+ u16   have_irq;
+ int   nent;
+ struct mlx4_buf_list   *page_list;
+ struct mlx4_mtt  mtt;
+ // Windows
+ KDPC  dpc;  /* DPC routine */
+ spinlock_t lock;  /* spinlock for simult DPCs */
+ int   eq_ix;  /* EQ index - 0..MLX4_NUM_EQ */
+ BOOLEAN (*isr)(void*); /* isr */
+ void *  ctx;  /* isr ctx */
+ USHORT eq_no_progress;  /* used to look for stacked card */
+};
+
 
+
 
+
 
+#pragma pack(push,1)
+struct mlx4_eqe {
+ u8   reserved1;
+ u8   type;
+ u8   reserved2;
+ u8   subtype;
+ union {
+  u32  raw[6];
+  struct {
+   __be32 cqn;
+  } __attribute__((packed)) comp;
+  struct {
+   u16 reserved1;
+   __be16 token;
+   u32 reserved2;
+   u8 reserved3[3];
+   u8 status;
+   __be64 out_param;
+  } __attribute__((packed)) cmd;
+  struct {
+   __be32 qpn;
+  } __attribute__((packed)) qp;
+  struct {
+   __be32 srqn;
+  } __attribute__((packed)) srq;
+  struct {
+   __be32 cqn;
+   u32 reserved1;
+   u8 reserved2[3];
+   u8 syndrome;
+  } __attribute__((packed)) cq_err;
+  struct {
+   u32 reserved1[2];
+   __be32 port;
+  } __attribute__((packed)) port_change;
+ }   event;
+ u8   reserved3[3];
+ u8   owner;
+} __attribute__((packed));
+#pragma pack(pop)
+
+static void eq_set_ci(struct mlx4_eq *eq, int req_not)
+{
+ __raw_writel((__force u32) cpu_to_be32((eq->cons_index & 0xffffff) |
+            req_not << 31),
+       eq->doorbell);
+ /* We still want ordering, just not swabbing, so add a barrier */
+ mb();
+}
+
+static struct mlx4_eqe *get_eqe(struct mlx4_eq *eq, u32 entry)
+{
+ unsigned long off = (entry & (eq->nent - 1)) * MLX4_EQ_ENTRY_SIZE;
+ return (struct mlx4_eqe *)(eq->page_list[off / PAGE_SIZE].buf + off %
PAGE_SIZE);
+}
+
+static struct mlx4_eqe *next_eqe_sw(struct mlx4_eq *eq)
+{
+ struct mlx4_eqe *eqe = get_eqe(eq, eq->cons_index);
+ return !!(eqe->owner & 0x80) ^ !!(eq->cons_index & eq->nent) ? NULL :
eqe;
+}
+
 
+
 
+
 
+#endif /* MLX4_EQ_H */
 
+
 
+
 
Index: net/eq.c
 
===================================================================
 
--- net/eq.c (revision 1353)
 
+++ net/eq.c (working copy)
 
@@ -34,13 +34,8 @@
 
 #include "mlx4.h"
 #include "cmd.h"
 #include "fw.h"
+#include "eq.h"
 
-enum {
- MLX4_NUM_ASYNC_EQE = 0x100,
- MLX4_NUM_SPARE_EQE = 0x80,
- MLX4_EQ_ENTRY_SIZE = 0x20
-};
-
 /*
  * Must be packed because start is 64 bits but only aligned to 32 bits.
  */
@@ -91,68 +86,6 @@
 
           (1ull << MLX4_EVENT_TYPE_SRQ_LIMIT)     | \
           (1ull << MLX4_EVENT_TYPE_CMD))
 
-#pragma pack(push,1)
-struct mlx4_eqe {
- u8   reserved1;
- u8   type;
- u8   reserved2;
- u8   subtype;
- union {
-  u32  raw[6];
-  struct {
-   __be32 cqn;
-  } __attribute__((packed)) comp;
-  struct {
-   u16 reserved1;
-   __be16 token;
-   u32 reserved2;
-   u8 reserved3[3];
-   u8 status;
-   __be64 out_param;
-  } __attribute__((packed)) cmd;
-  struct {
-   __be32 qpn;
-  } __attribute__((packed)) qp;
-  struct {
-   __be32 srqn;
-  } __attribute__((packed)) srq;
-  struct {
-   __be32 cqn;
-   u32 reserved1;
-   u8 reserved2[3];
-   u8 syndrome;
-  } __attribute__((packed)) cq_err;
-  struct {
-   u32 reserved1[2];
-   __be32 port;
-  } __attribute__((packed)) port_change;
- }   event;
- u8   reserved3[3];
- u8   owner;
-} __attribute__((packed));
-#pragma pack(pop)
-
-static void eq_set_ci(struct mlx4_eq *eq, int req_not)
-{
- __raw_writel((__force u32) cpu_to_be32((eq->cons_index & 0xffffff) |
-            req_not << 31),
-       eq->doorbell);
- /* We still want ordering, just not swabbing, so add a barrier */
- mb();
-}
-
-static struct mlx4_eqe *get_eqe(struct mlx4_eq *eq, u32 entry)
-{
- unsigned long off = (entry & (eq->nent - 1)) * MLX4_EQ_ENTRY_SIZE;
- return (struct mlx4_eqe *)(eq->page_list[off / PAGE_SIZE].buf + off %
PAGE_SIZE);
-}
-
-static struct mlx4_eqe *next_eqe_sw(struct mlx4_eq *eq)
-{
- struct mlx4_eqe *eqe = get_eqe(eq, eq->cons_index);
- return !!(eqe->owner & 0x80) ^ !!(eq->cons_index & eq->nent) ? NULL :
eqe;
-}
-
 #pragma warning( disable : 4706)
 static int mlx4_eq_int(struct mlx4_dev *dev, struct mlx4_eq *eq)
 {
Index: net/mlx4.h
 
===================================================================
 
--- net/mlx4.h (revision 1353)
 
+++ net/mlx4.h (working copy)
 
@@ -42,6 +42,7 @@
 
 #include "device.h"
 #include "doorbell.h"
 #include "bus_intf.h"
+#include "eq.h"
 
 
 #define DRV_NAME "mlx4_net"
@@ -163,25 +164,6 @@
 
  struct mlx4_icm       **icm;
 };
 
-struct mlx4_eq {
- struct mlx4_dev        *dev;
- void __iomem        *doorbell;
- int   eqn;
- u32   cons_index;
- u16   irq;
- u16   have_irq;
- int   nent;
- struct mlx4_buf_list   *page_list;
- struct mlx4_mtt  mtt;
- // Windows
- KDPC  dpc;  /* DPC routine */
- spinlock_t lock;  /* spinlock for simult DPCs */
- int   eq_ix;  /* EQ index - 0..MLX4_NUM_EQ */
- BOOLEAN (*isr)(void*); /* isr */
- void *  ctx;  /* isr ctx */
- USHORT eq_no_progress;  /* used to look for stacked card */
-};
-
 struct mlx4_profile {
  int   num_qp;
  int   rdmarc_per_qp;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openfabrics.org/pipermail/ofw/attachments/20080709/709ad1c0/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: eq_h.patch
Type: application/octet-stream
Size: 6765 bytes
Desc: eq_h.patch
URL: <http://lists.openfabrics.org/pipermail/ofw/attachments/20080709/709ad1c0/attachment.obj>


More information about the ofw mailing list