home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / scsi / scsi_host.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  21.0 KB  |  681 lines

  1. #ifndef _SCSI_SCSI_HOST_H
  2. #define _SCSI_SCSI_HOST_H
  3.  
  4. #include <linux/device.h>
  5. #include <linux/list.h>
  6. #include <linux/types.h>
  7. #include <linux/workqueue.h>
  8. #include <linux/mutex.h>
  9.  
  10. struct block_device;
  11. struct completion;
  12. struct module;
  13. struct scsi_cmnd;
  14. struct scsi_device;
  15. struct scsi_target;
  16. struct Scsi_Host;
  17. struct scsi_host_cmd_pool;
  18. struct scsi_transport_template;
  19.  
  20.  
  21. /*
  22.  * The various choices mean:
  23.  * NONE: Self evident.    Host adapter is not capable of scatter-gather.
  24.  * ALL:     Means that the host adapter module can do scatter-gather,
  25.  *     and that there is no limit to the size of the table to which
  26.  *     we scatter/gather data.
  27.  * Anything else:  Indicates the maximum number of chains that can be
  28.  *     used in one scatter-gather request.
  29.  */
  30. #define SG_NONE 0
  31. #define SG_ALL 0xff
  32.  
  33.  
  34. #define DISABLE_CLUSTERING 0
  35. #define ENABLE_CLUSTERING 1
  36.  
  37. enum scsi_eh_timer_return {
  38.     EH_NOT_HANDLED,
  39.     EH_HANDLED,
  40.     EH_RESET_TIMER,
  41. };
  42.  
  43.  
  44. struct scsi_host_template {
  45.     struct module *module;
  46.     const char *name;
  47.  
  48.     /*
  49.      * Used to initialize old-style drivers.  For new-style drivers
  50.      * just perform all work in your module initialization function.
  51.      *
  52.      * Status:  OBSOLETE
  53.      */
  54.     int (* detect)(struct scsi_host_template *);
  55.  
  56.     /*
  57.      * Used as unload callback for hosts with old-style drivers.
  58.      *
  59.      * Status: OBSOLETE
  60.      */
  61.     int (* release)(struct Scsi_Host *);
  62.  
  63.     /*
  64.      * The info function will return whatever useful information the
  65.      * developer sees fit.  If not provided, then the name field will
  66.      * be used instead.
  67.      *
  68.      * Status: OPTIONAL
  69.      */
  70.     const char *(* info)(struct Scsi_Host *);
  71.  
  72.     /*
  73.      * Ioctl interface
  74.      *
  75.      * Status: OPTIONAL
  76.      */
  77.     int (* ioctl)(struct scsi_device *dev, int cmd, void __user *arg);
  78.  
  79.  
  80. #ifdef CONFIG_COMPAT
  81.     /* 
  82.      * Compat handler. Handle 32bit ABI.
  83.      * When unknown ioctl is passed return -ENOIOCTLCMD.
  84.      *
  85.      * Status: OPTIONAL
  86.      */
  87.     int (* compat_ioctl)(struct scsi_device *dev, int cmd, void __user *arg);
  88. #endif
  89.  
  90.     /*
  91.      * The queuecommand function is used to queue up a scsi
  92.      * command block to the LLDD.  When the driver finished
  93.      * processing the command the done callback is invoked.
  94.      *
  95.      * If queuecommand returns 0, then the HBA has accepted the
  96.      * command.  The done() function must be called on the command
  97.      * when the driver has finished with it. (you may call done on the
  98.      * command before queuecommand returns, but in this case you
  99.      * *must* return 0 from queuecommand).
  100.      *
  101.      * Queuecommand may also reject the command, in which case it may
  102.      * not touch the command and must not call done() for it.
  103.      *
  104.      * There are two possible rejection returns:
  105.      *
  106.      *   SCSI_MLQUEUE_DEVICE_BUSY: Block this device temporarily, but
  107.      *   allow commands to other devices serviced by this host.
  108.      *
  109.      *   SCSI_MLQUEUE_HOST_BUSY: Block all devices served by this
  110.      *   host temporarily.
  111.      *
  112.          * For compatibility, any other non-zero return is treated the
  113.          * same as SCSI_MLQUEUE_HOST_BUSY.
  114.      *
  115.      * NOTE: "temporarily" means either until the next command for#
  116.      * this device/host completes, or a period of time determined by
  117.      * I/O pressure in the system if there are no other outstanding
  118.      * commands.
  119.      *
  120.      * STATUS: REQUIRED
  121.      */
  122.     int (* queuecommand)(struct scsi_cmnd *,
  123.                  void (*done)(struct scsi_cmnd *));
  124.  
  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
  133.      * handler when you execute this, and you are also guaranteed to
  134.      * *NOT* have any other commands being queued while you are in the
  135.      * strategy routine. When you return from this function, operations
  136.      * return to normal.
  137.      *
  138.      * See scsi_error.c scsi_unjam_host for additional comments about
  139.      * what this function should and should not be attempting to do.
  140.      *
  141.      * Status: REQUIRED    (at least one of them)
  142.      */
  143.     int (* eh_abort_handler)(struct scsi_cmnd *);
  144.     int (* eh_device_reset_handler)(struct scsi_cmnd *);
  145.     int (* eh_bus_reset_handler)(struct scsi_cmnd *);
  146.     int (* eh_host_reset_handler)(struct scsi_cmnd *);
  147.  
  148.     /*
  149.      * Before the mid layer attempts to scan for a new device where none
  150.      * currently exists, it will call this entry in your driver.  Should
  151.      * your driver need to allocate any structs or perform any other init
  152.      * items in order to send commands to a currently unused target/lun
  153.      * combo, then this is where you can perform those allocations.  This
  154.      * is specifically so that drivers won't have to perform any kind of
  155.      * "is this a new device" checks in their queuecommand routine,
  156.      * thereby making the hot path a bit quicker.
  157.      *
  158.      * Return values: 0 on success, non-0 on failure
  159.      *
  160.      * Deallocation:  If we didn't find any devices at this ID, you will
  161.      * get an immediate call to slave_destroy().  If we find something
  162.      * here then you will get a call to slave_configure(), then the
  163.      * device will be used for however long it is kept around, then when
  164.      * the device is removed from the system (or * possibly at reboot
  165.      * time), you will then get a call to slave_destroy().  This is
  166.      * assuming you implement slave_configure and slave_destroy.
  167.      * However, if you allocate memory and hang it off the device struct,
  168.      * then you must implement the slave_destroy() routine at a minimum
  169.      * in order to avoid leaking memory
  170.      * each time a device is tore down.
  171.      *
  172.      * Status: OPTIONAL
  173.      */
  174.     int (* slave_alloc)(struct scsi_device *);
  175.  
  176.     /*
  177.      * Once the device has responded to an INQUIRY and we know the
  178.      * device is online, we call into the low level driver with the
  179.      * struct scsi_device *.  If the low level device driver implements
  180.      * this function, it *must* perform the task of setting the queue
  181.      * depth on the device.  All other tasks are optional and depend
  182.      * on what the driver supports and various implementation details.
  183.      * 
  184.      * Things currently recommended to be handled at this time include:
  185.      *
  186.      * 1.  Setting the device queue depth.  Proper setting of this is
  187.      *     described in the comments for scsi_adjust_queue_depth.
  188.      * 2.  Determining if the device supports the various synchronous
  189.      *     negotiation protocols.  The device struct will already have
  190.      *     responded to INQUIRY and the results of the standard items
  191.      *     will have been shoved into the various device flag bits, eg.
  192.      *     device->sdtr will be true if the device supports SDTR messages.
  193.      * 3.  Allocating command structs that the device will need.
  194.      * 4.  Setting the default timeout on this device (if needed).
  195.      * 5.  Anything else the low level driver might want to do on a device
  196.      *     specific setup basis...
  197.      * 6.  Return 0 on success, non-0 on error.  The device will be marked
  198.      *     as offline on error so that no access will occur.  If you return
  199.      *     non-0, your slave_destroy routine will never get called for this
  200.      *     device, so don't leave any loose memory hanging around, clean
  201.      *     up after yourself before returning non-0
  202.      *
  203.      * Status: OPTIONAL
  204.      */
  205.     int (* slave_configure)(struct scsi_device *);
  206.  
  207.     /*
  208.      * Immediately prior to deallocating the device and after all activity
  209.      * has ceased the mid layer calls this point so that the low level
  210.      * driver may completely detach itself from the scsi device and vice
  211.      * versa.  The low level driver is responsible for freeing any memory
  212.      * it allocated in the slave_alloc or slave_configure calls. 
  213.      *
  214.      * Status: OPTIONAL
  215.      */
  216.     void (* slave_destroy)(struct scsi_device *);
  217.  
  218.     /*
  219.      * Before the mid layer attempts to scan for a new device attached
  220.      * to a target where no target currently exists, it will call this
  221.      * entry in your driver.  Should your driver need to allocate any
  222.      * structs or perform any other init items in order to send commands
  223.      * to a currently unused target, then this is where you can perform
  224.      * those allocations.
  225.      *
  226.      * Return values: 0 on success, non-0 on failure
  227.      *
  228.      * Status: OPTIONAL
  229.      */
  230.     int (* target_alloc)(struct scsi_target *);
  231.  
  232.     /*
  233.      * Immediately prior to deallocating the target structure, and
  234.      * after all activity to attached scsi devices has ceased, the
  235.      * midlayer calls this point so that the driver may deallocate
  236.      * and terminate any references to the target.
  237.      *
  238.      * Status: OPTIONAL
  239.      */
  240.     void (* target_destroy)(struct scsi_target *);
  241.  
  242.     /*
  243.      * fill in this function to allow the queue depth of this host
  244.      * to be changeable (on a per device basis).  returns either
  245.      * the current queue depth setting (may be different from what
  246.      * was passed in) or an error.  An error should only be
  247.      * returned if the requested depth is legal but the driver was
  248.      * unable to set it.  If the requested depth is illegal, the
  249.      * driver should set and return the closest legal queue depth.
  250.      *
  251.      */
  252.     int (* change_queue_depth)(struct scsi_device *, int);
  253.  
  254.     /*
  255.      * fill in this function to allow the changing of tag types
  256.      * (this also allows the enabling/disabling of tag command
  257.      * queueing).  An error should only be returned if something
  258.      * went wrong in the driver while trying to set the tag type.
  259.      * If the driver doesn't support the requested tag type, then
  260.      * it should set the closest type it does support without
  261.      * returning an error.  Returns the actual tag type set.
  262.      */
  263.     int (* change_queue_type)(struct scsi_device *, int);
  264.  
  265.     /*
  266.      * This function determines the bios parameters for a given
  267.      * harddisk.  These tend to be numbers that are made up by
  268.      * the host adapter.  Parameters:
  269.      * size, device, list (heads, sectors, cylinders)
  270.      *
  271.      * Status: OPTIONAL */
  272.     int (* bios_param)(struct scsi_device *, struct block_device *,
  273.             sector_t, int []);
  274.  
  275.     /*
  276.      * Can be used to export driver statistics and other infos to the
  277.      * world outside the kernel ie. userspace and it also provides an
  278.      * interface to feed the driver with information.
  279.      *
  280.      * Status: OBSOLETE
  281.      */
  282.     int (*proc_info)(struct Scsi_Host *, char *, char **, off_t, int, int);
  283.  
  284.     /*
  285.      * suspend support
  286.      */
  287.     int (*resume)(struct scsi_device *);
  288.     int (*suspend)(struct scsi_device *, pm_message_t state);
  289.  
  290.     /*
  291.      * Name of proc directory
  292.      */
  293.     char *proc_name;
  294.  
  295.     /*
  296.      * Used to store the procfs directory if a driver implements the
  297.      * proc_info method.
  298.      */
  299.     struct proc_dir_entry *proc_dir;
  300.  
  301.     /*
  302.      * This determines if we will use a non-interrupt driven
  303.      * or an interrupt driven scheme,  It is set to the maximum number
  304.      * of simultaneous commands a given host adapter will accept.
  305.      */
  306.     int can_queue;
  307.  
  308.     /*
  309.      * In many instances, especially where disconnect / reconnect are
  310.      * supported, our host also has an ID on the SCSI bus.  If this is
  311.      * the case, then it must be reserved.  Please set this_id to -1 if
  312.      * your setup is in single initiator mode, and the host lacks an
  313.      * ID.
  314.      */
  315.     int this_id;
  316.  
  317.     /*
  318.      * This determines the degree to which the host adapter is capable
  319.      * of scatter-gather.
  320.      */
  321.     unsigned short sg_tablesize;
  322.  
  323.     /*
  324.      * If the host adapter has limitations beside segment count
  325.      */
  326.     unsigned short max_sectors;
  327.  
  328.     /*
  329.      * dma scatter gather segment boundary limit. a segment crossing this
  330.      * boundary will be split in two.
  331.      */
  332.     unsigned long dma_boundary;
  333.  
  334.     /*
  335.      * This specifies "machine infinity" for host templates which don't
  336.      * limit the transfer size.  Note this limit represents an absolute
  337.      * maximum, and may be over the transfer limits allowed for
  338.      * individual devices (e.g. 256 for SCSI-1)
  339.      */
  340. #define SCSI_DEFAULT_MAX_SECTORS    1024
  341.  
  342.     /*
  343.      * True if this host adapter can make good use of linked commands.
  344.      * This will allow more than one command to be queued to a given
  345.      * unit on a given host.  Set this to the maximum number of command
  346.      * blocks to be provided for each device.  Set this to 1 for one
  347.      * command block per lun, 2 for two, etc.  Do not set this to 0.
  348.      * You should make sure that the host adapter will do the right thing
  349.      * before you try setting this above 1.
  350.      */
  351.     short cmd_per_lun;
  352.  
  353.     /*
  354.      * present contains counter indicating how many boards of this
  355.      * type were found when we did the scan.
  356.      */
  357.     unsigned char present;
  358.  
  359.     /*
  360.      * true if this host adapter uses unchecked DMA onto an ISA bus.
  361.      */
  362.     unsigned unchecked_isa_dma:1;
  363.  
  364.     /*
  365.      * true if this host adapter can make good use of clustering.
  366.      * I originally thought that if the tablesize was large that it
  367.      * was a waste of CPU cycles to prepare a cluster list, but
  368.      * it works out that the Buslogic is faster if you use a smaller
  369.      * number of segments (i.e. use clustering).  I guess it is
  370.      * inefficient.
  371.      */
  372.     unsigned use_clustering:1;
  373.  
  374.     /*
  375.      * True for emulated SCSI host adapters (e.g. ATAPI)
  376.      */
  377.     unsigned emulated:1;
  378.  
  379.     /*
  380.      * True if the low-level driver performs its own reset-settle delays.
  381.      */
  382.     unsigned skip_settle_delay:1;
  383.  
  384.     /*
  385.      * ordered write support
  386.      */
  387.     unsigned ordered_tag:1;
  388.  
  389.     /*
  390.      * Countdown for host blocking with no commands outstanding
  391.      */
  392.     unsigned int max_host_blocked;
  393.  
  394.     /*
  395.      * Default value for the blocking.  If the queue is empty,
  396.      * host_blocked counts down in the request_fn until it restarts
  397.      * host operations as zero is reached.  
  398.      *
  399.      * FIXME: This should probably be a value in the template
  400.      */
  401. #define SCSI_DEFAULT_HOST_BLOCKED    7
  402.  
  403.     /*
  404.      * Pointer to the sysfs class properties for this host, NULL terminated.
  405.      */
  406.     struct class_device_attribute **shost_attrs;
  407.  
  408.     /*
  409.      * Pointer to the SCSI device properties for this host, NULL terminated.
  410.      */
  411.     struct device_attribute **sdev_attrs;
  412.  
  413.     /*
  414.      * List of hosts per template.
  415.      *
  416.      * This is only for use by scsi_module.c for legacy templates.
  417.      * For these access to it is synchronized implicitly by
  418.      * module_init/module_exit.
  419.      */
  420.     struct list_head legacy_hosts;
  421. };
  422.  
  423. /*
  424.  * shost state: If you alter this, you also need to alter scsi_sysfs.c
  425.  * (for the ascii descriptions) and the state model enforcer:
  426.  * scsi_host_set_state()
  427.  */
  428. enum scsi_host_state {
  429.     SHOST_CREATED = 1,
  430.     SHOST_RUNNING,
  431.     SHOST_CANCEL,
  432.     SHOST_DEL,
  433.     SHOST_RECOVERY,
  434.     SHOST_CANCEL_RECOVERY,
  435.     SHOST_DEL_RECOVERY,
  436. };
  437.  
  438. struct Scsi_Host {
  439.     /*
  440.      * __devices is protected by the host_lock, but you should
  441.      * usually use scsi_device_lookup / shost_for_each_device
  442.      * to access it and don't care about locking yourself.
  443.      * In the rare case of beeing in irq context you can use
  444.      * their __ prefixed variants with the lock held. NEVER
  445.      * access this list directly from a driver.
  446.      */
  447.     struct list_head    __devices;
  448.     struct list_head    __targets;
  449.     
  450.     struct scsi_host_cmd_pool *cmd_pool;
  451.     spinlock_t        free_list_lock;
  452.     struct list_head    free_list; /* backup store of cmd structs */
  453.     struct list_head    starved_list;
  454.  
  455.     spinlock_t        default_lock;
  456.     spinlock_t        *host_lock;
  457.  
  458.     struct mutex        scan_mutex;/* serialize scanning activity */
  459.  
  460.     struct list_head    eh_cmd_q;
  461.     struct task_struct    * ehandler;  /* Error recovery thread. */
  462.     struct completion     * eh_action; /* Wait for specific actions on the
  463.                           host. */
  464.     wait_queue_head_t       host_wait;
  465.     struct scsi_host_template *hostt;
  466.     struct scsi_transport_template *transportt;
  467.  
  468.     /*
  469.      * The following two fields are protected with host_lock;
  470.      * however, eh routines can safely access during eh processing
  471.      * without acquiring the lock.
  472.      */
  473.     unsigned int host_busy;           /* commands actually active on low-level */
  474.     unsigned int host_failed;       /* commands that failed. */
  475.     
  476.     unsigned short host_no;  /* Used for IOCTL_GET_IDLUN, /proc/scsi et al. */
  477.     int resetting; /* if set, it means that last_reset is a valid value */
  478.     unsigned long last_reset;
  479.  
  480.     /*
  481.      * These three parameters can be used to allow for wide scsi,
  482.      * and for host adapters that support multiple busses
  483.      * The first two should be set to 1 more than the actual max id
  484.      * or lun (i.e. 8 for normal systems).
  485.      */
  486.     unsigned int max_id;
  487.     unsigned int max_lun;
  488.     unsigned int max_channel;
  489.  
  490.     /*
  491.      * This is a unique identifier that must be assigned so that we
  492.      * have some way of identifying each detected host adapter properly
  493.      * and uniquely.  For hosts that do not support more than one card
  494.      * in the system at one time, this does not need to be set.  It is
  495.      * initialized to 0 in scsi_register.
  496.      */
  497.     unsigned int unique_id;
  498.  
  499.     /*
  500.      * The maximum length of SCSI commands that this host can accept.
  501.      * Probably 12 for most host adapters, but could be 16 for others.
  502.      * For drivers that don't set this field, a value of 12 is
  503.      * assumed.  I am leaving this as a number rather than a bit
  504.      * because you never know what subsequent SCSI standards might do
  505.      * (i.e. could there be a 20 byte or a 24-byte command a few years
  506.      * down the road?).  
  507.      */
  508.     unsigned char max_cmd_len;
  509.  
  510.     int this_id;
  511.     int can_queue;
  512.     short cmd_per_lun;
  513.     short unsigned int sg_tablesize;
  514.     short unsigned int max_sectors;
  515.     unsigned long dma_boundary;
  516.     /* 
  517.      * Used to assign serial numbers to the cmds.
  518.      * Protected by the host lock.
  519.      */
  520.     unsigned long cmd_serial_number, cmd_pid; 
  521.     
  522.     unsigned unchecked_isa_dma:1;
  523.     unsigned use_clustering:1;
  524.     unsigned use_blk_tcq:1;
  525.  
  526.     /*
  527.      * Host has requested that no further requests come through for the
  528.      * time being.
  529.      */
  530.     unsigned host_self_blocked:1;
  531.     
  532.     /*
  533.      * Host uses correct SCSI ordering not PC ordering. The bit is
  534.      * set for the minority of drivers whose authors actually read
  535.      * the spec ;)
  536.      */
  537.     unsigned reverse_ordering:1;
  538.  
  539.     /*
  540.      * ordered write support
  541.      */
  542.     unsigned ordered_tag:1;
  543.  
  544.     /* Are we currently performing an async scan? */
  545.     unsigned async_scan:1;
  546.  
  547.     /*
  548.      * Optional work queue to be utilized by the transport
  549.      */
  550.     char work_q_name[KOBJ_NAME_LEN];
  551.     struct workqueue_struct *work_q;
  552.  
  553.     /*
  554.      * Host has rejected a command because it was busy.
  555.      */
  556.     unsigned int host_blocked;
  557.  
  558.     /*
  559.      * Value host_blocked counts down from
  560.      */
  561.     unsigned int max_host_blocked;
  562.  
  563.     /* legacy crap */
  564.     unsigned long base;
  565.     unsigned long io_port;
  566.     unsigned char n_io_port;
  567.     unsigned char dma_channel;
  568.     unsigned int  irq;
  569.     
  570.  
  571.     enum scsi_host_state shost_state;
  572.  
  573.     /* ldm bits */
  574.     struct device        shost_gendev;
  575.     struct class_device    shost_classdev;
  576.  
  577.     /*
  578.      * List of hosts per template.
  579.      *
  580.      * This is only for use by scsi_module.c for legacy templates.
  581.      * For these access to it is synchronized implicitly by
  582.      * module_init/module_exit.
  583.      */
  584.     struct list_head sht_legacy_list;
  585.  
  586.     /*
  587.      * Points to the transport data (if any) which is allocated
  588.      * separately
  589.      */
  590.     void *shost_data;
  591.  
  592.     /*
  593.      * We should ensure that this is aligned, both for better performance
  594.      * and also because some compilers (m68k) don't automatically force
  595.      * alignment to a long boundary.
  596.      */
  597.     unsigned long hostdata[0]  /* Used for storage of host specific stuff */
  598.         __attribute__ ((aligned (sizeof(unsigned long))));
  599. };
  600.  
  601. #define        class_to_shost(d)    \
  602.     container_of(d, struct Scsi_Host, shost_classdev)
  603.  
  604. #define shost_printk(prefix, shost, fmt, a...)    \
  605.     dev_printk(prefix, &(shost)->shost_gendev, fmt, ##a)
  606.  
  607.  
  608. int scsi_is_host_device(const struct device *);
  609.  
  610. static inline struct Scsi_Host *dev_to_shost(struct device *dev)
  611. {
  612.     while (!scsi_is_host_device(dev)) {
  613.         if (!dev->parent)
  614.             return NULL;
  615.         dev = dev->parent;
  616.     }
  617.     return container_of(dev, struct Scsi_Host, shost_gendev);
  618. }
  619.  
  620. static inline int scsi_host_in_recovery(struct Scsi_Host *shost)
  621. {
  622.     return shost->shost_state == SHOST_RECOVERY ||
  623.         shost->shost_state == SHOST_CANCEL_RECOVERY ||
  624.         shost->shost_state == SHOST_DEL_RECOVERY;
  625. }
  626.  
  627. extern int scsi_queue_work(struct Scsi_Host *, struct work_struct *);
  628. extern void scsi_flush_work(struct Scsi_Host *);
  629.  
  630. extern struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *, int);
  631. extern int __must_check scsi_add_host(struct Scsi_Host *, struct device *);
  632. extern void scsi_scan_host(struct Scsi_Host *);
  633. extern void scsi_rescan_device(struct device *);
  634. extern void scsi_remove_host(struct Scsi_Host *);
  635. extern struct Scsi_Host *scsi_host_get(struct Scsi_Host *);
  636. extern void scsi_host_put(struct Scsi_Host *t);
  637. extern struct Scsi_Host *scsi_host_lookup(unsigned short);
  638. extern const char *scsi_host_state_name(enum scsi_host_state);
  639.  
  640. extern u64 scsi_calculate_bounce_limit(struct Scsi_Host *);
  641.  
  642. static inline void scsi_assign_lock(struct Scsi_Host *shost, spinlock_t *lock)
  643. {
  644.     shost->host_lock = lock;
  645. }
  646.  
  647. static inline struct device *scsi_get_device(struct Scsi_Host *shost)
  648. {
  649.         return shost->shost_gendev.parent;
  650. }
  651.  
  652. /**
  653.  * scsi_host_scan_allowed - Is scanning of this host allowed
  654.  * @shost:    Pointer to Scsi_Host.
  655.  **/
  656. static inline int scsi_host_scan_allowed(struct Scsi_Host *shost)
  657. {
  658.     return shost->shost_state == SHOST_RUNNING;
  659. }
  660.  
  661. extern void scsi_unblock_requests(struct Scsi_Host *);
  662. extern void scsi_block_requests(struct Scsi_Host *);
  663.  
  664. struct class_container;
  665. /*
  666.  * These two functions are used to allocate and free a pseudo device
  667.  * which will connect to the host adapter itself rather than any
  668.  * physical device.  You must deallocate when you are done with the
  669.  * thing.  This physical pseudo-device isn't real and won't be available
  670.  * from any high-level drivers.
  671.  */
  672. extern void scsi_free_host_dev(struct scsi_device *);
  673. extern struct scsi_device *scsi_get_host_dev(struct Scsi_Host *);
  674.  
  675. /* legacy interfaces */
  676. extern struct Scsi_Host *scsi_register(struct scsi_host_template *, int);
  677. extern void scsi_unregister(struct Scsi_Host *);
  678. extern int scsi_host_set_state(struct Scsi_Host *, enum scsi_host_state);
  679.  
  680. #endif /* _SCSI_SCSI_HOST_H */
  681.