Lines Matching defs:descr

165 				       card->descr + GELIC_NET_TX_DESCRIPTORS);
175 * @descr: descriptor to look at
180 gelic_descr_get_status(struct gelic_descr *descr)
182 return be32_to_cpu(descr->dmac_cmd_status) & GELIC_DESCR_DMA_STAT_MASK;
187 * @descr: descriptor to change
193 static void gelic_descr_set_status(struct gelic_descr *descr,
196 descr->dmac_cmd_status = cpu_to_be32(status |
197 (be32_to_cpu(descr->dmac_cmd_status) &
216 struct gelic_descr *descr;
218 for (descr = descr_in; descr && descr->bus_addr; descr = descr->next) {
219 dma_unmap_single(ctodev(card), descr->bus_addr,
221 descr->bus_addr = 0;
243 struct gelic_descr *descr;
245 descr = start_descr;
246 memset(descr, 0, sizeof(*descr) * no);
249 for (i = 0; i < no; i++, descr++) {
250 gelic_descr_set_status(descr, GELIC_DESCR_DMA_NOT_IN_USE);
251 descr->bus_addr =
252 dma_map_single(ctodev(card), descr,
256 if (!descr->bus_addr)
259 descr->next = descr + 1;
260 descr->prev = descr - 1;
263 (descr - 1)->next = start_descr;
264 start_descr->prev = (descr - 1);
267 descr = start_descr;
268 for (i = 0; i < no; i++, descr++) {
269 descr->next_descr_addr = cpu_to_be32(descr->next->bus_addr);
276 (descr - 1)->next_descr_addr = 0;
281 for (i--, descr--; 0 <= i; i--, descr--)
282 if (descr->bus_addr)
283 dma_unmap_single(ctodev(card), descr->bus_addr,
302 struct gelic_descr *descr;
304 for (descr = start_descr; start_descr != descr->next; descr++) {
305 gelic_descr_set_status(descr, GELIC_DESCR_DMA_CARDOWNED);
306 descr->next_descr_addr = cpu_to_be32(descr->next->bus_addr);
310 chain->tail = (descr - 1);
312 (descr - 1)->next_descr_addr = 0;
317 * @descr: descriptor to re-init
325 struct gelic_descr *descr)
330 if (gelic_descr_get_status(descr) != GELIC_DESCR_DMA_NOT_IN_USE)
337 descr->skb = dev_alloc_skb(bufsize + GELIC_NET_RXBUF_ALIGN - 1);
338 if (!descr->skb) {
339 descr->buf_addr = 0; /* tell DMAC don't touch memory */
344 descr->buf_size = cpu_to_be32(bufsize);
345 descr->dmac_cmd_status = 0;
346 descr->result_size = 0;
347 descr->valid_size = 0;
348 descr->data_error = 0;
350 offset = ((unsigned long)descr->skb->data) &
353 skb_reserve(descr->skb, GELIC_NET_RXBUF_ALIGN - offset);
355 descr->buf_addr = cpu_to_be32(dma_map_single(ctodev(card),
356 descr->skb->data,
359 if (!descr->buf_addr) {
360 dev_kfree_skb_any(descr->skb);
361 descr->skb = NULL;
364 gelic_descr_set_status(descr, GELIC_DESCR_DMA_NOT_IN_USE);
367 gelic_descr_set_status(descr, GELIC_DESCR_DMA_CARDOWNED);
373 * gelic_card_release_rx_chain - free all skb of rx descr
379 struct gelic_descr *descr = card->rx_chain.head;
382 if (descr->skb) {
384 be32_to_cpu(descr->buf_addr),
385 descr->skb->len,
387 descr->buf_addr = 0;
388 dev_kfree_skb_any(descr->skb);
389 descr->skb = NULL;
390 gelic_descr_set_status(descr,
393 descr = descr->next;
394 } while (descr != card->rx_chain.head);
407 struct gelic_descr *descr = card->rx_chain.head;
411 if (!descr->skb) {
412 ret = gelic_descr_prepare_rx(card, descr);
416 descr = descr->next;
417 } while (descr != card->rx_chain.head);
444 * @descr: descriptor to release
449 struct gelic_descr *descr)
451 struct sk_buff *skb = descr->skb;
453 BUG_ON(!(be32_to_cpu(descr->data_status) & GELIC_DESCR_TX_TAIL));
455 dma_unmap_single(ctodev(card), be32_to_cpu(descr->buf_addr), skb->len,
459 descr->buf_addr = 0;
460 descr->buf_size = 0;
461 descr->next_descr_addr = 0;
462 descr->result_size = 0;
463 descr->valid_size = 0;
464 descr->data_status = 0;
465 descr->data_error = 0;
466 descr->skb = NULL;
468 /* set descr status */
469 gelic_descr_set_status(descr, GELIC_DESCR_DMA_NOT_IN_USE);
712 * @descr: descriptor structure to fill out
719 static void gelic_descr_set_tx_cmdstat(struct gelic_descr *descr,
723 descr->dmac_cmd_status =
731 descr->dmac_cmd_status =
736 descr->dmac_cmd_status =
743 descr->dmac_cmd_status =
778 * @descr: descriptor structure
785 struct gelic_descr *descr,
811 descr->buf_addr = cpu_to_be32(buf);
812 descr->buf_size = cpu_to_be32(skb->len);
813 descr->skb = skb;
814 descr->data_status = 0;
815 descr->next_descr_addr = 0; /* terminate hw descr */
816 gelic_descr_set_tx_cmdstat(descr, skb);
819 card->tx_chain.head = descr->next;
826 * @descr: descriptor address to enable TX processing at
830 struct gelic_descr *descr)
837 if (gelic_descr_get_status(descr) == GELIC_DESCR_DMA_CARDOWNED) {
840 descr->bus_addr, 0);
860 struct gelic_descr *descr;
868 descr = gelic_card_get_next_tx_descr(card);
869 if (!descr) {
878 result = gelic_descr_prepare_tx(card, descr, skb);
893 descr->prev->next_descr_addr = cpu_to_be32(descr->bus_addr);
899 if (gelic_card_kick_txdma(card, descr)) {
906 descr->data_status = cpu_to_be32(GELIC_DESCR_TX_TAIL);
907 gelic_descr_release_tx(card, descr);
909 card->tx_chain.head = descr;
911 descr->prev->next_descr_addr = 0;
921 * @descr: descriptor to process
928 static void gelic_net_pass_skb_up(struct gelic_descr *descr,
933 struct sk_buff *skb = descr->skb;
936 data_status = be32_to_cpu(descr->data_status);
937 data_error = be32_to_cpu(descr->data_error);
939 dma_unmap_single(ctodev(card), be32_to_cpu(descr->buf_addr),
943 skb_put(skb, be32_to_cpu(descr->valid_size)?
944 be32_to_cpu(descr->valid_size) :
945 be32_to_cpu(descr->result_size));
946 if (!descr->valid_size)
948 be32_to_cpu(descr->result_size),
949 be32_to_cpu(descr->buf_size),
950 be32_to_cpu(descr->dmac_cmd_status));
952 descr->skb = NULL;
991 struct gelic_descr *descr = chain->head;
995 status = gelic_descr_get_status(descr);
1001 dev_dbg(ctodev(card), "dormant descr? %p\n", descr);
1009 vid = *(u16 *)(descr->skb->data) & VLAN_VID_MASK;
1055 /* ok, we've got a packet in descr */
1056 gelic_net_pass_skb_up(descr, card, netdev);
1061 be32_to_cpu(descr->dmac_cmd_status) &
1068 descr->next_descr_addr = 0;
1071 gelic_descr_set_status(descr, GELIC_DESCR_DMA_NOT_IN_USE);
1077 gelic_descr_prepare_rx(card, descr);
1079 chain->tail = descr;
1080 chain->head = descr->next;
1085 descr->prev->next_descr_addr = cpu_to_be32(descr->bus_addr);
1556 BUILD_BUG_ON(offsetof(struct gelic_card, descr) % 32);
1752 card->descr, GELIC_NET_TX_DESCRIPTORS))
1755 card->descr + GELIC_NET_TX_DESCRIPTORS,
1762 dev_dbg(ctodev(card), "descr rx %p, tx %p, size %#lx, num %#x\n",