summaryrefslogtreecommitdiff
path: root/drivers/staging/dabusb/dabusb.h
blob: c1772efe7c2c18a1b51d1b4282e5fafcbaa2bdfc (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
72
73
74
75
76
77
78
79
80
#define _BULK_DATA_LEN 64
typedef struct {
	unsigned char data[_BULK_DATA_LEN];
	unsigned int size;
	unsigned int pipe;
} bulk_transfer_t, *pbulk_transfer_t;

#define DABUSB_MINOR 240		/* some unassigned USB minor */
#define DABUSB_VERSION 0x1000
#define IOCTL_DAB_BULK              _IOWR('d', 0x30, bulk_transfer_t)
#define IOCTL_DAB_OVERRUNS	    _IOR('d',  0x15, int)
#define IOCTL_DAB_VERSION           _IOR('d', 0x3f, int)

#ifdef __KERNEL__

typedef enum { _stopped = 0, _started } driver_state_t;

typedef struct {
	struct mutex mutex;
	struct usb_device *usbdev;
	wait_queue_head_t wait;
	wait_queue_head_t remove_ok;
	spinlock_t lock;
	atomic_t pending_io;
	driver_state_t state;
	int remove_pending;
	int got_mem;
	int total_buffer_size;
	unsigned int overruns;
	int readptr;
	int opened;
	int devnum;
	struct list_head free_buff_list;
	struct list_head rec_buff_list;
} dabusb_t, *pdabusb_t;

typedef struct {
	pdabusb_t s;
	struct urb *purb;
	struct list_head buff_list;
} buff_t, *pbuff_t;

typedef struct {
	wait_queue_head_t wait;
} bulk_completion_context_t, *pbulk_completion_context_t;


#define _DABUSB_IF 2
#define _DABUSB_ISOPIPE 0x09
#define _ISOPIPESIZE	16384

#define _BULK_DATA_LEN 64
/* Vendor specific request code for Anchor Upload/Download
 *This one is implemented in the core */
#define ANCHOR_LOAD_INTERNAL  0xA0

/* EZ-USB Control and Status Register.  Bit 0 controls 8051 reset */
#define CPUCS_REG    0x7F92
#define _TOTAL_BUFFERS 384

#define MAX_INTEL_HEX_RECORD_LENGTH 16

#ifndef _BYTE_DEFINED
#define _BYTE_DEFINED
typedef unsigned char BYTE;
#endif /* !_BYTE_DEFINED */

#ifndef _WORD_DEFINED
#define _WORD_DEFINED
typedef unsigned short WORD;
#endif /* !_WORD_DEFINED */

typedef struct _INTEL_HEX_RECORD {
	BYTE  Length;
	WORD  Address;
	BYTE  Type;
	BYTE  Data[MAX_INTEL_HEX_RECORD_LENGTH];
} INTEL_HEX_RECORD, *PINTEL_HEX_RECORD;

#endif