⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pdc_intf.h

📁 philips公司ISP1362 USB OTG控制芯片的驱动
💻 H
字号:

/*************************************************************
 * Philips USB peripheral controller driver interface
 *
 * (c) 2002 Koninklijke Philips Electronics N.V., All rights reserved
 * 
 * This  source code and any compilation or derivative thereof is the
 * proprietary information of Koninklijke Philips Electronics N.V.
 * and is confidential in nature.
 * Under no circumstances is this software to be exposed to or placed
 * under an Open Source License of any type without the expressed
 * written permission of Koninklijke Philips Electronics N.V.
 *
 * File Name:	pdc_intf.h
 *
 * History:	
 *
 *	Version	Date		Author		Comments
 * -------------------------------------------------
 * 	1.0		09/23/02	SYARRA		Initial Creation
 *
 * Note: use tab space 4
 *************************************************************/

#ifndef __PDC_INTF_H__
#define	__PDC_INTF_H__

#include "linux/list.h"

#define		PDC_MAX_PIPES		0x10			/* Maximum number of logical pipes */

#define		PDC_CTRL_MPS		0x40			/* Control Pipe maximum packet size  */

#define		PDC_PIPE_CONTROL		PDC_EP_CONTROL
#define		PDC_PIPE_ISOCHRONOUS	PDC_EP_ISOCHRONOUS
#define		PDC_PIPE_BULK			PDC_EP_BULK		
#define		PDC_PIPE_INTERRUPT		PDC_EP_INTERRUPT

#define		PDC_EP_CONTROL		0x00			/* Control transfer endpoint */
#define		PDC_EP_ISOCHRONOUS	0x01			/* Isochronous transfer endpoint */
#define		PDC_EP_BULK			0x02			/* Bulk Transfer endpoint */
#define		PDC_EP_INTERRUPT	0x03			/* Interrupt transfer endpoint */


#define		PDC_EP_DIR_OUT		0x00			/* USB bus endpoint direction OUT */
#define		PDC_EP_DIR_IN		0x80			/* USB bus endpoint direction IN */

#define		PDC_INV_PIPE_HANDLE	0xFF

typedef unsigned char pdc_pipe_handle_t;

typedef struct pdc_ep_desc {
	unsigned char	ep_num;						/* End point number  that goes on the bus */
	unsigned char	ep_dir;						/* End point direction on the USB bus */
	unsigned char	attributes;					/* End point number */
	unsigned short	max_pkt_size;				/* Maximum packet size of this pipe */
} pdc_ep_desc_t;

typedef struct pdc_config_dev {
	unsigned long		context;				/* Identification */
	void (*notif)(unsigned long context, 
				unsigned long notification); 	/* Device level notifications */
	unsigned char		num_eps;				/* Number of end points including control in&out */
	struct pdc_ep_desc	ep_desc[0];				/* This is the array that contains ep desc */
} pdc_config_dev_t;

/* 
 * Values of various operations and notifications
 */
#define		PDC_PIPE_STALL		0x0001			/* Pipe stall (status, request)*/
#define		PDC_PIPE_UNSTALL	0x0002			/* Pipe unstall (status, request)*/
#define		PDC_GET_PIPE_STATUS	0x0004			/* Get pipe status (request) */
#define		PDC_SETUP_COMMAND	0x0008			/* setup command notification */

#define		PDC_ENABLE			0x0040			/* USB device enable */
#define		PDC_DISABLE			0x0080			/* USB device disable */
#define		PDC_RESET			0x0100			/* USB bus reset */
#define		PDC_RESUME			0x0200			/* USB bus resume */
#define		PDC_SUSPEND			0x0400			/* USB bus suspend */
#define		PDC_SET_HNP			0x0800			/* USB HNP feature setting */
#define		PDC_CONNECT			0x1000			/* Connect to USB bus  */
#define		PDC_DISCONNECT		0x2000			/* disconnect from USB bus */
#define		PDC_BUSTATUS		0x4000			/* USB initial Bus status (SUSPEND) */

typedef struct pdc_pipe_opr {
	pdc_pipe_handle_t	handle;					/* Pipe handle correpsonding to the */
	unsigned long		context;				/* pipe requester */
	unsigned short		opr;					/* Pipe operation */
	unsigned short		pipe_status;			/* Pipe status stall, unstall       */
} pdc_pipe_opr_t;

