Files
banban/ql-kernel/threadx/common/include/mvUsbStorage.h
T

476 lines
13 KiB
C

#ifndef _MVUSBSTORAGE_H_
#define _MVUSBSTORAGE_H_
/*====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*
mvUsbStorage.h
GENERAL DESCRIPTION
This file contains the definition for USB mass storage.
EXTERNALIZED FUNCTIONS
INITIALIZATION AND SEQUENCING REQUIREMENTS
Copyright (c) 2011 by Marvell, Incorporated. All Rights Reserved.
*====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*
*===========================================================================
EDIT HISTORY FOR MODULE
This section contains comments describing changes made to the module.
Notice that changes are listed in reverse chronological order.
when who what, where, why
-------- ------ ----------------------------------------------------------
12/23/07 zhoujin Created module
===========================================================================*/
/*===========================================================================
INCLUDE FILES FOR MODULE
===========================================================================*/
#include "osa.h"
#include "global_types.h"
#include "udc2_hw.h"
#include "usb_device.h"
/*===========================================================================
LOCAL MACRO
===========================================================================*/
/* The Max USB Mass storage Logical Unit Number*/
#define MSC_MAX_LUN 0x3
/* Event Descriptor Length */
#define CDROM_NOTIFICATION_LENGTH 0x0
/* CDROM TOC Length */
#define CDROM_TOC_LENGTH 0x23
/* CDROM ID offset */
#define CDROM_ID_OFFSET 0x8000
/* Mass storage flash manage task*/
#define FlashUSBMSC_STACKSIZE 4096
#define FlashUSBMSC_PRIORITY 120
#define FlashUSBMSC_MESSAGE_Q_MAX 10
#define FlashUSBMSC_UPDATE_INTERVAL 100
/* CBW and CSW signatrue */
#define USB_DCBWSIGNATURE (0x43425355)
#define USB_DCSWSIGNATURE (0x53425355)
#define USB_CBW_DIRECTION_BIT (0x80)
/* The Max receive size */
#define MSC_RX_MAXSIZE (131072)
/* Mass storage block size */
#define MSC_BLOCK_SIZE NAND_SECTOR_SIZE
/* SD block count */
#define MSC_SD_BLOCK_CNT 0x80000
/* The last sector CDROM read */
#define CDROM_INSTALL_LASTSECTOR 0x00d0
/* size of CDROM block: flash is 512B, CDROM is 2048B */
#define CDROM_BLOCK_SIZE 2048
/* The ARC is little-endian, just like USB */
#define USB_uint16_low8(x) ((x) & 0xFF)
#define USB_uint16_high8(x) (((x) >> 8) & 0xFF)
#define USB_uint32_byte3(x) (((x)>>24) & 0xFF)
#define USB_uint32_byte2(x) (((x)>>16) & 0xFF)
#define USB_uint32_byte1(x) (((x)>>8) & 0xFF)
#define USB_uint32_byte0(x) ((x) & 0xFF)
/*===========================================================================
Type declarations and Struct definition.
===========================================================================*/
/* USB Command Block Wrapper */
typedef struct
{
UINT8 buff[512];
} Flash_SectorS;
/* USB MSC media type*/
typedef enum
{
USBMSC_FLASHDISK = 0,
USBMSC_CDROM = 1,
USBMSC_SDCARD = 2,
USBMSC_MEDIA_U32 = 0x7fffffff // force to 32-bit
}USBMSC_MEDIA;
/* USB Command Block Wrapper */
typedef struct cbw_struct {
UINT32 DCBWSIGNATURE;
UINT32 DCBWTAG;
UINT32 DCBWDATALENGTH;
UINT8 BMCBWFLAGS;
UINT8 BCBWCBLUN;
UINT8 BCBWCBLENGTH;
UINT8 CBWCB[16];
} CBW_STRUCT, * CBW_STRUCT_PTR;
/* USB Command Status Wrapper */
typedef struct csw_struct {
UINT32 DCSWSIGNATURE;
UINT32 DCSWTAG;
UINT32 DCSWDATARESIDUE;
UINT8 BCSWSTATUS;
} CSW_STRUCT, * CSW_STRUCT_PTR;
/* USB Mass storage READ CAPACITY Data */
typedef struct mass_storage_read_capacity {
UINT8 LAST_LOGICAL_BLOCK_ADDRESS[4];
UINT8 BLOCK_LENGTH_IN_BYTES[4];
} MASS_STORAGE_READ_CAPACITY_STRUCT, *MASS_STORAGE_READ_CAPACITY_STRUCT_PTR;
/* USB MSC Properties type. */
typedef struct mvUsbMscProperties_T {
UINT32 Lun0StartAddress;
UINT32 Lun0EndAddress;
UINT32 Lun1StartAddress;
UINT32 Lun1EndAddress;
UINT32 Lun2StartAddress;
UINT32 Lun2EndAddress;
UINT32 MscMaxLun;
USBMSC_MEDIA Media[MSC_MAX_LUN];
} mvUsbMscProperties_T;
/* USB Mass storage Device information */
typedef struct mass_storage_device_info {
UINT8 PERIPHERAL_DEVICE_TYPE; /* Bits 0-4. All other bits reserved */
UINT8 RMB; /* Bit 7. All other bits reserved */
UINT8 ANSI_ECMA_ISO_VERSION; /* ANSI: bits 0-2, ECMA: bits 3-5 */
/* ISO: bits 6-7 */
UINT8 RESPONSE_DATA_FORMAT; /* bits 0-3. All other bits reserved */
UINT8 ADDITIONAL_LENGTH; /* For UFI device: always set to 0x1F */
UINT8 RESERVED1[3];
UINT8 VENDOR_INFORMATION[8];
UINT8 PRODUCT_ID[16];
UINT8 PRODUCT_REVISION_LEVEL[4];
} MASS_STORAGE_DEVICE_INFO_STRUCT, * MASS_STORAGE_DEVICE_INFO_PTR;
/* USB CDROM TOC */
typedef struct mass_storage_CDROM_TOC{
UINT8 DataLength[2]; /* TOC Data Length*/
UINT8 FirstTrack; /* First Track Number*/
UINT8 LastTrack; /* Last Track Number */
UINT8 Desc[33];
} MASS_STORAGE_CDROM_TOC_STRUCT, * MASS_STORAGE_CDROM_TOC_PTR;
/* USB CDROM GET EVENT STATUS NOTIFICATION */
typedef struct mass_storage_CDROM_NOTIFICATION{
UINT8 EventDescriptorLength[2]; /* Event Descriptor Length*/
UINT8 NEA_NotificationClass; /* NEA: bits 7, Notification Class:bits 2-0*/
UINT8 SupportedEventClasses; /* Supported Event Classes*/
} MASS_STORAGE_CDROM_NOTIFICATION_STRUCT, * MASS_STORAGE_CDROM_NOTIFICATION_PTR;
typedef struct mass_storage_buffer {
USBDevice_EndpointE endpoint;
UINT8 *buffer;
UINT32 length;
BOOL endOfMsg;
} MASS_STORAGE_BUFFER_STRUCT, * MASS_STORAGE_BFFER_PTR;
/*===========================================================================
EXTERN DEFINITIONS AND DECLARATIONS FOR MODULE
===========================================================================*/
/* System exception flag. */
extern BOOL assertFlag;
/* Max logical number. */
extern UINT8 USBGetMaxLun;
/*===========================================================================
EXTERNAL FUNCTION DECLARATIONS
===========================================================================*/
/*===========================================================================
FUNCTION _usb_dci_vusb20_diag_tx_isr
DESCRIPTION
This function process the usb isr in system exception mode.
DEPENDENCIES
none
RETURN VALUE
FS type
SIDE EFFECTS
none
===========================================================================*/
extern void _usb_dci_vusb20_diag_tx_isr(void);
/*===========================================================================
INTERNAL FUNCTION DECLARATIONS
===========================================================================*/
/*===========================================================================
FUNCTION DataCard_Identify_FS
DESCRIPTION
Identify the FS type of Mass storage.
DEPENDENCIES
none
RETURN VALUE
FS type
SIDE EFFECTS
none
===========================================================================*/
void DataCard_Identify_FS(BOOL identify);
/*===========================================================================
FUNCTION service_bulk_endpoint
DESCRIPTION
Mass stotage receive enpoint service process.
DEPENDENCIES
none
RETURN VALUE
return staus
SIDE EFFECTS
none
===========================================================================*/
void service_bulk_endpoint(UINT8 direction, UINT8* buffer,UINT32 length);
/*===========================================================================
FUNCTION GetMscProperties
DESCRIPTION
Get Usb MSC proerties.
DEPENDENCIES
none
RETURN VALUE
none
SIDE EFFECTS
none
===========================================================================*/
mvUsbMscProperties_T *GetMscProperties(void);
/*===========================================================================
FUNCTION MSCRX_HISR
DESCRIPTION
Mass storage receive HISR.
DEPENDENCIES
none
RETURN VALUE
none
SIDE EFFECTS
none
===========================================================================*/
void MSCRX_HISR(void);
/*===========================================================================
FUNCTION MSCRX_LISR
DESCRIPTION
Mass storage receive LISR.
DEPENDENCIES
none
RETURN VALUE
none
SIDE EFFECTS
none
===========================================================================*/
void MSCRX_LISR(USBDevice_EndpointE endpoint, UINT8 *msgData, UINT32 length, BOOL endOfMsg);
/*===========================================================================
FUNCTION MSCRX_LISR
DESCRIPTION
Mass storage transmit LISR.
DEPENDENCIES
none
RETURN VALUE
none
SIDE EFFECTS
none
===========================================================================*/
void MSCTX_LISR(USBDevice_EndpointE endpoint, UINT8 *msgData, UINT32 length, BOOL endOfMsg);
/*===========================================================================
FUNCTION proc_flash_msgs
DESCRIPTION
Flash message process.
DEPENDENCIES
none
RETURN VALUE
FS type
SIDE EFFECTS
none
===========================================================================*/
static void proc_flash_msgs (UINT8* rxmsg);
/*===========================================================================
FUNCTION FlashUSBMSC_Task
DESCRIPTION
usb mass storage task.
DEPENDENCIES
none
RETURN VALUE
FS type
SIDE EFFECTS
none
===========================================================================*/
static void FlashUSBMSC_Task (void* input);
/*===========================================================================
FUNCTION mvUsbStorage_Init
DESCRIPTION
usb mass storage initialize.
DEPENDENCIES
none
RETURN VALUE
FS type
SIDE EFFECTS
none
===========================================================================*/
void mvUsbStorage_Init(void);
/*===========================================================================
FUNCTION mvUsbStorageNotifyHost
DESCRIPTION
usb mass storage notify host of usb active.
DEPENDENCIES
none
RETURN VALUE
none
SIDE EFFECTS
none
===========================================================================*/
#define mvUsbStorageNotifyUsbActive() \
{ \
;\
}
//add by yazhouren@asrmicro.com
/* message IDs*/
typedef enum
{
FLASH_SECTOR_READ,
FLASH_SECTOR_READDONE,
FLASH_SECTOR_READERROR,
FLASH_SECTOR_WRITE,
FLASH_SECTOR_WRITEDONE,
FLASH_SECTOR_WRITEERROR,
/* Must be at the end */
FLASH_OPS_ENUM_32_BIT = 0x7FFFFFFF //32bit enum compiling enforcement
} FLASH_OpsMsgID;
typedef enum
{
FLASHZONE_LUN_0 = 0,
FLASHZONE_LUN_1 = 1,
FLASHZONE_LUN_2 = 2,
FLASHZONE_LUN_MAX = 0x7FFFFFFF
} FLASH_ZoneID;
typedef struct
{
FLASH_OpsMsgID MsgId;
FLASH_ZoneID ZoneId;
UINT32 FlashAddress; //Sector/Page/Block address
UINT32 Buffer;
UINT32 Length;
} FlashMessage, *PFlashMessage;
#define FLASH_MESSAGE_SIZE sizeof(FlashMessage)
/* The nand sector size */
#define NAND_SECTOR_SIZE 512
/* The nand sector shit bit */
#define FLASH_SECTOR_BITSHIFT 9
/* The unused flash address */
#define UNUSED 0xFFFFFFFF
#if 0
#define MIFI_LOG_TRACE(cat1, cat2, cat3, fmt, args...) \
{ \
}
#endif
#endif /* _MVUSBSTORAGE_H_*/