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