summaryrefslogtreecommitdiff
path: root/bsp/allwinner/libraries/sunxi-hal/hal/source/usb/storage/Disk/BlkDev.h
blob: 82dd779743ab4e1d0830e72a9f425acea3f5d3a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*
********************************************************************************************************************
*                                              usb host driver
*
*                              (c) Copyright 2007-2010, javen.China
*                                       All Rights Reserved
*
* File Name     : UsbBlkDev.h
*
* Author        : javen
*
* Version       : 2.0
*
* Date          : 2010.03.02
*
* Description   :
*
* History       :
*
********************************************************************************************************************
*/
#ifndef  __BLKDEV_H__
#define  __BLKDEV_H__

#include  "usbh_disk_info.h"

#define  USB_BLK_DEV_MAGIC              0x5a13d099
#define  USB_BULK_DISK_MAX_NAME_LEN     32

typedef struct __UsbBlkDev
{
    unsigned int   last_lun;               //如果为1,表示是最后一个分区
    unsigned int   Magic;                  /* 表示设备是否合法                 */
    __mscLun_t *Lun;                /* sd和其他scsi device共有的属性    */

    /* Disk information */
    unsigned int used;                     /* 打开设备计数                     */
    __dev_devop_t DiskOp;           /* 设备操作函数                     */

    /* Disk manager */
    void *DevParaHdle;      /* open时的句柄                     */
    void *DevRegHdle;       /* reg时的句柄                      */

    unsigned int DevNo;                                /* 此设备号, 它由host_id, target_id, lun 组成   */
    unsigned char ClassName[USB_BULK_DISK_MAX_NAME_LEN]; /* 设备类名, 如"disk"               */
    unsigned char DevName[USB_BULK_DISK_MAX_NAME_LEN];   /* 此设备名, 如"SCSI_DISK_000"      */

    unsigned int is_RegDisk;               /* 是否注册过disk设备                           */
    unsigned int ErrCmdNr;                 /* test_unit_ready期间, 未知错误的次数          */

    void *Extern;                   /* 扩展属性, 如cd                               */

    usbh_disk_device_info_t device_info;
} __UsbBlkDev_t;

//------------------------------------------
//
//------------------------------------------
__UsbBlkDev_t *UsbBlkDevAllocInit(__mscLun_t *mscLun);
int UsbBlkDevFree(__UsbBlkDev_t *BlkDev);

void GetDiskInfo(__UsbBlkDev_t *BlkDev);
void ShutDown(__UsbBlkDev_t *BlkDev);

int UsbBlkDevReg(__UsbBlkDev_t *BlkDev, unsigned char *ClassName, unsigned int RegDisk);
int UsbBlkDevUnReg(__UsbBlkDev_t *BlkDev);


#endif   //__BLKDEV_H__