hpusbscsi.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:3k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* Header file for the hpusbscsi driver */
  2. /* (C) Copyright 2001 Oliver Neukum */
  3. /* sponsored by the Linux Usb Project */
  4. /* large parts based on or taken from code by John Fremlin and Matt Dharm */
  5. /* this file is licensed under the GPL */
  6. typedef void (*usb_urb_callback) (struct urb *);
  7. typedef void (*scsi_callback)(Scsi_Cmnd *);
  8. struct hpusbscsi
  9. {
  10.         struct list_head lh;
  11.         struct usb_device *dev; /* NULL indicates unplugged device */
  12.         int ep_out;
  13.         int ep_in;
  14.         int ep_int;
  15.         int interrupt_interval;
  16.         struct Scsi_Host *host;
  17.         Scsi_Host_Template ctempl;
  18.         int number;
  19.        scsi_callback scallback;
  20.        Scsi_Cmnd *srb;
  21.         int use_count;
  22.         wait_queue_head_t pending;
  23.         wait_queue_head_t deathrow;
  24.         struct urb dataurb;
  25.         struct urb controlurb;
  26.         int fragment;
  27.         int state;
  28.         int current_data_pipe;
  29.         u8 scsi_state_byte;
  30. };
  31. #define SCSI_ERR_MASK ~0x3fu
  32. static const unsigned char scsi_command_direction[256/8] = {
  33. 0x28, 0x81, 0x14, 0x14, 0x20, 0x01, 0x90, 0x77,
  34. 0x0C, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
  35. 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01,
  36. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  37. };
  38. #define DIRECTION_IS_IN(x) ((scsi_command_direction[x>>3] >> (x & 7)) & 1)
  39. static int hpusbscsi_scsi_detect (struct SHT * sht);
  40. static void simple_command_callback(struct urb *u);
  41. static void scatter_gather_callback(struct urb *u);
  42. static void simple_payload_callback (struct urb *u);
  43. static void  control_interrupt_callback (struct urb *u);
  44. static void simple_done (struct urb *u);
  45. static int hpusbscsi_scsi_queuecommand (Scsi_Cmnd *srb, scsi_callback callback);
  46. static int hpusbscsi_scsi_host_reset (Scsi_Cmnd *srb);
  47. static int hpusbscsi_scsi_abort (Scsi_Cmnd *srb);
  48. static Scsi_Host_Template hpusbscsi_scsi_host_template = {
  49. name:           "hpusbscsi",
  50. detect: hpusbscsi_scsi_detect,
  51. // release: hpusbscsi_scsi_release,
  52. queuecommand: hpusbscsi_scsi_queuecommand,
  53. eh_abort_handler: hpusbscsi_scsi_abort,
  54. eh_host_reset_handler: hpusbscsi_scsi_host_reset,
  55. sg_tablesize: SG_ALL,
  56. can_queue: 1,
  57. this_id: -1,
  58. cmd_per_lun: 1,
  59. present: 0,
  60. unchecked_isa_dma: FALSE,
  61. use_clustering: TRUE,
  62. use_new_eh_code: TRUE,
  63. emulated: TRUE
  64. };
  65. /* defines for internal driver state */
  66. #define HP_STATE_FREE                 0  /*ready for next request */
  67. #define HP_STATE_BEGINNING      1  /*command being transfered */
  68. #define HP_STATE_WORKING         2  /* data transfer stage */
  69. #define HP_STATE_ERROR             3  /* error has been reported */
  70. #define HP_STATE_WAIT                 4  /* waiting for status transfer */
  71. #define HP_STATE_PREMATURE              5 /* status prematurely reported */