* Removed *_BEN() macros.

* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40222 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2011-01-12 18:24:43 +00:00
parent 5cf8a6abc4
commit a1e8da4101
6 changed files with 52 additions and 66 deletions
@@ -1,10 +1,11 @@
/* /*
* Copyright 2004-2008, Haiku, Inc. All RightsReserved. * Copyright 2004-2011, Haiku, Inc. All RightsReserved.
* Copyright 2002-2003, Thomas Kurschel. All rights reserved. * Copyright 2002-2003, Thomas Kurschel. All rights reserved.
* *
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
*/ */
//! Handling of block device (currently, only a capacity check is provided) //! Handling of block device (currently, only a capacity check is provided)
@@ -51,13 +52,13 @@ periph_check_capacity(scsi_periph_device_info *device, scsi_ccb *request)
return B_DEV_MEDIA_CHANGED; return B_DEV_MEDIA_CHANGED;
} }
ACQUIRE_BEN(&device->mutex); mutex_lock(&device->mutex);
if (res == B_OK && request->data_resid == 0) { if (res == B_OK && request->data_resid == 0) {
capacity = B_BENDIAN_TO_HOST_INT32(capacityResult.lba); capacity = B_BENDIAN_TO_HOST_INT32(capacityResult.lba);
if (capacity == UINT_MAX) { if (capacity == UINT_MAX) {
RELEASE_BEN(&device->mutex); mutex_unlock(&device->mutex);
scsi_cmd_read_capacity_long *cmd scsi_cmd_read_capacity_long *cmd
= (scsi_cmd_read_capacity_long *)request->cdb; = (scsi_cmd_read_capacity_long *)request->cdb;
@@ -73,7 +74,7 @@ periph_check_capacity(scsi_periph_device_info *device, scsi_ccb *request)
res = periph_safe_exec(device, request); res = periph_safe_exec(device, request);
ACQUIRE_BEN(&device->mutex); mutex_lock(&device->mutex);
if (res == B_OK && request->data_resid == 0) { if (res == B_OK && request->data_resid == 0) {
capacity = B_BENDIAN_TO_HOST_INT64(capacityLongResult.lba); capacity = B_BENDIAN_TO_HOST_INT64(capacityLongResult.lba);
@@ -105,7 +106,7 @@ periph_check_capacity(scsi_periph_device_info *device, scsi_ccb *request)
return ERR_DEV_GENERAL; return ERR_DEV_GENERAL;
}*/ }*/
RELEASE_BEN(&device->mutex); mutex_unlock(&device->mutex);
SHOW_FLOW(3, "done (%s)", strerror(res)); SHOW_FLOW(3, "done (%s)", strerror(res));
@@ -1,10 +1,11 @@
/* /*
* Copyright 2004-2008, Haiku, Inc. All RightsReserved. * Copyright 2004-2011, Haiku, Inc. All RightsReserved.
* Copyright 2002/03, Thomas Kurschel. All rights reserved. * Copyright 2002/03, Thomas Kurschel. All rights reserved.
* *
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
*/ */
//! Basic handling of device. //! Basic handling of device.
@@ -52,26 +53,21 @@ periph_compose_device_name(device_node *node, const char *prefix)
status_t status_t
periph_register_device(periph_device_cookie periph_device, scsi_periph_callbacks *callbacks, periph_register_device(periph_device_cookie periph_device,
scsi_device scsi_device, scsi_device_interface *scsi, device_node *node, scsi_periph_callbacks *callbacks, scsi_device scsi_device,
scsi_device_interface *scsi, device_node *node,
bool removable, int preferredCcbSize, scsi_periph_device *driver) bool removable, int preferredCcbSize, scsi_periph_device *driver)
{ {
scsi_periph_device_info *device;
status_t res;
SHOW_FLOW0(3, ""); SHOW_FLOW0(3, "");
device = (scsi_periph_device_info *)malloc(sizeof(*device)); scsi_periph_device_info *device
= (scsi_periph_device_info *)malloc(sizeof(*device));
if (device == NULL) if (device == NULL)
return B_NO_MEMORY; return B_NO_MEMORY;
memset(device, 0, sizeof(*device)); memset(device, 0, sizeof(*device));
if (INIT_BEN(&device->mutex, "SCSI_PERIPH") != B_OK) { mutex_init(&device->mutex, "SCSI_PERIPH");
res = B_NO_MEMORY;
goto err1;
}
device->scsi_device = scsi_device; device->scsi_device = scsi_device;
device->scsi = scsi; device->scsi = scsi;
device->periph_device = periph_device; device->periph_device = periph_device;
@@ -87,9 +83,10 @@ periph_register_device(periph_device_cookie periph_device, scsi_periph_callbacks
device->rw10_enabled = true; device->rw10_enabled = true;
// launch sync daemon // launch sync daemon
res = register_kernel_daemon(periph_sync_queue_daemon, device, 60*10); status_t status = register_kernel_daemon(periph_sync_queue_daemon, device,
if (res != B_OK) 60*10);
goto err2; if (status != B_OK)
goto err1;
*driver = device; *driver = device;
@@ -97,11 +94,10 @@ periph_register_device(periph_device_cookie periph_device, scsi_periph_callbacks
return B_OK; return B_OK;
err2:
DELETE_BEN(&device->mutex);
err1: err1:
mutex_destroy(&device->mutex);
free(device); free(device);
return res; return status;
} }
@@ -1,20 +1,17 @@
/* /*
* Copyright 2002/03, Thomas Kurschel. All rights reserved. * Copyright 2011, Haiku, Inc. All RightsReserved.
* Copyright 2002-03, Thomas Kurschel. All rights reserved.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
*/ */
/*
Part of Open SCSI Peripheral Driver
Error handling //! Error handling
*/
#include "scsi_periph_int.h" #include "scsi_periph_int.h"
/** decode sense data and generate error code */ /*! Decode sense data and generate error code. */
static static
err_res check_sense(scsi_periph_device_info *device, scsi_ccb *request) err_res check_sense(scsi_periph_device_info *device, scsi_ccb *request)
{ {
@@ -86,9 +83,9 @@ err_res check_sense(scsi_periph_device_info *device, scsi_ccb *request)
case SCSIS_ASC_REMOVAL_REQUESTED: case SCSIS_ASC_REMOVAL_REQUESTED:
SHOW_INFO0(2, "Removal requested"); SHOW_INFO0(2, "Removal requested");
ACQUIRE_BEN(&device->mutex); mutex_lock(&device->mutex);
device->removal_requested = true; device->removal_requested = true;
RELEASE_BEN(&device->mutex); mutex_unlock(&device->mutex);
return MK_ERROR(err_act_retry, B_DEV_MEDIA_CHANGE_REQUESTED); return MK_ERROR(err_act_retry, B_DEV_MEDIA_CHANGE_REQUESTED);
@@ -207,8 +204,7 @@ err_res check_sense(scsi_periph_device_info *device, scsi_ccb *request)
} }
/** check scsi status, using sense if available */ /*! Check scsi status, using sense if available. */
static err_res static err_res
check_scsi_status(scsi_periph_device_info *device, scsi_ccb *request) check_scsi_status(scsi_periph_device_info *device, scsi_ccb *request)
{ {
@@ -238,12 +234,11 @@ check_scsi_status(scsi_periph_device_info *device, scsi_ccb *request)
} }
/** check result of request /*! Check result of request
* 1. check SCSI subsystem problems * 1. check SCSI subsystem problems
* 2. if request hit device, check SCSI status * 2. if request hit device, check SCSI status
* 3. if request got executed, check sense * 3. if request got executed, check sense
*/ */
err_res err_res
periph_check_error(scsi_periph_device_info *device, scsi_ccb *request) periph_check_error(scsi_periph_device_info *device, scsi_ccb *request)
{ {
@@ -1,24 +1,23 @@
/* /*
** Copyright 2002/03, Thomas Kurschel. All rights reserved. * Copyright 2011, Haiku, Inc. All RightsReserved.
** Distributed under the terms of the OpenBeOS License. * Copyright 2002-03, Thomas Kurschel. All rights reserved.
* Distributed under the terms of the MIT License.
*/ */
/*
Part of Open SCSI Peripheral Driver
Basic handling of file handles. //! Basic handling of file handles.
*/
#include "scsi_periph_int.h" #include "scsi_periph_int.h"
#include <stdlib.h>
#include "dl_list.h" #include "dl_list.h"
#include <malloc.h>
status_t status_t
periph_handle_open(scsi_periph_device_info *device, periph_handle_cookie periph_handle, periph_handle_open(scsi_periph_device_info *device,
scsi_periph_handle_info **res_handle) periph_handle_cookie periph_handle, scsi_periph_handle_info **res_handle)
{ {
scsi_periph_handle_info *handle; scsi_periph_handle_info *handle;
@@ -32,9 +31,9 @@ periph_handle_open(scsi_periph_device_info *device, periph_handle_cookie periph_
handle->device = device; handle->device = device;
handle->pending_error = B_OK; handle->pending_error = B_OK;
ACQUIRE_BEN(&device->mutex); mutex_lock(&device->mutex);
ADD_DL_LIST_HEAD(handle, device->handles, ); ADD_DL_LIST_HEAD(handle, device->handles, );
RELEASE_BEN(&device->mutex); mutex_unlock(&device->mutex);
*res_handle = handle; *res_handle = handle;
@@ -59,9 +58,9 @@ periph_handle_free(scsi_periph_handle_info *handle)
// SHOW_FLOW( 3, "handle=%p, device=%p", handle, handle->device ); // SHOW_FLOW( 3, "handle=%p, device=%p", handle, handle->device );
ACQUIRE_BEN(&device->mutex); mutex_lock(&device->mutex);
REMOVE_DL_LIST(handle, device->handles, ); REMOVE_DL_LIST(handle, device->handles, );
RELEASE_BEN(&device->mutex); mutex_unlock(&device->mutex);
free(handle); free(handle);
@@ -1,10 +1,11 @@
/* /*
* Copyright 2004-2007, Haiku, Inc. All RightsReserved. * Copyright 2004-2011, Haiku, Inc. All RightsReserved.
* Copyright 2002-2003, Thomas Kurschel. All rights reserved. * Copyright 2002-2003, Thomas Kurschel. All rights reserved.
* *
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
*/ */
//! Handling of removable media. //! Handling of removable media.
@@ -70,14 +71,14 @@ periph_media_changed_public(scsi_periph_device_info *device)
{ {
scsi_periph_handle_info *handle; scsi_periph_handle_info *handle;
ACQUIRE_BEN(&device->mutex); mutex_lock(&device->mutex);
// when medium has changed, tell all handles // when medium has changed, tell all handles
// (this must be atomic for each handle!) // (this must be atomic for each handle!)
for (handle = device->handles; handle; handle = handle->next) for (handle = device->handles; handle; handle = handle->next)
handle->pending_error = B_DEV_MEDIA_CHANGED; handle->pending_error = B_DEV_MEDIA_CHANGED;
RELEASE_BEN(&device->mutex); mutex_unlock(&device->mutex);
} }
@@ -151,7 +152,7 @@ periph_get_media_status(scsi_periph_handle_info *handle)
err_res res; err_res res;
status_t err; status_t err;
ACQUIRE_BEN(&device->mutex); mutex_lock(&device->mutex);
// removal requests are returned to exactly one handle // removal requests are returned to exactly one handle
// (no real problem, as noone check medias status "by mistake") // (no real problem, as noone check medias status "by mistake")
@@ -170,7 +171,7 @@ periph_get_media_status(scsi_periph_handle_info *handle)
SHOW_FLOW0( 3, "" ); SHOW_FLOW0( 3, "" );
RELEASE_BEN(&device->mutex); mutex_unlock(&device->mutex);
// finally, ask the device itself // finally, ask the device itself
@@ -187,7 +188,7 @@ periph_get_media_status(scsi_periph_handle_info *handle)
return res.error_code; return res.error_code;
err: err:
RELEASE_BEN(&device->mutex); mutex_unlock(&device->mutex);
return err; return err;
} }
@@ -1,18 +1,11 @@
#ifndef _WRAPPER_H #ifndef _WRAPPER_H
#define _WRAPPER_H #define _WRAPPER_H
#include <KernelExport.h> #include <KernelExport.h>
#include <lock.h> #include <lock.h>
// benaphores
#define INIT_BEN(x, prefix) (mutex_init_etc(x, prefix, MUTEX_FLAG_CLONE_NAME), \
B_OK)
#define DELETE_BEN(x) mutex_destroy(x)
#define ACQUIRE_BEN(x) mutex_lock(x)
#define RELEASE_BEN(x) mutex_unlock(x)
// debug output // debug output
#ifdef DEBUG_WAIT_ON_MSG #ifdef DEBUG_WAIT_ON_MSG
@@ -87,4 +80,5 @@
dprintf( "%s%s: "format"\n", FUNC_NAME); DEBUG_WAIT_ERROR \ dprintf( "%s%s: "format"\n", FUNC_NAME); DEBUG_WAIT_ERROR \
}} while( 0 ) }} while( 0 )
#endif /* _BENAPHORE_H */
#endif /* _WRAPPER_H */