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

📄 usb_host_ms_drv.h

📁 mtk 6225平台的usb程序! 对想了解mtk平台usb的朋友会有帮助!
💻 H
字号:
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2005
*
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/

/*****************************************************************************
 *
 * Filename:
 * ---------
 *    usb_host_ms_drv.h
 *
 * Project:
 * --------
 *   Maui_Software
 *
 * Description:
 * ------------
 *   This file intends for host mass storage class driver definitions
 *
 * Author:
 * -------
 * -------
 *
 *============================================================================
 *             HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================
 ****************************************************************************/
 
#ifndef USB_HOST_MS_DRV_H
#define USB_HOST_MS_DRV_H

#include "usbms_drv.h"

/************************************************************
	MS class parameter definition
*************************************************************/

/* string size in INQUERY data format */
#define USBMS_INQUIRY_VENDOR_INFO_LEN		8
#define USBMS_INQUIRY_PRODUCT_IDEN_LEN		16
#define USBMS_INQUIRY_PRODUCT_REV_LEN		4

/* command and adta length for each ms command */
#define USBMS_INQUIRY_CMD_LEN				6
#define USBMS_INQUIRY_DATA_LEN				36
#define USBMS_READ_FORMATCAPACITY_CMD_LEN	10
#define USBMS_READ_FORMATCAPACITY_DATA_LEN	60
#define USBMS_READ_CAPACITY_CMD_LEN			10
#define USBMS_READ_CAPACITY_DATA_LEN		8
#define USBMS_MODE_SENSE6_CMD_LEN			6
#define USBMS_MODE_SENSE6_DATA_LEN			12
#define USBMS_REQUESTSENSE_CMD_LEN			12
#define USBMS_REQUESTSENSE_DATA_LEN			18
#define USBMS_TEST_UNIT_READY_CMD_LEN		6
#define USBMS_TEST_UNIT_READY_DATA_LEN		0
#define USBMS_READ_CMD_LEN					10
#define USBMS_WRITE_CMD_LEN					10

#define USBMS_CBW_LENGTH					31
#define USBMS_CSW_LENGTH					13


/************************************************************
	Implementation definition
*************************************************************/
/* State machine polling periord*/
#define USB_HOST_MS_QUERY_PERIOD			10  /* 10ms unit */
/* Maxumum buffer size for CBW command and DATA except READ and WRITE command */
#define USBMS_MAX_CMD_LEN					32
#define USBMS_MAX_DATA_LEN					64	

/* Event flag. (CBW, DATA, CSW) is handled in HISR level
    This event is used when state complete to retrive waiting task*/
#define EVENT_USB_MS_DONE					((kal_uint32)0x00000001)
#define EVENT_USB_MS_DETATCH				((kal_uint32)0x00000002)

/* This is constraint by both secotr size and device DMA length */
/* DMA length can not exceed 0xffff=>65535 */
#define USBMS_MAX_DATA_LENGTH				32*1024

/* Bulk endpoint state*/
typedef enum
{
	USB_HOST_MS_NONE,
	USB_HOST_MS_CBW,
	USB_HOST_MS_DATA,
	USB_HOST_MS_CSW,
	USB_HOST_MS_CBW_CLEAR_STALL,
	USB_HOST_MS_DATA_CLEAR_STALL,
	USB_HOST_MS_CSW_CLEAR_STALL
}USB_HOST_MS_STATE;

/* DATA stage direction */
typedef enum
{
	USB_HOST_MS_DATA_NONE, /* no data phase is needed */
	USB_HOST_MS_DATA_RECV,
	USB_HOST_MS_DATA_SEND	
}USB_HOST_MS_DATA_DIR;

/* Result of the CBW, DATA, CSW state */
typedef enum
{
	USB_HOST_MS_RESULT_OK,
	USB_HOST_MS_RESULT_CSW_FAIL,
	USB_HOST_MS_RESULT_TIMEOUT,
	USB_HOST_MS_RESULT_STALL,
	USB_HOST_MS_RESULT_FORMAT_ERROR
}USB_HOST_MS_RESULT;

/* Ctrl EP commands that may used after MS class driver is started 
    Note that it contains both standard and class specific request */
typedef enum
{
	USB_HOST_MS_EP0_CMD_NONE,
	USB_HOST_MS_EP0_CMD_RESET,
	USB_HOST_MS_EP0_CMD_GET_LUN,
	USB_HOST_MS_EP0_CMD_CLEAR_STALL_IN,
	USB_HOST_MS_EP0_CMD_CLEAR_STALL_OUT
}USB_HOST_MS_EP0_CMD;


/* The MS device status */
typedef enum
{
	USB_HOST_MS_DEV_STATE_READY,	
	USB_HOST_MS_DEV_STATE_ERROR
}USB_HOST_MS_DEV_STATE;

/* The media state for each LUN */
typedef enum
{
	USB_HOST_MS_MEDIA_STATE_ABSENT,	
	USB_HOST_MS_MEDIA_STATE_READY,
	USB_HOST_MS_MEDIA_STATE_WR_PROTECT,
	USB_HOST_MS_MEDIA_STATE_CHANGED,
	USB_HOST_MS_MEDIA_STATE_ERROR
}USB_HOST_MS_MEDIA_STATE;

typedef enum
{
	USB_HOST_MS_MSG_MEDIA_CHANGE,
	USB_HOST_MS_MSG_PLUG_IN,
	USB_HOST_MS_MSG_PLUG_OUT
}USB_HOST_MS_MSG_TYPE;


/************************************************************
	Implementation structures
*************************************************************/

