1/** 2 * 3 * TODO: description 4 * 5 * This file is a part of USB SCSI CAM for Haiku. 6 * May be used under terms of the MIT License 7 * 8 * Author(s): 9 * Siarzhuk Zharski <imker@gmx.li> 10 * 11 * 12 */ 13#ifndef _PROTO_MODULE_H_ 14 #define _PROTO_MODULE_H_ 15 16#ifndef _MODULE_H 17 #include <module.h> 18#endif /*_MODULE_H*/ 19 20/*#ifndef _SG_BUFFER_H_ 21 #include "sg_buffer.h" 22#endif / *_SG_BUFFER_H_*/ 23 24enum { 25 /* B_OK */ /* JFYI:command is OK */ 26 B_CMD_FAILED = B_ERRORS_END + 1, /* command failed */ 27 B_CMD_WIRE_FAILED, /* device problems */ 28 B_CMD_UNKNOWN, /* command state unknown */ 29}; 30 31typedef enum{ 32 eDirNone = 0, 33 eDirIn, 34 eDirOut, 35} EDirection; 36 37struct _usb_device_info; /* forward, we can be included from device_info.h */ 38 39typedef void (*ud_transfer_callback)(struct _usb_device_info *udi, 40 CCB_SCSIIO *ccbio, 41 int32 residue, 42 status_t status); 43 44typedef struct { 45 module_info module; 46 47 status_t (*init)(struct _usb_device_info *udi); 48 status_t (*reset)(struct _usb_device_info *udi); 49 void (*transfer)(struct _usb_device_info *udi, 50 uint8 *cmd, uint8 cmdlen, 51 //sg_buffer *sgb, 52 iovec *sg_data, 53 int32 sg_count, 54 int32 transfer_len, 55 EDirection dir, 56 CCB_SCSIIO *ccbio, 57 ud_transfer_callback cb); 58} protocol_module_info; 59 60 61typedef struct { 62 module_info module; 63 64 status_t (*transform)(struct _usb_device_info *udi, 65 uint8 *cmd, uint8 len, 66 uint8 **rcmd, uint8 *rlen); 67} transform_module_info; 68 69#define MODULE_PREFIX "generic/usb_scsi_extensions/" 70#define PROTOCOL_SUFFIX "/protocol/v1" 71#define TRANSFORM_SUFFIX "/transform/v1" 72#define PROTOCOL_MODULE_MASK MODULE_PREFIX"%s"PROTOCOL_SUFFIX 73#define TRANSFORM_MODULE_MASK MODULE_PREFIX"%s"TRANSFORM_SUFFIX 74 75/** 76 \define:_TRACE_ALWAYS 77 trace always - used mainly for error messages 78*/ 79#define PTRACE_ALWAYS(__udi, __x...) \ 80 { /*if(__udi->b_trace)*/ __udi->trace(true, __x); } 81/** 82 \define:TRACE 83 trace only if logging is activated 84*/ 85#define PTRACE(__udi, __x...) \ 86 { if(__udi->b_trace) __udi->trace(false, __x); } 87 88#endif /* _PROTO_MODULE_H_ */ 89 90