Lines Matching refs:skb
106 #define SKB_CB(skb) ((struct solos_skb_cb *)skb->cb) argument
171 static void fpga_queue(struct solos_card *card, int port, struct sk_buff *skb,
182 static inline void solos_pop(struct atm_vcc *vcc, struct sk_buff *skb) in solos_pop() argument
185 vcc->pop(vcc, skb); in solos_pop()
187 dev_kfree_skb_any(skb); in solos_pop()
196 struct sk_buff *skb; in solos_param_show() local
202 skb = alloc_skb(sizeof(*header) + buflen, GFP_KERNEL); in solos_param_show()
203 if (!skb) { in solos_param_show()
208 header = (void *)skb_put(skb, sizeof(*header)); in solos_param_show()
212 skb_put(skb, buflen); in solos_param_show()
227 fpga_queue(card, prm.port, skb, NULL); in solos_param_show()
251 struct sk_buff *skb; in solos_param_store() local
258 skb = alloc_skb(sizeof(*header) + buflen, GFP_KERNEL); in solos_param_store()
259 if (!skb) { in solos_param_store()
264 header = (void *)skb_put(skb, sizeof(*header)); in solos_param_store()
269 skb_put(skb, buflen); in solos_param_store()
283 fpga_queue(card, prm.port, skb, NULL); in solos_param_store()
291 skb = prm.response; in solos_param_store()
293 if (!skb) in solos_param_store()
296 buflen = skb->len; in solos_param_store()
299 if (skb->data[buflen - 1] == '\n') in solos_param_store()
302 if (buflen == 2 && !strncmp(skb->data, "OK", 2)) in solos_param_store()
304 else if (buflen == 5 && !strncmp(skb->data, "ERROR", 5)) in solos_param_store()
309 skb->data[buflen] = 0; in solos_param_store()
312 skb->data); in solos_param_store()
315 kfree_skb(skb); in solos_param_store()
320 static char *next_string(struct sk_buff *skb) in next_string() argument
323 char *this = skb->data; in next_string()
325 for (i = 0; i < skb->len; i++) { in next_string()
328 skb_pull(skb, i + 1); in next_string()
348 static int process_status(struct solos_card *card, int port, struct sk_buff *skb) in process_status() argument
356 str = next_string(skb); in process_status()
367 str = next_string(skb); in process_status()
380 str = next_string(skb); in process_status()
387 state_str = next_string(skb); in process_status()
398 snr = next_string(skb); in process_status()
401 attn = next_string(skb); in process_status()
415 static int process_command(struct solos_card *card, int port, struct sk_buff *skb) in process_command() argument
422 if (skb->len < 7) in process_command()
425 if (skb->data[0] != 'L' || !isdigit(skb->data[1]) || in process_command()
426 !isdigit(skb->data[2]) || !isdigit(skb->data[3]) || in process_command()
427 !isdigit(skb->data[4]) || !isdigit(skb->data[5]) || in process_command()
428 skb->data[6] != '\n') in process_command()
431 cmdpid = simple_strtol(&skb->data[1], NULL, 10); in process_command()
436 prm->response = skb; in process_command()
437 skb_pull(skb, 7); in process_command()
452 struct sk_buff *skb; in console_show() local
456 skb = skb_dequeue(&card->cli_queue[SOLOS_CHAN(atmdev)]); in console_show()
458 if(skb == NULL) in console_show()
461 len = skb->len; in console_show()
462 memcpy(buf, skb->data, len); in console_show()
464 kfree_skb(skb); in console_show()
470 struct sk_buff *skb; in send_command() local
477 skb = alloc_skb(size + sizeof(*header), GFP_ATOMIC); in send_command()
478 if (!skb) { in send_command()
483 header = (void *)skb_put(skb, sizeof(*header)); in send_command()
490 memcpy(skb_put(skb, size), buf, size); in send_command()
492 fpga_queue(card, dev, skb, NULL); in send_command()
780 struct sk_buff *skb; in solos_bh() local
785 skb = card->rx_skb[port]; in solos_bh()
788 dma_unmap_single(&card->dev->dev, SKB_CB(skb)->dma_addr, in solos_bh()
791 header = (void *)skb->data; in solos_bh()
793 skb_put(skb, size + sizeof(*header)); in solos_bh()
794 skb_pull(skb, sizeof(*header)); in solos_bh()
808 skb = alloc_skb(size + 1, GFP_ATOMIC); in solos_bh()
809 if (!skb) { in solos_bh()
815 memcpy_fromio(skb_put(skb, size), in solos_bh()
824 print_buffer(skb); in solos_bh()
836 dev_kfree_skb_any(skb); in solos_bh()
839 atm_charge(vcc, skb->truesize); in solos_bh()
840 vcc->push(vcc, skb); in solos_bh()
845 if (process_status(card, port, skb) && in solos_bh()
847 dev_warn(&card->dev->dev, "Bad status packet of %d bytes on port %d:\n", skb->len, port); in solos_bh()
848 print_buffer(skb); in solos_bh()
850 dev_kfree_skb_any(skb); in solos_bh()
855 if (process_command(card, port, skb)) in solos_bh()
862 dev_kfree_skb_any(skb); in solos_bh()
864 skb_queue_tail(&card->cli_queue[port], skb); in solos_bh()
872 struct sk_buff *skb = alloc_skb(RX_DMA_SIZE, GFP_ATOMIC); in solos_bh() local
873 if (skb) { in solos_bh()
874 SKB_CB(skb)->dma_addr = in solos_bh()
875 dma_map_single(&card->dev->dev, skb->data, in solos_bh()
877 iowrite32(SKB_CB(skb)->dma_addr, in solos_bh()
879 card->rx_skb[port] = skb; in solos_bh()
919 struct sk_buff *skb; in popen() local
928 skb = alloc_skb(sizeof(*header), GFP_KERNEL); in popen()
929 if (!skb) { in popen()
934 header = (void *)skb_put(skb, sizeof(*header)); in popen()
941 fpga_queue(card, SOLOS_CHAN(vcc->dev), skb, NULL); in popen()
953 struct sk_buff *skb, *tmpskb; in pclose() local
958 skb_queue_walk_safe(&card->tx_queue[port], skb, tmpskb) { in pclose()
959 if (SKB_CB(skb)->vcc == vcc) { in pclose()
960 skb_unlink(skb, &card->tx_queue[port]); in pclose()
961 solos_pop(vcc, skb); in pclose()
966 skb = alloc_skb(sizeof(*header), GFP_KERNEL); in pclose()
967 if (!skb) { in pclose()
971 header = (void *)skb_put(skb, sizeof(*header)); in pclose()
978 skb_get(skb); in pclose()
979 fpga_queue(card, port, skb, NULL); in pclose()
981 if (!wait_event_timeout(card->param_wq, !skb_shared(skb), 5 * HZ)) in pclose()
985 dev_kfree_skb(skb); in pclose()
1026 static void fpga_queue(struct solos_card *card, int port, struct sk_buff *skb, in fpga_queue() argument
1032 SKB_CB(skb)->vcc = vcc; in fpga_queue()
1036 skb_queue_tail(&card->tx_queue[port], skb); in fpga_queue()
1051 struct sk_buff *skb; in fpga_tx() local
1077 skb = skb_dequeue(&card->tx_queue[port]); in fpga_tx()
1078 if (!skb) in fpga_tx()
1082 if (skb && !card->using_dma) { in fpga_tx()
1083 memcpy_toio(TX_BUF(card, port), skb->data, skb->len); in fpga_tx()
1085 oldskb = skb; /* We're done with this skb already */ in fpga_tx()
1086 } else if (skb && card->using_dma) { in fpga_tx()
1087 unsigned char *data = skb->data; in fpga_tx()
1090 memcpy(data, skb->data, skb->len); in fpga_tx()
1092 SKB_CB(skb)->dma_addr = dma_map_single(&card->dev->dev, data, in fpga_tx()
1093 skb->len, DMA_TO_DEVICE); in fpga_tx()
1094 card->tx_skb[port] = skb; in fpga_tx()
1095 iowrite32(SKB_CB(skb)->dma_addr, in fpga_tx()
1135 static int psend(struct atm_vcc *vcc, struct sk_buff *skb) in psend() argument
1141 pktlen = skb->len; in psend()
1144 solos_pop(vcc, skb); in psend()
1148 if (!skb_clone_writable(skb, sizeof(*header))) { in psend()
1152 if (skb_headroom(skb) < sizeof(*header)) in psend()
1153 expand_by = sizeof(*header) - skb_headroom(skb); in psend()
1155 ret = pskb_expand_head(skb, expand_by, 0, GFP_ATOMIC); in psend()
1158 solos_pop(vcc, skb); in psend()
1163 header = (void *)skb_push(skb, sizeof(*header)); in psend()
1171 fpga_queue(card, SOLOS_CHAN(vcc->dev), skb, vcc); in psend()
1356 struct sk_buff *skb; in atm_init() local
1381 skb = alloc_skb(sizeof(*header), GFP_KERNEL); in atm_init()
1382 if (!skb) { in atm_init()
1387 header = (void *)skb_put(skb, sizeof(*header)); in atm_init()
1394 fpga_queue(card, i, skb, NULL); in atm_init()
1405 struct sk_buff *skb; in atm_remove() local
1412 skb = card->rx_skb[i]; in atm_remove()
1413 if (skb) { in atm_remove()
1414 dma_unmap_single(&card->dev->dev, SKB_CB(skb)->dma_addr, in atm_remove()
1416 dev_kfree_skb(skb); in atm_remove()
1418 skb = card->tx_skb[i]; in atm_remove()
1419 if (skb) { in atm_remove()
1420 dma_unmap_single(&card->dev->dev, SKB_CB(skb)->dma_addr, in atm_remove()
1421 skb->len, DMA_TO_DEVICE); in atm_remove()
1422 dev_kfree_skb(skb); in atm_remove()
1424 while ((skb = skb_dequeue(&card->tx_queue[i]))) in atm_remove()
1425 dev_kfree_skb(skb); in atm_remove()