static void hycapi_release_internal(struct capi_ctr *ctrl, __u16 appl) { hycapictrl_info *cinfo = (hycapictrl_info *)(ctrl->driverdata); hysdn_card *card = cinfo->card; struct sk_buff *skb; __u16 len; __u8 _command = 0xa1, _subcommand = 0x80; __u16 MessageNumber = 0x0000; capilib_release_appl(&cinfo->ncci_head, appl); #ifdef HYCAPI_PRINTFNAMES printk(KERN_NOTICE "hycapi_release_appl\n"); #endif len = CAPI_MSG_BASELEN; if (!(skb = alloc_skb(len, GFP_ATOMIC))) { printk(KERN_ERR "HYSDN card%d: memory squeeze in hycapi_register_appl\n", card->myid); return; } memcpy(skb_put(skb, sizeof(__u16)), &len, sizeof(__u16)); memcpy(skb_put(skb, sizeof(__u16)), &appl, sizeof(__u16)); memcpy(skb_put(skb, sizeof(__u8)), &_command, sizeof(_command)); memcpy(skb_put(skb, sizeof(__u8)), &_subcommand, sizeof(_subcommand)); memcpy(skb_put(skb, sizeof(__u16)), &MessageNumber, sizeof(__u16)); hycapi_send_message(ctrl, skb); hycapi_applications[appl - 1].ctrl_mask &= ~(1 << (ctrl->cnr - 1)); }
void b1dma_release_appl(struct capi_ctr *ctrl, u16 appl) { avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata); avmcard *card = cinfo->card; struct sk_buff *skb; void *p; capilib_release_appl(&cinfo->ncci_head, appl); skb = alloc_skb(7, GFP_ATOMIC); if (!skb) { printk(KERN_CRIT "%s: no memory, lost release appl.\n", card->name); return; } p = skb->data; _put_byte(&p, 0); _put_byte(&p, 0); _put_byte(&p, SEND_RELEASE); _put_word(&p, appl); skb_put(skb, (u8 *)p - (u8 *)skb->data); b1dma_queue_tx(card, skb); }
static void c4_release_appl(struct capi_ctr *ctrl, u16 appl) { avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata); avmcard *card = cinfo->card; unsigned long flags; struct sk_buff *skb; void *p; spin_lock_irqsave(&card->lock, flags); capilib_release_appl(&cinfo->ncci_head, appl); spin_unlock_irqrestore(&card->lock, flags); if (ctrl->cnr == card->cardnr) { skb = alloc_skb(7, GFP_ATOMIC); if (!skb) { printk(KERN_CRIT "%s: no memory, lost release appl.\n", card->name); return; } p = skb->data; _put_byte(&p, 0); _put_byte(&p, 0); _put_byte(&p, SEND_RELEASE); _put_word(&p, appl); skb_put(skb, (u8 *)p - (u8 *)skb->data); skb_queue_tail(&card->dma->send_queue, skb); spin_lock_irqsave(&card->lock, flags); c4_dispatch_tx(card); spin_unlock_irqrestore(&card->lock, flags); } }
void b1dma_release_appl(struct capi_ctr *ctrl, u16 appl) { avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata); avmcard *card = cinfo->card; struct sk_buff *skb; void *p; unsigned long flags; spin_lock_irqsave(&card->lock, flags); capilib_release_appl(&cinfo->ncci_head, appl); spin_unlock_irqrestore(&card->lock, flags); skb = alloc_skb(7, GFP_ATOMIC); if (!skb) { #ifdef CONFIG_DEBUG_PRINTK printk(KERN_CRIT "%s: no memory, lost release appl.\n", card->name); #else ; #endif return; } p = skb->data; _put_byte(&p, 0); _put_byte(&p, 0); _put_byte(&p, SEND_RELEASE); _put_word(&p, appl); skb_put(skb, (u8 *)p - (u8 *)skb->data); b1dma_queue_tx(card, skb); }