Lines Matching defs:fpkt

420 static void fcp_ipkt_sema_callback(struct fc_packet *fpkt);
437 static void fcp_unsol_callback(fc_packet_t *fpkt);
452 static void fcp_icmd_callback(fc_packet_t *fpkt);
455 static int fcp_check_reportlun(struct fcp_rsp *rsp, fc_packet_t *fpkt);
456 static void fcp_scsi_callback(fc_packet_t *fpkt);
457 static void fcp_retry_scsi_cmd(fc_packet_t *fpkt);
458 static void fcp_handle_inquiry(fc_packet_t *fpkt, struct fcp_ipkt *icmd);
459 static void fcp_handle_reportlun(fc_packet_t *fpkt, struct fcp_ipkt *icmd);
487 static void fcp_cmd_callback(fc_packet_t *fpkt);
488 static void fcp_complete_pkt(fc_packet_t *fpkt);
498 static void fcp_queue_ipkt(struct fcp_port *pptr, fc_packet_t *fpkt);
499 static int fcp_transport(opaque_t port_handle, fc_packet_t *fpkt,
511 static int fcp_alloc_cmd_resp(struct fcp_port *pptr, fc_packet_t *fpkt,
513 static void fcp_free_cmd_resp(struct fcp_port *pptr, fc_packet_t *fpkt);
576 static void fcp_print_error(fc_packet_t *fpkt);
612 fc_packet_t *fpkt);
712 #define FCP_MUST_RETRY(fpkt) \
713 ((fpkt)->pkt_state == FC_PKT_LOCAL_BSY || \
714 (fpkt)->pkt_state == FC_PKT_LOCAL_RJT || \
715 (fpkt)->pkt_state == FC_PKT_TRAN_BSY || \
716 (fpkt)->pkt_state == FC_PKT_ELS_IN_PROGRESS || \
717 (fpkt)->pkt_state == FC_PKT_NPORT_BSY || \
718 (fpkt)->pkt_state == FC_PKT_FABRIC_BSY || \
719 (fpkt)->pkt_state == FC_PKT_PORT_OFFLINE || \
720 (fpkt)->pkt_reason == FC_REASON_OFFLINE)
2292 fc_packet_t *fpkt = NULL;
2573 * Init fpkt pointer for use.
2576 fpkt = icmd->ipkt_fpkt;
2578 fpkt->pkt_tran_flags = FC_TRAN_CLASS3 | FC_TRAN_INTR;
2579 fpkt->pkt_tran_type = FC_PKT_FCP_READ; /* only rd for now */
2580 fpkt->pkt_timeout = fscsi->scsi_timeout;
2587 fcmd = (struct fcp_cmd *)fpkt->pkt_cmd;
2616 hp = &fpkt->pkt_cmd_fhdr;
2640 FCP_CP_OUT((uint8_t *)fcmd, fpkt->pkt_cmd,
2641 fpkt->pkt_cmd_acc, sizeof (struct fcp_cmd));
2655 fpkt);
2680 rsp = (struct fcp_rsp *)fpkt->pkt_resp;
2736 fcp_is_reconfig_needed(ptgt, fpkt);
2794 fscsi->scsi_pkt_state = fpkt->pkt_state;
2795 fscsi->scsi_pkt_action = fpkt->pkt_action;
2796 fscsi->scsi_pkt_reason = fpkt->pkt_reason;
2811 FCP_CP_IN(fpkt->pkt_data,
2813 fpkt->pkt_data_acc,
2862 fc_packet_t *fpkt)
2876 report_lun = kmem_zalloc(fpkt->pkt_datalen, KM_SLEEP);
2878 FCP_CP_IN(fpkt->pkt_data, report_lun, fpkt->pkt_data_acc,
2879 fpkt->pkt_datalen);
2888 lun_buflen = (fpkt->pkt_datalen -
2932 kmem_free(report_lun, fpkt->pkt_datalen);
2977 kmem_free(report_lun, fpkt->pkt_datalen);
3278 struct fc_packet *fpkt;
3317 fpkt = icmd->ipkt_fpkt;
3319 fpkt->pkt_tran_flags = FC_TRAN_CLASS3 | FC_TRAN_INTR;
3320 fpkt->pkt_tran_type = FC_PKT_EXCHANGE;
3321 fpkt->pkt_timeout = FCP_ELS_TIMEOUT;
3326 hp = &fpkt->pkt_cmd_fhdr;
3347 FCP_CP_OUT((uint8_t *)&logi, fpkt->pkt_cmd,
3348 fpkt->pkt_cmd_acc, sizeof (struct la_els_logi));
3354 fc_ulp_login(pptr->port_fp_handle, &fpkt, 1);
3366 *fc_pkt_state = fpkt->pkt_state;
3367 *fc_pkt_reason = fpkt->pkt_reason;
3368 *fc_pkt_action = fpkt->pkt_action;
3419 struct fc_packet *fpkt;
3421 fpkt = icmd->ipkt_fpkt;
3427 fpkt->pkt_comp = fcp_ipkt_sema_callback;
3451 struct fc_packet *fpkt;
3455 fpkt = icmd->ipkt_fpkt;
3465 switch (fpkt->pkt_state) {
3470 switch (fpkt->pkt_reason) {
3491 switch (fpkt->pkt_reason) {
3498 switch (fpkt->pkt_reason) {
3517 * Argument: fpkt FC packet (points to the icmd)
3524 fcp_ipkt_sema_callback(struct fc_packet *fpkt)
3528 icmd = (struct fcp_ipkt *)fpkt->pkt_ulp_private;
5146 fc_packet_t *fpkt;
5184 fpkt = icmd->ipkt_fpkt;
5186 fpkt->pkt_cmdlen = cmd_len;
5187 fpkt->pkt_rsplen = resp_len;
5188 fpkt->pkt_datalen = 0;
5191 /* fill in fpkt info */
5192 fpkt->pkt_tran_flags = FC_TRAN_CLASS3 | FC_TRAN_INTR;
5193 fpkt->pkt_tran_type = FC_PKT_EXCHANGE;
5194 fpkt->pkt_timeout = FCP_ELS_TIMEOUT;
5196 /* get ptr to frame hdr in fpkt */
5197 hp = &fpkt->pkt_cmd_fhdr;
5230 hp = &fpkt->pkt_cmd_fhdr;
5235 FCP_CP_OUT((uint8_t *)&logi, fpkt->pkt_cmd,
5236 fpkt->pkt_cmd_acc, sizeof (struct la_els_logi));
5245 rval = fc_ulp_login(pptr->port_fp_handle, &fpkt, 1);
5272 hp = &fpkt->pkt_cmd_fhdr;
5309 FCP_CP_OUT((uint8_t *)&prli, fpkt->pkt_cmd,
5310 fpkt->pkt_cmd_acc, sizeof (struct la_els_prli));
5319 rval = fc_ulp_issue_els(pptr->port_fp_handle, fpkt);
5545 fcp_unsol_callback(fc_packet_t *fpkt)
5547 struct fcp_ipkt *icmd = (struct fcp_ipkt *)fpkt->pkt_ulp_private;
5550 if (fpkt->pkt_state != FC_PKT_SUCCESS) {
5553 (void) fc_ulp_pkt_error(fpkt, &state, &reason,
5559 state, reason, fpkt->pkt_cmd_fhdr.ox_id,
5560 fpkt->pkt_cmd_fhdr.rx_id);
5595 fc_packet_t *fpkt;
5625 fpkt = icmd->ipkt_fpkt;
5626 fpkt->pkt_tran_flags = FC_TRAN_CLASS3 | FC_TRAN_INTR;
5627 fpkt->pkt_tran_type = FC_PKT_OUTBOUND;
5628 fpkt->pkt_timeout = FCP_ELS_TIMEOUT;
5629 fpkt->pkt_cmdlen = sizeof (la_els_prli_t);
5630 fpkt->pkt_rsplen = 0;
5631 fpkt->pkt_datalen = 0;
5667 FCP_CP_OUT((uint8_t *)from, fpkt->pkt_resp,
5668 fpkt->pkt_resp_acc, sizeof (struct la_els_prli));
5670 FCP_CP_OUT((uint8_t *)&prli, fpkt->pkt_cmd,
5671 fpkt->pkt_cmd_acc, sizeof (struct la_els_prli));
5673 fcp_unsol_resp_init(fpkt, buf, R_CTL_ELS_RSP, FC_TYPE_EXTENDED_LS);
5680 if ((rval = fc_ulp_issue_els(pptr->port_fp_handle, fpkt)) !=
5684 fcp_queue_ipkt(pptr, fpkt);
5734 fc_packet_t *fpkt;
5777 /* get ptr to fpkt substruct and fill it in */
5778 fpkt = icmd->ipkt_fpkt;
5779 fpkt->pkt_data_cookie = (ddi_dma_cookie_t *)((caddr_t)icmd +
5784 fpkt->pkt_fca_device = ptgt->tgt_fca_dev;
5787 fpkt->pkt_comp = fcp_icmd_callback;
5788 fpkt->pkt_tran_flags = (FC_TRAN_CLASS3 | FC_TRAN_INTR);
5789 fpkt->pkt_cmdlen = cmd_len;
5790 fpkt->pkt_rsplen = resp_len;
5791 fpkt->pkt_datalen = data_len;
5806 fpkt->pkt_ulp_rscn_infop = NULL;
5808 fpkt->pkt_ulp_rscn_infop = kmem_zalloc(
5810 if (fpkt->pkt_ulp_rscn_infop == NULL) {
5817 if (fpkt->pkt_ulp_rscn_infop != NULL) {
5820 rscnp = (fc_ulp_rscn_info_t *)fpkt->pkt_ulp_rscn_infop;
5836 fpkt->pkt_pd = ptgt->tgt_pd_handle;
5839 if (fc_ulp_init_packet(pptr->port_fp_handle, fpkt, KM_NOSLEEP)
5849 if (fc_ulp_init_packet(pptr->port_fp_handle, fpkt, KM_NOSLEEP)
5865 rval = fc_ulp_uninit_packet(pptr->port_fp_handle, fpkt);
5884 if (fpkt->pkt_ulp_rscn_infop != NULL) {
5885 kmem_free(fpkt->pkt_ulp_rscn_infop,
5887 fpkt->pkt_ulp_rscn_infop = NULL;
5963 fc_packet_t *fpkt;
5968 fpkt = &icmd->ipkt_fc_packet;
5970 ASSERT(fpkt->pkt_cmd_dma == NULL && fpkt->pkt_data_dma == NULL &&
5971 fpkt->pkt_resp_dma == NULL);
5976 fpkt->pkt_cmd = kmem_zalloc(fpkt->pkt_cmdlen, flags);
5977 if (fpkt->pkt_cmd == NULL) {
5981 fpkt->pkt_resp = kmem_zalloc(fpkt->pkt_rsplen, flags);
5982 if (fpkt->pkt_resp == NULL) {
5986 ASSERT(fpkt->pkt_cmdlen && fpkt->pkt_rsplen);
5988 rval = fcp_alloc_cmd_resp(pptr, fpkt, flags);
5990 ASSERT(fpkt->pkt_cmd_dma == NULL &&
5991 fpkt->pkt_resp_dma == NULL);
5997 if ((fpkt->pkt_datalen != 0) &&
6004 NULL, &fpkt->pkt_data_dma) != DDI_SUCCESS) {
6008 if (ddi_dma_mem_alloc(fpkt->pkt_data_dma, fpkt->pkt_datalen,
6010 DDI_DMA_DONTWAIT, NULL, &fpkt->pkt_data,
6011 &real_size, &fpkt->pkt_data_acc) != DDI_SUCCESS) {
6016 if (real_size < fpkt->pkt_datalen) {
6021 if (ddi_dma_addr_bind_handle(fpkt->pkt_data_dma,
6022 NULL, fpkt->pkt_data, real_size, DDI_DMA_READ |
6033 fpkt->pkt_data_cookie_cnt = ccount;
6035 cp = fpkt->pkt_data_cookie;
6040 ddi_dma_nextcookie(fpkt->pkt_data_dma,
6045 } else if (fpkt->pkt_datalen != 0) {
6050 fpkt->pkt_data = kmem_alloc(fpkt->pkt_datalen, flags);
6051 if (fpkt->pkt_data == NULL) {
6061 (void) ddi_dma_unbind_handle(fpkt->pkt_data_dma);
6064 if (fpkt->pkt_data_dma) {
6065 if (fpkt->pkt_data) {
6066 ddi_dma_mem_free(&fpkt->pkt_data_acc);
6068 ddi_dma_free_handle(&fpkt->pkt_data_dma);
6070 if (fpkt->pkt_data) {
6071 kmem_free(fpkt->pkt_data, fpkt->pkt_datalen);
6076 if (fpkt->pkt_cmd) {
6077 kmem_free(fpkt->pkt_cmd, fpkt->pkt_cmdlen);
6079 if (fpkt->pkt_resp) {
6080 kmem_free(fpkt->pkt_resp, fpkt->pkt_rsplen);
6084 fcp_free_cmd_resp(pptr, fpkt);
6095 fc_packet_t *fpkt = icmd->ipkt_fpkt;
6097 if (fpkt->pkt_data_dma) {
6098 (void) ddi_dma_unbind_handle(fpkt->pkt_data_dma);
6099 if (fpkt->pkt_data) {
6100 ddi_dma_mem_free(&fpkt->pkt_data_acc);
6102 ddi_dma_free_handle(&fpkt->pkt_data_dma);
6104 if (fpkt->pkt_data) {
6105 kmem_free(fpkt->pkt_data, fpkt->pkt_datalen);
6113 if (fpkt->pkt_cmd) {
6114 kmem_free(fpkt->pkt_cmd, icmd->ipkt_cmdlen);
6116 if (fpkt->pkt_resp) {
6117 kmem_free(fpkt->pkt_resp, icmd->ipkt_resplen);
6120 ASSERT(fpkt->pkt_resp_dma != NULL && fpkt->pkt_cmd_dma != NULL);
6122 fcp_free_cmd_resp(pptr, fpkt);
6190 * this means fpkt pts to a response to either a PLOGI or a PRLI
6196 fcp_icmd_callback(fc_packet_t *fpkt)
6212 icmd = (struct fcp_ipkt *)fpkt->pkt_ulp_private;
6218 FCP_CP_IN(fpkt->pkt_resp, &resp, fpkt->pkt_resp_acc, sizeof (resp));
6221 FCP_CP_IN(fpkt->pkt_cmd, &prli_s, fpkt->pkt_cmd_acc,
6229 icmd->ipkt_opcode, fpkt->pkt_state, fpkt->pkt_reason,
6232 if ((fpkt->pkt_state == FC_PKT_SUCCESS) &&
6244 ASSERT(fpkt->pkt_pd != NULL);
6245 ptgt->tgt_pd_handle = fpkt->pkt_pd;
6282 FCP_CP_IN(fpkt->pkt_resp, prli, fpkt->pkt_resp_acc,
6421 if (FCP_MUST_RETRY(fpkt)) {
6422 fcp_queue_ipkt(pptr, fpkt);
6429 " reason= %x", ptgt->tgt_d_id, fpkt->pkt_state,
6430 fpkt->pkt_reason);
6444 if (fpkt->pkt_state == FC_PKT_TIMEOUT) {
6445 fpkt->pkt_timeout +=
6450 fpkt);
6457 fcp_queue_ipkt(pptr, fpkt);
6477 if (FCP_MUST_RETRY(fpkt)) {
6478 fcp_queue_ipkt(pptr, fpkt);
6484 fpkt->pkt_state != FC_PKT_PORT_OFFLINE) {
6486 fcp_print_error(fpkt);
6521 fc_packet_t *fpkt;
6547 fpkt = icmd->ipkt_fpkt;
6548 fpkt->pkt_tran_flags = FC_TRAN_CLASS3 | FC_TRAN_INTR;
6554 fcmd = (struct fcp_cmd *)fpkt->pkt_cmd;
6560 fpkt->pkt_timeout = FCP_SCSI_CMD_TIMEOUT;
6562 hp = &fpkt->pkt_cmd_fhdr;
6603 fpkt->pkt_tran_type = FC_PKT_FCP_READ;
6604 fpkt->pkt_comp = fcp_scsi_callback;
6617 fpkt->pkt_tran_type = FC_PKT_FCP_READ;
6618 fpkt->pkt_comp = fcp_scsi_callback;
6643 fpkt->pkt_tran_type = FC_PKT_FCP_READ;
6644 fpkt->pkt_comp = fcp_scsi_callback;
6661 FCP_CP_OUT((uint8_t *)fcmd, fpkt->pkt_cmd,
6662 fpkt->pkt_cmd_acc, sizeof (struct fcp_cmd));
6669 if (fcp_transport(pptr->port_fp_handle, fpkt, 1) !=
6692 fcp_check_reportlun(struct fcp_rsp *rsp, fc_packet_t *fpkt)
6698 fpkt->pkt_ulp_private;
6716 FCP_CP_IN(fpkt->pkt_resp, &new_resp,
6717 fpkt->pkt_resp_acc, sizeof (new_resp));
6723 FCP_CP_OUT(&new_resp, fpkt->pkt_resp,
6724 fpkt->pkt_resp_acc, sizeof (new_resp));
6727 FCP_CP_OUT(fcp_dummy_lun, fpkt->pkt_data,
6728 fpkt->pkt_data_acc, sizeof (fcp_dummy_lun));
6755 sense = (struct scsi_extended_sense *)(fpkt->pkt_resp +
6758 FCP_CP_IN(fpkt->pkt_resp + sizeof (struct fcp_rsp) +
6759 rsp->fcp_response_len, sense, fpkt->pkt_resp_acc,
6779 FCP_CP_IN(fpkt->pkt_resp, &new_resp,
6780 fpkt->pkt_resp_acc, sizeof (new_resp));
6786 FCP_CP_OUT(&new_resp, fpkt->pkt_resp,
6787 fpkt->pkt_resp_acc, sizeof (new_resp));
6790 FCP_CP_OUT(fcp_dummy_lun, fpkt->pkt_data,
6791 fpkt->pkt_data_acc, sizeof (fcp_dummy_lun));
6809 FCP_CP_IN(fpkt->pkt_resp, &new_resp,
6810 fpkt->pkt_resp_acc, sizeof (new_resp));
6816 FCP_CP_OUT(&new_resp, fpkt->pkt_resp,
6817 fpkt->pkt_resp_acc, sizeof (new_resp));
6820 FCP_CP_OUT(fcp_dummy_lun, fpkt->pkt_data,
6821 fpkt->pkt_data_acc, sizeof (fcp_dummy_lun));
6876 fpkt->pkt_cmd_fhdr.d_id, sense->es_key,
6890 * Argument: *fpkt FC packet used to convey the command
6895 fcp_scsi_callback(fc_packet_t *fpkt)
6898 fpkt->pkt_ulp_private;
6910 rsp = (struct fcp_rsp *)fpkt->pkt_resp;
6913 FCP_CP_IN(fpkt->pkt_resp, rsp, fpkt->pkt_resp_acc,
6921 fpkt->pkt_state, ptgt->tgt_d_id, icmd->ipkt_opcode,
6948 if ((fpkt->pkt_state != FC_PKT_SUCCESS) &&
6949 (fpkt->pkt_reason == FC_REASON_OVERRUN) &&
6951 fpkt->pkt_state = FC_PKT_SUCCESS;
6954 if (fpkt->pkt_state != FC_PKT_SUCCESS) {
6957 "icmd failed with state=0x%x for %x", fpkt->pkt_state,
6960 if (fpkt->pkt_reason == FC_REASON_CRC_ERROR) {
6966 (void) fcp_handle_page83(fpkt, icmd, 1);
6970 if (fpkt->pkt_state == FC_PKT_TIMEOUT ||
6971 FCP_MUST_RETRY(fpkt)) {
6972 fpkt->pkt_timeout += FCP_TIMEOUT_DELTA;
6973 fcp_retry_scsi_cmd(fpkt);
6985 fcp_print_error(fpkt);
7022 bep = (struct fcp_rsp_info *)(fpkt->pkt_resp +
7026 FCP_CP_IN(fpkt->pkt_resp + sizeof (struct fcp_rsp), bep,
7027 fpkt->pkt_resp_acc, sizeof (struct fcp_rsp_info));
7031 fcp_retry_scsi_cmd(fpkt);
7041 fcp_retry_scsi_cmd(fpkt);
7047 fcp_queue_ipkt(pptr, fpkt);
7083 fpkt->pkt_state = FC_PKT_LOCAL_RJT;
7084 (void) fcp_handle_page83(fpkt, icmd, 1);
7109 rval = fcp_check_reportlun(rsp, fpkt);
7119 FCP_CP_IN(fpkt->pkt_resp, rsp,
7120 fpkt->pkt_resp_acc,
7132 fcp_retry_scsi_cmd(fpkt);
7147 (void) ddi_dma_sync(fpkt->pkt_data_dma, 0, 0,
7154 fcp_handle_inquiry(fpkt, icmd);
7160 fcp_handle_reportlun(fpkt, icmd);
7165 (void) fcp_handle_page83(fpkt, icmd, 0);
7179 fcp_retry_scsi_cmd(fc_packet_t *fpkt)
7182 fpkt->pkt_ulp_private;
7196 fpkt->pkt_state, fpkt->pkt_reason);
7198 fcp_queue_ipkt(pptr, fpkt);
7211 fcp_print_error(fpkt);
7223 * Argument: *fpkt FC packet used to convey the command.
7232 fcp_handle_page83(fc_packet_t *fpkt, struct fcp_ipkt *icmd,
7244 ASSERT(icmd != NULL && fpkt != NULL);
7250 if (fpkt->pkt_state == FC_PKT_SUCCESS) {
7253 FCP_CP_IN(fpkt->pkt_data, dev_id_page, fpkt->pkt_data_acc,
7347 fcp_retry_scsi_cmd(fpkt);
7387 fpkt->pkt_state, fpkt->pkt_reason,
7430 * Argument: *fpkt FC packet used to convey the command.
7436 fcp_handle_inquiry(fc_packet_t *fpkt, struct fcp_ipkt *icmd)
7445 ASSERT(icmd != NULL && fpkt != NULL);
7451 FCP_CP_IN(fpkt->pkt_data, &plun->lun_inq, fpkt->pkt_data_acc,
7564 * Argument: *fpkt FC packet used to convey the command.
7570 fcp_handle_reportlun(fc_packet_t *fpkt, struct fcp_ipkt *icmd)
7585 len = fpkt->pkt_datalen;
7595 FCP_CP_IN(fpkt->pkt_data, report_lun, fpkt->pkt_data_acc,
7596 fpkt->pkt_datalen);
7612 nluns_bufmax = (fpkt->pkt_datalen - FCP_LUN_HEADER) / FCP_LUN_SIZE;
8734 fcp_cmd_callback(fc_packet_t *fpkt)
8736 struct fcp_pkt *cmd = (struct fcp_pkt *)fpkt->pkt_ulp_private;
8757 fcp_complete_pkt(fpkt);
8770 fcp_complete_pkt(fc_packet_t *fpkt)
8774 fpkt->pkt_ulp_private;
8788 if (fpkt->pkt_state == FC_PKT_SUCCESS) {
8790 FCP_CP_IN(fpkt->pkt_resp, rsp, fpkt->pkt_resp_acc,
8799 if (fpkt->pkt_datalen) {
8801 if (fpkt->pkt_data_resid) {
8865 FCP_CP_IN(fpkt->pkt_resp +
8867 fpkt->pkt_resp_acc,
8905 sense_from = (caddr_t)fpkt->pkt_resp +
8932 fpkt->pkt_resp_acc, rqlen);
9007 switch (fpkt->pkt_state) {
9009 switch (fpkt->pkt_reason) {
9051 if (fpkt->pkt_reason == FC_REASON_LOGIN_REQUIRED) {
9110 if (fpkt->pkt_reason == FC_REASON_ABORT_FAILED) {
9118 switch (fpkt->pkt_reason) {
9177 FCP_CP_IN(fpkt->pkt_resp, rsp,
9178 fpkt->pkt_resp_acc,
9217 fpkt->pkt_state, fpkt->pkt_reason);
9226 " pkt reason=0x%x", cmd, ptgt->tgt_d_id, fpkt->pkt_state,
9227 fpkt->pkt_reason);
9489 fcp_queue_ipkt(struct fcp_port *pptr, fc_packet_t *fpkt)
9491 struct fcp_ipkt *icmd = (struct fcp_ipkt *)fpkt->pkt_ulp_private;
9536 * *fpkt Packet to submit to the transport layer.
9547 fcp_transport(opaque_t port_handle, fc_packet_t *fpkt, int internal)
9551 rval = fc_ulp_transport(port_handle, fpkt);
9597 icmd = (struct fcp_ipkt *)fpkt->pkt_ulp_private;
9624 cmd = (struct fcp_pkt *)fpkt->pkt_ulp_private;
10474 fc_packet_t *fpkt;
10482 fpkt = (fc_packet_t *)&cmd->cmd_fc_packet;
10483 cmd->cmd_fp_pkt = fpkt;
10490 fpkt->pkt_data_cookie = (ddi_dma_cookie_t *)((caddr_t)cmd +
10493 fpkt->pkt_cmdlen = sizeof (struct fcp_cmd);
10494 fpkt->pkt_rsplen = FCP_MAX_RSP_IU_SIZE;
10505 fpkt->pkt_resp_acc = fpkt->pkt_cmd_acc = NULL;
10506 fpkt->pkt_cmd = (caddr_t)&cmd->cmd_fcp_cmd;
10507 fpkt->pkt_resp = cmd->cmd_fcp_rsp;
10514 if (fcp_alloc_cmd_resp(pptr, fpkt, kmflags) != FC_SUCCESS) {
10565 * *fpkt fc packet for which the cmd and resp packet should be
10576 fcp_alloc_cmd_resp(struct fcp_port *pptr, fc_packet_t *fpkt, int flags)
10589 cmd_len = fpkt->pkt_cmdlen;
10590 resp_len = fpkt->pkt_rsplen;
10592 ASSERT(fpkt->pkt_cmd_dma == NULL);
10596 cb, NULL, &fpkt->pkt_cmd_dma) != DDI_SUCCESS) {
10601 rval = ddi_dma_mem_alloc(fpkt->pkt_cmd_dma, cmd_len,
10603 (caddr_t *)&fpkt->pkt_cmd, &real_len, &fpkt->pkt_cmd_acc);
10606 ddi_dma_free_handle(&fpkt->pkt_cmd_dma);
10611 ddi_dma_mem_free(&fpkt->pkt_cmd_acc);
10612 ddi_dma_free_handle(&fpkt->pkt_cmd_dma);
10617 rval = ddi_dma_addr_bind_handle(fpkt->pkt_cmd_dma, NULL,
10618 fpkt->pkt_cmd, real_len, DDI_DMA_WRITE | DDI_DMA_CONSISTENT,
10619 cb, NULL, &pkt_cookie, &fpkt->pkt_cmd_cookie_cnt);
10622 ddi_dma_mem_free(&fpkt->pkt_cmd_acc);
10623 ddi_dma_free_handle(&fpkt->pkt_cmd_dma);
10627 if (fpkt->pkt_cmd_cookie_cnt >
10629 (void) ddi_dma_unbind_handle(fpkt->pkt_cmd_dma);
10630 ddi_dma_mem_free(&fpkt->pkt_cmd_acc);
10631 ddi_dma_free_handle(&fpkt->pkt_cmd_dma);
10635 ASSERT(fpkt->pkt_cmd_cookie_cnt != 0);
10641 cp = fpkt->pkt_cmd_cookie = (ddi_dma_cookie_t *)kmem_alloc(
10642 fpkt->pkt_cmd_cookie_cnt * sizeof (pkt_cookie),
10646 (void) ddi_dma_unbind_handle(fpkt->pkt_cmd_dma);
10647 ddi_dma_mem_free(&fpkt->pkt_cmd_acc);
10648 ddi_dma_free_handle(&fpkt->pkt_cmd_dma);
10659 for (cnt = 1; cnt < fpkt->pkt_cmd_cookie_cnt; cnt++, cp++) {
10660 ddi_dma_nextcookie(fpkt->pkt_cmd_dma,
10665 ASSERT(fpkt->pkt_resp_dma == NULL);
10667 cb, NULL, &fpkt->pkt_resp_dma) != DDI_SUCCESS) {
10668 (void) ddi_dma_unbind_handle(fpkt->pkt_cmd_dma);
10669 ddi_dma_mem_free(&fpkt->pkt_cmd_acc);
10670 ddi_dma_free_handle(&fpkt->pkt_cmd_dma);
10674 rval = ddi_dma_mem_alloc(fpkt->pkt_resp_dma, resp_len,
10676 (caddr_t *)&fpkt->pkt_resp, &real_len,
10677 &fpkt->pkt_resp_acc);
10680 ddi_dma_free_handle(&fpkt->pkt_resp_dma);
10681 (void) ddi_dma_unbind_handle(fpkt->pkt_cmd_dma);
10682 ddi_dma_mem_free(&fpkt->pkt_cmd_acc);
10683 ddi_dma_free_handle(&fpkt->pkt_cmd_dma);
10684 kmem_free(fpkt->pkt_cmd_cookie,
10685 fpkt->pkt_cmd_cookie_cnt * sizeof (pkt_cookie));
10690 ddi_dma_mem_free(&fpkt->pkt_resp_acc);
10691 ddi_dma_free_handle(&fpkt->pkt_resp_dma);
10692 (void) ddi_dma_unbind_handle(fpkt->pkt_cmd_dma);
10693 ddi_dma_mem_free(&fpkt->pkt_cmd_acc);
10694 ddi_dma_free_handle(&fpkt->pkt_cmd_dma);
10695 kmem_free(fpkt->pkt_cmd_cookie,
10696 fpkt->pkt_cmd_cookie_cnt * sizeof (pkt_cookie));
10700 rval = ddi_dma_addr_bind_handle(fpkt->pkt_resp_dma, NULL,
10701 fpkt->pkt_resp, real_len, DDI_DMA_READ | DDI_DMA_CONSISTENT,
10702 cb, NULL, &pkt_cookie, &fpkt->pkt_resp_cookie_cnt);
10705 ddi_dma_mem_free(&fpkt->pkt_resp_acc);
10706 ddi_dma_free_handle(&fpkt->pkt_resp_dma);
10707 (void) ddi_dma_unbind_handle(fpkt->pkt_cmd_dma);
10708 ddi_dma_mem_free(&fpkt->pkt_cmd_acc);
10709 ddi_dma_free_handle(&fpkt->pkt_cmd_dma);
10710 kmem_free(fpkt->pkt_cmd_cookie,
10711 fpkt->pkt_cmd_cookie_cnt * sizeof (pkt_cookie));
10715 if (fpkt->pkt_resp_cookie_cnt >
10717 ddi_dma_mem_free(&fpkt->pkt_resp_acc);
10718 ddi_dma_free_handle(&fpkt->pkt_resp_dma);
10719 (void) ddi_dma_unbind_handle(fpkt->pkt_cmd_dma);
10720 ddi_dma_mem_free(&fpkt->pkt_cmd_acc);
10721 ddi_dma_free_handle(&fpkt->pkt_cmd_dma);
10722 kmem_free(fpkt->pkt_cmd_cookie,
10723 fpkt->pkt_cmd_cookie_cnt * sizeof (pkt_cookie));
10727 ASSERT(fpkt->pkt_resp_cookie_cnt != 0);
10729 cp = fpkt->pkt_resp_cookie = (ddi_dma_cookie_t *)kmem_alloc(
10730 fpkt->pkt_resp_cookie_cnt * sizeof (pkt_cookie),
10734 ddi_dma_mem_free(&fpkt->pkt_resp_acc);
10735 ddi_dma_free_handle(&fpkt->pkt_resp_dma);
10736 (void) ddi_dma_unbind_handle(fpkt->pkt_cmd_dma);
10737 ddi_dma_mem_free(&fpkt->pkt_cmd_acc);
10738 ddi_dma_free_handle(&fpkt->pkt_cmd_dma);
10739 kmem_free(fpkt->pkt_cmd_cookie,
10740 fpkt->pkt_cmd_cookie_cnt * sizeof (pkt_cookie));
10747 for (cnt = 1; cnt < fpkt->pkt_resp_cookie_cnt; cnt++, cp++) {
10748 ddi_dma_nextcookie(fpkt->pkt_resp_dma,
10765 * *fpkt fc packet containing the cmd and resp packet
10774 fcp_free_cmd_resp(struct fcp_port *pptr, fc_packet_t *fpkt)
10776 ASSERT(fpkt->pkt_resp_dma != NULL && fpkt->pkt_cmd_dma != NULL);
10778 if (fpkt->pkt_resp_dma) {
10779 (void) ddi_dma_unbind_handle(fpkt->pkt_resp_dma);
10780 ddi_dma_mem_free(&fpkt->pkt_resp_acc);
10781 ddi_dma_free_handle(&fpkt->pkt_resp_dma);
10784 if (fpkt->pkt_resp_cookie) {
10785 kmem_free(fpkt->pkt_resp_cookie,
10786 fpkt->pkt_resp_cookie_cnt * sizeof (ddi_dma_cookie_t));
10787 fpkt->pkt_resp_cookie = NULL;
10790 if (fpkt->pkt_cmd_dma) {
10791 (void) ddi_dma_unbind_handle(fpkt->pkt_cmd_dma);
10792 ddi_dma_mem_free(&fpkt->pkt_cmd_acc);
10793 ddi_dma_free_handle(&fpkt->pkt_cmd_dma);
10796 if (fpkt->pkt_cmd_cookie) {
10797 kmem_free(fpkt->pkt_cmd_cookie,
10798 fpkt->pkt_cmd_cookie_cnt * sizeof (ddi_dma_cookie_t));
10799 fpkt->pkt_cmd_cookie = NULL;
11381 fc_packet_t *fpkt;
11389 fpkt = cmd->cmd_fp_pkt;
11414 fpkt = cmd->cmd_fp_pkt;
11415 fpkt->pkt_data_acc = NULL;
11426 fpkt->pkt_pd = ptgt->tgt_pd_handle;
11428 if (fc_ulp_init_packet(pptr->port_fp_handle, fpkt, kf)
11437 hp = &fpkt->pkt_cmd_fhdr;
14152 fc_packet_t *fpkt = cmd->cmd_fp_pkt;
14163 fpkt->pkt_tran_type = FC_PKT_FCP_READ;
14167 fpkt->pkt_tran_type = FC_PKT_FCP_WRITE;
14170 fpkt->pkt_data_cookie = cmd->cmd_pkt->pkt_cookies;
14172 fpkt->pkt_data_cookie_cnt = cmd->cmd_pkt->pkt_numcookies;
14173 ASSERT(fpkt->pkt_data_cookie_cnt <=
14179 fpkt->pkt_datalen = cmd->cmd_dmacount;
14184 fpkt->pkt_tran_type = FC_PKT_EXCHANGE;
14185 fpkt->pkt_datalen = 0;
14203 FCP_CP_OUT((uint8_t *)fcmd, fpkt->pkt_cmd,
14204 fpkt->pkt_cmd_acc, sizeof (struct fcp_cmd));
14206 ASSERT(fpkt->pkt_cmd_dma == NULL && fpkt->pkt_resp_dma == NULL);
14217 fpkt->pkt_tran_flags = (FC_TRAN_CLASS3 | FC_TRAN_NO_INTR);
14218 fpkt->pkt_comp = NULL;
14220 fpkt->pkt_tran_flags = (FC_TRAN_CLASS3 | FC_TRAN_INTR);
14222 fpkt->pkt_tran_flags |= FC_TRAN_IMMEDIATE_CB;
14224 fpkt->pkt_comp = fcp_cmd_callback;
14229 fpkt->pkt_tran_flags |= FC_TRAN_DUMPING;
14233 fpkt->pkt_cmd_fhdr.d_id = ptgt->tgt_d_id;
14234 fpkt->pkt_cmd_fhdr.s_id = pptr->port_id;
14240 fpkt->pkt_fca_device = ptgt->tgt_fca_dev;
14482 fc_packet_t *fpkt;
14506 fpkt = cmd->cmd_fp_pkt;
14507 if ((fpkt->pkt_pd == NULL) && (ptgt->tgt_pd_handle != NULL)) {
14508 fpkt->pkt_pd = ptgt->tgt_pd_handle;
15217 fcp_print_error(fc_packet_t *fpkt)
15220 fpkt->pkt_ulp_private;
15264 if (scsi_cmd && fpkt->pkt_state == FC_PKT_SUCCESS) {
15271 rsp = (struct fcp_rsp *)fpkt->pkt_resp;
15278 FCP_CP_IN(fpkt->pkt_resp, rsp, fpkt->pkt_resp_acc,
15281 FCP_CP_IN(fpkt->pkt_resp + sizeof (struct fcp_rsp),
15282 bep, fpkt->pkt_resp_acc,
15314 ((caddr_t)fpkt->pkt_resp +
15320 FCP_CP_IN(fpkt->pkt_resp +
15323 fpkt->pkt_resp_acc,
15355 (void) fc_ulp_pkt_error(fpkt, &state, &reason,
16113 * pkt@scsi_pkt, cmd@fcp_pkt, icmd@fcp_ipkt, fpkt@fc_packet, pptr@fcp_port
16247 fc_packet_t *fpkt = cmd->cmd_fp_pkt;
16250 fpkt->pkt_pd = ptgt->tgt_pd_handle;
16258 fcmd->fcp_data_len = fpkt->pkt_datalen;
16281 fpkt->pkt_timeout = pkt->pkt_time + 2;
16282 fpkt->pkt_cmd_fhdr.d_id = ptgt->tgt_d_id;
16283 fpkt->pkt_cmd_fhdr.s_id = pptr->port_id;
16285 fpkt->pkt_tran_type = FC_PKT_FCP_READ;
16287 fpkt->pkt_tran_type = FC_PKT_FCP_WRITE;
16291 fpkt->pkt_comp = NULL;
16292 fpkt->pkt_tran_flags = (FC_TRAN_CLASS3 | FC_TRAN_NO_INTR);
16294 fpkt->pkt_comp = fcp_cmd_callback;
16295 fpkt->pkt_tran_flags = (FC_TRAN_CLASS3 | FC_TRAN_INTR);
16297 fpkt->pkt_tran_flags |= FC_TRAN_IMMEDIATE_CB;
16318 rval = fcp_transport(pptr->port_fp_handle, fpkt, 0);