Print this page
5045 use atomic_{inc,dec}_* instead of atomic_add_*


 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 /*