static int enqueue_txdev(struct ks_wlan_private *priv, unsigned char *p, unsigned long size, void (*complete_handler) (void *arg1, void *arg2), void *arg1, void *arg2) { struct tx_device_buffer *sp; if (priv->dev_state < DEVICE_STATE_BOOT) { kfree(p); if (complete_handler != NULL) (*complete_handler) (arg1, arg2); return 1; } if ((TX_DEVICE_BUFF_SIZE - 1) <= cnt_txqbody(priv)) { /* in case of buffer overflow */ DPRINTK(1, "tx buffer overflow\n"); kfree(p); if (complete_handler != NULL) (*complete_handler) (arg1, arg2); return 1; } sp = &priv->tx_dev.tx_dev_buff[priv->tx_dev.qtail]; sp->sendp = p; sp->size = size; sp->complete_handler = complete_handler; sp->arg1 = arg1; sp->arg2 = arg2; inc_txqtail(priv); return 0; }
static int enqueue_txdev(struct ks_wlan_private *priv, unsigned char *p, unsigned long size, void (*complete_handler)(struct ks_wlan_private *priv, struct sk_buff *skb), struct sk_buff *skb) { struct tx_device_buffer *sp; int ret; if (priv->dev_state < DEVICE_STATE_BOOT) { ret = -EPERM; goto err_complete; } if ((TX_DEVICE_BUFF_SIZE - 1) <= cnt_txqbody(priv)) { DPRINTK(1, "tx buffer overflow\n"); ret = -EOVERFLOW; goto err_complete; } sp = &priv->tx_dev.tx_dev_buff[priv->tx_dev.qtail]; sp->sendp = p; sp->size = size; sp->complete_handler = complete_handler; sp->skb = skb; inc_txqtail(priv); return 0; err_complete: kfree(p); if (complete_handler) (*complete_handler)(priv, skb); return ret; }