diff --git a/src/add-ons/kernel/busses/scsi/usb/device_info.h b/src/add-ons/kernel/busses/scsi/usb/device_info.h index cdbac7577e..6f917fd764 100644 --- a/src/add-ons/kernel/busses/scsi/usb/device_info.h +++ b/src/add-ons/kernel/busses/scsi/usb/device_info.h @@ -1,57 +1,65 @@ -/* - * Copyright (c) 2003-2005 by Siarzhuk Zharski - * Distributed under the terms of the BSD License. +/** + * + * TODO: description * + * This file is a part of USB SCSI CAM for Haiku OS. + * May be used under terms of the MIT License + * + * Author(s): + * Siarzhuk Zharski + * + * */ #ifndef _DEVICE_INFO_H_ - #define _DEVICE_INFO_H_ + #define _DEVICE_INFO_H_ #ifndef _SCSI_COMMANDS_H_ - #include "scsi_commands.h" + #include "scsi_commands.h" #endif /*_SCSI_COMMANDS_H_*/ #ifndef _PROTO_MODULE_H_ - #include "proto_module.h" + #include "proto_module.h" #endif /* _PROTO_MODULE_H_ */ typedef struct _usb_device_info{ - uint8 dev_num; /**/ - const usb_device device; /**/ - uint16 interface; /**/ - uint8 max_lun; /**/ - - uint32 properties; - - usb_pipe pipe_in; /**/ - usb_pipe pipe_out; /**/ - usb_pipe pipe_intr; /**/ - - sem_id lock_sem; /**/ - sem_id trans_sem; /**/ - uint32 tag; /**/ - status_t status; /**/ - - bigtime_t trans_timeout; - usb_module_info *usb_m; - - void *data; /**/ - int actual_len; /**/ - - protocol_module_info *protocol_m; - char *protocol_m_path; - - transform_module_info *transform_m; - char *transform_m_path; - - bool b_trace; - void (*trace)(bool b_force, const char *fmt, ...); - void (*trace_bytes)(const char *prefix, const uint8 *bytes, size_t bytes_len); + uint8 dev_num; /**/ + const usb_device device; /**/ + uint16 interface; /**/ + uint8 max_lun; /**/ + + uint32 properties; + + usb_pipe pipe_in; /**/ + usb_pipe pipe_out; /**/ + usb_pipe pipe_intr; /**/ + + sem_id lock_sem; /**/ + sem_id trans_sem; /**/ + uint32 tag; /**/ + status_t status; /**/ + + bigtime_t trans_timeout; + usb_module_info *usb_m; + + void *data; /**/ + int actual_len; /**/ + + protocol_module_info *protocol_m; + char *protocol_m_path; + + transform_module_info *transform_m; + char *transform_m_path; + + bool b_trace; + void (*trace)(bool b_force, const char *fmt, ...); + void (*trace_bytes)(const char *prefix, const uint8 *bytes, size_t bytes_len); - uint8 scsi_command_buf[IOCDBLEN]; - /* auto sense buffer. Some commands doesn't have it. emulate */ - scsi_sense_data autosense_data; - /* iovec autosense_sg; DO NOT RESTORE IT !!!*/ - uint8 not_ready_luns; + uint8 scsi_command_buf[IOCDBLEN]; + /* auto sense buffer. Some commands doesn't have it. emulate */ + scsi_sense_data autosense_data; + /* iovec autosense_sg; DO NOT RESTORE IT !!!*/ + uint8 not_ready_luns; } usb_device_info; -#endif /* _DEVICE_INFO_H_ */ +#endif /* _DEVICE_INFO_H_ */ + diff --git a/src/add-ons/kernel/busses/scsi/usb/scsi_commands.h b/src/add-ons/kernel/busses/scsi/usb/scsi_commands.h index ecc3e2528d..7be7736f96 100644 --- a/src/add-ons/kernel/busses/scsi/usb/scsi_commands.h +++ b/src/add-ons/kernel/busses/scsi/usb/scsi_commands.h @@ -1,13 +1,19 @@ -/* - * Copyright (c) 2003-2005 by Siarzhuk Zharski - * Distributed under the terms of the BSD License. +/** + * + * TODO: description * + * This file is a part of USB SCSI CAM for Haiku OS. + * May be used under terms of the MIT License + * + * Author(s): + * Siarzhuk Zharski + * + * */ - /** definitions for SCSI commands, structures etc. */ #ifndef _SCSI_COMMANDS_H_ - #define _SCSI_COMMANDS_H_ + #define _SCSI_COMMANDS_H_ /* References: * http://www.t10.org/ftp/t10/drafts/rbc/rbc-r10a.pdf @@ -22,297 +28,298 @@ #define CAM_DIR_MASK (CAM_DIR_IN | CAM_DIR_OUT | CAM_DIR_NONE ) /* SCSI status defines */ -#define SCSI_STATUS_OK 0x00 -#define SCSI_STATUS_CHECK_CONDITION 0x02 - +#define SCSI_STATUS_OK 0x00 +#define SCSI_STATUS_CHECK_CONDITION 0x02 + /* SCSI command opcodes */ -#define READ_6 0x08 -#define WRITE_6 0x0a -#define READ_10 0x28 -#define WRITE_10 0x2a -#define MODE_SELECT_6 0x15 -#define MODE_SENSE_6 0x1a -#define MODE_SELECT_10 0x55 -#define MODE_SENSE_10 0x5a -#define READ_CAPACITY 0x25 -#define TEST_UNIT_READY 0x00 -#define START_STOP_UNIT 0x1b +#define READ_6 0x08 +#define WRITE_6 0x0a +#define READ_10 0x28 +#define WRITE_10 0x2a +#define MODE_SELECT_6 0x15 +#define MODE_SENSE_6 0x1a +#define MODE_SELECT_10 0x55 +#define MODE_SENSE_10 0x5a +#define READ_CAPACITY 0x25 +#define TEST_UNIT_READY 0x00 +#define START_STOP_UNIT 0x1b /* come from UFI specs */ -#define FORMAT_UNIT 0x04 -#define INQUIRY 0x12 -/*#define START_STOP_UNIT 0x1b -#define MODE_SELECT 0x55 -#define MODE_SENSE 0x5a */ +#define FORMAT_UNIT 0x04 +#define INQUIRY 0x12 +/*#define START_STOP_UNIT 0x1b +#define MODE_SELECT 0x55 +#define MODE_SENSE 0x5a */ #define PREVENT_ALLOW_MEDIA_REMOVAL 0x1e -#define READ_10 0x28 -#define READ_12 0xa8 -/*#define READ_CAPACITY 0x25*/ -#define READ_FORMAT_CAPACITY 0x23 -#define REQUEST_SENSE 0x03 -#define REZERO_UNIT 0x01 -#define SEEK_10 0x2b -#define SEND_DIAGNOSTICS 0x1d -/*#define TEST_UNIT_READY 0x00*/ -#define VERIFY 0x2f -#define WRITE_10 0x2a -#define WRITE_12 0xaa -#define WRITE_AND_VERIFY 0x2e +#define READ_10 0x28 +#define READ_12 0xa8 +/*#define READ_CAPACITY 0x25*/ +#define READ_FORMAT_CAPACITY 0x23 +#define REQUEST_SENSE 0x03 +#define REZERO_UNIT 0x01 +#define SEEK_10 0x2b +#define SEND_DIAGNOSTICS 0x1d +/*#define TEST_UNIT_READY 0x00*/ +#define VERIFY 0x2f +#define WRITE_10 0x2a +#define WRITE_12 0xaa +#define WRITE_AND_VERIFY 0x2e /* end of UFI commands*/ /* come from ATAPI specs*/ -/*#define FORMAT_UNIT 0x04 -#define INQUIRY 0x12 -#define MODE_SELECT 0x55 -#define MODE_SENSE 0x5a -#define PREVENT_ALLOW_MEDIUM_REMOVAL 0x1e -#define READ_10 0x28 -#define READ_12 0xa8 +/*#define FORMAT_UNIT 0x04 +#define INQUIRY 0x12 +#define MODE_SELECT 0x55 +#define MODE_SENSE 0x5a +#define PREVENT_ALLOW_MEDIUM_REMOVAL 0x1e +#define READ_10 0x28 +#define READ_12 0xa8 #define READ_CAPACITY 0x25 -#define READ_FORMAT_CAPACITIES 0x23 +#define READ_FORMAT_CAPACITIES 0x23 #define REQUEST_SENSE 0x03 -#define SEEK 0x2b -#define START_STOP_UNIT 0x1b -#define TEST_UNIT_READY 0x00 -#define VERIFY 0x2f -#define WRITE_10 0x2a -#define WRITE_12 0xaa +#define SEEK 0x2b +#define START_STOP_UNIT 0x1b +#define TEST_UNIT_READY 0x00 +#define VERIFY 0x2f +#define WRITE_10 0x2a +#define WRITE_12 0xaa #define WRITE_AND_VEIRIFY 0x2e */ -#define PAUSE_RESUME 0x4b -#define PLAY_AUDIO 0x45 -#define PLAY_AUDIO_MSF 0x47 -#define REWIND 0x01 -#define PLAY_AUDIO_TRACK 0x48 +#define PAUSE_RESUME 0x4b +#define PLAY_AUDIO 0x45 +#define PLAY_AUDIO_MSF 0x47 +#define REWIND 0x01 +#define PLAY_AUDIO_TRACK 0x48 /* end of ATAPI commands*/ /* come from MMC2 specs */ -#define READ_BUFFER 0x3c -#define READ_SUBCHANNEL 0x42 -#define READ_TOC 0x43 -#define READ_HEADER 0x44 -#define READ_DISK_INFO 0x51 -#define READ_TRACK_INFO 0x52 -#define SEND_OPC 0x54 -#define READ_MASTER_CUE 0x59 -#define CLOSE_TR_SESSION 0x5b -#define READ_BUFFER_CAP 0x5c -#define SEND_CUE_SHEET 0x5d -#define BLANK 0xa1 -#define EXCHANGE_MEDIUM 0xa6 -#define READ_DVD_STRUCTURE 0xad -#define DVD_REPORT_KEY 0xa4 -#define DVD_SEND_KEY 0xa3 -#define SET_CD_SPEED 0xbb -#define GET_CONFIGURATION 0x46 +#define READ_BUFFER 0x3c +#define READ_SUBCHANNEL 0x42 +#define READ_TOC 0x43 +#define READ_HEADER 0x44 +#define READ_DISK_INFO 0x51 +#define READ_TRACK_INFO 0x52 +#define SEND_OPC 0x54 +#define READ_MASTER_CUE 0x59 +#define CLOSE_TR_SESSION 0x5b +#define READ_BUFFER_CAP 0x5c +#define SEND_CUE_SHEET 0x5d +#define BLANK 0xa1 +#define EXCHANGE_MEDIUM 0xa6 +#define READ_DVD_STRUCTURE 0xad +#define DVD_REPORT_KEY 0xa4 +#define DVD_SEND_KEY 0xa3 +#define SET_CD_SPEED 0xbb +#define GET_CONFIGURATION 0x46 /* end of MMC2 specs */ /* come from RBC specs */ -/*#define FORMAT_UNIT 0x04 -#define INQUIRY 0x12 -#define MODE_SELECT_6 0x15 -#define MODE_SENSE_6 0x1a*/ -#define PERSISTENT_RESERVE_IN 0x5e -#define PERSISTENT_RESERVE_OUT 0x5f -/*#define PREVENT_ALLOW_MEDIUM_REMOVAL 0x1e -#define READ_10 0x28 -#define READ_CAPACITY 0x25*/ -#define RELEASE_6 0x17 -/*#define REQUEST_SENSE 0x03*/ -#define RESERVE_6 0x16 -/*#define START_STOP_UNIT 0x1b*/ -#define SYNCHRONIZE_CACHE 0x35 -/*#define TEST_UNIT_READY 0x00 -#define VERIFY_10 0x2f -#define WRITE_10 0x2a*/ -#define WRITE_BUFFER 0x3b +/*#define FORMAT_UNIT 0x04 +#define INQUIRY 0x12 +#define MODE_SELECT_6 0x15 +#define MODE_SENSE_6 0x1a*/ +#define PERSISTENT_RESERVE_IN 0x5e +#define PERSISTENT_RESERVE_OUT 0x5f +/*#define PREVENT_ALLOW_MEDIUM_REMOVAL 0x1e +#define READ_10 0x28 +#define READ_CAPACITY 0x25*/ +#define RELEASE_6 0x17 +/*#define REQUEST_SENSE 0x03*/ +#define RESERVE_6 0x16 +/*#define START_STOP_UNIT 0x1b*/ +#define SYNCHRONIZE_CACHE 0x35 +/*#define TEST_UNIT_READY 0x00 +#define VERIFY_10 0x2f +#define WRITE_10 0x2a*/ +#define WRITE_BUFFER 0x3b /* end of RBC commands */ /* come from QIC-157 specvs */ -#define ERASE 0x19 -/*#define INQUIRY 0x12*/ -#define LOAD_UNLOAD 0x1b -#define LOCATE 0x2b -#define LOG_SELECT 0x4c -#define LOG_SENSE 0x4d -/*#define MODE_SELECT 0x15 -#define MODE_SENSE 0x1a -#define READ 0x08*/ -#define READ_POSITION 0x34 -/*#define REQUEST_SENSE 0x03*/ -#define REWIND 0x01 -#define SPACE 0x11 +#define ERASE 0x19 +/*#define INQUIRY 0x12*/ +#define LOAD_UNLOAD 0x1b +#define LOCATE 0x2b +#define LOG_SELECT 0x4c +#define LOG_SENSE 0x4d +/*#define MODE_SELECT 0x15 +#define MODE_SENSE 0x1a +#define READ 0x08*/ +#define READ_POSITION 0x34 +/*#define REQUEST_SENSE 0x03*/ +#define REWIND 0x01 +#define SPACE 0x11 /*#define TEST_UNIT_READY 0x00 -#define WRITE 0x0a*/ -#define WRITE_FILEMARK 0x10 +#define WRITE 0x0a*/ +#define WRITE_FILEMARK 0x10 /* end of QIC-157 */ /* SCSI commands layout*/ /* generic commands layout*/ typedef struct{ - uint8 opcode; - uint8 bytes[11]; + uint8 opcode; + uint8 bytes[11]; }scsi_cmd_generic; /* six-bytes command*/ typedef struct{ - uint8 opcode; - uint8 addr[3]; -#define CMD_GEN_6_ADDR 0x1f /* mask used for addr field*/ -#define CMD_LUN 0xE0 /* mask used for LUN */ -#define CMD_LUN_SHIFT 0x05 /* shift for LUN */ - uint8 len; - uint8 ctrl; + uint8 opcode; + uint8 addr[3]; +#define CMD_GEN_6_ADDR 0x1f /* mask used for addr field*/ +#define CMD_LUN 0xE0 /* mask used for LUN */ +#define CMD_LUN_SHIFT 0x05 /* shift for LUN */ + uint8 len; + uint8 ctrl; }scsi_cmd_generic_6; /* ten-bytes command*/ typedef struct{ - uint8 opcode; - uint8 byte2; - uint8 addr[4]; - uint8 reserved; - uint8 len[2]; - uint8 ctrl; + uint8 opcode; + uint8 byte2; + uint8 addr[4]; + uint8 reserved; + uint8 len[2]; + uint8 ctrl; }scsi_cmd_generic_10; /* twelve-bytes command*/ typedef struct{ - uint8 opcode; - uint8 byte2; - uint8 addr[4]; - uint8 len[4]; - uint8 reserved; - uint8 ctrl; + uint8 opcode; + uint8 byte2; + uint8 addr[4]; + uint8 len[4]; + uint8 reserved; + uint8 ctrl; }scsi_cmd_generic_12; /* READ_6 / WRITE_6 */ typedef scsi_cmd_generic_6 scsi_cmd_rw_6; /* READ_10 / WRITE_10 */ typedef struct{ - uint8 opcode; - uint8 byte2; -#define CMD_RW_10_RELADDR 0x01 -#define CMD_RW_10_FUA 0x08 -#define CMD_RW_10_DPO 0x10 - uint8 addr[4]; - uint8 reserved; - uint8 len[2]; - uint8 ctrl; + uint8 opcode; + uint8 byte2; +#define CMD_RW_10_RELADDR 0x01 +#define CMD_RW_10_FUA 0x08 +#define CMD_RW_10_DPO 0x10 + uint8 addr[4]; + uint8 reserved; + uint8 len[2]; + uint8 ctrl; }scsi_cmd_rw_10; /* MODE_SELECT_6 */ typedef struct{ - uint8 opcode; - uint8 byte2; -#define CMD_MSEL_6_SP 0x01 -#define CMD_MSEL_6_PF 0x10 - uint8 reserved[2]; - uint8 len; - uint8 ctrl; + uint8 opcode; + uint8 byte2; +#define CMD_MSEL_6_SP 0x01 +#define CMD_MSEL_6_PF 0x10 + uint8 reserved[2]; + uint8 len; + uint8 ctrl; }scsi_cmd_mode_select_6; /* MODE_SELECT_10 */ typedef struct{ - uint8 opcode; - uint8 byte2; -#define CMD_MSEL_10_SP 0x01 -#define CMD_MSEL_10_PF 0x10 - uint8 reserved[5]; - uint8 len[2]; - uint8 ctrl; + uint8 opcode; + uint8 byte2; +#define CMD_MSEL_10_SP 0x01 +#define CMD_MSEL_10_PF 0x10 + uint8 reserved[5]; + uint8 len[2]; + uint8 ctrl; }scsi_cmd_mode_select_10; /* MODE_SENSE_6 */ typedef struct{ - uint8 opcode; - uint8 byte2; -#define CMD_MSENSE_6_DBD 0x08 - uint8 byte3; -#define CMD_MSENSE_6_PC 0x0c - uint8 reserved; - uint8 len; - uint8 ctrl; + uint8 opcode; + uint8 byte2; +#define CMD_MSENSE_6_DBD 0x08 + uint8 byte3; +#define CMD_MSENSE_6_PC 0x0c + uint8 reserved; + uint8 len; + uint8 ctrl; }scsi_cmd_mode_sense_6; typedef struct{ - uint8 mode_data_len; - uint8 medium_type; - uint8 device_spec_params; - uint8 block_descr_len; + uint8 mode_data_len; + uint8 medium_type; + uint8 device_spec_params; + uint8 block_descr_len; }scsi_mode_param_header_6; /* MODE_SENSE_10 */ typedef struct{ - uint8 opcode; - uint8 byte2; -#define CMD_MSENSE_10_DBD 0x08 - uint8 byte3; -#define CMD_MSENSE_10_PC 0x0c - uint8 reserved[4]; - uint8 len[2]; - uint8 ctrl; + uint8 opcode; + uint8 byte2; +#define CMD_MSENSE_10_DBD 0x08 + uint8 byte3; +#define CMD_MSENSE_10_PC 0x0c + uint8 reserved[4]; + uint8 len[2]; + uint8 ctrl; }scsi_cmd_mode_sense_10; typedef struct{ - uint8 mode_data_len[2]; - uint8 medium_type; - uint8 device_spec_params; - uint8 reserved1; - uint8 reserved2; - uint8 block_descr_len[2]; + uint8 mode_data_len[2]; + uint8 medium_type; + uint8 device_spec_params; + uint8 reserved1; + uint8 reserved2; + uint8 block_descr_len[2]; }scsi_mode_param_header_10; /* TEST_UNIT_READY */ typedef struct{ - uint8 opcode; - uint8 byte2; - uint8 reserved[3]; - uint8 ctrl; + uint8 opcode; + uint8 byte2; + uint8 reserved[3]; + uint8 ctrl; }scsi_cmd_test_unit_ready; /* START_STOP_UNIT */ typedef struct{ - uint8 opcode; - uint8 byte2; -#define CMD_SSU_IMMED 0x01 - uint8 reserved[2]; - uint8 start_loej; -#define CMD_SSU_LOEJ 0x02 -#define CMD_SSU_START 0x01 - uint8 ctrl; + uint8 opcode; + uint8 byte2; +#define CMD_SSU_IMMED 0x01 + uint8 reserved[2]; + uint8 start_loej; +#define CMD_SSU_LOEJ 0x02 +#define CMD_SSU_START 0x01 + uint8 ctrl; }scsi_cmd_start_stop_unit; /* SCSI REQUEST SENSE data. See 8.2.14*/ typedef struct _scsi_sense_data{ - uint8 error_code; -#define SSD_ERRCODE 0x7F -#define SSD_CURRENT_ERROR 0x70 -#define SSD_DEFERRED_ERROR 0x71 -#define SSD_ERRCODE_VALID 0x80 - uint8 segment; - uint8 flags; -#define SSD_KEY 0x0F -#define SSD_KEY_NO_SENSE 0x00 -#define SSD_KEY_RECOVERED_ERROR 0x01 -#define SSD_KEY_NOT_READY 0x02 -#define SSD_KEY_MEDIUM_ERROR 0x03 -#define SSD_KEY_HARDWARE_ERROR 0x04 -#define SSD_KEY_ILLEGAL_REQUEST 0x05 -#define SSD_KEY_UNIT_ATTENTION 0x06 -#define SSD_KEY_DATA_PROTECT 0x07 -#define SSD_KEY_BLANK_CHECK 0x08 -#define SSD_KEY_Vendor_Specific 0x09 -#define SSD_KEY_COPY_ABORTED 0x0a -#define SSD_KEY_ABORTED_COMMAND 0x0b -#define SSD_KEY_EQUAL 0x0c -#define SSD_KEY_VOLUME_OVERFLOW 0x0d -#define SSD_KEY_MISCOMPARE 0x0e -#define SSD_KEY_RESERVED 0x0f -#define SSD_ILI 0x20 -#define SSD_EOM 0x40 -#define SSD_FILEMARK 0x80 - uint8 info[4]; - uint8 extra_len; - uint8 cmd_spec_info[4]; - uint8 add_sense_code; - uint8 add_sense_code_qual; - uint8 fru; - uint8 sense_key_spec[3]; -#define SSD_SCS_VALID 0x80 -#define SSD_FIELDPTR_CMD 0x40 -#define SSD_BITPTR_VALID 0x08 -#define SSD_BITPTR_VALUE 0x07 -#define SSD_MIN_SIZE 18 - uint8 extra_bytes[14]; + uint8 error_code; +#define SSD_ERRCODE 0x7F +#define SSD_CURRENT_ERROR 0x70 +#define SSD_DEFERRED_ERROR 0x71 +#define SSD_ERRCODE_VALID 0x80 + uint8 segment; + uint8 flags; +#define SSD_KEY 0x0F +#define SSD_KEY_NO_SENSE 0x00 +#define SSD_KEY_RECOVERED_ERROR 0x01 +#define SSD_KEY_NOT_READY 0x02 +#define SSD_KEY_MEDIUM_ERROR 0x03 +#define SSD_KEY_HARDWARE_ERROR 0x04 +#define SSD_KEY_ILLEGAL_REQUEST 0x05 +#define SSD_KEY_UNIT_ATTENTION 0x06 +#define SSD_KEY_DATA_PROTECT 0x07 +#define SSD_KEY_BLANK_CHECK 0x08 +#define SSD_KEY_Vendor_Specific 0x09 +#define SSD_KEY_COPY_ABORTED 0x0a +#define SSD_KEY_ABORTED_COMMAND 0x0b +#define SSD_KEY_EQUAL 0x0c +#define SSD_KEY_VOLUME_OVERFLOW 0x0d +#define SSD_KEY_MISCOMPARE 0x0e +#define SSD_KEY_RESERVED 0x0f +#define SSD_ILI 0x20 +#define SSD_EOM 0x40 +#define SSD_FILEMARK 0x80 + uint8 info[4]; + uint8 extra_len; + uint8 cmd_spec_info[4]; + uint8 add_sense_code; + uint8 add_sense_code_qual; + uint8 fru; + uint8 sense_key_spec[3]; +#define SSD_SCS_VALID 0x80 +#define SSD_FIELDPTR_CMD 0x40 +#define SSD_BITPTR_VALID 0x08 +#define SSD_BITPTR_VALUE 0x07 +#define SSD_MIN_SIZE 18 + uint8 extra_bytes[14]; #define SSD_FULL_SIZE sizeof(struct _scsi_sense_data) }scsi_sense_data; -#endif /*_SCSI_COMMANDS_H_*/ +#endif /*_SCSI_COMMANDS_H_*/ + diff --git a/src/add-ons/kernel/busses/scsi/usb/tracing.c b/src/add-ons/kernel/busses/scsi/usb/tracing.c index c530dbe412..f527a97241 100644 --- a/src/add-ons/kernel/busses/scsi/usb/tracing.c +++ b/src/add-ons/kernel/busses/scsi/usb/tracing.c @@ -1,9 +1,15 @@ -/* - * Copyright (c) 2003-2005 by Siarzhuk Zharski - * Distributed under the terms of the BSD License. +/** + * + * TODO: description * + * This file is a part of USB SCSI CAM for Haiku OS. + * May be used under terms of the MIT License + * + * Author(s): + * Siarzhuk Zharski + * + * */ - /** tracing support implementation */ #include "usb_scsi.h" @@ -18,32 +24,32 @@ /** private log path name */ static const char *private_log_path = "/var/log/"MODULE_NAME".log"; -static const char *log_port_name = MODULE_NAME"-logging"; - +static const char *log_port_name = MODULE_NAME"-logging"; + #ifdef BUILD_LOG_DAEMON int main(int argc, char**argv) { - if(B_NAME_NOT_FOUND == find_port(log_port_name)){ - bool b_screen = (argc > 1); - port_id pid = create_port(1000, log_port_name); - while(true){ - int32 code; - char buffer[1024 + 1]; - size_t sz = read_port_etc(pid, &code, buffer, 1024, B_TIMEOUT, 1000 * 1000); - if(sz != B_TIMED_OUT){ - if(b_screen){ - buffer[sz] = 0; - printf(buffer); - } else { - FILE *f = fopen(private_log_path, "a"); - fwrite(buffer, sz, 1, f); - fclose(f); - } - } - } - } - return 0; + if(B_NAME_NOT_FOUND == find_port(log_port_name)){ + bool b_screen = (argc > 1); + port_id pid = create_port(1000, log_port_name); + while(true){ + int32 code; + char buffer[1024 + 1]; + size_t sz = read_port_etc(pid, &code, buffer, 1024, B_TIMEOUT, 1000 * 1000); + if(sz != B_TIMED_OUT){ + if(b_screen){ + buffer[sz] = 0; + printf(buffer); + } else { + FILE *f = fopen(private_log_path, "a"); + fwrite(buffer, sz, 1, f); + fclose(f); + } + } + } + } + return 0; } #else /* BUILD_LOG_DAEMON */ @@ -55,23 +61,23 @@ bool b_log = true; bool b_log = false; #endif /** logging in private file */ -bool b_log_file = false; +bool b_log_file = false; /** appending logs to previous log sessions */ -bool b_log_append = false; +bool b_log_append = false; /** log SCSI commands */ bool b_log_scsi_cmd = false; /** log USB bulk callback function activity */ -bool b_log_bulk_cb = false; +bool b_log_bulk_cb = false; bool b_log_protocol = false; //bool b_log_CSW = false; //bool b_log_CDB = false; bool b_log_data_processing = false; -bool b_log_sense_data = false; +bool b_log_sense_data = false; /** log time at wich logging event occured */ -static bool b_log_time = false; +static bool b_log_time = false; /** log thread id from wich logging performed */ -static bool b_log_thid = false; +static bool b_log_thid = false; /** log thread name from wich logging performed */ static bool b_log_thname = false; /** semaphore id used to synchronizing logging requests */ @@ -79,129 +85,130 @@ static bool b_log_thname = false; /** log result of READ_CAPACITY command */ bool b_log_capacity = false; + /** - \fn: load_log_settings - \param sh: driver_settings handle - called from main driver settings loading procedure to load log-related - parameters + \fn: load_log_settings + \param sh: driver_settings handle + called from main driver settings loading procedure to load log-related + parameters */ void load_log_settings(void *sh) { - if(sh){ + if(sh){ #if !DEBUG - b_log = get_driver_boolean_parameter(sh, "debug_output", b_log, true); + b_log = get_driver_boolean_parameter(sh, "debug_output", b_log, true); #endif - b_log_file = get_driver_boolean_parameter(sh, "debug_output_in_file", - b_log_file, true); - b_log_append = ! get_driver_boolean_parameter(sh, "debug_output_file_rewrite", - !b_log_append, true); - b_log_time = get_driver_boolean_parameter(sh, "debug_trace_time", - b_log_time, false); - b_log_thid = get_driver_boolean_parameter(sh, "debug_trace_threadid", - b_log_thid, false); - b_log_thname = get_driver_boolean_parameter(sh, "debug_trace_thread_name", - b_log_thname, false); - b_log_scsi_cmd = get_driver_boolean_parameter(sh, "debug_trace_commands", - b_log_scsi_cmd, false); - b_log_bulk_cb = get_driver_boolean_parameter(sh, "debug_trace_bulk_callback", - b_log_bulk_cb, false); - b_log_protocol = get_driver_boolean_parameter(sh, "debug_trace_protocol", - b_log_protocol, false); - b_log_data_processing = - get_driver_boolean_parameter(sh, "debug_trace_data_io", - b_log_data_processing, false); - b_log_sense_data = - get_driver_boolean_parameter(sh, "debug_trace_sense_data", - b_log_sense_data, false); - b_log_capacity = get_driver_boolean_parameter(sh, "debug_trace_capacity", - b_log_capacity, false); - if(!b_log_file){ /* some information is already in system log entries */ - b_log_thid = false; - b_log_thname = false; - } - } + b_log_file = get_driver_boolean_parameter(sh, "debug_output_in_file", + b_log_file, true); + b_log_append = ! get_driver_boolean_parameter(sh, "debug_output_file_rewrite", + !b_log_append, true); + b_log_time = get_driver_boolean_parameter(sh, "debug_trace_time", + b_log_time, false); + b_log_thid = get_driver_boolean_parameter(sh, "debug_trace_threadid", + b_log_thid, false); + b_log_thname = get_driver_boolean_parameter(sh, "debug_trace_thread_name", + b_log_thname, false); + b_log_scsi_cmd = get_driver_boolean_parameter(sh, "debug_trace_commands", + b_log_scsi_cmd, false); + b_log_bulk_cb = get_driver_boolean_parameter(sh, "debug_trace_bulk_callback", + b_log_bulk_cb, false); + b_log_protocol = get_driver_boolean_parameter(sh, "debug_trace_protocol", + b_log_protocol, false); + b_log_data_processing = + get_driver_boolean_parameter(sh, "debug_trace_data_io", + b_log_data_processing, false); + b_log_sense_data = + get_driver_boolean_parameter(sh, "debug_trace_sense_data", + b_log_sense_data, false); + b_log_capacity = get_driver_boolean_parameter(sh, "debug_trace_capacity", + b_log_capacity, false); + if(!b_log_file){ /* some information is already in system log entries */ + b_log_thid = false; + b_log_thname = false; + } + } } /** - \fn: create_log - called to [re]create private log file + \fn: create_log + called to [re]create private log file */ void -create_log() +create_log(void) { - int flags = O_WRONLY | O_CREAT | ((!b_log_append) ? O_TRUNC : 0); - if(b_log_file){ - close(open(private_log_path, flags, 0666)); - } + int flags = O_WRONLY | O_CREAT | ((!b_log_append) ? O_TRUNC : 0); + if(b_log_file){ + close(open(private_log_path, flags, 0666)); + } } /** - \fn: usb_scsi_trace - \param b_force: if true - output message ignoring current logging state - \param fmt: format string used in message formatting - \param ...: variable argument used in message formatting - formats and traces messages to current debug output target. + \fn: usb_scsi_trace + \param b_force: if true - output message ignoring current logging state + \param fmt: format string used in message formatting + \param ...: variable argument used in message formatting + formats and traces messages to current debug output target. */ void usb_scsi_trace(bool b_force, const char *fmt, ...) { - if(b_force || b_log){ - va_list arg_list; - static char *prefix = "\33[35m"MODULE_NAME":\33[0m"; - static char buf[1024]; - char *buf_ptr = buf; - port_id pid = find_port(log_port_name); - bool b_no_port = (pid == B_NAME_NOT_FOUND); - if(!b_log_file || b_no_port){ /* it's not a good idea to add prefix in private file */ - strcpy(buf, prefix); - buf_ptr += strlen(prefix); - } - if(b_log_time){ /* add time of logging this string */ - bigtime_t time = system_time(); - uint32 msec = time / 1000; - uint32 sec = msec / 1000; - sprintf(buf_ptr, "%02ld.%02ld.%03ld:", sec / 60, sec % 60, msec % 1000); - buf_ptr += strlen(buf_ptr); - } - if(b_log_thid){ /* add id of the calling thread */ - thread_id tid = find_thread(0); - thread_info tinfo = {0}; - if(b_log_thname){ /* add name of the calling thread */ - get_thread_info(tid, &tinfo); - } - sprintf(buf_ptr, "['%s':%lx]:", tinfo.name, tid); - buf_ptr += strlen(buf_ptr); - } - va_start(arg_list, fmt); - vsprintf(buf_ptr, fmt, arg_list); - va_end(arg_list); - if(b_log_file && !b_no_port){ /* write in private log file */ - if(B_OK != write_port_etc(pid, 0, buf, strlen(buf), B_TIMEOUT, 0)) - dprintf(buf); - } else /* write in system log*/ - dprintf(buf); - } + if(b_force || b_log){ + va_list arg_list; + static char *prefix = "\33[35m"MODULE_NAME":\33[0m"; + static char buf[1024]; + char *buf_ptr = buf; + port_id pid = find_port(log_port_name); + bool b_no_port = (pid == B_NAME_NOT_FOUND); + if(!b_log_file || b_no_port){ /* it's not a good idea to add prefix in private file */ + strcpy(buf, prefix); + buf_ptr += strlen(prefix); + } + if(b_log_time){ /* add time of logging this string */ + bigtime_t time = system_time(); + uint32 msec = time / 1000; + uint32 sec = msec / 1000; + sprintf(buf_ptr, "%02ld.%02ld.%03ld:", sec / 60, sec % 60, msec % 1000); + buf_ptr += strlen(buf_ptr); + } + if(b_log_thid){ /* add id of the calling thread */ + thread_id tid = find_thread(0); + thread_info tinfo = {0}; + if(b_log_thname){ /* add name of the calling thread */ + get_thread_info(tid, &tinfo); + } + sprintf(buf_ptr, "['%s':%lx]:", tinfo.name, tid); + buf_ptr += strlen(buf_ptr); + } + va_start(arg_list, fmt); + vsprintf(buf_ptr, fmt, arg_list); + va_end(arg_list); + if(b_log_file && !b_no_port){ /* write in private log file */ + if(B_OK != write_port_etc(pid, 0, buf, strlen(buf), B_TIMEOUT, 0)) + dprintf(buf); + } else /* write in system log*/ + dprintf(buf); + } } /** - \fn: trace_CCB_HEADER - \param ccbh: struct to be traced - traces CCB_HEADER struct to current debug output target + \fn: trace_CCB_HEADER + \param ccbh: struct to be traced + traces CCB_HEADER struct to current debug output target */ void usb_scsi_trace_CCB_HEADER(const CCB_HEADER *ccbh) { - TRACE("CCB_HEADER:%08x\n" - " phys_addr:%ld\n" - " cam_ccb_len:%d\n" - " cam_func_code:%02x\n" - " cam_status:%02x\n" - " cam_hrsvd0:%02x\n" - " cam_path_id:%02x\n" - " cam_target_id:%02x\n" - " cam_target_lun:%02x\n" - " cam_flags:%08x\n", - ccbh, - ccbh->phys_addr, + TRACE("CCB_HEADER:%08x\n" + " phys_addr:%ld\n" + " cam_ccb_len:%d\n" + " cam_func_code:%02x\n" + " cam_status:%02x\n" + " cam_hrsvd0:%02x\n" + " cam_path_id:%02x\n" + " cam_target_id:%02x\n" + " cam_target_lun:%02x\n" + " cam_flags:%08x\n", + ccbh, + ccbh->phys_addr, ccbh->cam_ccb_len, ccbh->cam_func_code, ccbh->cam_status, @@ -212,34 +219,34 @@ usb_scsi_trace_CCB_HEADER(const CCB_HEADER *ccbh) ccbh->cam_flags); } /** - \fn: trace_CCB_SCSIIO - \param ccbio: struct to be traced - traces CCB_SCSIIO struct to current debug output target + \fn: trace_CCB_SCSIIO + \param ccbio: struct to be traced + traces CCB_SCSIIO struct to current debug output target */ void usb_scsi_trace_CCB_SCSIIO(const CCB_SCSIIO *ccbio) { - TRACE("CCB_SCSIIO:%08x\n", ccbio); - usb_scsi_trace_CCB_HEADER(&ccbio->cam_ch); - TRACE(" cam_pdrv_ptr:%08x\n" - " cam_next_ccb:%08x\n" - " cam_req_map:%08x\n" - " (*cam_cbfcnp):%08x\n" - " cam_data_ptr:%08x\n" - " cam_dxfer_len:%ld\n" - " cam_sense_ptr:%08x\n" - " cam_sense_len:%d\n" - " cam_cdb_len:%d\n" - " cam_sglist_cnt:%d\n" - " cam_sort:%d\n" - " cam_scsi_status:%02x\n" - " cam_sense_resid:%d\n" - " cam_resid:%d\n" - " cam_timeout:%d\n" - " cam_msg_ptr:%08x\n" - " cam_msgb_len:%d\n" - " cam_vu_flags:%04x\n" - " cam_tag_action:%d\n", + TRACE("CCB_SCSIIO:%08x\n", ccbio); + usb_scsi_trace_CCB_HEADER(&ccbio->cam_ch); + TRACE(" cam_pdrv_ptr:%08x\n" + " cam_next_ccb:%08x\n" + " cam_req_map:%08x\n" + " (*cam_cbfcnp):%08x\n" + " cam_data_ptr:%08x\n" + " cam_dxfer_len:%ld\n" + " cam_sense_ptr:%08x\n" + " cam_sense_len:%d\n" + " cam_cdb_len:%d\n" + " cam_sglist_cnt:%d\n" + " cam_sort:%d\n" + " cam_scsi_status:%02x\n" + " cam_sense_resid:%d\n" + " cam_resid:%d\n" + " cam_timeout:%d\n" + " cam_msg_ptr:%08x\n" + " cam_msgb_len:%d\n" + " cam_vu_flags:%04x\n" + " cam_tag_action:%d\n", ccbio->cam_pdrv_ptr, ccbio->cam_next_ccb, ccbio->cam_req_map, @@ -260,118 +267,119 @@ usb_scsi_trace_CCB_SCSIIO(const CCB_SCSIIO *ccbio) ccbio->cam_vu_flags, ccbio->cam_tag_action); - usb_scsi_trace_bytes("CDB_UN:\n", ccbio->cam_cdb_io.cam_cdb_bytes, IOCDBLEN); + usb_scsi_trace_bytes("CDB_UN:\n", ccbio->cam_cdb_io.cam_cdb_bytes, IOCDBLEN); } /** - \fn: usb_scsi_command_trace - \param b_hlight: highlight command and prefix it with spec. charachter - \param cmd: array of bytes to be traced. typically pointer SCSI command buffer - \param cmdlen: size of buffer in cmd parameter - traces SCSI commands into debug output target.can highlight and prefix the - text with special charachter and color for two different types - of commands. + \fn: usb_scsi_command_trace + \param b_hlight: highlight command and prefix it with spec. charachter + \param cmd: array of bytes to be traced. typically pointer SCSI command buffer + \param cmdlen: size of buffer in cmd parameter + traces SCSI commands into debug output target.can highlight and prefix the + text with special charachter and color for two different types + of commands. */ void usb_scsi_trace_command(bool b_hlight, const uint8 *cmd, size_t cmdlen) { - size_t len = min(cmdlen, 12); /* command length watchdog */ - char hl_mask[] = "\33[%sCMD:\33[0m"; - char prefix[sizeof(hl_mask) + 6]; - if(b_log_file){ /* compose CMD prefix */ - sprintf(prefix, "%sCMD:", b_hlight ? "=>":""); - } else { - sprintf(prefix, hl_mask, b_hlight ? "33m=>":"32m"); - } - usb_scsi_trace_bytes(prefix, cmd, len); /* append command bytes to log */ + size_t len = min(cmdlen, 12); /* command length watchdog */ + char hl_mask[] = "\33[%sCMD:\33[0m"; + char prefix[sizeof(hl_mask) + 6]; + if(b_log_file){ /* compose CMD prefix */ + sprintf(prefix, "%sCMD:", b_hlight ? "=>":""); + } else { + sprintf(prefix, hl_mask, b_hlight ? "33m=>":"32m"); + } + usb_scsi_trace_bytes(prefix, cmd, len); /* append command bytes to log */ } /** - \fn:usb_scsi_bytes_trace - \param bytes:array of bytes to be traced. - \param bytes_len: size of buffer in bytes parameter - traces buffer bytes one by one into debug output target. + \fn:usb_scsi_bytes_trace + \param bytes:array of bytes to be traced. + \param bytes_len: size of buffer in bytes parameter + traces buffer bytes one by one into debug output target. */ void usb_scsi_trace_bytes(const char *prefix, const uint8 *bytes, size_t bytes_len) { - size_t len = min(bytes_len, 0x100); /* length watchdog */ - char truncTail[] = "\n"; - char *pbuf = (char *)malloc(len * 3 + sizeof(truncTail) + strlen(prefix) + 1); - if(pbuf){ - size_t i = 0; - char *p = pbuf; - strcpy(p, prefix); - p += strlen(prefix); - for(;i < len; i++){ - sprintf(p, " %02x", bytes[i]); - p += strlen(p); - } - /* user should be informed about truncation too*/ - strcpy(p, (len < bytes_len) ? truncTail : "\n"); - TRACE(pbuf); - free(pbuf); - } else { - TRACE_ALWAYS("usb_scsi_trace_bytes:error allocate " - "memory for tracing %d bytes\n", len); - } + size_t len = min(bytes_len, 0x100); /* length watchdog */ + char truncTail[] = "\n"; + char *pbuf = (char *)malloc(len * 3 + sizeof(truncTail) + strlen(prefix) + 1); + if(pbuf){ + size_t i = 0; + char *p = pbuf; + strcpy(p, prefix); + p += strlen(prefix); + for(;i < len; i++){ + sprintf(p, " %02x", bytes[i]); + p += strlen(p); + } + /* user should be informed about truncation too*/ + strcpy(p, (len < bytes_len) ? truncTail : "\n"); + TRACE(pbuf); + free(pbuf); + } else { + TRACE_ALWAYS("usb_scsi_trace_bytes:error allocate " + "memory for tracing %d bytes\n", len); + } } void usb_scsi_trace_sgb(const char *prefix, sg_buffer *sgb) { - char sgbHead[] = "SGB:"; - size_t i = 0; - size_t len = strlen(prefix) + strlen(sgbHead) + sgb->count * 9; - char *sgbPrefix = (char*)malloc(len); - if(0 != sgbPrefix){ - sg_buffer sgb_own; - size_t sgb_len = 0; - char *p = sgbPrefix; - strcpy(p, prefix); - p += strlen(p); - strcpy(p, sgbHead); - p += strlen(p); - i = 0; - for(; i < sgb->count; i++){ - sprintf(p, "%lX,", sgb->piov[i].iov_len); - sgb_len += sgb->piov[i].iov_len; - p += strlen(p); - } - if(B_OK == realloc_sg_buffer(&sgb_own, sgb_len)){ - sg_memcpy(&sgb_own, 0, sgb, 0, sgb_len); - /* assume non-fragmented memory */ - usb_scsi_trace_bytes(sgbPrefix, sgb_own.piov->iov_base, sgb_own.piov->iov_len); - free_sg_buffer(&sgb_own); - } else { - TRACE_ALWAYS("usb_scsi_trace_sgb:error allocate sgb for %d bytes\n", sgb_len); - } - } else { - TRACE_ALWAYS("usb_scsi_trace_sgb:error allocate memory for %d bytes\n", len); - } + char sgbHead[] = "SGB:"; + size_t i = 0; + size_t len = strlen(prefix) + strlen(sgbHead) + sgb->count * 9; + char *sgbPrefix = (char*)malloc(len); + if(0 != sgbPrefix){ + sg_buffer sgb_own; + size_t sgb_len = 0; + char *p = sgbPrefix; + strcpy(p, prefix); + p += strlen(p); + strcpy(p, sgbHead); + p += strlen(p); + i = 0; + for(; i < sgb->count; i++){ + sprintf(p, "%lX,", sgb->piov[i].iov_len); + sgb_len += sgb->piov[i].iov_len; + p += strlen(p); + } + if(B_OK == realloc_sg_buffer(&sgb_own, sgb_len)){ + sg_memcpy(&sgb_own, 0, sgb, 0, sgb_len); + /* assume non-fragmented memory */ + usb_scsi_trace_bytes(sgbPrefix, sgb_own.piov->iov_base, sgb_own.piov->iov_len); + free_sg_buffer(&sgb_own); + } else { + TRACE_ALWAYS("usb_scsi_trace_sgb:error allocate sgb for %d bytes\n", sgb_len); + } + } else { + TRACE_ALWAYS("usb_scsi_trace_sgb:error allocate memory for %d bytes\n", len); + } } void usb_scsi_trace_SG(iovec *sg, int count) { - char sg_mask[] = "SG:{%s}\n"; - char truncTail[] = ""; - size_t trunc_count = min(count, 0x20); /* length watchdog */ - size_t len = sizeof(sg_mask) + sizeof(truncTail) + trunc_count * 16; - char *pbuf = (char *)malloc(len + 1); - if(pbuf){ - int i = 0; - char *p = pbuf; - for(; i < trunc_count; i++){ - sprintf(p, (!i) ? "%d" : ", %d", sg[i].iov_len); - p += strlen(p); - } - /* user should be informed about truncation too*/ - if(trunc_count < count) - strcpy(p, truncTail); - - TRACE(sg_mask, pbuf); - free(pbuf); - } else { - TRACE_ALWAYS("usb_scsi_trace_SG:error allocate " - "memory for tracing %d SG entries\n", trunc_count); - } + char sg_mask[] = "SG:{%s}\n"; + char truncTail[] = ""; + size_t trunc_count = min(count, 0x20); /* length watchdog */ + size_t len = sizeof(sg_mask) + sizeof(truncTail) + trunc_count * 16; + char *pbuf = (char *)malloc(len + 1); + if(pbuf){ + int i = 0; + char *p = pbuf; + for(; i < trunc_count; i++){ + sprintf(p, (!i) ? "%d" : ", %d", sg[i].iov_len); + p += strlen(p); + } + /* user should be informed about truncation too*/ + if(trunc_count < count) + strcpy(p, truncTail); + + TRACE(sg_mask, pbuf); + free(pbuf); + } else { + TRACE_ALWAYS("usb_scsi_trace_SG:error allocate " + "memory for tracing %d SG entries\n", trunc_count); + } } #endif /* BUILD_LOG_DAEMON */ + diff --git a/src/add-ons/kernel/busses/scsi/usb/tracing.h b/src/add-ons/kernel/busses/scsi/usb/tracing.h index 5a1ab6c17d..9b60f35ed1 100644 --- a/src/add-ons/kernel/busses/scsi/usb/tracing.h +++ b/src/add-ons/kernel/busses/scsi/usb/tracing.h @@ -1,20 +1,26 @@ -/* - * Copyright (c) 2003-2005 by Siarzhuk Zharski - * Distributed under the terms of the BSD License. +/** + * + * TODO: description * + * This file is a part of USB SCSI CAM for Haiku OS. + * May be used under terms of the MIT License + * + * Author(s): + * Siarzhuk Zharski + * + * */ - /** tracing support definitions */ #ifndef _USB_SCSI_TRACING_H_ - #define _USB_SCSI_TRACING_H_ + #define _USB_SCSI_TRACING_H_ #ifndef _SG_BUFFER_H_ - #include "sg_buffer.h" + #include "sg_buffer.h" #endif /*_SG_BUFFER_H_*/ - + void load_log_settings(void *sh); -void create_log(); +void create_log(void); void usb_scsi_trace(bool b_force, const char *fmt, ...); /* non-switchable tracng functions */ @@ -25,43 +31,43 @@ void usb_scsi_trace_CCB_SCSIIO(const CCB_SCSIIO *ccbio); /* ---------------------- Generic tracing --------------------------------------- */ /** - \define:TRACE_ALWAYS - trace always - used mainly for error messages + \define:TRACE_ALWAYS + trace always - used mainly for error messages */ #define TRACE_ALWAYS(x...) \ - usb_scsi_trace(true, x) + usb_scsi_trace(true, x) /** - \define:TRACE - trace only if logging is activated + \define:TRACE + trace only if logging is activated */ #define TRACE(x...) \ - usb_scsi_trace(false, x) + usb_scsi_trace(false, x) /* ---------------------- SCSI commands tracing -------------------------------- */ extern bool b_log_scsi_cmd; void usb_scsi_trace_command(bool b_hlight, const uint8 *cmd, size_t cmdlen); /** - \define:TRACE_SCSI_COMMAND - trace SCSI command + \define:TRACE_SCSI_COMMAND + trace SCSI command */ #define TRACE_SCSI_COMMAND(cmd, cmdlen)\ - { if(b_log_scsi_cmd) usb_scsi_trace_command(false, cmd, cmdlen); } + { if(b_log_scsi_cmd) usb_scsi_trace_command(false, cmd, cmdlen); } /** - \define:TRACE_SCSI_COMMAND_HLIGHT - trace SCSI command and prefixes it with special sign. Used for tracing - commands internally converted by this module. + \define:TRACE_SCSI_COMMAND_HLIGHT + trace SCSI command and prefixes it with special sign. Used for tracing + commands internally converted by this module. */ #define TRACE_SCSI_COMMAND_HLIGHT(cmd, cmdlen)\ - { if(b_log_scsi_cmd) usb_scsi_trace_command(true, cmd, cmdlen); } + { if(b_log_scsi_cmd) usb_scsi_trace_command(true, cmd, cmdlen); } /* ---------------------- USB callback tracing -------------------------------- */ /** - \define:TRACE_BULK_CALLBACK - trace the bulk_callback procedures data and status flow. + \define:TRACE_BULK_CALLBACK + trace the bulk_callback procedures data and status flow. */ extern bool b_log_bulk_cb; #define TRACE_BULK_CALLBACK(stat, len)\ - { if(b_log_bulk_cb) TRACE("B_CB:status:%08x;length:%d\n", stat, len); } + { if(b_log_bulk_cb) TRACE("B_CB:status:%08x;length:%d\n", stat, len); } /* --------------- USB mass storage commands tracing --------------------------- */ extern bool b_log_protocol; @@ -69,28 +75,29 @@ extern bool b_log_protocol; extern bool b_log_data_processing; void usb_scsi_trace_SG(iovec *sg, int count); /** - \define:TRACE_DATA_IO - trace the information about amount processed data and status of process. + \define:TRACE_DATA_IO + trace the information about amount processed data and status of process. */ #define TRACE_DATA_IO(x...)\ - { if(b_log_data_processing) usb_scsi_trace(false, x); } + { if(b_log_data_processing) usb_scsi_trace(false, x); } #define TRACE_DATA_IO_SG(sg, cnt)\ - { if(b_log_data_processing) usb_scsi_trace_SG(sg, cnt); } + { if(b_log_data_processing) usb_scsi_trace_SG(sg, cnt); } extern bool b_log_sense_data; /** - \define:TRACE_SENSE_DATA - trace the information REQUEST SENSE data. + \define:TRACE_SENSE_DATA + trace the information REQUEST SENSE data. */ #define TRACE_SENSE_DATA(data, len)\ - { if(b_log_sense_data) usb_scsi_trace_bytes("SENSE:", data, len); } + { if(b_log_sense_data) usb_scsi_trace_bytes("SENSE:", data, len); } #define TRACE_MODE_SENSE_DATA(prefix, data, len)\ - { if(b_log_sense_data) usb_scsi_trace_bytes(prefix, data, len); } + { if(b_log_sense_data) usb_scsi_trace_bytes(prefix, data, len); } #define TRACE_MODE_SENSE_SGB(prefix, data)\ - { if(b_log_sense_data) usb_scsi_trace_sgb(prefix, data); } + { if(b_log_sense_data) usb_scsi_trace_sgb(prefix, data); } extern bool b_log_capacity; #define TRACE_CAPACITY(prefix, data)\ - { if(b_log_capacity) usb_scsi_trace_sgb(prefix, data); } + { if(b_log_capacity) usb_scsi_trace_sgb(prefix, data); } #endif /*_USB_SCSI_TRACING_H_*/ +