/* CBW and DATA related parameters */
typedef struct
{
	kal_uint8				lun;
	kal_uint32				cmd_len;
	kal_uint8				*cmd_buff;
	kal_uint32				data_len;
	kal_uint8				*data_buff;
	USB_HOST_MS_DATA_DIR	data_dir;
}USBH_Ms_Cmd_Struct;

/* Media information for each LUN */
typedef struct
{
	kal_uint32 				sec_size;
	kal_uint32 				sec_num;
	USB_HOST_MS_MEDIA_STATE state;

	kal_uint8				vendor_info[USBMS_INQUIRY_VENDOR_INFO_LEN];
	kal_uint8				product_iden[USBMS_INQUIRY_PRODUCT_IDEN_LEN];
	kal_uint8				product_rev[USBMS_INQUIRY_PRODUCT_REV_LEN];
}USBH_Ms_Media_Struct;

typedef struct
{
	/* device level resource */	
	kal_uint8				ep_in_num;			/* IN EP number in USB protocol */
	kal_uint8				ep_in_index;		/* IN EP index in implementation (resource number) */
	kal_uint16				ep_in_max_pkt_size;
	kal_uint8				ep_out_num;			/* OUT EP number in USB protocol */
	kal_uint8				ep_out_index;		/* OUT EP index in implementation (resource number) */
	kal_uint16				ep_out_max_pkt_size;
	kal_eventgrpid			event_id;			/* event used for (CBW, DATA, CSW) state machine to retrive waiting task */
   	kal_mutexid				mutex_id;			/* mutex used to protect ms command. 
   													When USB task is polling state machine, 
   									   				read/write action from application task should be protected */
   	kal_uint8				gpt_handle;			/* gpt handle to query device status */


	/* CBW, DATA CSW state information*/
	kal_uint32				CBWdata[32/4];		/* CBW data */
	UsbMs_CSW				CSW;				/* CSW data*/
	kal_uint8*				data;				/* DATA stage buffer address*/
	kal_uint32				data_length;		/* DATA stage size */
	USB_HOST_MS_DATA_DIR	data_dir;			/* DATA stage direction */
	/* DATA stage parameters. If data length application request is larger than DMA can support,
	    CBW, DATA, CSW state machine should divide it to multiple request */
   	kal_uint32				remain_data_length;		
   	kal_uint32				sending_data_length;
   	kal_uint32				sent_data_length;
   	USBH_Ms_Cmd_Struct  	ms_cmd_data;		/* Used to store all CBW, DATA related information */
   	USB_HOST_MS_STATE		ms_state;			/* State in the state machine of CBW, DATA, CSW */
   	USB_HOST_MS_RESULT		result;				/* CBW, DATA, CSW state result */
   	kal_bool				b_rw_result;		/* read/write result for READ and WRITE action */

	/* EP0 information*/
	USB_HOST_MS_EP0_CMD		ms_cmd;				/* Current EP0 command */

	/* media information */
   	kal_uint8				total_lun;				/* total lun number in the attached device */
	kal_uint8				support_lun;			/* supported lun defined in custom */
	USBH_Ms_Media_Struct	*media_info;			/* media information for each LUN*/
	kal_uint8				*media_handle;			/* media handle communicated with file system */
	kal_uint32				*media_msg_array;		/* message array communicated with FMT */			
	kal_uint32				media_state_change;		/* keep information about whether each lun state is changed or not */

	/* device information*/
	USB_HOST_MS_DEV_STATE	dev_state;				/* device status*/
	kal_bool				dev_attatch;
	kal_uint8				dev_error_count;		/* device error count */		
	kal_bool				b_sending_change_ilm;	/* Check it can send message to indicate FMT*/
	kal_bool				b_sending_plugout_ilm;
}USB_Host_Ms_Struct;


/************************************************************
	extern variables and functions
*************************************************************/

 extern USBD_ClassDriver_Struct USB_Host_Ms_Drv;
 extern USB_Host_Ms_Struct g_UsbHostMs;

extern void USB_Host_Ms_SendInd(USB_HOST_MS_MSG_TYPE msg);
extern void USB_Host_Ms_Get_Media_Resource(void);
extern void USB_Host_Ms_Free_Media_Resource(void);
extern void USB_Host_Ms_Dis_Device(void);
extern void USB_Host_Ms_En_Device(void);
extern void USB_Host_Ms_Get_LUN(void);
extern void USB_Host_Ms_Reset(void);
extern USB_HOST_MS_RESULT USB_Host_Ms_Request_Sense(kal_uint8 lun);
extern USB_HOST_MS_RESULT USB_Host_Ms_Inquiry(kal_uint8 lun);
extern USB_HOST_MS_RESULT USB_Host_Ms_Read_Format_Capacity(kal_uint8 lun);
extern USB_HOST_MS_RESULT USB_Host_Ms_Read_Capacity(kal_uint8 lun);
extern USB_HOST_MS_RESULT USB_Host_Ms_Test_Unit_Ready(kal_uint8 lun);
extern USB_HOST_MS_RESULT USB_Host_Ms_Mode_Sense6(kal_uint8 lun);
extern USB_HOST_MS_RESULT USB_Host_Ms_Mode_Sense6_All_Mode(kal_uint8 lun);
extern USB_HOST_MS_RESULT USB_Host_Ms_Read(kal_uint8 lun, kal_uint32 sec_start, kal_uint16 sec_num, kal_uint8* data);
extern USB_HOST_MS_RESULT USB_Host_Ms_Write(kal_uint8 lun, kal_uint32 sec_start, kal_uint16 sec_num, kal_uint8* data);

#endif	/* USB_HOST_MS_DRV_H */ 
 

⌨️ 快捷键说明

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