1 /* 2 ******************************************************************************************************************** 3 * usb_host 4 * 5 * (c) Copyright 2007-2009, holi.China 6 * All Rights Reserved 7 * 8 * File Name : msc_buff_manager.h 9 * 10 * Author : javen 11 * 12 * Version : 2.0 13 * 14 * Date : 2009.08.19 15 * 16 * Description : 17 * 18 * History : 19 * v1.0 holi 2008.11.22 - 读写速度快, 但是只支持单个lun 20 * v2.0 javen 2009.08.19 - 支持多个lun 和 多种类型的设备 21 ******************************************************************************************************************** 22 */ 23 #ifndef _USBH_BUFF_MANAGER_H_ 24 #define _USBH_BUFF_MANAGER_H_ 25 26 typedef void *__hdle; 27 28 /* usb host 临时 buffer */ 29 typedef struct tag_usbh_temp_buff 30 { 31 unsigned int num; /* buffer在整个buffer管理里面的号码 */ 32 33 unsigned int dev_id; /* 设备id, 确定设备身份的唯一标识 */ 34 unsigned int start_lba; /* 起始扇区 */ 35 unsigned int end_lba; /* 结束扇区, 最后一个有效扇区 */ 36 unsigned int sector_size; /* 扇区大小 */ 37 38 unsigned int used_time; /* 被文件系统使用的次数 */ 39 40 void *buff; /* 存放从设备读取的数据 */ 41 unsigned int buff_len; /* buffer的大小 */ 42 43 unsigned int is_valid; /* 这个buff的内容是否有效 */ 44 unsigned int is_busy; /* 防止buff正在接收device数据,但是 45 又被usbh_buff_manager设置为无效 */ 46 } usbh_temp_buff_t; 47 48 49 #define USBH_TEMP_BUFFER_MAX_NUM 8 //buffer的个数, 先分4个,不够用再加 50 #define USBH_TEMP_BUFFER_MAX_LEN (32 * 1024) //32k, 必须是k的倍数, 因为要palloc 51 52 typedef struct tag_usbh_buff_manager 53 { 54 unsigned int temp_buff_len; /* 临时buff的大小, 它决定了usbh_temp_buff_t里buff_len的大小 */ 55 unsigned int temp_buff_nr; /* 临时buff的个数 */ 56 57 usbh_temp_buff_t buff_array[USBH_TEMP_BUFFER_MAX_NUM]; 58 } usbh_buff_manager_t; 59 60 61 //------------------------------------------------------------------------ 62 // 63 //------------------------------------------------------------------------ 64 int usbh_msc_special_read(void *pBuffer, 65 unsigned int blk, 66 unsigned int n, 67 __hdle hDev, 68 unsigned int dev_id, 69 unsigned int secter_size, 70 void *blk_read_entry); 71 72 int usbh_msc_special_write(void *pBuffer, 73 unsigned int blk, 74 unsigned int n, 75 __hdle hDev, 76 unsigned int dev_id, 77 unsigned int secter_size, 78 void *blk_write_entry); 79 80 int set_usbh_temp_buff_invalid_by_dev(unsigned int dev_id); 81 int set_all_usbh_temp_buff_invalid(void); 82 83 int init_usbh_buff_manager(void); 84 int exit_usbh_buff_manager(void); 85 86 #endif 87 88 89 90 91 92