Lines Matching defs:device

21 	Requests can be blocked by SIM or by the SCSI bus manager on a per-device
27 2. SIM blocks bus/device explictely
28 3. bus manager blocks bus/device explictly (currently used for
30 4. the device has queued requests or the bus has waiting devices resp.
34 third cases, the SIM/bus manager must explictely unblock the bus/device.
39 If a bus/device is blocked or has waiting requests/devices, new requests
40 are added to a device-specific request queue in an elevator-sort style,
44 device is to be added to this queue, it is always appended at tail
52 // add request to device queue, using evelvator sort
53 static void scsi_insert_new_request( scsi_device_info *device,
61 first = device->queued_reqs;
70 first, first->sort, device->last_sort );
108 if( (device->last_sort <= new_request->sort &&
110 (first->sort < device->last_sort &&
114 SHOW_FLOW0( 3, "trying to insert req at head of device req queue" );
124 SHOW_FLOW0( 1, "scheduled request in front of all other reqs of device" );
170 // add request to end of device queue and device to bus queue
174 scsi_device_info *device = request->device;
179 scsi_insert_new_request( device, request );
182 scsi_ccb *tmp = device->queued_reqs;
184 dprintf( "pos=%lld, to_insert=%lld; ", device->last_sort,
188 dprintf( "%lld, %s", tmp->sort, tmp->next == device->queued_reqs ? "\n" : "" );
190 } while( tmp != device->queued_reqs );
193 // if device is not deliberately locked, mark it as waiting
194 if( device->lock_count == 0 ) {
195 SHOW_FLOW0( 3, "mark device as waiting" );
196 scsi_add_device_queue_last( device );
201 // add request to begin of device queue and device to bus queue
205 scsi_device_info *device = request->device;
212 // if device is not deliberately locked, mark it as waiting
213 if( device->lock_count == 0 ) {
214 SHOW_FLOW0( 3, "mark device as waiting" );
215 // make device first in bus queue to execute sense ASAP
216 scsi_add_device_queue_first( device );
221 // remove requests from queue, removing device from queue if idle
226 if( request->device->queued_reqs == NULL )
227 scsi_remove_device_queue( request->device );
260 // explicitly unblock device
261 static void scsi_unblock_device_int( scsi_device_info *device, bool by_SIM )
263 scsi_bus_info *bus = device->bus;
272 scsi_unblock_device_noresume( device, by_SIM );
275 if( device->lock_count == 0 && device->queued_reqs != NULL )
276 scsi_add_device_queue_last( device );
287 // explicitely unblock device as requested by SIM
288 void scsi_unblock_device( scsi_device_info *device )
290 return scsi_unblock_device_int( device, true );
316 // SIM signals that it can handle further requests for this device
317 void scsi_cont_send_device( scsi_device_info *device )
319 scsi_bus_info *bus = device->bus;
328 if( device->sim_overflow ) {
329 device->sim_overflow = false;
330 --device->lock_count;
333 if( device->lock_count == 0 && device->queued_reqs != NULL )
334 scsi_add_device_queue_last( device );
337 // no device overflow implicits no bus overflow
372 // explicitly block device
373 static void scsi_block_device_int( scsi_device_info *device, bool by_SIM )
375 scsi_bus_info *bus = device->bus;
381 scsi_block_device_nolock( device, by_SIM );
383 // remove device from bus queue as it cannot be processed anymore
384 scsi_remove_device_queue( device );
390 // explicitly block device as requested by SIM
391 void scsi_block_device( scsi_device_info *device )
393 return scsi_block_device_int( device, true );