}
 
 static void mlx4_ib_event(struct mlx4_dev *dev, void *ibdev_ptr,
-                         enum mlx4_dev_event event, int subtype,
-                         int port)
+                         enum mlx4_dev_event event, int port)
 {
        struct ib_event ibev;
 
        switch (event) {
-       case MLX4_EVENT_TYPE_PORT_CHANGE:
-               ibev.event = subtype == MLX4_PORT_CHANGE_SUBTYPE_ACTIVE ?
-                       IB_EVENT_PORT_ACTIVE : IB_EVENT_PORT_ERR;
+       case MLX4_DEV_EVENT_PORT_UP:
+               ibev.event = IB_EVENT_PORT_ACTIVE;
                break;
 
-       case MLX4_EVENT_TYPE_LOCAL_CATAS_ERROR:
+       case MLX4_DEV_EVENT_PORT_DOWN:
+               ibev.event = IB_EVENT_PORT_ERR;
+               break;
+
+       case MLX4_DEV_EVENT_CATASTROPHIC_ERROR:
                ibev.event = IB_EVENT_DEVICE_FATAL;
                break;
 
 
        if (readl(priv->catas_err.map)) {
                dump_err_buf(dev);
 
-               mlx4_dispatch_event(dev, MLX4_EVENT_TYPE_LOCAL_CATAS_ERROR, 0, 0);
+               mlx4_dispatch_event(dev, MLX4_DEV_EVENT_CATASTROPHIC_ERROR, 0);
 
                if (internal_err_reset) {
                        spin_lock(&catas_lock);
 
                        break;
 
                case MLX4_EVENT_TYPE_PORT_CHANGE:
-                       mlx4_dispatch_event(dev, eqe->type, eqe->subtype,
+                       mlx4_dispatch_event(dev,
+                                           eqe->subtype == MLX4_PORT_CHANGE_SUBTYPE_ACTIVE ?
+                                           MLX4_DEV_EVENT_PORT_UP :
+                                           MLX4_DEV_EVENT_PORT_DOWN,
                                            be32_to_cpu(eqe->event.port_change.port) >> 28);
                        break;
 
 
  * SOFTWARE.
  */
 
-#include <linux/mlx4/driver.h>
-
 #include "mlx4.h"
 
 struct mlx4_device_context {
 }
 EXPORT_SYMBOL_GPL(mlx4_unregister_interface);
 
-void mlx4_dispatch_event(struct mlx4_dev *dev, enum mlx4_event type,
-                        int subtype, int port)
+void mlx4_dispatch_event(struct mlx4_dev *dev, enum mlx4_dev_event type, int port)
 {
        struct mlx4_priv *priv = mlx4_priv(dev);
        struct mlx4_device_context *dev_ctx;
 
        list_for_each_entry(dev_ctx, &priv->ctx_list, list)
                if (dev_ctx->intf->event)
-                       dev_ctx->intf->event(dev, dev_ctx->context, type,
-                                            subtype, port);
+                       dev_ctx->intf->event(dev, dev_ctx->context, type, port);
 
        spin_unlock_irqrestore(&priv->ctx_lock, flags);
 }
 
 #include <linux/timer.h>
 
 #include <linux/mlx4/device.h>
+#include <linux/mlx4/driver.h>
 #include <linux/mlx4/doorbell.h>
 
 #define DRV_NAME       "mlx4_core"
 int mlx4_restart_one(struct pci_dev *pdev);
 int mlx4_register_device(struct mlx4_dev *dev);
 void mlx4_unregister_device(struct mlx4_dev *dev);
-void mlx4_dispatch_event(struct mlx4_dev *dev, enum mlx4_event type,
-                        int subtype, int port);
+void mlx4_dispatch_event(struct mlx4_dev *dev, enum mlx4_dev_event type, int port);
 
 struct mlx4_dev_cap;
 struct mlx4_init_hca_param;
 
        void *                  (*add)   (struct mlx4_dev *dev);
        void                    (*remove)(struct mlx4_dev *dev, void *context);
        void                    (*event) (struct mlx4_dev *dev, void *context,
-                                         enum mlx4_dev_event event, int subtype,
-                                         int port);
+                                         enum mlx4_dev_event event, int port);
        struct list_head        list;
 };