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

📄 otg_fsm.h

📁 linux下的usb开发
💻 H
字号:
/******************************************************* * Philips OTG module for USB OTG controller * * (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:	otg_fsm.h * * History:	 * *	Version		Date		Author		Comments * ------------------------------------------------- * 	1.0			09/23/02	SYARRA		Initial Creation * *******************************************************/#ifndef __OTG_FSM_H__#define __OTG_FSM_H__#include "hal_intf.h"/* OTG timer values in milli seconds */#define 	A_WAIT_VRISE_TIMER			200#define 	A_WAIT_BCON_TIMER			200 #define 	A_AIDL_BDIS_TIMER			150	 	#define 	B_ASE0_BRST_TIMER			8#define 	B_DATA_PLS_TIMER	  		8		//5-10 msec#define 	B_VBUS_PLS_TIMER     		15		//10-20 msec#define		B_BUS_REQ_TIMER				3200	//5 sec maximum#define		A_SUSPEND_DET_TIMER			50#define		A_BCON_DEBOUNCE_TIMER			120// Timer Id values #define		OTG_INVALID_TIMER_ID		0#define 	A_WAIT_VRISE_TIMER_ID		1#define 	A_WAIT_BCON_TIMER_ID		2#define 	A_AIDL_BDIS_TIMER_ID		3#define 	B_ASE0_BRST_TIMER_ID		4#define 	B_DATA_PLS_TIMER_ID			5#define 	B_VBUS_PLS_TIMER_ID			6#define		B_BUS_REQ_TIMER_ID			7#define		A_SUSPEND_DET_TIMER_ID		8#define		A_BCON_DEBOUNCE_TIMER_ID	9#define 	OTG_ERR_SRP_FAIL			1#define 	OTG_ERR_A_WAIT_VRISE_TMOUT	2#define 	OTG_ERR_A_WAIT_BCON_TMOUT	3#define 	OTG_ERR_A_AIDL_BDIS_TMOUT	4#define 	OTG_ERR_B_ASE0_BRST_TMOUT	5#define 	OTG_ERR_OVERCURRENT			6#define		IDLE						OTG_IDLE#define		HOST						OTG_HOST#define		PERIPHERAL					OTG_PERIPHERAL#define		BUS_DROP					OTG_BUS_DROP#define		BUS_OPEN					OTG_BUS_OPEN/* Complete State values */#define		A_DEV_BASE					OTG_A_DEV_BASE#define		B_DEV_BASE					OTG_B_DEV_BASE#define		WAIT_RMT_CON				OTG_WAIT_RMT_CON#define		INV_STATE					OTG_INV_STATE/* Application abstraction states */#define		A_IDLE						OTG_A_IDLE#define		A_HOST						OTG_A_HOST#define		A_PERIPHERAL				OTG_A_PERIPHERAL#define		B_IDLE						OTG_B_IDLE#define		B_HOST						OTG_B_HOST#define		B_PERIPHERAL				OTG_B_PERIPHERAL/* Additional SW FSM States */#define		A_WAIT_BCON					OTG_A_WAIT_BCON#define		A_WAIT_VRISE				OTG_A_WAIT_VRISE#define		A_SUSPEND					OTG_A_SUSPEND#define		A_WAIT_VFALL				OTG_A_WAIT_VFALL#define		A_VBUS_ERR					OTG_A_VBUS_ERR#define		A_LAST_STATE				OTG_A_LAST_STATE#define		B_WAIT_ACON					OTG_B_WAIT_ACON#define		B_SRP_INIT					OTG_B_SRP_INIT#define		B_LAST_STATE				OTG_B_LAST_STATEtypedef struct otg_tcb {	__u8	state;	__u8	app_state;	__u8	err_code;	__u8	id:				1;//for A-device	__u8   a_vbus_vld:		1;	__u8	a_sess_vld:		1;	__u8	a_srp_det:		1;	__u8	b_conn:			1;	__u8	b_bus_suspend:	1;	__u8	b_bus_resume:	1;	__u8	b_hnp_support:	1;	__u8	b_srp_support:	1;	__u8	a_set_b_hnp_en:	1;	__u8	a_suspend_req:	1;	__u8	a_clr_err:		1;//for B-device	__u8	b_sess_end:		1;	__u8	b_sess_vld:		1;	__u8	b_se0_srp:		1;	__u8	a_conn:			1;	__u8	a_bus_suspend:	1;	__u8	a_bus_resume:	1;	__u8	a_bus_reset:	1;	__u8	b_srp_done:		1;	__u8	b_hnp_en:		1;	__u8	a_hnp_support:	1;	__u8	a_alt_hnp_support:	1;//for both A-device and B-device//	__u8	rmt_conn:		1;	__u8	bus_req: 		1;	__u8	bus_drop:		1;	__u8 	AllowStateChange: 	1; // SW permit	__u8 	Req4StateChange: 	1; // HW indicate	__u8	TimeOut:  			1;	__u8	TimerRunning: 		1;	__u8	TimerId;	__u16	TimerTick;//	__u8	UsageBased:		1;//	__u8	RmtSOF:			1;}otg_tcb_t;#define 		FALSE   				0#define 		TRUE    				(!FALSE)#define 		REG_OTG_CONTROL			0x62#define 		REG_OTG_STATUS			0x67#define 		REG_OTG_INT				0x68#define 		REG_OTG_INT_ENABLE		0x69#define 		REG_OTG_TMR				0x6A#define			OTG_START_TIMER			0x80000000#define			OTG_DRV_VBUS			0x01#define			OTG_CHRG_VBUS			0x02#define			OTG_DISCHRG_VBUS		0x04#define			OTG_SEL_CP_EXT			0x08#define			OTG_LOC_CONN			0x10#define			OTG_A_RDIS_LCON_EN		0x20#define			OTG_LOC_PULLDN_DP		0x40#define			OTG_LOC_PULLDN_DM		0x80#define			OTG_SEL_HC_DC			0x100#define			OTG_A_SEL_SRP			0x200#define			OTG_A_SRP_DET_EN		0x400#define			OTG_B_RCON_LSE0_EN		0x800#define 		OTG_IRQ_ID				0x0001#define 		OTG_IRQ_A_VBUS_VLD		0x0002#define 		OTG_IRQ_B_SESS_END		0x0004#define			OTG_IRQ_A_SESS_VLD		0x0008#define			OTG_IRQ_B_SESS_VLD		0x0010#define 		OTG_IRQ_RMT_CONN		0x0020#define 		OTG_IRQ_SUSPEND			0x0040#define 		OTG_IRQ_RESUME			0x0080#define 		OTG_IRQ_SRP_DET			0x0100#define 		OTG_IRQ_SE0_SRP			0x0200#define 		OTG_IRQ_TMR				0x0400#define			OTG_IRQ_MASK_ALL			(OTG_IRQ_ID | OTG_IRQ_A_VBUS_VLD | OTG_IRQ_B_SESS_END | OTG_IRQ_A_SESS_VLD | OTG_IRQ_B_SESS_VLD | OTG_IRQ_RMT_CONN | OTG_IRQ_SUSPEND | OTG_IRQ_RESUME | OTG_IRQ_SRP_DET | OTG_IRQ_SE0_SRP | OTG_IRQ_TMR )#define			OTG_IRQ_MASK			OTG_IRQ_MASK_ALL// HW supports 0.01 milli second resolution#define			OTG_TMR_RESOLUTION		100typedef	struct _bmp_otgctrl {	__u8		drv_vbus		:1; //b0: drv_vbus	__u8		chrg_vbus 		:1; //b1: !chrg_vbus	__u8		dischrg_vbus 	:1; //b2:	__u8		sel_cp_ext	 	:1; //b3: 0:use CP, 1:use ext 5v	__u8		loc_conn		:1; //b4: loc_conn(control external 1.5k resistor	__u8		a_rdis_lcon_en 	:1; //b5:	__u8		loc_pulldn_dp	:1; //b6	__u8		loc_pulldn_dm	:1; //b7	__u8		sel_hc_dc		:1; //b8: 0:atx connect hc, 1:atx connect dc	__u8		a_sel_srp	 	:1; //b9:	__u8		a_srp_det_en 	:1; //b10:	__u8		b_rcon_lse0_en 	:1; //b11:	__u8		Resrv0			:5; //b12-15} bmp_otg_ctrl_t;typedef	union _otg_ctrl {	bmp_otg_ctrl_t	bitmap;	__u16			data;} otg_ctrl_t;typedef	struct _bmp_otgstatus {	__u8		ID				:1 ;//b0//	__u8		Vx_Valid		:1 ;//b1//	__u8		Vx_Wakeup		:1 ;//b2	__u8		a_vbus_vld		:1 ;//b1	__u8		b_sess_end		:1 ;//b2	__u8		a_sess_vld		:1 ;//b3	__u8		b_sess_vld		:1 ;//b4	__u8		rmt_conn		:1 ;//b5	__u8		bus_status		:1 ;//b6	__u8		b_se0_srp		:1 ;//b7	__u8						:8 ;//b8-15} bmp_otg_status_t;typedef	union _otg_status {	bmp_otg_status_t	bitmap;	__u16				data;} otg_status_t;typedef	struct _bmp_otgint {	__u8		ID_c			:1 ;//b0//	__u8		Vx_Valid_c		:1 ;//b1//	__u8		Vx_Wakeup_c		:1 ;//b2	__u8		a_vbus_vld_c	:1 ;//b1	__u8		b_sess_end_c	:1 ;//b2	__u8		a_sess_vld_c	:1 ;//b3	__u8		b_sess_vld_c	:1 ;//b4	__u8		rmt_conn_c		:1 ;//b5	__u8		bus_suspend		:1 ;//b6	__u8		bus_resume		:1 ;//b7	__u8		a_srp_det		:1 ;//b8	__u8		b_se0_srp		:1 ;//b9	__u8		otg_tmr_tmout	:1 ;//b10	__u8						:5 ;//b11-b15} bmp_interrupt_t;typedef	union _otg_int {	bmp_interrupt_t	bitmap;	__u16			data;} otg_interrupt_t;typedef	struct _bmp_otgintie {	__u8		ID_c			:1 ;//b0//	__u8		Vx_Valid_IE		:1 ;//b1//	__u8		Vx_Wakeup_IE	:1 ;//b2	__u8		a_vbus_vld_IE	:1 ;//b1	__u8		b_sess_end_IE	:1 ;//b2	__u8		a_sess_vld_IE	:1 ;//b3	__u8		b_sess_vld_IE	:1 ;//b4	__u8		rmt_conn_IE		:1 ;//b5	__u8		bus_suspend_IE	:1 ;//b6	__u8		bus_resume_IE	:1 ;//b7	__u8		a_srp_det_IE	:1 ;//b8	__u8		b_se0_srp_IE	:1 ;//b9	__u8		otg_tmr_tmout_IE:1 ;//b10	__u8						:5 ;//b11-15} bmp_int_en_t;typedef	union _otg_ie {	bmp_int_en_t	bitmap;	__u16			data;} otg_int_en_t;typedef struct _otg_reg {	// OTG_CONTROL	otg_ctrl_t 	ctrl_port;	// OTG_STATUS	otg_status_t  status_port;	// OTG_INTERRUPT	otg_interrupt_t  int_port;	// OTG_INTERRUPT_ENABLE	otg_int_en_t  int_en_port;} otg_reg_t;typedef struct otg_fsm {	otg_reg_t			regs;	otg_tcb_t			tcb;	void				*hcd_priv;	void				*dcd_priv;	void				*usb_otg_data;	struct isp1362_dev	*dev;} otg_fsm_t;#define		otg_fsm_state_change(fsm_data,new_state)			\			fsm_data->tcb.state = new_state;					\			fsm_data->tcb.app_state = fsm_state_X_app_state[new_state];	\			if(fsm_data->usb_otg_data) usb_otgdev_async_notif(fsm_data->usb_otg_data)extern	void 	otgfsm_run(otg_fsm_t	*fsm_data);extern	void 	otgfsm_set_state(otg_fsm_t	*fsm_data, __u8	cmd);extern	void 	otgfsm_status_probe(otg_fsm_t	*fsm_data);extern	void 	otgfsm_init_fsm_data(otg_fsm_t	*fsm_data);extern	void 	otgfsm_init(otg_fsm_t	*fsm_data);extern	void otgfsm_deinit(otg_fsm_t	*fsm_data );#endif

⌨️ 快捷键说明

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