| /* |
| * Copyright (C) 2018 Synaptics Incorporated. All rights reserved. |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 as |
| * published by the Free Software Foundation. |
| * |
| * INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND |
| * SYNAPTICS EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES, |
| * INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| * A PARTICULAR PURPOSE, AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY |
| * INTELLECTUAL PROPERTY RIGHTS. IN NO EVENT SHALL SYNAPTICS BE LIABLE |
| * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE, OR |
| * CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION WITH THE USE |
| * OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED AND |
| * BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
| * NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS |
| * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF |
| * COMPETENT JURISDICTION DOES NOT PERMIT THE DISCLAIMER OF DIRECT |
| * DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' TOTAL CUMULATIVE LIABILITY |
| * TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. DOLLARS. |
| */ |
| |
| #ifndef _USB_STORAGE_H_ |
| #define _USB_STORAGE_H_ |
| |
| #include <part.h> |
| |
| /** USB DRIVER API. |
| * |
| * Follow the steps to use it. |
| * step 1, call usb_start() to initialize USB. |
| * step 2, call usb_stor_scan() to scan usb storage devices. |
| * step 3, loop calling usb_stor_read() to get image from scaned devices |
| * and check validity of image. |
| * |
| * Take booting up daig.bin as an example. |
| * |
| * static int do_binary_check(unsigned char *usb_buf) |
| * { |
| * return 0; |
| * } |
| * static int usb_stor_read_example() |
| * { |
| * int usb_stor_cnt=0; |
| * int ret, i; |
| * unsigned int start_blk, size_blk; |
| * unsigned char *usb_buf = (unsigned char*)0x05008000; |
| * |
| * start_blk = 1; //start from the second block |
| * size_blk = (4<<20)/512; //size of zImage |
| * |
| * ret = usb_init(); |
| * // try to recognize storage devices immediately |
| * if (ret >= 0) |
| * usb_stor_cnt = usb_stor_scan(); |
| * |
| * for(i = 0;i < usb_stor_cnt; i++) //try to read binary from all scaned device. |
| * { |
| * memset(usb_buf,0,size_blk*512); |
| * |
| * if(usb_stor_read(i, start_blk, size_blk, usb_buf) == size_blk) |
| * { |
| * lgpl_printf("usb_read: end startblk %d, blccnt %d buffer 0x%x\n", |
| * start_blk, size_blk, usb_buf); |
| * if (do_binary_check(usb_buf) == 0)//passed check |
| * break; |
| * } |
| * } |
| * if (i == usb_stor_cnt) |
| * { |
| * lgpl_printf("Can not get daig image.\n"); |
| * if (usb_stor_cnt == 0) |
| * lgpl_printf("No usb stor dev available.\n"); |
| * while(1); |
| * } |
| * __reset_cpu((unsigned int)usb_buf, 1330, 0); |
| * } |
| */ |
| |
| |
| /* Stop usb devices. |
| * |
| * Stops the LowLevel Part and deregisters USB devices. |
| */ |
| int usb_stop(void); |
| |
| /* Init usb devices. |
| * |
| * usb init and scan usb device. |
| * |
| * @retval =0 has found usb devices. |
| * @retval = -1 has not found usb devices. |
| */ |
| int usb_init(); |
| |
| /* Scan usb storage devices. |
| * |
| * scan the usb and reports device info. |
| * |
| * @retval the number of usb storage devices. |
| */ |
| int usb_stor_scan(); |
| |
| /** Usb storage read |
| * |
| * @param device usb storage device index. |
| * @param blknr start address in block. |
| * @param blkcnt size in block. |
| * @param buffer objective data buffer. |
| * |
| * @retval: >0 count of read blocks. |
| * @retval: =0 read errror. |
| */ |
| unsigned long usb_stor_read(int device, unsigned long blknr, |
| unsigned long blkcnt, void *buffer); |
| |
| /** Get storage descriptor |
| * |
| * @param device usb storage device index. |
| * @param desc Pointer to return descriptor in. |
| * |
| * @retval: =0 Success |
| * @retval: <0 Failure. |
| */ |
| int get_usb_storage_desc(int device, block_dev_desc_t* desc); |
| |
| #endif |