linux/drivers/scsi/arm/queue.h
<<
>>
Prefs
   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
  10typedef 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 */
  22extern 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 */
  29extern 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 */
  37extern 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 */
  46extern 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 */
  61extern 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 */
  72extern 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 */
  82extern 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 */
  93extern 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 */
 102int queue_remove_cmd(Queue_t *queue, struct scsi_cmnd *SCpnt);
 103
 104#endif /* QUEUE_H */
 105