1  // SPDX-License-Identifier: GPL-2.0+
2  /*
3   * Driver for Realtek PCI-Express card reader
4   *
5   * Copyright(c) 2009-2013 Realtek Semiconductor Corp. All rights reserved.
6   *
7   * Author:
8   *   Wei WANG (wei_wang@realsil.com.cn)
9   *   Micky Ching (micky_ching@realsil.com.cn)
10   */
11  
12  #include <linux/blkdev.h>
13  #include <linux/kthread.h>
14  #include <linux/sched.h>
15  
16  #include "rtsx.h"
17  
18  /***********************************************************************
19   * Scatter-gather transfer buffer access routines
20   ***********************************************************************/
21  
22  /*
23   * Copy a buffer of length buflen to/from the srb's transfer buffer.
24   * (Note: for scatter-gather transfers (srb->use_sg > 0), srb->request_buffer
25   * points to a list of s-g entries and we ignore srb->request_bufflen.
26   * For non-scatter-gather transfers, srb->request_buffer points to the
27   * transfer buffer itself and srb->request_bufflen is the buffer's length.)
28   * Update the *index and *offset variables so that the next copy will
29   * pick up from where this one left off.
30   */
31  
rtsx_stor_access_xfer_buf(unsigned char * buffer,unsigned int buflen,struct scsi_cmnd * srb,unsigned int * index,unsigned int * offset,enum xfer_buf_dir dir)32  unsigned int rtsx_stor_access_xfer_buf(unsigned char *buffer,
33  				       unsigned int buflen,
34  				       struct scsi_cmnd *srb,
35  				       unsigned int *index,
36  				       unsigned int *offset,
37  				       enum xfer_buf_dir dir)
38  {
39  	unsigned int cnt;
40  
41  	/* If not using scatter-gather, just transfer the data directly. */
42  	if (scsi_sg_count(srb) == 0) {
43  		unsigned char *sgbuffer;
44  
45  		if (*offset >= scsi_bufflen(srb))
46  			return 0;
47  		cnt = min(buflen, scsi_bufflen(srb) - *offset);
48  
49  		sgbuffer = (unsigned char *)scsi_sglist(srb) + *offset;
50  
51  		if (dir == TO_XFER_BUF)
52  			memcpy(sgbuffer, buffer, cnt);
53  		else
54  			memcpy(buffer, sgbuffer, cnt);
55  		*offset += cnt;
56  
57  	/*
58  	 * Using scatter-gather. We have to go through the list one entry
59  	 * at a time. Each s-g entry contains some number of pages which
60  	 * have to be copied one at a time.
61  	 */
62  	} else {
63  		struct scatterlist *sg =
64  				(struct scatterlist *)scsi_sglist(srb)
65  				+ *index;
66  
67  		/*
68  		 * This loop handles a single s-g list entry, which may
69  		 * include multiple pages.  Find the initial page structure
70  		 * and the starting offset within the page, and update
71  		 * the *offset and *index values for the next loop.
72  		 */
73  		cnt = 0;
74  		while (cnt < buflen && *index < scsi_sg_count(srb)) {
75  			struct page *page = sg_page(sg) +
76  					((sg->offset + *offset) >> PAGE_SHIFT);
77  			unsigned int poff = (sg->offset + *offset) &
78  					    (PAGE_SIZE - 1);
79  			unsigned int sglen = sg->length - *offset;
80  
81  			if (sglen > buflen - cnt) {
82  				/* Transfer ends within this s-g entry */
83  				sglen = buflen - cnt;
84  				*offset += sglen;
85  			} else {
86  				/* Transfer continues to next s-g entry */
87  				*offset = 0;
88  				++*index;
89  				++sg;
90  			}
91  
92  			while (sglen > 0) {
93  				unsigned int plen = min(sglen, (unsigned int)
94  						PAGE_SIZE - poff);
95  
96  				if (dir == TO_XFER_BUF)
97  					memcpy_to_page(page, poff, buffer + cnt, plen);
98  				else
99  					memcpy_from_page(buffer + cnt, page, poff, plen);
100  
101  				/* Start at the beginning of the next page */
102  				poff = 0;
103  				++page;
104  				cnt += plen;
105  				sglen -= plen;
106  			}
107  		}
108  	}
109  
110  	/* Return the amount actually transferred */
111  	return cnt;
112  }
113  
114  /*
115   * Store the contents of buffer into srb's transfer buffer and set the
116   * SCSI residue.
117   */
rtsx_stor_set_xfer_buf(unsigned char * buffer,unsigned int buflen,struct scsi_cmnd * srb)118  void rtsx_stor_set_xfer_buf(unsigned char *buffer,
119  			    unsigned int buflen, struct scsi_cmnd *srb)
120  {
121  	unsigned int index = 0, offset = 0;
122  
123  	rtsx_stor_access_xfer_buf(buffer, buflen, srb, &index, &offset,
124  				  TO_XFER_BUF);
125  	if (buflen < scsi_bufflen(srb))
126  		scsi_set_resid(srb, scsi_bufflen(srb) - buflen);
127  }
128  
rtsx_stor_get_xfer_buf(unsigned char * buffer,unsigned int buflen,struct scsi_cmnd * srb)129  void rtsx_stor_get_xfer_buf(unsigned char *buffer,
130  			    unsigned int buflen, struct scsi_cmnd *srb)
131  {
132  	unsigned int index = 0, offset = 0;
133  
134  	rtsx_stor_access_xfer_buf(buffer, buflen, srb, &index, &offset,
135  				  FROM_XFER_BUF);
136  	if (buflen < scsi_bufflen(srb))
137  		scsi_set_resid(srb, scsi_bufflen(srb) - buflen);
138  }
139  
140  /***********************************************************************
141   * Transport routines
142   ***********************************************************************/
143  
144  /*
145   * Invoke the transport and basic error-handling/recovery methods
146   *
147   * This is used to send the message to the device and receive the response.
148   */
rtsx_invoke_transport(struct scsi_cmnd * srb,struct rtsx_chip * chip)149  void rtsx_invoke_transport(struct scsi_cmnd *srb, struct rtsx_chip *chip)
150  {
151  	int result;
152  
153  	result = rtsx_scsi_handler(srb, chip);
154  
155  	/*
156  	 * if the command gets aborted by the higher layers, we need to
157  	 * short-circuit all other processing.
158  	 */
159  	if (rtsx_chk_stat(chip, RTSX_STAT_ABORT)) {
160  		dev_dbg(rtsx_dev(chip), "-- command was aborted\n");
161  		srb->result = DID_ABORT << 16;
162  		goto handle_errors;
163  	}
164  
165  	/* if there is a transport error, reset and don't auto-sense */
166  	if (result == TRANSPORT_ERROR) {
167  		dev_dbg(rtsx_dev(chip), "-- transport indicates error, resetting\n");
168  		srb->result = DID_ERROR << 16;
169  		goto handle_errors;
170  	}
171  
172  	srb->result = SAM_STAT_GOOD;
173  
174  	/*
175  	 * If we have a failure, we're going to do a REQUEST_SENSE
176  	 * automatically.  Note that we differentiate between a command
177  	 * "failure" and an "error" in the transport mechanism.
178  	 */
179  	if (result == TRANSPORT_FAILED) {
180  		/* set the result so the higher layers expect this data */
181  		srb->result = SAM_STAT_CHECK_CONDITION;
182  		memcpy(srb->sense_buffer,
183  		       (unsigned char *)&chip->sense_buffer[SCSI_LUN(srb)],
184  		       sizeof(struct sense_data_t));
185  	}
186  
187  	return;
188  
189  handle_errors:
190  	return;
191  }
192  
rtsx_add_cmd(struct rtsx_chip * chip,u8 cmd_type,u16 reg_addr,u8 mask,u8 data)193  void rtsx_add_cmd(struct rtsx_chip *chip,
194  		  u8 cmd_type, u16 reg_addr, u8 mask, u8 data)
195  {
196  	__le32 *cb = (__le32 *)(chip->host_cmds_ptr);
197  	u32 val = 0;
198  
199  	val |= (u32)(cmd_type & 0x03) << 30;
200  	val |= (u32)(reg_addr & 0x3FFF) << 16;
201  	val |= (u32)mask << 8;
202  	val |= (u32)data;
203  
204  	spin_lock_irq(&chip->rtsx->reg_lock);
205  	if (chip->ci < (HOST_CMDS_BUF_LEN / 4))
206  		cb[(chip->ci)++] = cpu_to_le32(val);
207  
208  	spin_unlock_irq(&chip->rtsx->reg_lock);
209  }
210  
rtsx_send_cmd_no_wait(struct rtsx_chip * chip)211  void rtsx_send_cmd_no_wait(struct rtsx_chip *chip)
212  {
213  	u32 val = BIT(31);
214  
215  	rtsx_writel(chip, RTSX_HCBAR, chip->host_cmds_addr);
216  
217  	val |= (u32)(chip->ci * 4) & 0x00FFFFFF;
218  	/* Hardware Auto Response */
219  	val |= 0x40000000;
220  	rtsx_writel(chip, RTSX_HCBCTLR, val);
221  }
222  
rtsx_send_cmd(struct rtsx_chip * chip,u8 card,int timeout)223  int rtsx_send_cmd(struct rtsx_chip *chip, u8 card, int timeout)
224  {
225  	struct rtsx_dev *rtsx = chip->rtsx;
226  	struct completion trans_done;
227  	u32 val = BIT(31);
228  	long timeleft;
229  	int err = 0;
230  
231  	if (card == SD_CARD)
232  		rtsx->check_card_cd = SD_EXIST;
233  	else if (card == MS_CARD)
234  		rtsx->check_card_cd = MS_EXIST;
235  	else if (card == XD_CARD)
236  		rtsx->check_card_cd = XD_EXIST;
237  	else
238  		rtsx->check_card_cd = 0;
239  
240  	spin_lock_irq(&rtsx->reg_lock);
241  
242  	/* set up data structures for the wakeup system */
243  	rtsx->done = &trans_done;
244  	rtsx->trans_result = TRANS_NOT_READY;
245  	init_completion(&trans_done);
246  	rtsx->trans_state = STATE_TRANS_CMD;
247  
248  	rtsx_writel(chip, RTSX_HCBAR, chip->host_cmds_addr);
249  
250  	val |= (u32)(chip->ci * 4) & 0x00FFFFFF;
251  	/* Hardware Auto Response */
252  	val |= 0x40000000;
253  	rtsx_writel(chip, RTSX_HCBCTLR, val);
254  
255  	spin_unlock_irq(&rtsx->reg_lock);
256  
257  	/* Wait for TRANS_OK_INT */
258  	timeleft = wait_for_completion_interruptible_timeout(&trans_done,
259  							     msecs_to_jiffies(timeout));
260  	if (timeleft <= 0) {
261  		dev_dbg(rtsx_dev(chip), "chip->int_reg = 0x%x\n",
262  			chip->int_reg);
263  		err = -ETIMEDOUT;
264  		goto finish_send_cmd;
265  	}
266  
267  	spin_lock_irq(&rtsx->reg_lock);
268  	if (rtsx->trans_result == TRANS_RESULT_FAIL)
269  		err = -EIO;
270  	else if (rtsx->trans_result == TRANS_RESULT_OK)
271  		err = 0;
272  
273  	spin_unlock_irq(&rtsx->reg_lock);
274  
275  finish_send_cmd:
276  	rtsx->done = NULL;
277  	rtsx->trans_state = STATE_TRANS_NONE;
278  
279  	if (err < 0)
280  		rtsx_stop_cmd(chip, card);
281  
282  	return err;
283  }
284  
rtsx_add_sg_tbl(struct rtsx_chip * chip,u32 addr,u32 len,u8 option)285  static inline void rtsx_add_sg_tbl(struct rtsx_chip *chip,
286  				   u32 addr, u32 len, u8 option)
287  {
288  	__le64 *sgb = (__le64 *)(chip->host_sg_tbl_ptr);
289  	u64 val = 0;
290  	u32 temp_len = 0;
291  	u8  temp_opt = 0;
292  
293  	do {
294  		if (len > 0x80000) {
295  			temp_len = 0x80000;
296  			temp_opt = option & (~RTSX_SG_END);
297  		} else {
298  			temp_len = len;
299  			temp_opt = option;
300  		}
301  		val = ((u64)addr << 32) | ((u64)temp_len << 12) | temp_opt;
302  
303  		if (chip->sgi < (HOST_SG_TBL_BUF_LEN / 8))
304  			sgb[(chip->sgi)++] = cpu_to_le64(val);
305  
306  		len -= temp_len;
307  		addr += temp_len;
308  	} while (len);
309  }
310  
rtsx_transfer_sglist_adma_partial(struct rtsx_chip * chip,u8 card,struct scatterlist * sg,int num_sg,unsigned int * index,unsigned int * offset,int size,enum dma_data_direction dma_dir,int timeout)311  static int rtsx_transfer_sglist_adma_partial(struct rtsx_chip *chip, u8 card,
312  					     struct scatterlist *sg, int num_sg,
313  					     unsigned int *index,
314  					     unsigned int *offset, int size,
315  					     enum dma_data_direction dma_dir,
316  					     int timeout)
317  {
318  	struct rtsx_dev *rtsx = chip->rtsx;
319  	struct completion trans_done;
320  	u8 dir;
321  	int sg_cnt, i, resid;
322  	int err = 0;
323  	long timeleft;
324  	struct scatterlist *sg_ptr;
325  	u32 val = TRIG_DMA;
326  
327  	if (!sg || num_sg <= 0 || !offset || !index)
328  		return -EIO;
329  
330  	if (dma_dir == DMA_TO_DEVICE)
331  		dir = HOST_TO_DEVICE;
332  	else if (dma_dir == DMA_FROM_DEVICE)
333  		dir = DEVICE_TO_HOST;
334  	else
335  		return -ENXIO;
336  
337  	if (card == SD_CARD)
338  		rtsx->check_card_cd = SD_EXIST;
339  	else if (card == MS_CARD)
340  		rtsx->check_card_cd = MS_EXIST;
341  	else if (card == XD_CARD)
342  		rtsx->check_card_cd = XD_EXIST;
343  	else
344  		rtsx->check_card_cd = 0;
345  
346  	spin_lock_irq(&rtsx->reg_lock);
347  
348  	/* set up data structures for the wakeup system */
349  	rtsx->done = &trans_done;
350  
351  	rtsx->trans_state = STATE_TRANS_SG;
352  	rtsx->trans_result = TRANS_NOT_READY;
353  
354  	spin_unlock_irq(&rtsx->reg_lock);
355  
356  	sg_cnt = dma_map_sg(&rtsx->pci->dev, sg, num_sg, dma_dir);
357  
358  	resid = size;
359  	sg_ptr = sg;
360  	chip->sgi = 0;
361  	/*
362  	 * Usually the next entry will be @sg@ + 1, but if this sg element
363  	 * is part of a chained scatterlist, it could jump to the start of
364  	 * a new scatterlist array. So here we use sg_next to move to
365  	 * the proper sg.
366  	 */
367  	for (i = 0; i < *index; i++)
368  		sg_ptr = sg_next(sg_ptr);
369  	for (i = *index; i < sg_cnt; i++) {
370  		dma_addr_t addr;
371  		unsigned int len;
372  		u8 option;
373  
374  		addr = sg_dma_address(sg_ptr);
375  		len = sg_dma_len(sg_ptr);
376  
377  		dev_dbg(rtsx_dev(chip), "DMA addr: 0x%x, Len: 0x%x\n",
378  			(unsigned int)addr, len);
379  		dev_dbg(rtsx_dev(chip), "*index = %d, *offset = %d\n",
380  			*index, *offset);
381  
382  		addr += *offset;
383  
384  		if ((len - *offset) > resid) {
385  			*offset += resid;
386  			len = resid;
387  			resid = 0;
388  		} else {
389  			resid -= (len - *offset);
390  			len -= *offset;
391  			*offset = 0;
392  			*index = *index + 1;
393  		}
394  		option = RTSX_SG_VALID | RTSX_SG_TRANS_DATA;
395  		if ((i == sg_cnt - 1) || !resid)
396  			option |= RTSX_SG_END;
397  
398  		rtsx_add_sg_tbl(chip, (u32)addr, (u32)len, option);
399  
400  		if (!resid)
401  			break;
402  
403  		sg_ptr = sg_next(sg_ptr);
404  	}
405  
406  	dev_dbg(rtsx_dev(chip), "SG table count = %d\n", chip->sgi);
407  
408  	val |= (u32)(dir & 0x01) << 29;
409  	val |= ADMA_MODE;
410  
411  	spin_lock_irq(&rtsx->reg_lock);
412  
413  	init_completion(&trans_done);
414  
415  	rtsx_writel(chip, RTSX_HDBAR, chip->host_sg_tbl_addr);
416  	rtsx_writel(chip, RTSX_HDBCTLR, val);
417  
418  	spin_unlock_irq(&rtsx->reg_lock);
419  
420  	timeleft = wait_for_completion_interruptible_timeout(&trans_done,
421  							     msecs_to_jiffies(timeout));
422  	if (timeleft <= 0) {
423  		dev_dbg(rtsx_dev(chip), "Timeout (%s %d)\n",
424  			__func__, __LINE__);
425  		dev_dbg(rtsx_dev(chip), "chip->int_reg = 0x%x\n",
426  			chip->int_reg);
427  		err = -ETIMEDOUT;
428  		goto out;
429  	}
430  
431  	spin_lock_irq(&rtsx->reg_lock);
432  	if (rtsx->trans_result == TRANS_RESULT_FAIL) {
433  		err = -EIO;
434  		spin_unlock_irq(&rtsx->reg_lock);
435  		goto out;
436  	}
437  	spin_unlock_irq(&rtsx->reg_lock);
438  
439  	/* Wait for TRANS_OK_INT */
440  	spin_lock_irq(&rtsx->reg_lock);
441  	if (rtsx->trans_result == TRANS_NOT_READY) {
442  		init_completion(&trans_done);
443  		spin_unlock_irq(&rtsx->reg_lock);
444  		timeleft = wait_for_completion_interruptible_timeout(&trans_done,
445  								     msecs_to_jiffies(timeout));
446  		if (timeleft <= 0) {
447  			dev_dbg(rtsx_dev(chip), "Timeout (%s %d)\n",
448  				__func__, __LINE__);
449  			dev_dbg(rtsx_dev(chip), "chip->int_reg = 0x%x\n",
450  				chip->int_reg);
451  			err = -ETIMEDOUT;
452  			goto out;
453  		}
454  	} else {
455  		spin_unlock_irq(&rtsx->reg_lock);
456  	}
457  
458  	spin_lock_irq(&rtsx->reg_lock);
459  	if (rtsx->trans_result == TRANS_RESULT_FAIL)
460  		err = -EIO;
461  	else if (rtsx->trans_result == TRANS_RESULT_OK)
462  		err = 0;
463  
464  	spin_unlock_irq(&rtsx->reg_lock);
465  
466  out:
467  	rtsx->done = NULL;
468  	rtsx->trans_state = STATE_TRANS_NONE;
469  	dma_unmap_sg(&rtsx->pci->dev, sg, num_sg, dma_dir);
470  
471  	if (err < 0)
472  		rtsx_stop_cmd(chip, card);
473  
474  	return err;
475  }
476  
rtsx_transfer_sglist_adma(struct rtsx_chip * chip,u8 card,struct scatterlist * sg,int num_sg,enum dma_data_direction dma_dir,int timeout)477  static int rtsx_transfer_sglist_adma(struct rtsx_chip *chip, u8 card,
478  				     struct scatterlist *sg, int num_sg,
479  				     enum dma_data_direction dma_dir,
480  				     int timeout)
481  {
482  	struct rtsx_dev *rtsx = chip->rtsx;
483  	struct completion trans_done;
484  	u8 dir;
485  	int buf_cnt, i;
486  	int err = 0;
487  	long timeleft;
488  	struct scatterlist *sg_ptr;
489  
490  	if (!sg || num_sg <= 0)
491  		return -EIO;
492  
493  	if (dma_dir == DMA_TO_DEVICE)
494  		dir = HOST_TO_DEVICE;
495  	else if (dma_dir == DMA_FROM_DEVICE)
496  		dir = DEVICE_TO_HOST;
497  	else
498  		return -ENXIO;
499  
500  	if (card == SD_CARD)
501  		rtsx->check_card_cd = SD_EXIST;
502  	else if (card == MS_CARD)
503  		rtsx->check_card_cd = MS_EXIST;
504  	else if (card == XD_CARD)
505  		rtsx->check_card_cd = XD_EXIST;
506  	else
507  		rtsx->check_card_cd = 0;
508  
509  	spin_lock_irq(&rtsx->reg_lock);
510  
511  	/* set up data structures for the wakeup system */
512  	rtsx->done = &trans_done;
513  
514  	rtsx->trans_state = STATE_TRANS_SG;
515  	rtsx->trans_result = TRANS_NOT_READY;
516  
517  	spin_unlock_irq(&rtsx->reg_lock);
518  
519  	buf_cnt = dma_map_sg(&rtsx->pci->dev, sg, num_sg, dma_dir);
520  
521  	sg_ptr = sg;
522  
523  	for (i = 0; i <= buf_cnt / (HOST_SG_TBL_BUF_LEN / 8); i++) {
524  		u32 val = TRIG_DMA;
525  		int sg_cnt, j;
526  
527  		if (i == buf_cnt / (HOST_SG_TBL_BUF_LEN / 8))
528  			sg_cnt = buf_cnt % (HOST_SG_TBL_BUF_LEN / 8);
529  		else
530  			sg_cnt = HOST_SG_TBL_BUF_LEN / 8;
531  
532  		chip->sgi = 0;
533  		for (j = 0; j < sg_cnt; j++) {
534  			dma_addr_t addr = sg_dma_address(sg_ptr);
535  			unsigned int len = sg_dma_len(sg_ptr);
536  			u8 option;
537  
538  			dev_dbg(rtsx_dev(chip), "DMA addr: 0x%x, Len: 0x%x\n",
539  				(unsigned int)addr, len);
540  
541  			option = RTSX_SG_VALID | RTSX_SG_TRANS_DATA;
542  			if (j == (sg_cnt - 1))
543  				option |= RTSX_SG_END;
544  
545  			rtsx_add_sg_tbl(chip, (u32)addr, (u32)len, option);
546  
547  			sg_ptr = sg_next(sg_ptr);
548  		}
549  
550  		dev_dbg(rtsx_dev(chip), "SG table count = %d\n", chip->sgi);
551  
552  		val |= (u32)(dir & 0x01) << 29;
553  		val |= ADMA_MODE;
554  
555  		spin_lock_irq(&rtsx->reg_lock);
556  
557  		init_completion(&trans_done);
558  
559  		rtsx_writel(chip, RTSX_HDBAR, chip->host_sg_tbl_addr);
560  		rtsx_writel(chip, RTSX_HDBCTLR, val);
561  
562  		spin_unlock_irq(&rtsx->reg_lock);
563  
564  		timeleft = wait_for_completion_interruptible_timeout(&trans_done,
565  								     msecs_to_jiffies(timeout));
566  		if (timeleft <= 0) {
567  			dev_dbg(rtsx_dev(chip), "Timeout (%s %d)\n",
568  				__func__, __LINE__);
569  			dev_dbg(rtsx_dev(chip), "chip->int_reg = 0x%x\n",
570  				chip->int_reg);
571  			err = -ETIMEDOUT;
572  			goto out;
573  		}
574  
575  		spin_lock_irq(&rtsx->reg_lock);
576  		if (rtsx->trans_result == TRANS_RESULT_FAIL) {
577  			err = -EIO;
578  			spin_unlock_irq(&rtsx->reg_lock);
579  			goto out;
580  		}
581  		spin_unlock_irq(&rtsx->reg_lock);
582  
583  		sg_ptr += sg_cnt;
584  	}
585  
586  	/* Wait for TRANS_OK_INT */
587  	spin_lock_irq(&rtsx->reg_lock);
588  	if (rtsx->trans_result == TRANS_NOT_READY) {
589  		init_completion(&trans_done);
590  		spin_unlock_irq(&rtsx->reg_lock);
591  		timeleft = wait_for_completion_interruptible_timeout(&trans_done,
592  								     msecs_to_jiffies(timeout));
593  		if (timeleft <= 0) {
594  			dev_dbg(rtsx_dev(chip), "Timeout (%s %d)\n",
595  				__func__, __LINE__);
596  			dev_dbg(rtsx_dev(chip), "chip->int_reg = 0x%x\n",
597  				chip->int_reg);
598  			err = -ETIMEDOUT;
599  			goto out;
600  		}
601  	} else {
602  		spin_unlock_irq(&rtsx->reg_lock);
603  	}
604  
605  	spin_lock_irq(&rtsx->reg_lock);
606  	if (rtsx->trans_result == TRANS_RESULT_FAIL)
607  		err = -EIO;
608  	else if (rtsx->trans_result == TRANS_RESULT_OK)
609  		err = 0;
610  
611  	spin_unlock_irq(&rtsx->reg_lock);
612  
613  out:
614  	rtsx->done = NULL;
615  	rtsx->trans_state = STATE_TRANS_NONE;
616  	dma_unmap_sg(&rtsx->pci->dev, sg, num_sg, dma_dir);
617  
618  	if (err < 0)
619  		rtsx_stop_cmd(chip, card);
620  
621  	return err;
622  }
623  
rtsx_transfer_buf(struct rtsx_chip * chip,u8 card,void * buf,size_t len,enum dma_data_direction dma_dir,int timeout)624  static int rtsx_transfer_buf(struct rtsx_chip *chip, u8 card, void *buf,
625  			     size_t len, enum dma_data_direction dma_dir,
626  			     int timeout)
627  {
628  	struct rtsx_dev *rtsx = chip->rtsx;
629  	struct completion trans_done;
630  	dma_addr_t addr;
631  	u8 dir;
632  	int err = 0;
633  	u32 val = BIT(31);
634  	long timeleft;
635  
636  	if (!buf || len <= 0)
637  		return -EIO;
638  
639  	if (dma_dir == DMA_TO_DEVICE)
640  		dir = HOST_TO_DEVICE;
641  	else if (dma_dir == DMA_FROM_DEVICE)
642  		dir = DEVICE_TO_HOST;
643  	else
644  		return -ENXIO;
645  
646  	addr = dma_map_single(&rtsx->pci->dev, buf, len, dma_dir);
647  	if (dma_mapping_error(&rtsx->pci->dev, addr))
648  		return -ENOMEM;
649  
650  	if (card == SD_CARD)
651  		rtsx->check_card_cd = SD_EXIST;
652  	else if (card == MS_CARD)
653  		rtsx->check_card_cd = MS_EXIST;
654  	else if (card == XD_CARD)
655  		rtsx->check_card_cd = XD_EXIST;
656  	else
657  		rtsx->check_card_cd = 0;
658  
659  	val |= (u32)(dir & 0x01) << 29;
660  	val |= (u32)(len & 0x00FFFFFF);
661  
662  	spin_lock_irq(&rtsx->reg_lock);
663  
664  	/* set up data structures for the wakeup system */
665  	rtsx->done = &trans_done;
666  
667  	init_completion(&trans_done);
668  
669  	rtsx->trans_state = STATE_TRANS_BUF;
670  	rtsx->trans_result = TRANS_NOT_READY;
671  
672  	rtsx_writel(chip, RTSX_HDBAR, addr);
673  	rtsx_writel(chip, RTSX_HDBCTLR, val);
674  
675  	spin_unlock_irq(&rtsx->reg_lock);
676  
677  	/* Wait for TRANS_OK_INT */
678  	timeleft = wait_for_completion_interruptible_timeout(&trans_done,
679  							     msecs_to_jiffies(timeout));
680  	if (timeleft <= 0) {
681  		dev_dbg(rtsx_dev(chip), "Timeout (%s %d)\n",
682  			__func__, __LINE__);
683  		dev_dbg(rtsx_dev(chip), "chip->int_reg = 0x%x\n",
684  			chip->int_reg);
685  		err = -ETIMEDOUT;
686  		goto out;
687  	}
688  
689  	spin_lock_irq(&rtsx->reg_lock);
690  	if (rtsx->trans_result == TRANS_RESULT_FAIL)
691  		err = -EIO;
692  	else if (rtsx->trans_result == TRANS_RESULT_OK)
693  		err = 0;
694  
695  	spin_unlock_irq(&rtsx->reg_lock);
696  
697  out:
698  	rtsx->done = NULL;
699  	rtsx->trans_state = STATE_TRANS_NONE;
700  	dma_unmap_single(&rtsx->pci->dev, addr, len, dma_dir);
701  
702  	if (err < 0)
703  		rtsx_stop_cmd(chip, card);
704  
705  	return err;
706  }
707  
rtsx_transfer_data_partial(struct rtsx_chip * chip,u8 card,void * buf,size_t len,int use_sg,unsigned int * index,unsigned int * offset,enum dma_data_direction dma_dir,int timeout)708  int rtsx_transfer_data_partial(struct rtsx_chip *chip, u8 card,
709  			       void *buf, size_t len, int use_sg,
710  			       unsigned int *index, unsigned int *offset,
711  			       enum dma_data_direction dma_dir, int timeout)
712  {
713  	int err = 0;
714  
715  	/* don't transfer data during abort processing */
716  	if (rtsx_chk_stat(chip, RTSX_STAT_ABORT))
717  		return -EIO;
718  
719  	if (use_sg) {
720  		struct scatterlist *sg = buf;
721  
722  		err = rtsx_transfer_sglist_adma_partial(chip, card, sg, use_sg,
723  							index, offset, (int)len,
724  							dma_dir, timeout);
725  	} else {
726  		err = rtsx_transfer_buf(chip, card,
727  					buf, len, dma_dir, timeout);
728  	}
729  	if (err < 0) {
730  		if (RTSX_TST_DELINK(chip)) {
731  			RTSX_CLR_DELINK(chip);
732  			chip->need_reinit = SD_CARD | MS_CARD | XD_CARD;
733  			rtsx_reinit_cards(chip, 1);
734  		}
735  	}
736  
737  	return err;
738  }
739  
rtsx_transfer_data(struct rtsx_chip * chip,u8 card,void * buf,size_t len,int use_sg,enum dma_data_direction dma_dir,int timeout)740  int rtsx_transfer_data(struct rtsx_chip *chip, u8 card, void *buf, size_t len,
741  		       int use_sg, enum dma_data_direction dma_dir, int timeout)
742  {
743  	int err = 0;
744  
745  	dev_dbg(rtsx_dev(chip), "use_sg = %d\n", use_sg);
746  
747  	/* don't transfer data during abort processing */
748  	if (rtsx_chk_stat(chip, RTSX_STAT_ABORT))
749  		return -EIO;
750  
751  	if (use_sg) {
752  		err = rtsx_transfer_sglist_adma(chip, card, buf,
753  						use_sg, dma_dir, timeout);
754  	} else {
755  		err = rtsx_transfer_buf(chip, card, buf, len, dma_dir, timeout);
756  	}
757  
758  	if (err < 0) {
759  		if (RTSX_TST_DELINK(chip)) {
760  			RTSX_CLR_DELINK(chip);
761  			chip->need_reinit = SD_CARD | MS_CARD | XD_CARD;
762  			rtsx_reinit_cards(chip, 1);
763  		}
764  	}
765  
766  	return err;
767  }
768  
769