Lines Matching refs:xfer

411 static inline bool atmel_spi_is_vmalloc_xfer(struct spi_transfer *xfer)
413 return is_vmalloc_addr(xfer->tx_buf) || is_vmalloc_addr(xfer->rx_buf);
417 struct spi_transfer *xfer)
419 return as->use_dma && xfer->len >= DMA_MIN_BYTES;
424 struct spi_transfer *xfer)
429 return atmel_spi_use_dma(as, xfer) &&
430 !atmel_spi_is_vmalloc_xfer(xfer);
432 return atmel_spi_use_dma(as, xfer);
583 struct spi_transfer *xfer)
586 unsigned long xfer_pos = xfer->len - as->current_remaining_bytes;
597 if (xfer->bits_per_word > 8)
598 spi_writel(as, TDR, *(u16 *)(xfer->tx_buf + xfer_pos));
600 spi_writel(as, TDR, *(u8 *)(xfer->tx_buf + xfer_pos));
603 " start pio xfer %p: len %u tx %p rx %p bitpw %d\n",
604 xfer, xfer->len, xfer->tx_buf, xfer->rx_buf,
605 xfer->bits_per_word);
615 struct spi_transfer *xfer)
619 u32 offset = xfer->len - as->current_remaining_bytes;
620 const u16 *words = (const u16 *)((u8 *)xfer->tx_buf + offset);
621 const u8 *bytes = (const u8 *)((u8 *)xfer->tx_buf + offset);
628 current_remaining_data = ((xfer->bits_per_word > 8) ?
647 if (xfer->bits_per_word > 8) {
660 if (xfer->bits_per_word > 8)
670 " start fifo xfer %p: len %u tx %p rx %p bitpw %d\n",
671 xfer, xfer->len, xfer->tx_buf, xfer->rx_buf,
672 xfer->bits_per_word);
685 struct spi_transfer *xfer)
690 atmel_spi_next_xfer_fifo(master, xfer);
692 atmel_spi_next_xfer_single(master, xfer);
699 struct spi_transfer *xfer,
720 *plen = xfer->len;
723 xfer->bits_per_word))
727 if (atmel_spi_is_vmalloc_xfer(xfer) &&
731 xfer->len,
737 xfer->rx_sg.sgl,
738 xfer->rx_sg.nents,
746 if (atmel_spi_is_vmalloc_xfer(xfer) &&
748 memcpy(as->addr_tx_bbuf, xfer->tx_buf, xfer->len);
751 xfer->len, DMA_MEM_TO_DEV,
756 xfer->tx_sg.sgl,
757 xfer->tx_sg.nents,
766 " start dma xfer %p: len %u tx %p/%08llx rx %p/%08llx\n",
767 xfer, xfer->len, xfer->tx_buf, (unsigned long long)xfer->tx_dma,
768 xfer->rx_buf, (unsigned long long)xfer->rx_dma);
800 struct spi_transfer *xfer,
805 *rx_dma = xfer->rx_dma + xfer->len - *plen;
806 *tx_dma = xfer->tx_dma + xfer->len - *plen;
813 struct spi_transfer *xfer)
833 scbr = DIV_ROUND_UP(bus_hz, xfer->speed_hz);
842 xfer->speed_hz, scbr, bus_hz/255);
848 xfer->speed_hz, scbr, bus_hz);
854 xfer->effective_speed_hz = bus_hz / scbr;
864 struct spi_transfer *xfer)
873 atmel_spi_next_xfer_data(master, xfer, &tx_dma, &rx_dma, &len);
879 if (xfer->bits_per_word > 8)
885 " start xfer %p: len %u tx %p/%08llx rx %p/%08llx\n",
886 xfer, xfer->len, xfer->tx_buf,
887 (unsigned long long)xfer->tx_dma, xfer->rx_buf,
888 (unsigned long long)xfer->rx_dma);
892 atmel_spi_next_xfer_data(master, xfer, &tx_dma, &rx_dma, &len);
898 if (xfer->bits_per_word > 8)
904 " next xfer %p: len %u tx %p/%08llx rx %p/%08llx\n",
905 xfer, xfer->len, xfer->tx_buf,
906 (unsigned long long)xfer->tx_dma, xfer->rx_buf,
907 (unsigned long long)xfer->rx_dma);
932 atmel_spi_dma_map_xfer(struct atmel_spi *as, struct spi_transfer *xfer)
936 xfer->tx_dma = xfer->rx_dma = INVALID_DMA_ADDRESS;
937 if (xfer->tx_buf) {
940 void *nonconst_tx = (void *)xfer->tx_buf;
942 xfer->tx_dma = dma_map_single(dev,
943 nonconst_tx, xfer->len,
945 if (dma_mapping_error(dev, xfer->tx_dma))
948 if (xfer->rx_buf) {
949 xfer->rx_dma = dma_map_single(dev,
950 xfer->rx_buf, xfer->len,
952 if (dma_mapping_error(dev, xfer->rx_dma)) {
953 if (xfer->tx_buf)
955 xfer->tx_dma, xfer->len,
964 struct spi_transfer *xfer)
966 if (xfer->tx_dma != INVALID_DMA_ADDRESS)
967 dma_unmap_single(master->dev.parent, xfer->tx_dma,
968 xfer->len, DMA_TO_DEVICE);
969 if (xfer->rx_dma != INVALID_DMA_ADDRESS)
970 dma_unmap_single(master->dev.parent, xfer->rx_dma,
971 xfer->len, DMA_FROM_DEVICE);
980 atmel_spi_pump_single_data(struct atmel_spi *as, struct spi_transfer *xfer)
984 unsigned long xfer_pos = xfer->len - as->current_remaining_bytes;
986 if (xfer->bits_per_word > 8) {
987 rxp16 = (u16 *)(((u8 *)xfer->rx_buf) + xfer_pos);
990 rxp = ((u8 *)xfer->rx_buf) + xfer_pos;
993 if (xfer->bits_per_word > 8) {
1004 atmel_spi_pump_fifo_data(struct atmel_spi *as, struct spi_transfer *xfer)
1008 u32 offset = xfer->len - as->current_remaining_bytes;
1009 u16 *words = (u16 *)((u8 *)xfer->rx_buf + offset);
1010 u8 *bytes = (u8 *)((u8 *)xfer->rx_buf + offset);
1014 num_bytes = ((xfer->bits_per_word > 8) ?
1024 if (xfer->bits_per_word > 8)
1030 if (xfer->bits_per_word > 8)
1044 atmel_spi_pump_pio_data(struct atmel_spi *as, struct spi_transfer *xfer)
1047 atmel_spi_pump_fifo_data(as, xfer);
1049 atmel_spi_pump_single_data(as, xfer);
1063 struct spi_transfer *xfer;
1079 * updated with the last xfer.
1097 xfer = as->current_transfer;
1098 atmel_spi_pump_pio_data(as, xfer);
1292 struct spi_transfer *xfer)
1308 if (bits != xfer->bits_per_word - 8) {
1320 if (atmel_spi_dma_map_xfer(as, xfer) < 0)
1324 atmel_spi_set_xfer_speed(as, spi, xfer);
1327 as->current_transfer = xfer;
1328 as->current_remaining_bytes = xfer->len;
1333 atmel_spi_pdc_next_xfer(master, xfer);
1334 } else if (atmel_spi_use_dma(as, xfer)) {
1337 xfer, &len);
1349 atmel_spi_next_xfer_pio(master, xfer);
1392 } else if (atmel_spi_use_dma(as, xfer)) {
1399 atmel_spi_dma_unmap_xfer(master, xfer);