Commit | Line | Data |
---|---|---|
d2912cb1 | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
1da177e4 LT |
2 | /* |
3 | * linux/drivers/acorn/scsi/queue.h: queue handling | |
4 | * | |
5 | * Copyright (C) 1997 Russell King | |
1da177e4 LT |
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 | /* | |
ee0ca6ba | 32 | * Function: struct scsi_cmnd *queue_remove (queue) |
1da177e4 LT |
33 | * Purpose : removes first SCSI command from a queue |
34 | * Params : queue - queue to remove command from | |
ee0ca6ba | 35 | * Returns : struct scsi_cmnd if successful (and a reference), or NULL if no command available |
1da177e4 | 36 | */ |
ee0ca6ba | 37 | extern struct scsi_cmnd *queue_remove (Queue_t *queue); |
1da177e4 LT |
38 | |
39 | /* | |
ee0ca6ba | 40 | * Function: struct scsi_cmnd *queue_remove_exclude_ref (queue, exclude) |
1da177e4 LT |
41 | * Purpose : remove a SCSI command from a queue |
42 | * Params : queue - queue to remove command from | |
43 | * exclude - array of busy LUNs | |
ee0ca6ba | 44 | * Returns : struct scsi_cmnd if successful (and a reference), or NULL if no command available |
1da177e4 | 45 | */ |
ee0ca6ba H |
46 | extern struct scsi_cmnd *queue_remove_exclude(Queue_t *queue, |
47 | unsigned long *exclude); | |
1da177e4 LT |
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 | /* | |
ee0ca6ba | 54 | * Function: int __queue_add(Queue_t *queue, struct scsi_cmnd *SCpnt, int head) |
1da177e4 LT |
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 | */ | |
ee0ca6ba | 61 | extern int __queue_add(Queue_t *queue, struct scsi_cmnd *SCpnt, int head); |
1da177e4 LT |
62 | |
63 | /* | |
ee0ca6ba | 64 | * Function: struct scsi_cmnd *queue_remove_tgtluntag (queue, target, lun, tag) |
1da177e4 LT |
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 | |
ee0ca6ba | 70 | * Returns : struct scsi_cmnd if successful, or NULL if no command satisfies requirements |
1da177e4 | 71 | */ |
ee0ca6ba H |
72 | extern struct scsi_cmnd *queue_remove_tgtluntag(Queue_t *queue, int target, |
73 | int lun, int tag); | |
1da177e4 LT |
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 | /* | |
ee0ca6ba | 96 | * Function: int queue_remove_cmd (Queue_t *queue, struct scsi_cmnd *SCpnt) |
1da177e4 LT |
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 | */ | |
ee0ca6ba | 102 | int queue_remove_cmd(Queue_t *queue, struct scsi_cmnd *SCpnt); |
1da177e4 LT |
103 | |
104 | #endif /* QUEUE_H */ |