7e93de65c361f0172b783c4bc4bb7474ffdc3dff
[kernel/u-boot.git] / include / usbd.h
1 /*
2  * USB Downloader for SAMSUNG Platform
3  *
4  * Copyright (C) 2007-2009 Samsung Electronics
5  * Minkyu Kang <mk7.kang@samsung.com>
6  */
7
8 #define msleep(a) udelay(a * 1000)
9 #define WAIT_TIME 2
10
11 #undef  CMD_USBD_DEBUG
12 #ifdef  CMD_USBD_DEBUG
13 #define PRINTF(fmt, args...)    printf(fmt, ##args)
14 #else
15 #define PRINTF(fmt, args...)
16 #endif
17
18 /* partition info for partition sync - typically not use */
19 enum {
20         BOOT_PART_ID    = 0,
21         PARAMS_PART_ID,
22         KERNEL_PART_ID,
23         RAMDISK_PART_ID,
24         FILESYSTEM_PART_ID,
25         FILESYSTEM2_PART_ID,
26         FILESYSTEM3_PART_ID,
27         MODEM_PART_ID,
28         MMC_PART_ID,
29         NUM_PARTITION,
30 };
31
32 /* image type definition */
33 enum {
34         IMG_BOOT = 0,
35         IMG_KERNEL,
36         IMG_FILESYSTEM,
37         IMG_MODEM,
38         IMG_MMC,
39 };
40
41 /* Download command definition */
42 #define COMMAND_DOWNLOAD_IMAGE  200
43 #define COMMAND_WRITE_PART_0    201
44 #define COMMAND_WRITE_PART_1    202
45 #define COMMAND_WRITE_PART_2    203
46 #define COMMAND_WRITE_PART_3    204
47 #define COMMAND_WRITE_PART_4    205
48 #define COMMAND_WRITE_PART_5    206
49 #define COMMAND_WRITE_PART_6    207
50 #define COMMAND_WRITE_PART_7    208
51 #define COMMAND_WRITE_PART_8    209
52 #define COMMAND_WRITE_PART_9    210
53 #define COMMAND_WRITE_UBI_INFO  211
54 #define COMMAND_PARTITION_SYNC  212
55 #define COMMAND_ERASE_PARAMETER 213
56 #define COMMAND_RESET_PDA       214
57 #define COMMAND_RESET_USB       215
58 #define COMMAND_RAM_BOOT        216
59 #define COMMAND_RAMDISK_MODE    217
60 #ifdef CONFIG_DOWN_PHONE
61 #define COMMAND_DOWN_PHONE      220
62 #define COMMAND_CHANGE_USB      221
63 #endif
64 #define COMMAND_CSA_CLEAR       222
65 #define COMMAND_PROGRESS        230
66
67 /* status definition */
68 enum {
69         STATUS_DONE = 0,
70         STATUS_RETRY,
71         STATUS_ERROR,
72 };
73
74 /* download mode definition */
75 enum {
76         MODE_NORMAL = 0,
77         MODE_FORCE,
78 };
79
80 /*
81  * USB Downloader Operations
82  * All functions and valuable are mandatory
83  *
84  * usb_init     : initialize the USB Controller and check the connection
85  * usb_stop     : stop and release USB
86  * send_data    : send the data (BULK ONLY!!)
87  * recv_data    : receive the data and returns received size (BULK ONLY!!)
88  * recv_setup   : setup download address, length and DMA setting for receive
89  * tx_data      : send data address
90  * rx_data      : receive data address
91  * tx_len       : size of send data
92  * rx_len       : size of receive data
93  * ram_addr     : address of will be stored data on RAM
94  *
95  * mmc_dev      : device number of mmc
96  * mmc_max      : number of max blocks
97  * mmc_blk      : mmc block size
98  * mmc_total    : mmc total blocks
99  */
100 struct usbd_ops {
101         int (*usb_init)(void);
102         void (*usb_stop)(void);
103         void (*send_data)(char *, int);
104         int (*recv_data)(void);
105         void (*recv_setup)(char *, int);
106         char *tx_data;
107         char *rx_data;
108         ulong tx_len;
109         ulong rx_len;
110         ulong ram_addr;
111
112         /* mmc device info */
113         uint mmc_dev;
114         ulong mmc_max;
115         ulong mmc_blk;
116         ulong mmc_total;
117
118         void (*set_progress)(int);
119         void (*cpu_reset)(void);
120         void (*down_start)(void);
121         void (*down_cancel)(void);
122 };
123
124 /* This function is interfaced between USB Device Controller and USB Downloader
125  * Must Implementation this function at USB Controller!! */
126 struct usbd_ops *usbd_set_interface(struct usbd_ops *);