11dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong/* Driver for Realtek RTS51xx USB card reader
21dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong * Header file
31dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong *
41dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong * Copyright(c) 2009 Realtek Semiconductor Corp. All rights reserved.
51dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong *
61dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong * This program is free software; you can redistribute it and/or modify it
71dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong * under the terms of the GNU General Public License as published by the
81dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong * Free Software Foundation; either version 2, or (at your option) any
91dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong * later version.
101dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong *
111dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong * This program is distributed in the hope that it will be useful, but
121dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong * WITHOUT ANY WARRANTY; without even the implied warranty of
131dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
141dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong * General Public License for more details.
151dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong *
161dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong * You should have received a copy of the GNU General Public License along
171dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong * with this program; if not, see <http://www.gnu.org/licenses/>.
181dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong *
191dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong * Author:
201dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong *   wwang (wei_wang@realsil.com.cn)
211dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong *   No. 450, Shenhu Road, Suzhou Industry Park, Suzhou, China
221dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong * Maintainer:
231dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong *   Edwin Rong (edwin_rong@realsil.com.cn)
241dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong *   No. 450, Shenhu Road, Suzhou Industry Park, Suzhou, China
251dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong */
261dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong
271dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong#ifndef __RTS51X_TRANSPORT_H
281dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong#define __RTS51X_TRANSPORT_H
291dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong
301dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong#include <linux/kernel.h>
311dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong
321dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong#include "rts51x.h"
331dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong#include "rts51x_chip.h"
341dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong
351dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong#if 1 /* LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 34) */
361dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong#define URB_NO_SETUP_DMA_MAP		0
371dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong#endif
381dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong
391dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rongunsigned int rts51x_access_sglist(unsigned char *buffer,
401dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong				  unsigned int buflen, void *sglist,
411dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong				  void **sgptr, unsigned int *offset,
421dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong				  enum xfer_buf_dir dir);
431dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rongunsigned int rts51x_access_xfer_buf(unsigned char *buffer, unsigned int buflen,
441dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong				    struct scsi_cmnd *srb,
451dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong				    struct scatterlist **sgptr,
461dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong				    unsigned int *offset,
471dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong				    enum xfer_buf_dir dir);
481dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rongvoid rts51x_set_xfer_buf(unsigned char *buffer, unsigned int buflen,
491dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong			 struct scsi_cmnd *srb);
501dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rongvoid rts51x_get_xfer_buf(unsigned char *buffer, unsigned int buflen,
511dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong			 struct scsi_cmnd *srb);
521dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong
531dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rongint rts51x_ctrl_transfer(struct rts51x_chip *chip, unsigned int pipe,
541dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong			 u8 request, u8 requesttype, u16 value, u16 index,
551dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong			 void *data, u16 size, int timeout);
561dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rongint rts51x_clear_halt(struct rts51x_chip *chip, unsigned int pipe);
571dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rongint rts51x_transfer_data(struct rts51x_chip *chip, unsigned int pipe,
581dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong			 void *buf, unsigned int len, int use_sg,
591dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong			 unsigned int *act_len, int timeout);
601dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rongint rts51x_transfer_data_partial(struct rts51x_chip *chip, unsigned int pipe,
611dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong				 void *buf, void **ptr, unsigned int *offset,
621dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong				 unsigned int len, int use_sg,
631dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong				 unsigned int *act_len, int timeout);
641dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong
651dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong/* whichPipe:
661dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong * 0: bulk in pipe
671dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong * 1: bulk out pipe
681dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong * 2: intr  in pipe */
691dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rongint rts51x_reset_pipe(struct rts51x_chip *chip, char pipe);
701dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong
711dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong#ifndef POLLING_IN_THREAD
721dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rongint rts51x_start_epc_transfer(struct rts51x_chip *chip);
731dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rongvoid rts51x_cancel_epc_transfer(struct rts51x_chip *chip);
741dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong#endif
751dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong
76aa2f92ae6b986934ff220eda6b5c91f4ee294b35Márton Némethint rts51x_get_epc_status(struct rts51x_chip *chip, u16 *status);
771dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rongvoid rts51x_invoke_transport(struct scsi_cmnd *srb, struct rts51x_chip *chip);
781dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong
791dac4186bcc663cb8c2bcc59481aea8fe9124a6cedwin_rong#endif /* __RTS51X_TRANSPORT_H */
80