8
8
* Public License is included in this distribution in the file called COPYING.
10
10
* Contact Information:
11
* linux-drivers@serverengines.com
11
* linux-drivers@emulex.com
14
* 209 N. Fair Oaks Ave
15
* Costa Mesa, CA 92626
19
19
#include "be_cmds.h"
21
/* Must be a power of 2 or else MODULO will BUG_ON */
22
static int be_get_temp_freq = 32;
21
24
static void be_mcc_notify(struct be_adapter *adapter)
23
26
struct be_queue_info *mccq = &adapter->mcc_obj.q;
29
if (adapter->eeh_err) {
30
dev_info(&adapter->pdev->dev,
31
"Error in Card Detected! Cannot issue commands\n");
26
35
val |= mccq->id & DB_MCCQ_RING_ID_MASK;
27
36
val |= 1 << DB_MCCQ_NUM_POSTED_SHIFT;
827
862
be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_ETH, OPCODE_ETH_TX_CREATE,
865
if (lancer_chip(adapter)) {
866
req->hdr.version = 1;
867
AMAP_SET_BITS(struct amap_tx_context, if_id, ctxt,
830
871
req->num_pages = PAGES_4K_SPANNED(q_mem->va, q_mem->size);
831
872
req->ulp_num = BE_ULP1_NUM;
832
873
req->type = BE_ETH_TX_RING_TYPE_STANDARD;
1151
/* Uses synchronous mcc */
1152
int be_cmd_get_die_temperature(struct be_adapter *adapter)
1154
struct be_mcc_wrb *wrb;
1155
struct be_cmd_req_get_cntl_addnl_attribs *req;
1158
spin_lock_bh(&adapter->mcc_lock);
1160
wrb = wrb_from_mccq(adapter);
1165
req = embedded_payload(wrb);
1167
be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0,
1168
OPCODE_COMMON_GET_CNTL_ADDITIONAL_ATTRIBUTES);
1170
be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
1171
OPCODE_COMMON_GET_CNTL_ADDITIONAL_ATTRIBUTES, sizeof(*req));
1173
status = be_mcc_notify_wait(adapter);
1175
struct be_cmd_resp_get_cntl_addnl_attribs *resp =
1176
embedded_payload(wrb);
1177
adapter->drv_stats.be_on_die_temperature =
1178
resp->on_die_temperature;
1180
/* If IOCTL fails once, do not bother issuing it again */
1182
be_get_temp_freq = 0;
1185
spin_unlock_bh(&adapter->mcc_lock);
1106
1189
/* Uses Mbox */
1107
1190
int be_cmd_get_fw_ver(struct be_adapter *adapter, char *fw_ver)
1877
1960
spin_unlock_bh(&adapter->mcc_lock);
1964
int be_cmd_get_cntl_attributes(struct be_adapter *adapter)
1966
struct be_mcc_wrb *wrb;
1967
struct be_cmd_req_cntl_attribs *req;
1968
struct be_cmd_resp_cntl_attribs *resp;
1971
int payload_len = max(sizeof(*req), sizeof(*resp));
1972
struct mgmt_controller_attrib *attribs;
1973
struct be_dma_mem attribs_cmd;
1975
memset(&attribs_cmd, 0, sizeof(struct be_dma_mem));
1976
attribs_cmd.size = sizeof(struct be_cmd_resp_cntl_attribs);
1977
attribs_cmd.va = pci_alloc_consistent(adapter->pdev, attribs_cmd.size,
1979
if (!attribs_cmd.va) {
1980
dev_err(&adapter->pdev->dev,
1981
"Memory allocation failure\n");
1985
if (mutex_lock_interruptible(&adapter->mbox_lock))
1988
wrb = wrb_from_mbox(adapter);
1993
req = attribs_cmd.va;
1994
sge = nonembedded_sgl(wrb);
1996
be_wrb_hdr_prepare(wrb, payload_len, false, 1,
1997
OPCODE_COMMON_GET_CNTL_ATTRIBUTES);
1998
be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
1999
OPCODE_COMMON_GET_CNTL_ATTRIBUTES, payload_len);
2000
sge->pa_hi = cpu_to_le32(upper_32_bits(attribs_cmd.dma));
2001
sge->pa_lo = cpu_to_le32(attribs_cmd.dma & 0xFFFFFFFF);
2002
sge->len = cpu_to_le32(attribs_cmd.size);
2004
status = be_mbox_notify_wait(adapter);
2006
attribs = (struct mgmt_controller_attrib *)( attribs_cmd.va +
2007
sizeof(struct be_cmd_resp_hdr));
2008
adapter->hba_port_num = attribs->hba_attribs.phy_port;
2012
mutex_unlock(&adapter->mbox_lock);
2013
pci_free_consistent(adapter->pdev, attribs_cmd.size, attribs_cmd.va,
2019
int be_cmd_check_native_mode(struct be_adapter *adapter)
2021
struct be_mcc_wrb *wrb;
2022
struct be_cmd_req_set_func_cap *req;
2025
if (mutex_lock_interruptible(&adapter->mbox_lock))
2028
wrb = wrb_from_mbox(adapter);
2034
req = embedded_payload(wrb);
2036
be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0,
2037
OPCODE_COMMON_SET_DRIVER_FUNCTION_CAP);
2039
be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
2040
OPCODE_COMMON_SET_DRIVER_FUNCTION_CAP, sizeof(*req));
2042
req->valid_cap_flags = cpu_to_le32(CAPABILITY_SW_TIMESTAMPS |
2043
CAPABILITY_BE3_NATIVE_ERX_API);
2044
req->cap_flags = cpu_to_le32(CAPABILITY_BE3_NATIVE_ERX_API);
2046
status = be_mbox_notify_wait(adapter);
2048
struct be_cmd_resp_set_func_cap *resp = embedded_payload(wrb);
2049
adapter->be3_native = le32_to_cpu(resp->cap_flags) &
2050
CAPABILITY_BE3_NATIVE_ERX_API;
2053
mutex_unlock(&adapter->mbox_lock);