That's one small step for man... ;-)

- module interface was changed to be compatible with Haiku API.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21163 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
imker
2007-05-17 20:05:38 +00:00
parent 0d975479fb
commit f5f8df45bf
+252 -14
View File
@@ -19,6 +19,8 @@
#include <malloc.h>
#include <strings.h>
#include <stdio.h>
#include <device_manager.h>
#include <bus/SCSI.h>
#include "device_info.h"
#include "settings.h"
#include "transform_procs.h"
@@ -31,6 +33,8 @@
#include "fake_device.h"
#include "sg_buffer.h"
#if 0
status_t device_added(const usb_device device, void **cookie);
status_t device_removed(void *cookie);
@@ -52,7 +56,7 @@ static long sim_init();
static long path_id = -1;
static int32 load_count = 0;
static char sim_vendor_name[] = "S.Zharski"; /* who wrote this driver */
static char sim_vendor_name[] = "Haiku"; /* who wrote this driver */
static char hba_vendor_name[] = "USB"; /* who made the hardware */
static char controller_family[] = "USB SCSI"; /* what family of products */
@@ -893,6 +897,8 @@ static long sim_action(CCB_HEADER *ccbh)
}
return status;
}
#endif
/**
\fn:std_ops
\param op: operation to be performed on this module
@@ -906,15 +912,16 @@ static long sim_action(CCB_HEADER *ccbh)
*/
static status_t std_ops(int32 op, ...)
{
int i;
status_t status = B_ERROR;
CAM_SIM_ENTRY entry;
//int i;
status_t status = B_OK;//B_ERROR;
//CAM_SIM_ENTRY entry;
switch(op) {
case B_MODULE_INIT:
if(0 == atomic_add(&load_count, 1)){
thread_info tinfo = {0};
case B_MODULE_INIT:
TRACE_ALWAYS("std_ops: B_MODULE_INIT called!\n");
/* if(0 == atomic_add(&load_count, 1)){
thread_info tinfo = {0}; */
load_module_settings();
get_thread_info(find_thread(0), &tinfo);
/* get_thread_info(find_thread(0), &tinfo);
if(!b_ignore_sysinit2 || (0 != strcmp(tinfo.name, "sysinit2"))){
create_log();
if(get_module(B_USB_MODULE_NAME, (module_info **)&usb) == B_OK){
@@ -941,10 +948,11 @@ static status_t std_ops(int32 op, ...)
}
} else {
atomic_add(&load_count, -1);
}
}*/
break;
case B_MODULE_UNINIT:
if(1 == atomic_add(&load_count, -1)){
TRACE_ALWAYS("std_ops: B_MODULE_UNINIT called!\n");
/* if(1 == atomic_add(&load_count, -1)){
(*usb->uninstall_notify)(MODULE_NAME);
status = B_OK;
if(path_id != -1){
@@ -956,23 +964,253 @@ static status_t std_ops(int32 op, ...)
put_module(B_CAM_FOR_SIM_MODULE_NAME);
} else {
atomic_add(&load_count, 1);
}
}*/
break;
}
return status;
}
/**
* \fn:
* \param :
* \return:
* TODO
*/
static float
supports_device(device_node_handle parent, bool *_noConnection)
{
TRACE_ALWAYS("supports_device\n");
return 0.f;
}
/**
* \fn:
* \param :
* \return:
* TODO
*/
static status_t
register_device(device_node_handle parent)
{
TRACE_ALWAYS("register_device\n");
return B_OK;
}
/**
* \fn:
* \param :
* \return:
* TODO
*/
static status_t
init_module(device_node_handle node, void *user_cookie, void **_cookie)
{
TRACE_ALWAYS("inti_driver\n");
return B_OK;
}
/**
* \fn:
* \param :
* \return:
* TODO
*/
static status_t
uninit_module(void *cookie)
{
TRACE_ALWAYS("uninit_driver\n");
return B_OK;
}
/**
* \fn:
* \param :
* TODO
*/
static void
device_removed(device_node_handle node, void *cookie)
{
TRACE_ALWAYS("device_removed\n");
}
/**
* \fn:
* \param :
* TODO
*/
static void
device_cleanup(device_node_handle node)
{
TRACE_ALWAYS("device_cleanup\n");
}
/**
* \fn:
* \param :
* TODO
*/
static void
get_supported_paths(const char ***_busses, const char ***_devices)
{
TRACE_ALWAYS("get_supported_path\n");
}
/**
* \fn:
* \param :
* TODO
*/
static void
scsi_io( scsi_sim_cookie cookie, scsi_ccb *ccb )
{
TRACE_ALWAYS("scsi_io\n");
}
/**
* \fn:
* \param :
* \return:
* TODO
*/
static uchar
abort( scsi_sim_cookie cookie, scsi_ccb *ccb_to_abort )
{
TRACE_ALWAYS("scsi_sim\n");
return 0;
}
/**
* \fn:
* \param :
* \return:
* TODO
*/
static uchar
reset_device( scsi_sim_cookie cookie, uchar target_id, uchar target_lun )
{
TRACE_ALWAYS("supports_device\n");
return 0;
}
/**
* \fn:
* \param :
* \return:
* TODO
*/
static uchar
term_io( scsi_sim_cookie cookie, scsi_ccb *ccb_to_terminate )
{
TRACE_ALWAYS("term_io\n");
return 0;
}
/**
* \fn:
* \param :
* \return:
* TODO
*/
static uchar
path_inquiry( scsi_sim_cookie cookie, scsi_path_inquiry *inquiry_data )
{
TRACE_ALWAYS("path_inquiry\n");
return 0;
}
/**
* \fn:
* \param :
* \return:
* TODO
*/
static uchar
scan_bus( scsi_sim_cookie cookie )
{
TRACE_ALWAYS("scan_bus\n");
return 0;
}
/**
* \fn:
* \param :
* \return:
* TODO
*/
static uchar
reset_bus( scsi_sim_cookie cookie )
{
TRACE_ALWAYS("reset_bus\n");
return 0;
}
/**
* \fn:
* \param :
* TODO
*/
static void
get_restrictions(scsi_sim_cookie cookie, uchar target_id, bool *is_atapi, bool *no_autosense, uint32 *max_blocks )
{
TRACE_ALWAYS("get_restrictions\n");
}
/**
* \fn:
* \param :
* \return:
* TODO
*/
static status_t
module_ioctl(scsi_sim_cookie cookie, uint8 targetID, uint32 op, void *buffer, size_t length)
{
TRACE_ALWAYS("ioctl\n");
return B_ERROR;
}
/**
Declare our module_info so we can be loaded as a kernel module
*/
static sim_module_info sim_usb_module = {
{ "busses/scsi/usb/v1", 0, &std_ops }
static scsi_sim_interface usb_scsi_sim = {
{ //driver_module_info
{ // module_info
"busses/scsi/usb/device_v1", // is device_v1 really required? or v1 is enough?
0,
&std_ops
},
supports_device,
register_device,
init_module, // init_driver,
uninit_module, // uninit_driver,
device_removed,
device_cleanup,
get_supported_paths,
},
scsi_io,
abort,
reset_device,
term_io,
path_inquiry,
scan_bus,
reset_bus,
get_restrictions,
module_ioctl //ioctl
};
/**
Export module_info-s list
*/
_EXPORT module_info *modules[] = {
(module_info *) &sim_usb_module,
(module_info *) &usb_scsi_sim,
NULL
};