root/drivers/scsi/arm/queue.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  *  linux/drivers/acorn/scsi/queue.h: queue handling
   4  *
   5  *  Copyright (C) 1997 Russell King
   6  */
   7 #ifndef QUEUE_H
   8 #define QUEUE_H
   9 
  10 typedef struct {
  11         struct list_head head;
  12         struct list_head free;
  13         spinlock_t queue_lock;
  14         void *alloc;                    /* start of allocated mem */
  15 } Queue_t;
  16 
  17 /*
  18  * Function: void queue_initialise (Queue_t *queue)
  19  * Purpose : initialise a queue
  20  * Params  : queue - queue to initialise
  21  */
  22 extern int queue_initialise (Queue_t *queue);
  23 
  24 /*
  25  * Function: void queue_free (Queue_t *queue)
  26  * Purpose : free a queue
  27  * Params  : queue - queue to free
  28  */
  29 extern void queue_free (Queue_t *queue);
  30 
  31 /*
  32  * Function: struct scsi_cmnd *queue_remove (queue)
  33  * Purpose : removes first SCSI command from a queue
  34  * Params  : queue   - queue to remove command from
  35  * Returns : struct scsi_cmnd if successful (and a reference), or NULL if no command available
  36  */
  37 extern struct scsi_cmnd *queue_remove (Queue_t *queue);
  38 
  39 /*
  40  * Function: struct scsi_cmnd *queue_remove_exclude_ref (queue, exclude)
  41  * Purpose : remove a SCSI command from a queue
  42  * Params  : queue   - queue to remove command from
  43  *           exclude - array of busy LUNs
  44  * Returns : struct scsi_cmnd if successful (and a reference), or NULL if no command available
  45  */
  46 extern struct scsi_cmnd *queue_remove_exclude(Queue_t *queue,
  47                                               unsigned long *exclude);
  48 
  49 #define queue_add_cmd_ordered(queue,SCpnt) \
  50         __queue_add(queue,SCpnt,(SCpnt)->cmnd[0] == REQUEST_SENSE)
  51 #define queue_add_cmd_tail(queue,SCpnt) \
  52         __queue_add(queue,SCpnt,0)
  53 /*
  54  * Function: int __queue_add(Queue_t *queue, struct scsi_cmnd *SCpnt, int head)
  55  * Purpose : Add a new command onto a queue
  56  * Params  : queue - destination queue
  57  *           SCpnt - command to add
  58  *           head  - add command to head of queue
  59  * Returns : 0 on error, !0 on success
  60  */
  61 extern int __queue_add(Queue_t *queue, struct scsi_cmnd *SCpnt, int head);
  62 
  63 /*
  64  * Function: struct scsi_cmnd *queue_remove_tgtluntag (queue, target, lun, tag)
  65  * Purpose : remove a SCSI command from the queue for a specified target/lun/tag
  66  * Params  : queue  - queue to remove command from
  67  *           target - target that we want
  68  *           lun    - lun on device
  69  *           tag    - tag on device
  70  * Returns : struct scsi_cmnd if successful, or NULL if no command satisfies requirements
  71  */
  72 extern struct scsi_cmnd *queue_remove_tgtluntag(Queue_t *queue, int target,
  73                                                 int lun, int tag);
  74 
  75 /*
  76  * Function: queue_remove_all_target(queue, target)
  77  * Purpose : remove all SCSI commands from the queue for a specified target
  78  * Params  : queue  - queue to remove command from
  79  *           target - target device id
  80  * Returns : nothing
  81  */
  82 extern void queue_remove_all_target(Queue_t *queue, int target);
  83 
  84 /*
  85  * Function: int queue_probetgtlun (queue, target, lun)
  86  * Purpose : check to see if we have a command in the queue for the specified
  87  *           target/lun.
  88  * Params  : queue  - queue to look in
  89  *           target - target we want to probe
  90  *           lun    - lun on target
  91  * Returns : 0 if not found, != 0 if found
  92  */
  93 extern int queue_probetgtlun (Queue_t *queue, int target, int lun);
  94 
  95 /*
  96  * Function: int queue_remove_cmd (Queue_t *queue, struct scsi_cmnd *SCpnt)
  97  * Purpose : remove a specific command from the queues
  98  * Params  : queue - queue to look in
  99  *           SCpnt - command to find
 100  * Returns : 0 if not found
 101  */
 102 int queue_remove_cmd(Queue_t *queue, struct scsi_cmnd *SCpnt);
 103 
 104 #endif /* QUEUE_H */

/* [<][>][^][v][top][bottom][index][help] */