diff -r b7e488c49d0d -r 117faf51deac omap3530/beagle_drivers/wb/api/include/cyasmtp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omap3530/beagle_drivers/wb/api/include/cyasmtp.h Wed Mar 03 13:10:32 2010 +0000 @@ -0,0 +1,602 @@ +/* Cypress West Bridge API header file (cyasmtp.h) + ## =========================== + ## + ## Copyright Cypress Semiconductor Corporation, 2006-2009, + ## All Rights Reserved + ## UNPUBLISHED, LICENSED SOFTWARE. + ## + ## CONFIDENTIAL AND PROPRIETARY INFORMATION + ## WHICH IS THE PROPERTY OF CYPRESS. + ## + ## Use of this file is governed + ## by the license agreement included in the file + ## + ## /license/license.txt + ## + ## where is the Cypress software + ## installation root directory path. + ## + ## =========================== +*/ + +#ifndef _INCLUDED_CYASMTP_H_ +#define _INCLUDED_CYASMTP_H_ + +#include "cyasmisc.h" + +#include "cyas_cplus_start.h" + +/*@@Media Transfer Protocol (MTP) Overview + Summary + The MTP API has been designed to allow MTP enabled West Bridge devices to implement + the MTP protocol while maintaining high performance. West Bridge has the capability + to enter into a Turbo mode during a MTP SendObject or GetObject operation enabling + it to directly stream the data into or out of the attached SD card with minimal + involvement from the Processor. + + Description + The MTP API is designed to act as a pass through implementation of the MTP protocol + for all operations. Each MTP transaction received from the Host is passed through West Bridge + and along to the Processor. The Processor can then respond to the transaction and pass + data and/or responses back to the Host through West Bridge. + + The MTP API also allows for a high speed handling of MTP SendObject and GetObject operations, + referred to as Turbo MTP. During a Turbo MTP operation West Bridge is responsible for reading + or writing the data for the MTP operation directly from or to the SD card with minimal + interaction from the Processor. The is done by having the Processor transfer a Block Table + to West Bridge which contains the locations on the SD card that need to be read or written. + During the handling of a Turbo Operation the Processor will then only periodically need to send + a new Block Table to West Bridge when the first is used up. See the CyAsMTPInitSendObject and + CyAsMTPInitGetObject functions for more details. + + In order to enable the MTP API you must first have a MTP enabled West Bridge loaded with + MTP firmware. You then must start the USB and Storage APIs before starting the MTP API. See + CyAsMTPStart for more details. +*/ + +/*@@Endpoints + Summary + When using MTP firmware endpoints 2 and 6 are dedicated to bulk MTP traffic + and endpoint 1 is available for MTP events. + + Description + When using a MTP enabled West Brdige device endpoints 2 and 6 are made available for + use to implement the MTP protocol. These endpoints have a few special restrictions noted + below but otherwise the existing USB APIs can be used normally with these endpoints. + + 1. CyAsUsbSetNak, CyAsUsbClearNak, and CyAsUsbGetNak are disabled for these endpoints + 2. During a turbo operation CyAsUsbSetStall, CyAsUsbClearStall, and CyAsUsbGetStall are disabled. + +*/ + + +/* Summary + This constants defines the maximum number of + entries in the Block Table used to describe + the locations for Send/GetObject operations. + + See Also + * CyAsMtpSendObject + * CyAsMtpGetObject +*/ +#define CY_AS_MAX_BLOCK_TABLE_ENTRIES 64 + +/* Summary + Endpoint to be used for MTP reads from the USB host. + */ +#define CY_AS_MTP_READ_ENDPOINT (2) + +/* Summary + Endpoint to be used fro MTP writes to the USB host. + */ +#define CY_AS_MTP_WRITE_ENDPOINT (6) + +/***************************************************************************** + * MTP Types + ****************************************************************************/ + +/* Summary + The BlockTable used for turbo operations. + + Description + This struct is used to specify the blocks + to be used for both read/write and send/getObject + operations. + + The start block is a starting Logical Block Address + and num block is the number of blocks in that contiguous + region. + + start_blocks[i]->[-------] <- start_blocks[i] + num_blocks[i] + + If you need fewer than CY_AS_MAX_BLOCK_TABLE_ENTRIES + the remainder should be left empty. Empty is defined + as num_blocks equal to 0. + + See Also + * CyAsMTPInitSendObject + * CyAsMTPInitGetObject + +*/ +typedef struct CyAsMTPBlockTable +{ + uint32_t start_blocks[CY_AS_MAX_BLOCK_TABLE_ENTRIES] ; + uint16_t num_blocks[CY_AS_MAX_BLOCK_TABLE_ENTRIES] ; +} CyAsMTPBlockTable ; + +/* Summary + This type specifies the type of MTP event that has occurred. + + Description + MTP events are used to communicate that West Bridge has + either finished the handling of the given operation, or + that it requires additional data to complete the operation. + + In no case does West Bridge send any MTP protocol responses, + this always remain the responsibility of the client. + + See Also + * CyAsMTPInitSendObject + * CyAsMTPInitGetObject + * CyAsMTPSendBlockTable + +*/ +typedef enum CyAsMTPEvent +{ + CyAsMTPSendObjectComplete, /* This event is sent when West Bridge + has finished writing the data from a + SendObject. West Bridge will -not- send + the MTP response. */ + CyAsMTPGetObjectComplete, /* This event is sent when West Bridge + has finished sending the data for a + GetObject operation. West Bridge will + -not- send the MTP response. */ + CyAsMTPBlockTableNeeded /* This event is called when West Bridge + needs a new BlockTable. This is only a + notification, to transfer a BlockTable + to West Bridge the CyAsMTPSendBlockTable + use the function. While West Bridge is waiting + for a BlockTable during a SendObject it + may need to NAK the Endpoint. It is important + that the CyAsMTPSendBlockTable call is made + in a timely manner as eventually a delay + will result in an USB reset. This event has + no data */ +} CyAsMTPEvent ; + +/* Summary + Data for the CyAsMTPSendObjectComplete event. + + Description + Notification that a SendObject operation has been completed. The + status of the operation is given (to distinguish between a cancelled + and a success for example) as well as the block count. The blocks + are used in order based on the current block table. If more than + one block table was used for a given SendObject the count will + include the total number of blocks written. + + This callback will be made only once per SendObject operation + and it will only be called after all of the data has been + committed to the SD card. + + See Also + * CyAsMTPEvent + + */ +typedef struct CyAsMTPSendObjectCompleteData +{ + CyAsReturnStatus_t status ; + uint32_t byte_count ; + uint32_t transaction_id ; +} CyAsMTPSendObjectCompleteData ; + +/* Summary + Data for the CyAsMTPGetObjectComplete event. + + Description + Notification that a GetObject has finished. This + event allows the P side to know when to send the MTP + response for the GetObject operation. + + See Also + * CyAsMTPEvent + +*/ +typedef struct CyAsMTPGetObjectCompleteData +{ + CyAsReturnStatus_t status ; + uint32_t byte_count ; +} CyAsMTPGetObjectCompleteData ; + +/* Summary + MTP Event callback. + + Description + Callback used to communicate that a SendObject + operation has finished. + + See Also + * CyAsMTPEvent +*/ +typedef void (*CyAsMTPEventCallback)( + CyAsDeviceHandle handle, + CyAsMTPEvent evtype, + void* evdata + ) ; + +/* Summary + This is the callback function called after asynchronous API functions have completed. + + Description + When calling API functions from callback routines (interrupt handlers usually) the async version of + these functions must be used. This callback is called when an asynchronous API function has completed. +*/ +typedef void (*CyAsMTPFunctionCallback)( + CyAsDeviceHandle handle, /* Handle to the device to configure */ + CyAsReturnStatus_t status, /* The error status of the operation */ + uint32_t client /* A client supplied 32 bit tag */ +) ; + +/***************************************************************************** + * MTP Functions + ****************************************************************************/ + +/* Summary + This function starts the MTP stack. + + Description + Initializes West Bridge for MTP activity and registers the MTP + event callback. + + Before calling CyAsMTPStart, CyAsUsbStart and CyAsStorageStart must be + called (in either order). + + MTPStart must be called before the device is enumerated. Please + see the documentation for CyAsUsbSetEnumConfig and CyAsUsbEnumControl + for details on enumerating a device for MTP. + + Calling MTPStart will not affect any ongoing P<->S traffic. + + This requires a MTP firmware image to be loaded on West Bridge. + + Returns + * CY_AS_ERROR_SUCCESS + * CY_AS_ERROR_INVALID_HANDLE + * CY_AS_ERROR_NOT_CONFIGURED + * CY_AS_ERROR_NO_FIRMWARE + * CY_AS_ERROR_IN_SUSPEND + * CY_AS_ERROR_INVALID_IN_CALLBACK + * CY_AS_ERROR_STARTSTOP_PENDING + * CY_AS_ERROR_NOT_RUNNING - CyAsUsbStart or CyAsStorageStart have not been called + * CY_AS_ERROR_NOT_SUPPORTED - West Bridge is not running firmware with MTP support + * CY_AS_ERROR_OUT_OF_MEMORY + * CY_AS_ERROR_INVALID_RESPONSE + + + See Also + * CyAsMTPStop + * CyAsUsbStart + * CyAsStorageStart + * CyAsUsbSetEnumConfig + * CyAsUsbEnumControl +*/ +CyAsReturnStatus_t +CyAsMTPStart( + CyAsDeviceHandle handle, + CyAsMTPEventCallback eventCB, + CyAsFunctionCallback cb, + uint32_t client + ) ; + + +/* Summary + This function stops the MTP stack. + + Description + Stops all MTP activity. Any ongoing transfers are + canceled. + + This will not cause a UsbDisconnect but all + MTP activity (both pass through and turbo) will + stop. + + Returns + * CY_AS_ERROR_SUCCESS + * CY_AS_ERROR_INVALID_HANDLE + * CY_AS_ERROR_NOT_CONFIGURED + * CY_AS_ERROR_NO_FIRMWARE + * CY_AS_ERROR_NOT_RUNNING + * CY_AS_ERROR_IN_SUSPEND + * CY_AS_ERROR_INVALID_IN_CALLBACK + * CY_AS_ERROR_STARTSTOP_PENDING + * CY_AS_ERROR_OUT_OF_MEMORY + * CY_AS_ERROR_INVALID_RESPONSE + + + See Also + * CyAsMTPStart +*/ +CyAsReturnStatus_t +CyAsMTPStop( + CyAsDeviceHandle handle, + CyAsFunctionCallback cb, + uint32_t client + ) ; + +/* Summary + This function sets up a Turbo SendObject operation. + + Description + Calling this function will setup West Bridge to + enable Tubo handling of the next SendObject + operation received. This will pass down the initial + block table to the firmware and setup a direct u->s + write for the SendObject operation. + + If this function is not called before a SendObject + operation is seen the SendObject operation and data + will be passed along to the P port like any other MTP + command. It would then be the responsibility of the + client to perform a normal StorageWrite call to + store the data on the SD card. N.B. This will be + very slow compared with the Turbo handling. + + The completion of this function only signals that + West Bridge has been set up to receive the next SendObject + operation. When the SendObject operation has been fully + handled and the data written to the SD card a separate + event will be triggered. + + Returns + * CY_AS_ERROR_SUCCESS + * CY_AS_ERROR_INVALID_HANDLE + * CY_AS_ERROR_NOT_CONFIGURED + * CY_AS_ERROR_NO_FIRMWARE + * CY_AS_ERROR_IN_SUSPEND + * CY_AS_ERROR_NOT_RUNNING + * CY_AS_ERROR_OUT_OF_MEMORY + * CY_AS_ERROR_ASYNC_PENDING + * CY_AS_ERROR_INVALID_RESPONSE + * CY_AS_ERROR_NOT_SUPPORTED - West Bridge is not running firmware with MTP support + + See Also + * CyAsMTPCancelSendObject + * CyAsMTPInitGetObject + * CyAsMTPEvent + * CyAsMTPSendBlockTable +*/ +CyAsReturnStatus_t +CyAsMTPInitSendObject( + CyAsDeviceHandle handle, + CyAsMTPBlockTable* blk_table, + uint32_t num_bytes, + CyAsFunctionCallback cb, + uint32_t client + ) ; + +/* Summary + This function cancels an ongoing MTP operation. + + Description + Causes West Bridge to cancel an ongoing SendObject + operation. Note this is only a cancel to West Bridge, + the MTP operation still needs to be canceled by + sending a response. + + West Bridge will automatically set a Stall on the endpoint + when the cancel is received. + + This function is only valid after CyAsMTPInitSendObject + has been called, but before the CyAsMTPSendObjectComplete + event has been sent. + + Returns + * CY_AS_ERROR_SUCCESS + * CY_AS_ERROR_INVALID_HANDLE + * CY_AS_ERROR_NOT_RUNNING + * CY_AS_ERROR_OUT_OF_MEMORY + * CY_AS_ERROR_INVALID_RESPONSE + * CY_AS_ERROR_NOT_SUPPORTED - West Bridge is not running firmware with MTP support + * CY_AS_ERROR_NO_OPERATION_PENDING + + See Also + * CyAsMTPInitSendObject +*/ +CyAsReturnStatus_t +CyAsMTPCancelSendObject( + CyAsDeviceHandle handle, + CyAsFunctionCallback cb, + uint32_t client + ) ; + +/* Summary + This function sets up a turbo GetObject operation. + + Description + Called by the P in response to a GetObject + operation. This provides West Bridge with the block + addresses for the Object data that needs to be + transferred. + + It is the responsibility of the Processor to send the MTP operation + before calling CyAsMTPInitGetObject. West Bridge will then send the + data phase of the transaction, automatically creating the required container for + Data. Once all of the Data has been transferred a callback will be issued to + inform the Processor that the Data phase has completed allowing it to send + the required MTP response. + + If an entire Block Table is used then after the + last block is transferred the CyAsMTPBtCallback + will be called to allow an additional Block Table(s) + to be specified. + + Returns + * CY_AS_ERROR_SUCCESS + * CY_AS_ERROR_INVALID_HANDLE + * CY_AS_ERROR_NOT_CONFIGURED + * CY_AS_ERROR_NO_FIRMWARE + * CY_AS_ERROR_NOT_RUNNING + * CY_AS_ERROR_IN_SUSPEND + * CY_AS_ERROR_OUT_OF_MEMORY + * CY_AS_ERROR_ASYNC_PENDING + * CY_AS_ERROR_INVALID_RESPONSE + * CY_AS_ERROR_NOT_SUPPORTED - West Bridge is not running firmware with MTP support + + See Also + * CyAsMTPInitSendObject + * CyAsMTPCancelGetObject + * CyAsMTPEvent + * CyAsMTPSendBlockTable +*/ +CyAsReturnStatus_t +CyAsMTPInitGetObject( + CyAsDeviceHandle handle, + CyAsMTPBlockTable* table_p, + uint32_t num_bytes, + uint32_t transaction_id, + CyAsFunctionCallback cb, + uint32_t client + ) ; + +/* Summary + This function cancels an ongoing turbo GetObject + operation. + + Description + Causes West Bridge to cancel an ongoing GetObject + operation. Note this is only a cancel to West Bridge, + the MTP operation still needs to be canceled by + sending a response. + + This function is only valid after CyAsMTPGetSendObject + has been called, but before the CyAsMTPGetObjectComplete + event has been sent. + + Returns + * CY_AS_ERROR_SUCCESS + * CY_AS_ERROR_INVALID_HANDLE + * CY_AS_ERROR_NOT_RUNNING + * CY_AS_ERROR_OUT_OF_MEMORY + * CY_AS_ERROR_INVALID_RESPONSE + * CY_AS_ERROR_NOT_SUPPORTED - West Bridge is not running firmware with MTP support + * CY_AS_ERROR_NO_OPERATION_PENDING + + See Also + * CyAsMTPInitGetObject +*/ +CyAsReturnStatus_t +CyAsMTPCancelGetObject( + CyAsDeviceHandle handle, + CyAsFunctionCallback cb, + uint32_t client + ) ; + +/* Summary + This function is used to transfer a BlockTable as part of + an ongoing MTP operation. + + Description + This function is called in response to the CyAsMTPBlockTableNeeded + event. This allows the client to pass in a BlockTable structure to + West Bridge. + + The memory associated with the table will be copied and can be + safely disposed of when the function returns if called synchronously, + or when the callback is made if called asynchronously. + + This function is used for both SendObject and GetObject as both + can generate the CyAsMTPBlockTableNeeded event. + + Returns + * CY_AS_ERROR_SUCCESS + * CY_AS_ERROR_INVALID_HANDLE + * CY_AS_ERROR_NOT_CONFIGURED + * CY_AS_ERROR_NO_FIRMWARE + * CY_AS_ERROR_NOT_RUNNING + * CY_AS_ERROR_IN_SUSPEND + * CY_AS_ERROR_OUT_OF_MEMORY + * CY_AS_ERROR_ASYNC_PENDING + * CY_AS_ERROR_INVALID_RESPONSE + * CY_AS_ERROR_NOT_SUPPORTED - West Bridge is not running firmware with MTP support + + See Also + * CyAsMTPInitSendObject + * CyAsMTPInitGetObject +*/ +CyAsReturnStatus_t +CyAsMTPSendBlockTable( + CyAsDeviceHandle handle, + CyAsMTPBlockTable* table, + CyAsFunctionCallback cb, + uint32_t client + ) ; + +/* Summary + This function is used to mark the start of a storage read/write burst from the + P port processor. + + Description + This function is used to mark the start of a storage read/write burst from the + processor. All USB host access into the mass storage / MTP endpoints will be + blocked while the read/write burst is ongoing, and will be allowed to resume + only after CyAsMTPStorageOnlyStop is called. The burst mode is used to + reduce the firmware overhead due to configuring the internal data paths repeatedly, + and can help improve performance when a sequence of read/writes is performed in + a burst. + + This function will not generate a special mailbox request, it will only set a flag + on the next Storage Read/Write operation. Until such a call is made West Bridge will + continue to accept incoming packets from the Host. + + * Valid in Asynchronous Callback: YES + + Returns + * CY_AS_ERROR_INVALID_HANDLE - Invalid West Bridge device handle was passed in. + * CY_AS_ERROR_NOT_CONFIGURED - West Bridge device has not been configured. + * CY_AS_ERROR_NO_FIRMWARE - Firmware is not active on West Bridge device. + * CY_AS_ERROR_NOT_RUNNING - Storage stack is not running. + * CY_AS_ERROR_SUCCESS - Burst mode has been started. + + See Also + * CyAsStorageReadWriteBurstStop + */ +CyAsReturnStatus_t +CyAsMTPStorageOnlyStart ( + CyAsDeviceHandle handle /* Handle to the West Bridge device. */ + ); + +/* Summary + This function is used to mark the end of a storage read/write burst from the + P port processor. + + Description + This function is used to mark the end of a storage read/write burst from the + processor. At this point, USB access to the mass storage / MTP endpoints on + the West Bridge device will be re-enabled. + + * Valid in Asynchronous Callback: NO + + Returns + * CY_AS_ERROR_INVALID_HANDLE - Invalid West Bridge device handle was passed in. + * CY_AS_ERROR_NOT_CONFIGURED - West Bridge device has not been configured. + * CY_AS_ERROR_NO_FIRMWARE - Firmware is not active on West Bridge device. + * CY_AS_ERROR_NOT_RUNNING - Storage stack is not running. + * CY_AS_ERROR_INVALID_IN_CALLBACK - This API cannot be called from a callback. + * CY_AS_ERROR_OUT_OF_MEMORY - Failed to allocate memory to process the request. + * CY_AS_ERROR_TIMEOUT - Failed to send request to firmware. + * CY_AS_ERROR_SUCCESS - Burst mode has been stopped. + + See Also + * CyAsStorageReadWriteBurstStart + */ +CyAsReturnStatus_t +CyAsMTPStorageOnlyStop ( + CyAsDeviceHandle handle, /* Handle to the West Bridge device. */ + CyAsFunctionCallback cb, + uint32_t client + ); + +#include "cyas_cplus_end.h" + +#endif +