Hi Garrett, Artem and all on driver-discuss and driver-usb,

if I may ask for your advice *again* regarding my Option HSO driver project:

Yesterday, I have started to draft the design for the three driver approach 
Artem and Garrett were recommending:

* usbhso should become a nexus driver to discover the device's logical ports:
   network ports, muxed serial ports or CDC-like serial ports.

   usbhso should create for each logical port (or a set of logical ports of the
   same type) a devi node. Each port node's devi_parent_data should contain the
   information the port driver needs to do its job:

   - port config (what kind of a port is this ?)
   - which USB interface, alt config to use (and maybe endpoint indexes)
   - pointer to the usba_device_t of the usba framework
   - for mux ports, maybe a pointer to shared port config (I am also considering
     to use one devi node for all the muxed ports of one USB interface, which
     seems to be the cleaner solution. Then the shared port config could be
     maintained by the port driver).

* usbshso (s for serial, according to Artem's usbser naming convention) will be
   a client of usbser and handle muxed and ordinary serial ports. It
   will resemble usbsacm to a certain extent.

* usbnhso (n for network) will be a GLDv3 driver and handle network I/O

At the moment, I am facing two design decisions on which I would appreciate 
your 
advice:

- My understanding so far is that only the nexus driver should register as a
   USBA client, as only it would represent the whole device from a USB point of
   view. Also, USBA needs devi_parent_data to hold the usba_device_t, so if the
   port drivers were USBA clients, I'd need another way to pass down information
   the device tree.

   If this was the way to go, the port drivers would need to perform USBA
   framework actions on the usba_device_t the nexus driver has registered on.

   My first question is if only registering the nexus driver as a USBA client
   sounds like the right decision and in particular if it is acceptable for a
   port driver to use the nexus driver's usba_device_t.

- Secondly, if only the nexus driver is a USBA client, I suspect it will need
   some way to have the port drivers execute some actions. Right now the only
   example I've got on my list are the USB event callbacks, but I am pretty sure
   there will be other cases.

   Is it a good approach to include in devi_parent_data a list of callbacks into
   the port drivers for the nexus driver to execute?

Also, one question on the side: Is it correct that for nexus drivers it is more 
appropriate to use devi_driver_data (via ddi_(set|get)_driver_private) rather 
than a soft state because each nexus driver instance gets its own dip anyway?


Nils
_______________________________________________
driver-discuss mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/driver-discuss

Reply via email to