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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  hosts.h Copyright (C) 1992 Drew Eckhardt
  3.  *          Copyright (C) 1993, 1994, 1995, 1998, 1999 Eric Youngdale
  4.  *
  5.  *  mid to low-level SCSI driver interface header
  6.  *      Initial versions: Drew Eckhardt
  7.  *      Subsequent revisions: Eric Youngdale
  8.  *
  9.  *  <drew@colorado.edu>
  10.  *
  11.  *  Modified by Eric Youngdale eric@andante.org to
  12.  *  add scatter-gather, multiple outstanding request, and other
  13.  *  enhancements.
  14.  *
  15.  *  Further modified by Eric Youngdale to support multiple host adapters
  16.  *  of the same type.
  17.  *
  18.  *  Jiffies wrap fixes (host->resetting), 3 Dec 1998 Andrea Arcangeli
  19.  */
  20. #ifndef _HOSTS_H
  21. #define _HOSTS_H
  22. /*
  23.     $Header: /vger/u4/cvs/linux/drivers/scsi/hosts.h,v 1.6 1997/01/19 23:07:13 davem Exp $
  24. */
  25. #include <linux/config.h>
  26. #include <linux/proc_fs.h>
  27. #include <linux/pci.h>
  28. /* It is senseless to set SG_ALL any higher than this - the performance
  29.  *  does not get any better, and it wastes memory
  30.  */
  31. #define SG_NONE 0
  32. #define SG_ALL 0xff
  33. #define DISABLE_CLUSTERING 0
  34. #define ENABLE_CLUSTERING 1
  35. /* The various choices mean:
  36.  * NONE: Self evident. Host adapter is not capable of scatter-gather.
  37.  * ALL:  Means that the host adapter module can do scatter-gather,
  38.  *  and that there is no limit to the size of the table to which
  39.  *  we scatter/gather data.
  40.  * Anything else:  Indicates the maximum number of chains that can be
  41.  *  used in one scatter-gather request.
  42.  */
  43. /*
  44.  * The Scsi_Host_Template type has all that is needed to interface with a SCSI
  45.  * host in a device independent matter.  There is one entry for each different
  46.  * type of host adapter that is supported on the system.
  47.  */
  48. typedef struct scsi_disk Disk;
  49. typedef struct SHT
  50. {
  51.     /* Used with loadable modules so we can construct a linked list. */
  52.     struct SHT * next;
  53.     /* Used with loadable modules so that we know when it is safe to unload */
  54.     struct module * module;
  55.     /* The pointer to the /proc/scsi directory entry */
  56.     struct proc_dir_entry *proc_dir;
  57.     /* proc-fs info function.
  58.      * Can be used to export driver statistics and other infos to the world
  59.      * outside the kernel ie. userspace and it also provides an interface
  60.      * to feed the driver with information. Check eata_dma_proc.c for reference
  61.      */
  62.     int (*proc_info)(char *, char **, off_t, int, int, int);
  63.     /*
  64.      * The name pointer is a pointer to the name of the SCSI
  65.      * device detected.
  66.      */
  67.     const char *name;
  68.     /*
  69.      * The detect function shall return non zero on detection,
  70.      * indicating the number of host adapters of this particular
  71.      * type were found.  It should also
  72.      * initialize all data necessary for this particular
  73.      * SCSI driver.  It is passed the host number, so this host
  74.      * knows where the first entry is in the scsi_hosts[] array.
  75.      *
  76.      * Note that the detect routine MUST not call any of the mid level
  77.      * functions to queue commands because things are not guaranteed
  78.      * to be set up yet.  The detect routine can send commands to
  79.      * the host adapter as long as the program control will not be
  80.      * passed to scsi.c in the processing of the command.  Note
  81.      * especially that scsi_malloc/scsi_free must not be called.
  82.      */
  83.     int (* detect)(struct SHT *);
  84.     int (*revoke)(Scsi_Device *);
  85.     /* Used with loadable modules to unload the host structures.  Note:
  86.      * there is a default action built into the modules code which may
  87.      * be sufficient for most host adapters.  Thus you may not have to supply
  88.      * this at all.
  89.      */
  90.     int (*release)(struct Scsi_Host *);
  91.     /*
  92.      * The info function will return whatever useful
  93.      * information the developer sees fit.  If not provided, then
  94.      * the name field will be used instead.
  95.      */
  96.     const char *(* info)(struct Scsi_Host *);
  97.     /*
  98.      * ioctl interface
  99.      */
  100.     int (*ioctl)(Scsi_Device *dev, int cmd, void *arg);
  101.     /*
  102.      * The command function takes a target, a command (this is a SCSI
  103.      * command formatted as per the SCSI spec, nothing strange), a
  104.      * data buffer pointer, and data buffer length pointer.  The return
  105.      * is a status int, bit fielded as follows :
  106.      * Byte What
  107.      * 0    SCSI status code
  108.      * 1    SCSI 1 byte message
  109.      * 2    host error return.
  110.      * 3    mid level error return
  111.      */
  112.     int (* command)(Scsi_Cmnd *);
  113.     /*
  114.      * The QueueCommand function works in a similar manner
  115.      * to the command function.  It takes an additional parameter,
  116.      * void (* done)(int host, int code) which is passed the host
  117.      * # and exit result when the command is complete.
  118.      * Host number is the POSITION IN THE hosts array of THIS
  119.      * host adapter.
  120.      *
  121.      * The done() function must only be called after QueueCommand() 
  122.      * has returned.
  123.      */
  124.     int (* queuecommand)(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
  125.     /*
  126.      * This is an error handling strategy routine.  You don't need to
  127.      * define one of these if you don't want to - there is a default
  128.      * routine that is present that should work in most cases.  For those
  129.      * driver authors that have the inclination and ability to write their
  130.      * own strategy routine, this is where it is specified.  Note - the
  131.      * strategy routine is *ALWAYS* run in the context of the kernel eh
  132.      * thread.  Thus you are guaranteed to *NOT* be in an interrupt handler
  133.      * when you execute this, and you are also guaranteed to *NOT* have any
  134.      * other commands being queued while you are in the strategy routine.
  135.      * When you return from this function, operations return to normal.
  136.      *
  137.      * See scsi_error.c scsi_unjam_host for additional comments about what
  138.      * this function should and should not be attempting to do.
  139.      */
  140.      int (*eh_strategy_handler)(struct Scsi_Host *);
  141.      int (*eh_abort_handler)(Scsi_Cmnd *);
  142.      int (*eh_device_reset_handler)(Scsi_Cmnd *);
  143.      int (*eh_bus_reset_handler)(Scsi_Cmnd *);
  144.      int (*eh_host_reset_handler)(Scsi_Cmnd *);
  145.     /*
  146.      * Since the mid level driver handles time outs, etc, we want to
  147.      * be able to abort the current command.  Abort returns 0 if the
  148.      * abortion was successful.  The field SCpnt->abort reason
  149.      * can be filled in with the appropriate reason why we wanted
  150.      * the abort in the first place, and this will be used
  151.      * in the mid-level code instead of the host_byte().
  152.      * If non-zero, the code passed to it
  153.      * will be used as the return code, otherwise
  154.      * DID_ABORT  should be returned.
  155.      *
  156.      * Note that the scsi driver should "clean up" after itself,
  157.      * resetting the bus, etc. if necessary.
  158.      *
  159.      * NOTE - this interface is depreciated, and will go away.  Use
  160.      * the eh_ routines instead.
  161.      */
  162.     int (* abort)(Scsi_Cmnd *);
  163.     /*
  164.      * The reset function will reset the SCSI bus.  Any executing
  165.      * commands should fail with a DID_RESET in the host byte.
  166.      * The Scsi_Cmnd  is passed so that the reset routine can figure
  167.      * out which host adapter should be reset, and also which command
  168.      * within the command block was responsible for the reset in
  169.      * the first place.  Some hosts do not implement a reset function,
  170.      * and these hosts must call scsi_request_sense(SCpnt) to keep
  171.      * the command alive.
  172.      *
  173.      * NOTE - this interface is depreciated, and will go away.  Use
  174.      * the eh_ routines instead.
  175.      */
  176.     int (* reset)(Scsi_Cmnd *, unsigned int);
  177.     /*
  178.      * This function is used to select synchronous communications,
  179.      * which will result in a higher data throughput.  Not implemented
  180.      * yet.
  181.      */
  182.     int (* slave_attach)(int, int);
  183.     /*
  184.      * This function determines the bios parameters for a given
  185.      * harddisk.  These tend to be numbers that are made up by
  186.      * the host adapter.  Parameters:
  187.      * size, device number, list (heads, sectors, cylinders)
  188.      */
  189.     int (* bios_param)(Disk *, kdev_t, int []);
  190.     /*
  191.      * Used to set the queue depth for a specific device.
  192.      */
  193.     void (*select_queue_depths)(struct Scsi_Host *, Scsi_Device *);
  194.     /*
  195.      * This determines if we will use a non-interrupt driven
  196.      * or an interrupt driven scheme,  It is set to the maximum number
  197.      * of simultaneous commands a given host adapter will accept.
  198.      */
  199.     int can_queue;
  200.     /*
  201.      * In many instances, especially where disconnect / reconnect are
  202.      * supported, our host also has an ID on the SCSI bus.  If this is
  203.      * the case, then it must be reserved.  Please set this_id to -1 if
  204.      * your setup is in single initiator mode, and the host lacks an
  205.      * ID.
  206.      */
  207.     int this_id;
  208.     /*
  209.      * This determines the degree to which the host adapter is capable
  210.      * of scatter-gather.
  211.      */
  212.     short unsigned int sg_tablesize;
  213.     /*
  214.      * if the host adapter has limitations beside segment count
  215.      */
  216.     short unsigned int max_sectors;
  217.     /*
  218.      * True if this host adapter can make good use of linked commands.
  219.      * This will allow more than one command to be queued to a given
  220.      * unit on a given host.  Set this to the maximum number of command
  221.      * blocks to be provided for each device.  Set this to 1 for one
  222.      * command block per lun, 2 for two, etc.  Do not set this to 0.
  223.      * You should make sure that the host adapter will do the right thing
  224.      * before you try setting this above 1.
  225.      */
  226.     short cmd_per_lun;
  227.     /*
  228.      * present contains counter indicating how many boards of this
  229.      * type were found when we did the scan.
  230.      */
  231.     unsigned char present;
  232.     /*
  233.      * true if this host adapter uses unchecked DMA onto an ISA bus.
  234.      */
  235.     unsigned unchecked_isa_dma:1;
  236.     /*
  237.      * true if this host adapter can make good use of clustering.
  238.      * I originally thought that if the tablesize was large that it
  239.      * was a waste of CPU cycles to prepare a cluster list, but
  240.      * it works out that the Buslogic is faster if you use a smaller
  241.      * number of segments (i.e. use clustering).  I guess it is
  242.      * inefficient.
  243.      */
  244.     unsigned use_clustering:1;
  245.     /*
  246.      * True if this driver uses the new error handling code.  This flag is
  247.      * really only temporary until all of the other drivers get converted
  248.      * to use the new error handling code.
  249.      */
  250.     unsigned use_new_eh_code:1;
  251.     /*
  252.      * True for emulated SCSI host adapters (e.g. ATAPI)
  253.      */
  254.     unsigned emulated:1;
  255.     /*
  256.      * Name of proc directory
  257.      */
  258.     char *proc_name;
  259. } Scsi_Host_Template;
  260. /*
  261.  * The scsi_hosts array is the array containing the data for all
  262.  * possible <supported> scsi hosts.   This is similar to the
  263.  * Scsi_Host_Template, except that we have one entry for each
  264.  * actual physical host adapter on the system, stored as a linked
  265.  * list.  Note that if there are 2 aha1542 boards, then there will
  266.  * be two Scsi_Host entries, but only 1 Scsi_Host_Template entry.
  267.  */
  268. struct Scsi_Host
  269. {
  270. /* private: */
  271.     /*
  272.      * This information is private to the scsi mid-layer.  Wrapping it in a
  273.      * struct private is a way of marking it in a sort of C++ type of way.
  274.      */
  275.     struct Scsi_Host      * next;
  276.     Scsi_Device           * host_queue;
  277.     struct task_struct    * ehandler;  /* Error recovery thread. */
  278.     struct semaphore      * eh_wait;   /* The error recovery thread waits on
  279.                                           this. */
  280.     struct semaphore      * eh_notify; /* wait for eh to begin */
  281.     struct semaphore      * eh_action; /* Wait for specific actions on the
  282.                                           host. */
  283.     unsigned int            eh_active:1; /* Indicates the eh thread is awake and active if
  284.                                           this is true. */
  285.     wait_queue_head_t       host_wait;
  286.     Scsi_Host_Template    * hostt;
  287.     atomic_t                host_active; /* commands checked out */
  288.     volatile unsigned short host_busy;   /* commands actually active on low-level */
  289.     volatile unsigned short host_failed; /* commands that failed. */
  290.     
  291. /* public: */
  292.     unsigned short extra_bytes;
  293.     unsigned short host_no;  /* Used for IOCTL_GET_IDLUN, /proc/scsi et al. */
  294.     int resetting; /* if set, it means that last_reset is a valid value */
  295.     unsigned long last_reset;
  296.     /*
  297.      * These three parameters can be used to allow for wide scsi,
  298.      * and for host adapters that support multiple busses
  299.      * The first two should be set to 1 more than the actual max id
  300.      * or lun (i.e. 8 for normal systems).
  301.      */
  302.     unsigned int max_id;
  303.     unsigned int max_lun;
  304.     unsigned int max_channel;
  305.     /* These parameters should be set by the detect routine */
  306.     unsigned long base;
  307.     unsigned long io_port;
  308.     unsigned char n_io_port;
  309.     unsigned char dma_channel;
  310.     unsigned int  irq;
  311.     /*
  312.      * This is a unique identifier that must be assigned so that we
  313.      * have some way of identifying each detected host adapter properly
  314.      * and uniquely.  For hosts that do not support more than one card
  315.      * in the system at one time, this does not need to be set.  It is
  316.      * initialized to 0 in scsi_register.
  317.      */
  318.     unsigned int unique_id;
  319.     /*
  320.      * The rest can be copied from the template, or specifically
  321.      * initialized, as required.
  322.      */
  323.     /*
  324.      * The maximum length of SCSI commands that this host can accept.
  325.      * Probably 12 for most host adapters, but could be 16 for others.
  326.      * For drivers that don't set this field, a value of 12 is
  327.      * assumed.  I am leaving this as a number rather than a bit
  328.      * because you never know what subsequent SCSI standards might do
  329.      * (i.e. could there be a 20 byte or a 24-byte command a few years
  330.      * down the road?).  
  331.      */
  332.     unsigned char max_cmd_len;
  333.     int this_id;
  334.     int can_queue;
  335.     short cmd_per_lun;
  336.     short unsigned int sg_tablesize;
  337.     short unsigned int max_sectors;
  338.     unsigned in_recovery:1;
  339.     unsigned unchecked_isa_dma:1;
  340.     unsigned use_clustering:1;
  341.     /*
  342.      * True if this host was loaded as a loadable module
  343.      */
  344.     unsigned loaded_as_module:1;
  345.     /*
  346.      * Host has rejected a command because it was busy.
  347.      */
  348.     unsigned host_blocked:1;
  349.     /*
  350.      * Host has requested that no further requests come through for the
  351.      * time being.
  352.      */
  353.     unsigned host_self_blocked:1;
  354.     
  355.     /*
  356.      * Host uses correct SCSI ordering not PC ordering. The bit is
  357.      * set for the minority of drivers whose authors actually read the spec ;)
  358.      */
  359.     unsigned reverse_ordering:1;
  360.     /*
  361.      * Indicates that one or more devices on this host were starved, and
  362.      * when the device becomes less busy that we need to feed them.
  363.      */
  364.     unsigned some_device_starved:1;
  365.    
  366.     void (*select_queue_depths)(struct Scsi_Host *, Scsi_Device *);
  367.     /*
  368.      * For SCSI hosts which are PCI devices, set pci_dev so that
  369.      * we can do BIOS EDD 3.0 mappings
  370.      */
  371.     struct pci_dev *pci_dev;
  372.     /*
  373.      * We should ensure that this is aligned, both for better performance
  374.      * and also because some compilers (m68k) don't automatically force
  375.      * alignment to a long boundary.
  376.      */
  377.     unsigned long hostdata[0]  /* Used for storage of host specific stuff */
  378.         __attribute__ ((aligned (sizeof(unsigned long))));
  379. };
  380. /*
  381.  * These two functions are used to allocate and free a pseudo device
  382.  * which will connect to the host adapter itself rather than any
  383.  * physical device.  You must deallocate when you are done with the
  384.  * thing.  This physical pseudo-device isn't real and won't be available
  385.  * from any high-level drivers.
  386.  */
  387. extern void scsi_free_host_dev(Scsi_Device * SDpnt);
  388. extern Scsi_Device * scsi_get_host_dev(struct Scsi_Host * SHpnt);
  389. extern void scsi_unblock_requests(struct Scsi_Host * SHpnt);
  390. extern void scsi_block_requests(struct Scsi_Host * SHpnt);
  391. extern void scsi_report_bus_reset(struct Scsi_Host * SHpnt, int channel);
  392. typedef struct SHN
  393.     {
  394.     struct SHN * next;
  395.     char * name;
  396.     unsigned short host_no;
  397.     unsigned short host_registered;
  398.     unsigned loaded_as_module;
  399.     } Scsi_Host_Name;
  400. extern Scsi_Host_Name * scsi_host_no_list;
  401. extern struct Scsi_Host * scsi_hostlist;
  402. extern struct Scsi_Device_Template * scsi_devicelist;
  403. extern Scsi_Host_Template * scsi_hosts;
  404. extern void build_proc_dir_entries(Scsi_Host_Template  *);
  405. /*
  406.  *  scsi_init initializes the scsi hosts.
  407.  */
  408. extern int next_scsi_host;
  409. unsigned int scsi_init(void);
  410. extern struct Scsi_Host * scsi_register(Scsi_Host_Template *, int j);
  411. extern void scsi_unregister(struct Scsi_Host * i);
  412. extern void scsi_register_blocked_host(struct Scsi_Host * SHpnt);
  413. extern void scsi_deregister_blocked_host(struct Scsi_Host * SHpnt);
  414. static inline void scsi_set_pci_device(struct Scsi_Host *SHpnt,
  415.                                        struct pci_dev *pdev)
  416. {
  417. SHpnt->pci_dev = pdev;
  418. }
  419. /*
  420.  * Prototypes for functions/data in scsi_scan.c
  421.  */
  422. extern void scan_scsis(struct Scsi_Host *shpnt,
  423.        uint hardcoded,
  424.        uint hchannel,
  425.        uint hid,
  426.                        uint hlun);
  427. extern void scsi_mark_host_reset(struct Scsi_Host *Host);
  428. #define BLANK_HOST {"", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
  429. struct Scsi_Device_Template
  430. {
  431.     struct Scsi_Device_Template * next;
  432.     const char * name;
  433.     const char * tag;
  434.     struct module * module;   /* Used for loadable modules */
  435.     unsigned char scsi_type;
  436.     unsigned int major;
  437.     unsigned int min_major;      /* Minimum major in range. */ 
  438.     unsigned int max_major;      /* Maximum major in range. */
  439.     unsigned int nr_dev;   /* Number currently attached */
  440.     unsigned int dev_noticed;   /* Number of devices detected. */
  441.     unsigned int dev_max;   /* Current size of arrays */
  442.     unsigned blk:1;   /* 0 if character device */
  443.     int (*detect)(Scsi_Device *); /* Returns 1 if we can attach this device */
  444.     int (*init)(void);   /* Sizes arrays based upon number of devices
  445.    *  detected */
  446.     void (*finish)(void);   /* Perform initialization after attachment */
  447.     int (*attach)(Scsi_Device *); /* Attach devices to arrays */
  448.     void (*detach)(Scsi_Device *);
  449.     int (*init_command)(Scsi_Cmnd *);     /* Used by new queueing code. 
  450.                                            Selects command for blkdevs */
  451. };
  452. void  scsi_initialize_queue(Scsi_Device * SDpnt, struct Scsi_Host * SHpnt);
  453. int scsi_register_device(struct Scsi_Device_Template * sdpnt);
  454. void scsi_deregister_device(struct Scsi_Device_Template * tpnt);
  455. /* These are used by loadable modules */
  456. extern int scsi_register_module(int, void *);
  457. extern int scsi_unregister_module(int, void *);
  458. /* The different types of modules that we can load and unload */
  459. #define MODULE_SCSI_HA 1
  460. #define MODULE_SCSI_CONST 2
  461. #define MODULE_SCSI_IOCTL 3
  462. #define MODULE_SCSI_DEV 4
  463. /*
  464.  * This is an ugly hack.  If we expect to be able to load devices at run time,
  465.  * we need to leave extra room in some of the data structures. Doing a
  466.  * realloc to enlarge the structures would be riddled with race conditions,
  467.  * so until a better solution is discovered, we use this crude approach
  468.  *
  469.  * Even bigger hack for SparcSTORAGE arrays. Those are at least 6 disks, but
  470.  * usually up to 30 disks, so everyone would need to change this. -jj
  471.  *
  472.  * Note: These things are all evil and all need to go away.  My plan is to
  473.  * tackle the character devices first, as there aren't any locking implications
  474.  * in the block device layer.   The block devices will require more work.
  475.  *
  476.  * The generics driver has been updated to resize as required.  So as the tape
  477.  * driver. Two down, two more to go.
  478.  */
  479. #ifndef CONFIG_SD_EXTRA_DEVS
  480. #define CONFIG_SD_EXTRA_DEVS 2
  481. #endif
  482. #ifndef CONFIG_SR_EXTRA_DEVS
  483. #define CONFIG_SR_EXTRA_DEVS 2
  484. #endif
  485. #define SD_EXTRA_DEVS CONFIG_SD_EXTRA_DEVS
  486. #define SR_EXTRA_DEVS CONFIG_SR_EXTRA_DEVS
  487. #endif
  488. /*
  489.  * Overrides for Emacs so that we follow Linus's tabbing style.
  490.  * Emacs will notice this stuff at the end of the file and automatically
  491.  * adjust the settings for this buffer only.  This must remain at the end
  492.  * of the file.
  493.  * ---------------------------------------------------------------------------
  494.  * Local variables:
  495.  * c-indent-level: 4
  496.  * c-brace-imaginary-offset: 0
  497.  * c-brace-offset: -4
  498.  * c-argdecl-indent: 4
  499.  * c-label-offset: -4
  500.  * c-continued-statement-offset: 4
  501.  * c-continued-brace-offset: 0
  502.  * indent-tabs-mode: nil
  503.  * tab-width: 8
  504.  * End:
  505.  */