/* // suse 10.2 #define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size))) #define _IOC_TYPECHECK(t) sizeof(t) */ /* // suse 10.3 #define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size))) #define _IOC_TYPECHECK(t) \ ((sizeof(t) == sizeof(t[1]) && \ sizeof(t) < (1 << _IOC_SIZEBITS)) ? \ sizeof(t) : __invalid_size_argument_for_IOC) */ //#define _IOC_TYPECHECK(t) sizeof(t) //---- temp. Redefine as in Suse 10.2 !!!!! //--- aux. struct for suse 10.3 typedef struct __InterfaceInfo { unsigned char InterfaceInfo[1024]; } InterfaceInfo2; #define SLBUSB_IOCTL_INDEX 0 //#define IOCTL_SLBUSB_GET_PIPE_INFO _IOWR('U', SLBUSB_IOCTL_INDEX+1, InterfaceInfo) #define IOCTL_SLBUSB_GET_PIPE_INFO _IOWR('U', SLBUSB_IOCTL_INDEX+1, InterfaceInfo2) #define IOCTL_SLBUSB_GET_DEVICE_DESCRIPTOR _IOWR('U', SLBUSB_IOCTL_INDEX+2, Usb_Device_Descriptor) #define IOCTL_SLBUSB_GET_CONFIGURATION_DESCRIPTOR _IOWR('U', SLBUSB_IOCTL_INDEX+3, struct param) #define IOCTL_SLBUSB_BULK_OR_INTERRUPT_WRITE _IOWR('U', SLBUSB_IOCTL_INDEX+4, struct param) #define IOCTL_SLBUSB_BULK_OR_INTERRUPT_READ _IOWR('U', SLBUSB_IOCTL_INDEX+5, struct param) #define IOCTL_SLBUSB_VENDOR_REQUEST _IOWR('U', SLBUSB_IOCTL_INDEX+6, VENDOR_REQUEST_IN) #define IOCTL_SLBUSB_GET_CURRENT_CONFIG _IOWR('U', SLBUSB_IOCTL_INDEX+7, struct param) #define IOCTL_SLBUSB_RESET _IOWR('U', SLBUSB_IOCTL_INDEX+8, struct param) #define IOCTL_SLBUSB_RESETPIPE _IOWR('U', SLBUSB_IOCTL_INDEX+9, struct param) #define IOCTL_SLBUSB_ABORTPIPE _IOWR('U', SLBUSB_IOCTL_INDEX+10, struct param) #define IOCTL_SLBUSB_SETINTERFACE _IOWR('U', SLBUSB_IOCTL_INDEX+11, struct param) #define IOCTL_SLBUSB_GET_STRING_DESCRIPTOR _IOWR('U', SLBUSB_IOCTL_INDEX+12, Usb_String_Descriptor) #define IOCTL_SLBUSB_BULK_READ _IOWR('U', SLBUSB_IOCTL_INDEX+13, BULK_IOCTL) #define IOCTL_SLBUSB_BULK_WRITE _IOWR('U', SLBUSB_IOCTL_INDEX+14, BULK_IOCTL) #define IOCTL_SLBUSB_GET_CURRENT_FRAME_NUMBER _IOWR('U', SLBUSB_IOCTL_INDEX+15, struct param) #define IOCTL_SLBUSB_VENDOR_OR_CLASS_REQUEST _IOWR('U', SLBUSB_IOCTL_INDEX+16, VENDOR_OR_CLASS_REQUEST_CONTROL) #define IOCTL_SLBUSB_GET_LAST_ERROR _IOWR('U', SLBUSB_IOCTL_INDEX+17, struct param) #define IOCTL_SLBUSB_ISO_READ _IOWR('U', SLBUSB_IOCTL_INDEX+18, struct param) #define IOCTL_SLBUSB_ISO_WRITE _IOWR('U', SLBUSB_IOCTL_INDEX+19, struct param) #define IOCTL_SLBUSB_ANCHOR_DOWNLOAD _IOWR('U', SLBUSB_IOCTL_INDEX+20, BULK_IOCTL) #define IOCTL_SLBUSB_CYCLE_PORT _IOWR('U', SLBUSB_IOCTL_INDEX+21, struct param) #define IOCTL_SLBUSB_GET_DRIVER_VERSION _IOWR('U', SLBUSB_IOCTL_INDEX+22, struct param) #define IOCTL_SLBUSB_START_ISO_STREAM _IOWR('U', SLBUSB_IOCTL_INDEX+23, struct param) #define IOCTL_SLBUSB_STOP_ISO_STREAM _IOWR('U', SLBUSB_IOCTL_INDEX+24, struct param) #define IOCTL_SLBUSB_READ_ISO_BUFFER _IOWR('U', SLBUSB_IOCTL_INDEX+25, struct param) #define IOCTL_SLBUSB_RESET_CPU _IOWR('U', SLBUSB_IOCTL_INDEX+35, BULK_IOCTL) //--------------------------------------- /////////////////////////////////////////////////////////// // // control structure for bulk and interrupt data transfers // /////////////////////////////////////////////////////////// typedef struct _BULK_TRANSFER_CONTROL { ULONG pipeNum; } BULK_TRANSFER_CONTROL, *PBULK_TRANSFER_CONTROL; #define MAX_BULK_IOCTL 16*1024-6*4 typedef struct _bulk_8192 { int IOCTL_SLBUSB; BULK_TRANSFER_CONTROL Control; int sizeControl; char ioBuffer[MAX_BULK_IOCTL]; //--- fsv FIXME!!! int sizeBuffer; unsigned long doneBytes; } BULK_8192; typedef struct __bulk_ioctl { int IOCTL_SLBUSB; void* Control; int sizeControl; void* ioBuffer; //--- fsv FIXME!!! int sizeBuffer; unsigned long doneBytes; } BULK_IOCTL; //================ from linux/usb_ch9.h ================================================================ /* USB_DT_ENDPOINT: Endpoint descriptor */ /* struct usb_endpoint_descriptor { // from linux/usb_ch9.h __u8 bLength; __u8 bDescriptorType; __u8 bEndpointAddress; __u8 bmAttributes; __le16 wMaxPacketSize; __u8 bInterval; // NOTE: these two are _only_ in audio endpoints. // use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof. __u8 bRefresh; __u8 bSynchAddress; } __attribute__ ((packed)); */ //================ from slbusbsys.h ================================================================ #define MAX_INTEL_HEX_RECORD_LENGTH 16 typedef struct _INTEL_HEX_RECORD { BYTE Length; WORD Address; BYTE Type; BYTE Data[MAX_INTEL_HEX_RECORD_LENGTH]; } INTEL_HEX_RECORD, *PINTEL_HEX_RECORD; //-------- m y --------------- struct HEX_RECORDS { struct HEX_RECORDS *next; int line_nr; INTEL_HEX_RECORD HexRecord; }; //------------------------------------------------------------------- typedef struct _VENDOR_REQUEST_IN { BYTE bRequest; WORD wValue; WORD wIndex; WORD wLength; BYTE direction; BYTE bData; } VENDOR_REQUEST_IN, *PVENDOR_REQUEST_IN; //------------------------------------------------------------------- typedef struct _GET_STRING_DESCRIPTOR_IN { UCHAR Index; USHORT LanguageId; } GET_STRING_DESCRIPTOR_IN, *PGET_STRING_DESCRIPTOR_IN; //------------------------------------------------------------------- /////////////////////////////////////////////////////////// // // control structure for sending vendor or class specific requests // to the control endpoint. // /////////////////////////////////////////////////////////// typedef struct _VENDOR_OR_CLASS_REQUEST_CONTROL { // transfer direction (0=host to device, 1=device to host) UCHAR direction; // request type (1=class, 2=vendor) UCHAR requestType; // recipient (0=device,1=interface,2=endpoint,3=other) UCHAR recepient; // // see the USB Specification for an explanation of the // following paramaters. // UCHAR requestTypeReservedBits; UCHAR request; USHORT value; USHORT index; } VENDOR_OR_CLASS_REQUEST_CONTROL, *PVENDOR_OR_CLASS_REQUEST_CONTROL; /////////////////////////////////////////////////////////// // // control structure for isochronous data transfers // /////////////////////////////////////////////////////////// typedef struct _ISO_TRANSFER_CONTROL { // // pipe number to perform the ISO transfer to/from. Direction is // implied by the pipe number. // ULONG PipeNum; // // ISO packet size. Determines how much data is transferred each // frame. Should be less than or equal to the maxpacketsize for // the endpoint. // ULONG PacketSize; // // Total number of ISO packets to transfer. // ULONG PacketCount; // // The following two parameters detmine how buffers are managed for // an ISO transfer. In order to maintain an ISO stream, the driver // must create at least 2 transfer buffers and ping pong between them. // BufferCount determines how many buffers the driver creates to ping // pong between. FramesPerBuffer specifies how many USB frames of data // are transferred by each buffer. // ULONG FramesPerBuffer; // 10 is a good value ULONG BufferCount; // 2 is a good value } ISO_TRANSFER_CONTROL, *PISO_TRANSFER_CONTROL;