typedef struct pdc_pipe_desc {
	unsigned char	ep;
	unsigned char	ep_dir;
	unsigned long	context;
	void            *priv;
	int (*notify)(unsigned long notif_type, 
				void *priv, 
				unsigned char *data);		/* pipe notification function */
} pdc_pipe_desc;

typedef struct pdc_class_drv {
	const char *name;
	int (*class_vendor)(void *priv, 
						unsigned char *buff);	/* Class Vendor Request */
	int (*set_config)(void *priv, 
						unsigned char config);	/* Configure pipes */
	int (*set_intf)(void *priv, 
					unsigned char intf,
					unsigned char alt_set);	/* Configure interface */
	void *priv_data;								/* Driver private data */
	struct list_head driver_list;
} pdc_class_drv_t;


#define	PDC_URB_MAX_ISOPKTS			8

typedef struct pdc_iso_pkt_info {
	unsigned int offset;
	unsigned int length;
	unsigned int actual_length;
	unsigned int status;
} pdc_iso_pkt_info_t;

typedef struct pdc_urb {
	struct pdc_urb 		*next;				/* pointer to next URB */	
	pdc_pipe_handle_t	pipe;				/* pipe information */
	unsigned char 		pipe_type;			/* transfer type control, bulk, int, iso */
	unsigned char operation;				/* read, write */
	int status;								/* returned status */
	void *transfer_buffer;					/* associated data buffer */
	int transfer_buffer_length;				/* data buffer length */
	int actual_length;              		/* actual data buffer length */	
	void (*complete)(struct pdc_urb *urb);	/* pointer to completion routine */
	void *req_priv;							/* requester private data */
	int	number_of_packets;					/* number of isochronous packets */
	struct pdc_iso_pkt_info	iso_pkt[0];		/* Isochronous packet information */
} pdc_urb_t;

#define		PDC_OPR_READ			0x00
#define		PDC_OPR_WRITE			0x01

#define		PDC_URB_COMPLETE		0x01
#define		PDC_URB_PENDING			0x02
#define		PDC_EP_STALLED			0x03
#define		PDC_SHORT_PACKET		0x04
#define		PDC_SETUP_OVERRITE		0x05

#define		pdc_fill_non_iso_urb(urb, handle, type, opr, buff, len, callback,priv)	\
				urb->next = NULL;										\
				urb->pipe = handle;										\
				urb->pipe_type = type;									\
				urb->operation = opr;									\
				urb->transfer_buffer = buff;							\
				urb->transfer_buffer_length = len;						\
				urb->actual_length = 0;									\
				urb->complete = callback;								\
				urb->req_priv = priv


/*-----------------------------------------------------------------------*
 *                  External function declerations                       *
 *-----------------------------------------------------------------------*/
extern	pdc_pipe_handle_t	pdc_open_pipe(struct pdc_pipe_desc	*pipe_desc);
extern	void pdc_close_pipe(pdc_pipe_handle_t	pipe_handle);
extern	int pdc_pipe_operation(struct pdc_pipe_opr	*pipe_opr);

extern	int pdc_submit_urb(struct pdc_urb *urb_req);
extern	int pdc_cancel_urb(struct pdc_urb *urb_req);

extern	unsigned long	pdc_get_frame_number(struct pdc_class_drv *cd);
extern	int pdc_set_device_address(unsigned long context,unsigned short address);
extern	int pdc_configure_device(struct pdc_config_dev *config);
extern  void pdc_dev_control(unsigned long	opr);


extern	int pdc_register_class_drv( struct pdc_class_drv *drv);
extern	void pdc_deregister_class_drv( struct pdc_class_drv *drv);

#ifdef CONFIG_USB_OTG
typedef struct {
	void	*priv_data;
	void	(*otg_notif)(void *otg_priv, 	
						unsigned long notif, 
						unsigned long data);
	void	*dc_priv_data;
} pdc_otg_data_t;

extern	int		pdc_otg_register(pdc_otg_data_t	*otg_data);
extern	void	pdc_otg_unregister(pdc_otg_data_t	*otg_data);
extern	void 	pdc_otg_control(void *priv, unsigned long	opr);
#endif /* CONFIG_USB_OTG */



#endif	/* __PDC_INTF_H__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -