From: Parav Pandit Date: Mon, 26 Mar 2012 14:27:12 +0000 (+0000) Subject: be2net: Add function to issue mailbox cmd on MQ X-Git-Tag: v2.6.39-400.9.0~390 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=48a3bda42ef6fd174736215751c337caf37b776d;p=users%2Fjedix%2Flinux-maple.git be2net: Add function to issue mailbox cmd on MQ - Add generic function to issue mailbox cmd on MQ as export function. - RoCE driver will use this before it setups its own MQ. Signed-off-by: Parav Pandit Acked-by: David S. Miller Signed-off-by: Roland Dreier --- diff --git a/drivers/net/benet/be_cmds.c b/drivers/net/benet/be_cmds.c index ef54235ac8d5..86a712401488 100644 --- a/drivers/net/benet/be_cmds.c +++ b/drivers/net/benet/be_cmds.c @@ -15,6 +15,7 @@ * Costa Mesa, CA 92626 */ +#include #include "be.h" #include "be_cmds.h" @@ -2591,3 +2592,41 @@ err: pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); return status; } + +int be_roce_mcc_cmd(void *netdev_handle, void *wrb_payload, + int wrb_payload_size, u16 *cmd_status, u16 *ext_status) +{ + struct be_adapter *adapter = netdev_priv(netdev_handle); + struct be_mcc_wrb *wrb; + struct be_cmd_req_hdr *hdr = (struct be_cmd_req_hdr *) wrb_payload; + struct be_cmd_req_hdr *req; + struct be_cmd_resp_hdr *resp; + int status; + + spin_lock_bh(&adapter->mcc_lock); + + wrb = wrb_from_mccq(adapter); + if (!wrb) { + status = -EBUSY; + goto err; + } + req = embedded_payload(wrb); + resp = embedded_payload(wrb); + + be_wrb_cmd_hdr_prepare(req, hdr->subsystem, + hdr->opcode, wrb_payload_size, wrb, NULL); + memcpy(req, wrb_payload, wrb_payload_size); + be_dws_cpu_to_le(req, wrb_payload_size); + + status = be_mcc_notify_wait(adapter); + if (cmd_status) + *cmd_status = (status & 0xffff); + if (ext_status) + *ext_status = 0; + memcpy(wrb_payload, resp, sizeof(*resp) + resp->response_length); + be_dws_le_to_cpu(wrb_payload, sizeof(*resp) + resp->response_length); +err: + spin_unlock_bh(&adapter->mcc_lock); + return status; +} +EXPORT_SYMBOL(be_roce_mcc_cmd);