Lines Matching refs:bus

7 	Part of Open SCSI bus manager
18 HBAs as in this case the queuing is done by the SCSI bus manager
21 Requests can be blocked by SIM or by the SCSI bus manager on a per-device
22 or per-bus basis. There are three possible reasons:
25 - detected by bus manager automatically, or
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.
36 SIM lock count and the bus manager lock count. The blocking test is in
39 If a bus/device is blocked or has waiting requests/devices, new requests
42 requeued request and autosense-requests, which are added first. Each bus
170 // add request to end of device queue and device to bus queue
201 // add request to begin of device queue and device to bus queue
215 // make device first in bus queue to execute sense ASAP
231 // explictely unblock bus
232 static void scsi_unblock_bus_int( scsi_bus_info *bus, bool by_SIM )
238 mutex_lock( &bus->mutex );
240 was_servicable = scsi_can_service_bus( bus );
242 scsi_unblock_bus_noresume( bus, by_SIM );
244 start_retry = !was_servicable && scsi_can_service_bus( bus );
246 mutex_unlock( &bus->mutex );
249 release_sem( bus->start_service );
253 // explicitely unblock bus as requested by SIM
254 void scsi_unblock_bus( scsi_bus_info *bus )
256 scsi_unblock_bus_int( bus, true );
263 scsi_bus_info *bus = device->bus;
268 mutex_lock( &bus->mutex );
270 was_servicable = scsi_can_service_bus( bus );
274 // add to bus queue if not locked explicitly anymore and requests are waiting
278 start_retry = !was_servicable && scsi_can_service_bus( bus );
280 mutex_unlock( &bus->mutex );
283 release_sem( bus->start_service );
294 // SIM signals that it can handle further requests for this bus
295 void scsi_cont_send_bus( scsi_bus_info *bus )
301 mutex_lock( &bus->mutex );
303 was_servicable = scsi_can_service_bus( bus );
305 scsi_clear_bus_overflow( bus );
307 start_retry = !was_servicable && scsi_can_service_bus( bus );
309 mutex_unlock( &bus->mutex );
312 release_sem_etc( bus->start_service, 1, 0/*B_DO_NOT_RESCHEDULE*/ );
319 scsi_bus_info *bus = device->bus;
324 mutex_lock( &bus->mutex );
326 was_servicable = scsi_can_service_bus( bus );
332 // add to bus queue if not locked explicitly anymore and requests are waiting
337 // no device overflow implicits no bus overflow
339 scsi_clear_bus_overflow( bus );
341 start_retry = !was_servicable && scsi_can_service_bus( bus );
343 mutex_unlock( &bus->mutex );
348 release_sem_etc( bus->start_service, 1, 0/*B_DO_NOT_RESCHEDULE*/ );
352 // explicitly block bus
353 static void scsi_block_bus_int( scsi_bus_info *bus, bool by_SIM )
357 mutex_lock( &bus->mutex );
359 scsi_block_bus_nolock( bus, by_SIM );
361 mutex_unlock( &bus->mutex );
365 // explicitly block bus as requested by SIM
366 void scsi_block_bus( scsi_bus_info *bus )
368 return scsi_block_bus_int( bus, true );
375 scsi_bus_info *bus = device->bus;
379 mutex_lock( &bus->mutex );
383 // remove device from bus queue as it cannot be processed anymore
386 mutex_unlock( &bus->mutex );