I'm not sure I understand your device.

All multi-function devices I've seen work in one of two ways:
(1) They present a single USB interface, with multiple LUNs
(2) They present multiple USB interfaces.

Are you saying you've now got a 3rd type of device, which presents all 6
media types on one USB interface and does _not_ use LUNs for each?

Remember, not all SmartMedia devices requre the us->extra parameter.  Many
take care of all of that in the hardware, which is common for 3-in-1,
4-in-1 and larger devices.

To do what you're talking about would require a multifunction device that
did not use any of the standard storage class mechanisms for _any_ of it's
types... is that what you've got?

Matt

On Thu, May 02, 2002 at 10:54:44PM +0200, [EMAIL PROTECTED] wrote:
>     From: Matthew Dharm <[EMAIL PROTECTED]>
> 
>     > 3. Presently usb-storage uses a single pointer us->extra
>     > with corresponding destructor us->extra_destructor.
>     > However, this does not really suffice. Multi-lun devices
>     > need one struct per lun, and such structs must be allocated
>     > and freed upon media change, independently of each other.
>     > Objections against introducing a second level, so that
>     > us->extra is a pointer to an array of length maxlun
>     > of pairs (pointer to info struct, pointer to destructor)?
>     > Can maxlun be very large so that the array length should
>     > be separate from maxlun?
> 
>     us->extra is designed for devices which have their own drivers.  The
>     'stock' protocol/transport conbinations don't use it.  If you have a
>     driver which needs some extra data, you're expected to manage it
>     yourself.  So this isn't an issue.
> 
> I'll come back to the other things later.
> But concerning this us->extra, it is in fact an issue.
> 
> Life is easy when struct us_data *us is all one needs.
> The additional information is found via us->extra.
> 
> But many devices are multi-lun, where each of the luns requires
> an entirely different driver. I have here a 6-in-1 reader that
> will read all of CompactFlash, SmartMedia, MemoryStick, SecureDigital..
> 
> Since the CompactFlash and SmartMedia drivers are completely
> unrelated, and both are used at the same time, they cannot
> both find their data at us->extra.
> 
> Of course I can have a special driver that knows that the SmartMedia
> extra data is at some given offset in us->extra, but otherwise
> this driver is completely identical to the driver of some other
> reader that only reads one type of card.
> 
> So, it is bad design to build this knowledge into the driver.
> It leads to code duplication.
> 
> A different solution is to pass everywhere the pair (us,info) around,
> instead of just us. That is a pity. A single handle to all one needs
> is much better.
> 
> Such considerations bring me to the desire to have something like
>      info = ((struct per_lun_data *) us->extra)[lun].data;
>      kill = ((struct per_lun_data *) us->extra)[lun].destructor;
> for all drivers in usb-storage.
> 
> 
> Andries

-- 
Matthew Dharm                              Home: [EMAIL PROTECTED] 
Maintainer, Linux USB Mass Storage Driver

You were using cheat codes too.  You guys suck.
                                        -- Greg to General Studebaker
User Friendly, 12/16/1997

Attachment: msg06212/pgp00000.pgp
Description: PGP signature

Reply via email to