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 <parav.pandit@emulex.com> Acked-by: David S. Miller <davem@davemloft.net> Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
parent
d48b97b403
commit
6a4ab669ad
1 changed files with 39 additions and 0 deletions
|
@ -15,6 +15,7 @@
|
|||
* Costa Mesa, CA 92626
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include "be.h"
|
||||
#include "be_cmds.h"
|
||||
|
||||
|
@ -2556,3 +2557,41 @@ int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter)
|
|||
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);
|
||||
|
|
Loading…
Reference in a new issue