enic: changes to driver/firmware interface
authorScott Feldman <scofeldm@cisco.com>
Thu, 3 Sep 2009 17:02:35 +0000 (17:02 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 4 Sep 2009 03:19:23 +0000 (20:19 -0700)
Deprecate some old APIa; change arguments to stats dump all API; add new
interrupt assert API

Signed-off-by: Scott Feldman <scofeldm@cisco.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/enic/vnic_dev.c
drivers/net/enic/vnic_dev.h
drivers/net/enic/vnic_devcmd.h
drivers/net/enic/vnic_intr.c

index c8d3fc7517b09694961e0f050baa61f967fd01c4..29a48e8b59d379799e1447a39e4c08aec74ab6f8 100644 (file)
@@ -560,6 +560,20 @@ void vnic_dev_del_addr(struct vnic_dev *vdev, u8 *addr)
                printk(KERN_ERR "Can't del addr [%pM], %d\n", addr, err);
 }
 
+int vnic_dev_raise_intr(struct vnic_dev *vdev, u16 intr)
+{
+       u64 a0 = intr, a1 = 0;
+       int wait = 1000;
+       int err;
+
+       err = vnic_dev_cmd(vdev, CMD_IAR, &a0, &a1, wait);
+       if (err)
+               printk(KERN_ERR "Failed to raise INTR[%d], err %d\n",
+                       intr, err);
+
+       return err;
+}
+
 int vnic_dev_notify_set(struct vnic_dev *vdev, u16 intr)
 {
        u64 a0, a1;
index db1d63e0b97c7d9ff9b4816e0570517f0aa833f8..fc5e3eb35a5eac21dfc83275ea67c026c32108bb 100644 (file)
@@ -106,6 +106,7 @@ void vnic_dev_packet_filter(struct vnic_dev *vdev, int directed, int multicast,
 void vnic_dev_add_addr(struct vnic_dev *vdev, u8 *addr);
 void vnic_dev_del_addr(struct vnic_dev *vdev, u8 *addr);
 int vnic_dev_mac_addr(struct vnic_dev *vdev, u8 *mac_addr);
+int vnic_dev_raise_intr(struct vnic_dev *vdev, u16 intr);
 int vnic_dev_notify_set(struct vnic_dev *vdev, u16 intr);
 void vnic_dev_notify_unset(struct vnic_dev *vdev);
 int vnic_dev_link_status(struct vnic_dev *vdev);
index 2587f34fbfbdc7c1be26bc9cd5e1ea008a5d68dc..d78bbcc1fdf90b9d822b9ddc1aca92e5c8545599 100644 (file)
@@ -105,14 +105,6 @@ enum vnic_devcmd_cmd {
        CMD_MAC_ADDR            = _CMDC(_CMD_DIR_READ,
                                        _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 9),
 
-       /* disable/enable promisc mode: (u8)a0=0/1 */
-/***** XXX DEPRECATED *****/
-       CMD_PROMISC_MODE        = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 10),
-
-       /* disable/enable all-multi mode: (u8)a0=0/1 */
-/***** XXX DEPRECATED *****/
-       CMD_ALLMULTI_MODE       = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 11),
-
        /* add addr from (u48)a0 */
        CMD_ADDR_ADD            = _CMDCNW(_CMD_DIR_WRITE,
                                        _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 12),
@@ -182,7 +174,9 @@ enum vnic_devcmd_cmd {
        /* disable virtual link */
        CMD_DISABLE             = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 29),
 
-       /* stats dump all vnics on uplink in mem: (u64)a0=paddr (u32)a1=uif */
+       /* stats dump sum of all vnic stats on same uplink in mem:
+        *     (u64)a0=paddr
+        *     (u16)a1=sizeof stats area */
        CMD_STATS_DUMP_ALL      = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 30),
 
        /* init status:
@@ -211,7 +205,12 @@ enum vnic_devcmd_cmd {
        /* persistent binding info
         * in:  (u64)a0=paddr of arg
         *      (u32)a1=CMD_PERBI_XXX */
-       CMD_PERBI               = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_FC, 37),
+       CMD_PERBI               = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_FC, 37),
+
+       /* Interrupt Assert Register functionality
+        * in: (u16)a0=interrupt number to assert
+        */
+       CMD_IAR                 = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 38),
 };
 
 /* flags for CMD_OPEN */
@@ -244,6 +243,7 @@ enum vnic_devcmd_error {
        ERR_ENOMEM = 7,
        ERR_ETIMEDOUT = 8,
        ERR_ELINKDOWN = 9,
+       ERR_EMAXRES = 10,
 };
 
 struct vnic_devcmd_fw_info {
index ddc38f8f4656574885288ad4c9adba441ca25e72..1f8786d7195e1e01bde8d6b16a4b25ab3771bef6 100644 (file)
@@ -60,3 +60,8 @@ void vnic_intr_clean(struct vnic_intr *intr)
 {
        iowrite32(0, &intr->ctrl->int_credits);
 }
+
+void vnic_intr_raise(struct vnic_intr *intr)
+{
+       vnic_dev_raise_intr(intr->vdev, (u16)intr->index);
+}