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