305 /* if interrupts are not enabled, poll when results are available */
306 if (!(qlge->flags & INTERRUPTS_ENABLED)) {
307 rtn_val = ql_issue_mailbox_cmd_and_poll_rsp(qlge, mbx_cmd,
308 &qlge->received_mbx_cmds);
309 if (rtn_val == DDI_SUCCESS) {
310 for (i = 0; i < NUM_MAILBOX_REGS; i++)
311 mbx_cmd->mb[i] = qlge->received_mbx_cmds.mb[i];
312 }
313 } else {
314 rtn_val = ql_issue_mailbox_cmd(qlge, mbx_cmd);
315 if (rtn_val != DDI_SUCCESS) {
316 cmn_err(CE_WARN, "%s(%d) ql_issue_mailbox_cmd failed",
317 __func__, qlge->instance);
318 goto err;
319 }
320 qlge->mbx_wait_completion = 1;
321 while (!done && qlge->mbx_wait_completion && !ddi_in_panic()) {
322 /* default 5 seconds from now to timeout */
323 timer = ddi_get_lbolt();
324 if (mbx_cmd->timeout) {
325 timer +=
326 mbx_cmd->timeout * drv_usectohz(1000000);
327 } else {
328 timer += 5 * drv_usectohz(1000000);
329 }
330 if (cv_timedwait(&qlge->cv_mbx_intr, &qlge->mbx_mutex,
331 timer) == -1) {
332 /*
333 * The timeout time 'timer' was
334 * reached or expired without the condition
335 * being signaled.
336 */
337 cmn_err(CE_WARN, "%s(%d) Wait for Mailbox cmd "
338 "complete timeout.",
339 __func__, qlge->instance);
340 rtn_val = DDI_FAILURE;
341 done = 1;
342 } else {
343 QL_PRINT(DBG_MBX,
344 ("%s(%d) mailbox completion signal received"
345 " \n", __func__, qlge->instance));
346 for (i = 0; i < NUM_MAILBOX_REGS; i++) {
347 mbx_cmd->mb[i] =
348 qlge->received_mbx_cmds.mb[i];
|
305 /* if interrupts are not enabled, poll when results are available */
306 if (!(qlge->flags & INTERRUPTS_ENABLED)) {
307 rtn_val = ql_issue_mailbox_cmd_and_poll_rsp(qlge, mbx_cmd,
308 &qlge->received_mbx_cmds);
309 if (rtn_val == DDI_SUCCESS) {
310 for (i = 0; i < NUM_MAILBOX_REGS; i++)
311 mbx_cmd->mb[i] = qlge->received_mbx_cmds.mb[i];
312 }
313 } else {
314 rtn_val = ql_issue_mailbox_cmd(qlge, mbx_cmd);
315 if (rtn_val != DDI_SUCCESS) {
316 cmn_err(CE_WARN, "%s(%d) ql_issue_mailbox_cmd failed",
317 __func__, qlge->instance);
318 goto err;
319 }
320 qlge->mbx_wait_completion = 1;
321 while (!done && qlge->mbx_wait_completion && !ddi_in_panic()) {
322 /* default 5 seconds from now to timeout */
323 timer = ddi_get_lbolt();
324 if (mbx_cmd->timeout) {
325 timer += drv_sectohz(mbx_cmd->timeout);
326 } else {
327 timer += drv_sectohz(5);
328 }
329 if (cv_timedwait(&qlge->cv_mbx_intr, &qlge->mbx_mutex,
330 timer) == -1) {
331 /*
332 * The timeout time 'timer' was
333 * reached or expired without the condition
334 * being signaled.
335 */
336 cmn_err(CE_WARN, "%s(%d) Wait for Mailbox cmd "
337 "complete timeout.",
338 __func__, qlge->instance);
339 rtn_val = DDI_FAILURE;
340 done = 1;
341 } else {
342 QL_PRINT(DBG_MBX,
343 ("%s(%d) mailbox completion signal received"
344 " \n", __func__, qlge->instance));
345 for (i = 0; i < NUM_MAILBOX_REGS; i++) {
346 mbx_cmd->mb[i] =
347 qlge->received_mbx_cmds.mb[i];
|