static int cc2520_csma_tx(u8 * buf, u8 len) { int backoff; if (!csma_enabled) { return csma_bottom->tx(buf, len); } spin_lock_irqsave(&state_sl, flags); if (csma_state == CC2520_CSMA_IDLE) { csma_state = CC2520_CSMA_TX; spin_unlock_irqrestore(&state_sl, flags); memcpy(cur_tx_buf, buf, len); cur_tx_len = len; backoff = cc2520_csma_get_backoff(backoff_min, backoff_max_init); DBG((KERN_INFO "[cc2520] - waiting %d uS to send.\n", backoff)); cc2520_csma_start_timer(backoff); } else { spin_unlock_irqrestore(&state_sl, flags); DBG((KERN_INFO "[cc2520] - csma layer busy.\n")); csma_top->tx_done(-CC2520_TX_BUSY); } return 0; }
static int cc2520_csma_tx(u8 * buf, u8 len) { int backoff; spin_lock(&state_sl); if (csma_state == CC2520_CSMA_IDLE) { csma_state = CC2520_CSMA_TX; spin_unlock(&state_sl); memcpy(cur_tx_buf, buf, len); cur_tx_len = len; backoff = cc2520_csma_get_backoff(backoff_min, backoff_max_init); //printk(KERN_INFO "[cc2520] - waiting %d uS to send.\n", backoff); cc2520_csma_start_timer(backoff); } else { spin_unlock(&state_sl); csma_top->tx_done(-CC2520_TX_BUSY); } return 0; }