[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Interface for SCSI transactions ?
From: |
Thomas Schmitt |
Subject: |
Re: Interface for SCSI transactions ? |
Date: |
Tue, 13 Sep 2011 12:29:43 +0200 |
Hi,
current state of MIG definition (stop me when i go astray):
routine device_transact_native(
device : device_t;
in function_code : unsigned int;
in in_data : ^ array[] of unsigned char;
out out_data : ^ array[] of unsigned char
);
With C prototype for ds_routines.c:
io_return_t
ds_device_transact_native(
device_t dev,
unsigned int function_code,
unsigned char *in_data,
mach_msg_type_number_t in_len,
unsigned char *out_data,
mach_msg_type_number_t out_len);
and for block.c:
static io_return_t
device_transact_native(
void *d,
unsigned int function_code,
unsigned char *in_data,
mach_msg_type_number_t in_len,
unsigned char *out_data,
mach_msg_type_number_t out_len);
d will be fed by dev->emul_data of ds_device_transact_native().
It will be interpreted as (struct block_data *).
There will be functions in kernel and userspace which serialize and
de-serialize parameter structs.
One of these serializer families will be specific to SCSI devices.
Either function_code or a magic number at the start of the serialized
data shall assert that serializer and de-serializer match.
Within block.c there may be other serializer families for
device_transact_native() with other function_code values.
The same with other classes if they implement device_transact_native().
Some reasoning:
------------------------------------------------------------------------
Olaf Buddenhagen:
> I just saw that device_open() also has other
> parameters without a direction... So I have to admit quite frankly that
> I don't know what this really means.
mig.ps page 6 explains that "in" is default, and that the first parameter
without a direction specifier depicts the port by default.
There is RequestPort to explicitely mark one parameter as target port.
But i have difficulties to understand how the C prototype of a
variable length byte array would look.
I would like to use
in in_data : ^ array[] of unsigned char;
Page 3 of mig.ps says:
"For variable length arrays an additional count parameter is generated
to specify how much of the array is actually being used."
So do i have to feed this by two C variables ?
And what type has the additionally generated count parameter ?
Learning by example, i read in gnumach/include/device/device.defs
routine device_set_status(
device : device_t;
in flavor : dev_flavor_t;
in status : dev_status_t
);
and in
io_return_t
ds_device_set_status (device_t dev,
dev_flavor_t flavor,
dev_status_t status,
mach_msg_type_number_t status_count)
How come (mach_msg_type_number_t) ?
Where was this assigned to mach_port_array_t resp. to init_port_set ?
gnumach/include/mach/message.h:
typedef natural_t mach_msg_type_number_t;
gnumach/i386/include/mach/i386/vm_types.h:
typedef unsigned int natural_t;
So for now: (mach_msg_type_number_t) with semantics of (unsigned int).
(It still would be nice to understand why ...)
------------------------------------------------------------------------
Further i learned that MIG assumes structs to have the same memory layout
on sender and receiver of the RPC. Only their sizes get specified.
Page 3 of mig.ps:
"There is no way to specify the fields of a C structure to MIG."
(This looks to me much like a design flaw for a distributed operating
system.)
So MIG transmitted structs are inherently of fixed size.
But i want variable size.
Serialized structs in byte arrays seem to be the only way to get this,
although they require four serializer/de-serializer functions for each
implementation of device_transact_native().
------------------------------------------------------------------------
Olaf Buddenhagen:
> Hurray, bikeshedding time! ;-)
First we have to choose the maximum number of wheels per vehicle.
Samuel Thibault:
> > > device_emulation_ops
me:
> > Does that mean, that all instances of struct device_emulation_ops have
> > to be augmented by a function pointer ?
Olaf Buddenhagen:
> Yes, I think so.
Do you agree that this pushes the plan towards a generic shed for
the bikes of women, men, children, and dogs ?
Prepared for three wheels although the dogs have no bike yet and
the kiddies use their smartphones for simulating a bike ride ?
------------------------------------------------------------------------
Have a nice day :)
Thomas
- Re: Interface for SCSI transactions ?, (continued)
- Re: Interface for SCSI transactions ?, olafBuddenhagen, 2011/09/13
- Re: Interface for SCSI transactions ?, Samuel Thibault, 2011/09/13
- Implicit IN? (was: Interface for SCSI transactions ?), olafBuddenhagen, 2011/09/23
- Re: Implicit IN? (was: Interface for SCSI transactions ?), Samuel Thibault, 2011/09/23
- Re: Implicit IN?, olafBuddenhagen, 2011/09/29
- Re: Implicit IN?, Samuel Thibault, 2011/09/29
- Re: Interface for SCSI transactions ?,
Thomas Schmitt <=
- Re: Interface for SCSI transactions ?, Thomas Schmitt, 2011/09/13
- Re: Interface for SCSI transactions ?, Samuel Thibault, 2011/09/13
- Re: Interface for SCSI transactions ?, Thomas Schmitt, 2011/09/13
- Re: Interface for SCSI transactions ?, olafBuddenhagen, 2011/09/23
- Re: Interface for SCSI transactions ?, Samuel Thibault, 2011/09/14
- Re: Interface for SCSI transactions ?, Thomas Schmitt, 2011/09/15
Re: Interface for SCSI transactions ?, Samuel Thibault, 2011/09/05