sg_err.h
上传用户:weiliju62
上传日期:2007-01-06
资源大小:619k
文件大小:4k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. #ifndef SG_ERR_H
  2. #define SG_ERR_H
  3. #include <linux/../scsi/scsi.h>  /* cope with silly includes */
  4. /* Feel free to copy and modify this GPL-ed code into your applications. */
  5. /* Version 0.61 (990519) */
  6. /* Some of the following error/status codes are exchanged between the
  7.    various layers of the SCSI sub-system in Linux and should never
  8.    reach the user. They are placed here for completeness. What appears
  9.    here is copied from drivers/scsi/scsi.h which is not visible in
  10.    the user space. */
  11. /* The following are 'host_status' codes */
  12. #ifndef DID_OK
  13. #define DID_OK 0x00
  14. #endif
  15. #ifndef DID_NO_CONNECT
  16. #define DID_NO_CONNECT 0x01     /* Unable to connect before timeout */
  17. #define DID_BUS_BUSY 0x02       /* Bus remain busy until timeout */
  18. #define DID_TIME_OUT 0x03       /* Timed out for some other reason */
  19. #define DID_BAD_TARGET 0x04     /* Bad target (id?) */
  20. #define DID_ABORT 0x05          /* Told to abort for some other reason */
  21. #define DID_PARITY 0x06         /* Parity error (on SCSI bus) */
  22. #define DID_ERROR 0x07          /* Internal error */
  23. #define DID_RESET 0x08          /* Reset by somebody */
  24. #define DID_BAD_INTR 0x09       /* Received an unexpected interrupt */
  25. #define DID_PASSTHROUGH 0x0a    /* Force command past mid-level */
  26. #define DID_SOFT_ERROR 0x0b     /* The low-level driver wants a retry */
  27. #endif
  28. /* The following are 'driver_status' codes */
  29. #ifndef DRIVER_OK
  30. #define DRIVER_OK 0x00
  31. #endif
  32. #ifndef DRIVER_BUSY
  33. #define DRIVER_BUSY 0x01
  34. #define DRIVER_SOFT 0x02
  35. #define DRIVER_MEDIA 0x03
  36. #define DRIVER_ERROR 0x04
  37. #define DRIVER_INVALID 0x05
  38. #define DRIVER_TIMEOUT 0x06
  39. #define DRIVER_HARD 0x07
  40. #define DRIVER_SENSE 0x08       /* Sense_buffer has been set */
  41. /* Following "suggests" are "or-ed" with one of previous 8 entries */
  42. #define SUGGEST_RETRY 0x10
  43. #define SUGGEST_ABORT 0x20
  44. #define SUGGEST_REMAP 0x30
  45. #define SUGGEST_DIE 0x40
  46. #define SUGGEST_SENSE 0x80
  47. #define SUGGEST_IS_OK 0xff
  48. #endif
  49. #ifndef DRIVER_MASK
  50. #define DRIVER_MASK 0x0f
  51. #endif
  52. #ifndef SUGGEST_MASK
  53. #define SUGGEST_MASK 0xf0
  54. #endif
  55. #define SG_ERR_MAX_SENSE_LEN 16
  56. /* The following "print" functions send ACSII to stdout */
  57. extern void sg_print_command(const unsigned char * command);
  58. extern void sg_print_sense(const char * leadin, 
  59.                            const unsigned char * sense_buffer);
  60. extern void sg_print_target_status(int target_status);
  61. extern void sg_print_host_status(int host_status);
  62. extern void sg_print_driver_status(int driver_status);
  63. /* sg_chk_n_print() returns 1 quietly if there are no errors/warnings
  64.    else it prints to standard output and returns 0. */
  65. extern int sg_chk_n_print(const char * leadin, int target_status,
  66.                           int host_status, int driver_status,
  67.                           const unsigned char * sense_buffer);
  68. /* The following "category" function returns one of the following */
  69. #define SG_ERR_CAT_CLEAN 0      /* No errors or other information */
  70. #define SG_ERR_CAT_MEDIA_CHANGED 1 /* interpreted from sense buffer */
  71. #define SG_ERR_CAT_RESET 2      /* interpreted from sense buffer */
  72. #define SG_ERR_CAT_TIMEOUT 3
  73. #define SG_ERR_CAT_RECOVERED 4  /* Successful command after recovered err */
  74. #define SG_ERR_CAT_SENSE 98     /* Something else is in the sense buffer */
  75. #define SG_ERR_CAT_OTHER 99     /* Some other error/warning has occurred */
  76. extern int sg_err_category(int target_status, int host_status,
  77.                int driver_status, const unsigned char * sense_buffer);
  78. /* Returns length of SCSI command given the opcode (first byte) */
  79. int sg_get_command_size(unsigned char opcode);
  80. #endif