287 */
288 FCOET_BUSY_XCHG(CMD2XCH(cmd));
289 }
290
291 FFM_R_CTL(0x01, frm);
292 FRM2TFM(frm)->tfm_rctl = 0x01;
293 FRM2TFM(frm)->tfm_buf_idx =
294 dbuf->db_relative_offset/FCOET_MAX_DBUF_LEN;
295 FFM_TYPE(0x08, frm);
296 if (idx != frm_num - 1) {
297 FFM_F_CTL(0x800008, frm);
298 } else {
299 FFM_F_CTL(0x880008 | (data_size - left_size), frm);
300 }
301
302 FFM_OXID(cmd->cmd_oxid, frm);
303 FFM_RXID(cmd->cmd_rxid, frm);
304 FFM_S_ID(cmd->cmd_lportid, frm);
305 FFM_D_ID(cmd->cmd_rportid, frm);
306 FFM_SEQ_CNT(xch->xch_sequence_no, frm);
307 atomic_add_8(&xch->xch_sequence_no, 1);
308 FFM_PARAM(offset, frm);
309 offset += data_size;
310 left_size -= data_size;
311
312 /*
313 * Disassociate netbs which will be freed by NIC driver
314 */
315 FCOET_SET_NETB(dbuf, idx, NULL);
316
317 CMD2SS(cmd)->ss_eport->eport_tx_frame(frm);
318 }
319
320 return (FCT_SUCCESS);
321 }
322
323 fct_status_t
324 fcoet_abort_cmd(struct fct_local_port *port, fct_cmd_t *cmd, uint32_t flags)
325 {
326 fcoet_soft_state_t *this_ss = PORT2SS(port);
327 fct_status_t fct_ret = FCT_SUCCESS;
921 atomic_or_32(&ss->ss_flags, SS_FLAG_PORT_DISABLED);
922 return (status);
923 }
924
925 static fct_status_t
926 fcoet_logo_fabric(fcoet_soft_state_t *ss)
927 {
928 fcoe_frame_t *frm;
929 uint32_t req_payload_size = 16;
930 uint16_t xch_oxid, xch_rxid = 0xFFFF;
931
932 frm = ss->ss_eport->eport_alloc_frame(ss->ss_eport,
933 req_payload_size + FCFH_SIZE, NULL);
934 if (frm == NULL) {
935 ASSERT(0);
936 return (FCT_FAILURE);
937 } else {
938 fcoet_init_tfm(frm, NULL);
939 bzero(frm->frm_payload, frm->frm_payload_size);
940 }
941 xch_oxid = atomic_add_16_nv(&ss->ss_next_sol_oxid, 1);
942 if (xch_oxid == 0xFFFF) {
943 xch_oxid = atomic_add_16_nv(&ss->ss_next_sol_oxid, 1);
944 }
945 FFM_R_CTL(0x22, frm);
946 FRM2TFM(frm)->tfm_rctl = 0x22;
947 FFM_TYPE(0x01, frm);
948 FFM_F_CTL(0x290000, frm);
949 FFM_OXID(xch_oxid, frm);
950 FFM_RXID(xch_rxid, frm);
951 FFM_S_ID(ss->ss_link_info.portid, frm);
952 FFM_D_ID(0xfffffe, frm);
953
954 FCOE_V2B_1(0x5, frm->frm_payload);
955 FCOE_V2B_3(ss->ss_link_info.portid, frm->frm_payload + 5);
956 bcopy(ss->ss_eport->eport_portwwn, frm->frm_payload + 8, 8);
957 ss->ss_eport->eport_tx_frame(frm);
958
959 return (FCT_SUCCESS);
960
961 }
962
963 /*
|
287 */
288 FCOET_BUSY_XCHG(CMD2XCH(cmd));
289 }
290
291 FFM_R_CTL(0x01, frm);
292 FRM2TFM(frm)->tfm_rctl = 0x01;
293 FRM2TFM(frm)->tfm_buf_idx =
294 dbuf->db_relative_offset/FCOET_MAX_DBUF_LEN;
295 FFM_TYPE(0x08, frm);
296 if (idx != frm_num - 1) {
297 FFM_F_CTL(0x800008, frm);
298 } else {
299 FFM_F_CTL(0x880008 | (data_size - left_size), frm);
300 }
301
302 FFM_OXID(cmd->cmd_oxid, frm);
303 FFM_RXID(cmd->cmd_rxid, frm);
304 FFM_S_ID(cmd->cmd_lportid, frm);
305 FFM_D_ID(cmd->cmd_rportid, frm);
306 FFM_SEQ_CNT(xch->xch_sequence_no, frm);
307 atomic_inc_8(&xch->xch_sequence_no);
308 FFM_PARAM(offset, frm);
309 offset += data_size;
310 left_size -= data_size;
311
312 /*
313 * Disassociate netbs which will be freed by NIC driver
314 */
315 FCOET_SET_NETB(dbuf, idx, NULL);
316
317 CMD2SS(cmd)->ss_eport->eport_tx_frame(frm);
318 }
319
320 return (FCT_SUCCESS);
321 }
322
323 fct_status_t
324 fcoet_abort_cmd(struct fct_local_port *port, fct_cmd_t *cmd, uint32_t flags)
325 {
326 fcoet_soft_state_t *this_ss = PORT2SS(port);
327 fct_status_t fct_ret = FCT_SUCCESS;
921 atomic_or_32(&ss->ss_flags, SS_FLAG_PORT_DISABLED);
922 return (status);
923 }
924
925 static fct_status_t
926 fcoet_logo_fabric(fcoet_soft_state_t *ss)
927 {
928 fcoe_frame_t *frm;
929 uint32_t req_payload_size = 16;
930 uint16_t xch_oxid, xch_rxid = 0xFFFF;
931
932 frm = ss->ss_eport->eport_alloc_frame(ss->ss_eport,
933 req_payload_size + FCFH_SIZE, NULL);
934 if (frm == NULL) {
935 ASSERT(0);
936 return (FCT_FAILURE);
937 } else {
938 fcoet_init_tfm(frm, NULL);
939 bzero(frm->frm_payload, frm->frm_payload_size);
940 }
941 xch_oxid = atomic_inc_16_nv(&ss->ss_next_sol_oxid);
942 if (xch_oxid == 0xFFFF) {
943 xch_oxid = atomic_inc_16_nv(&ss->ss_next_sol_oxid);
944 }
945 FFM_R_CTL(0x22, frm);
946 FRM2TFM(frm)->tfm_rctl = 0x22;
947 FFM_TYPE(0x01, frm);
948 FFM_F_CTL(0x290000, frm);
949 FFM_OXID(xch_oxid, frm);
950 FFM_RXID(xch_rxid, frm);
951 FFM_S_ID(ss->ss_link_info.portid, frm);
952 FFM_D_ID(0xfffffe, frm);
953
954 FCOE_V2B_1(0x5, frm->frm_payload);
955 FCOE_V2B_3(ss->ss_link_info.portid, frm->frm_payload + 5);
956 bcopy(ss->ss_eport->eport_portwwn, frm->frm_payload + 8, 8);
957 ss->ss_eport->eport_tx_frame(frm);
958
959 return (FCT_SUCCESS);
960
961 }
962
963 /*
|