#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 semaphore 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;
	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
