Hi Jack,

Thanks your quick response. my comments:

(1)I'm not very clear about class devscan_data, what its main function?
so far I think it's no more different with a list type. The main
scanning function was implemented by ddu_devscan(). If devscan_data only
provide like append function, I suggest just use a list but not this
additional class.

(2)Which class will in charge of store "Device compatible name" string
used by ddu_package_lookup()? I did not put it in class dev_data because
I think this class only store general device information, while "Device
compatible name" is not a general information especially for that device
which already has a working driver. "Device compatible name" will be
only useful for fetching driver information. Shall we add a new function
to generate "Device compatible name"? This function's argument can be
pci path and output is "Device compatible name".

(3)function ddu_devscan() and ddu_package_lookup() will take a little
long time when it running, also during this time these two functions
will fork some child processes. Should we provide a mechanism to stop
these functions during it running then they can kill all their child
processes? This situation usually happens in GUI environment.

Also thanks Keith's review, I agree with his comments.

Thank,
Zhongyuan

?2009?12?17??07:02?Jack Schwartz???
> Hi Zhongyuan.
> 
> Thanks for your feedback.  Here's my assessment of requirements, based
> on both of our emails, and a new proposal which I believe addresses
> both
> of our needs and concerns.  Hopefully it is not too long...
> 
> A) You need a way to easily restrict the output to a given device
> type.
> I assume this why you proposed a dictionary keyed to the device type,
> at the top level.  I didn't account for that in my original proposal.
> 
> B) My proposal placed more of an emphasis on readability and clarity.
> This is why I originally proposed to store a device's attributes in a
> dictionary: attributes could be extracted by name.
> 
> Additional requirements, as I see things:
> 
> C) We don't want to make the data structures too complicated from a
> data
> access perspective.  For example a dictionary of lists of dictionaries
> makes the code hard to follow.
> 
> D) We don't want to introduce unnecessary overhead.  If we can use
> something more lightweight than a dictionary and still have the
> functionality we need, then I would favor not using the dictionary.
> 
> 
> ddu_devscan() will be returning a group of items corresponding to
> devices, so it is appropriate to use a collection of some kind for the
> top level data structure it returns.  At first I agreed with you that
> a
> dictionary would be best at the top level:
> - its items are named (via a key),
> - it can filter out unwanted items,
> - it doesn't have to keep a place for items it doesn't need.
> However, after thinking more, this could prove restrictive in the
> future.  We return lots of information for each device, any of which
> could potentially be used as a filter for returning data.  If the
> dictionary is keyed on device type and later we decide we need to
> filter on something else (or perhaps multiple items), say vendor ID
> and/or device ID, we're not set up for that.
> 
> Instead, I propose a new class, call it devscan_data, which stores the
> full list of items returned by ddu_devscan() and has a method for
> searching and returning only items of a particular device type.  Then
> in the future we could add other methods to support returning items
> based on some other filter criteria.  It is also lightweight and
> provides only the functionality needed.
> 
> What are the devscan_data list items?  They would store the different
> fields of data per device.  The list could point to dictionaries as I
> had originally proposed, to tuples as you have proposed, or to
> something
> else.  I have changed my mind about dictionaries, and think they are
> the
> wrong tool; the number and type of fields will not change from one
> device to the next.  I also still don't like tuples as the fields are
> hard to keep track of.  Named tuples are better, but more heavyweight
> than if we defined a new class to hold the data.  So I propose a new
> class, which would have attributes and get() methods for each field we
> want to return.  Let's call it dev_data for now.
> 
> To summarize:
> 
> ddu_devscan() would return a devscan_data object defined like this:
> 
> class devscan_data():
> 
>     def __init__()
>         # Holds objects of dev_data.
>         self.dev_data_list = []
> 
>     def add_dev_data_object(dev_data):
>        self.dev_data_list.append(dev_data)
>     
>     def get_list_by_devtype(device_type):
>         # loop through instance list data to find and return matches
> on
>         # device_type
> 
> Lists returned by get_list_by_devtype() point to objects of type
> dev_data.
> There is one of these objects per device returned.
> 
> class dev_data:
> 
>     def __init__(...):
>         self.device_type = ...
>         self.description = ...
>         self.driver_name
>         self.instance_ID
>         self.item_ID
>         self.parent_item_ID
>         self.attach_status
>         self.vendor_id
>         self.device_id
>         self.class_code
>         self.pci_path
> 
>     def get_device_type():
>         return self.device_type
> 
>     def get_description():
>         return self.description
> 
>     ...
>     ...
> 
>     def get_pci_path:
>         return self.pci_path
> 
> Does this work for you?
> 
>         Thanks,
>         Jack
> 
> On 12/15/09 21:56, zhongyuan sun - Sun Microsystems - Beijing China
> wrote: 
> > Hi Jack,
> > 
> > It's OK ddu_devscan return dictionary type instead of a list of tuples.
> > I suggest use device type as this dictionary's key and the dictionary's
> > value would be a list of tuples.
> > 
> > ddu_devscan description would be as following:
> > 
> > Arguments:
> > - return_missing_only: Boolean; default value is True
> >   - When True, ddu_devscan returns only the devices which are missing
> >     drivers.
> >   - When False, all devices found are returned.
> > - device_type: Type of devices to scan for.  "All" to check all.
> >   - Possible types
> > are:"audio"/"battery"/"cpu"/"cd_dvd"/"memory"/"network"/"storage"/"usb"/"video"/"others"
> > 
> > 
> > In each tuple of the list:
> > - ItemID:
> > - Parent Item ID:
> >     /*these two fields(ItemID and Parent Item ID) used for device tree to
> > identify a device and the controller it             attached to. Of course 
> > for a
> > controller we do not need to set its parent Item ID.
> >     */
> > - Device description:Device name
> > - Device ID:
> > - Classcode:
> > - PCI physical path:This field used to get its detail information.
> > - Driver name:
> > - Instance ID:
> > - Attachment status:
> >     /*These two fields(Instance ID and Attachment status) used for
> > determine whether a driver
> >      has been attached abnormally.
> >     */
> > - Vendor ID
> > 
> > 
> > Here is a short example of ddu_devscan return value:
> >   
> > > > > {'Audio': [(200,"","nVidia Corporation MCP55 High Definition
> > > > >         
> > Audio","0x0371","00040300","[0,6,1]","unknown",-1,"Detached","0x10de")],'Network':[(0,"","nVidia
> >  Corporation MCP55 
> > Ethernet","0x0373","00068000","[80,8,0]","nge",0,"Attached","0x10de"),(1,"","nVidia
> >  Corporation MCP55 
> > Ethernet","0x0373","00068000","[80,9,0]","nge",1,"Attached","0x10de")],'DVD':[(400,"","nVidia
> >  Corporation MCP55 
> > IDE","0x036e","0001018a","[0,4,0]","pci-ide",0,"Attached","0x10de"),(401,400,"MATSHITA
> >  DVD-RAM UJ-85JS","","","/pci at 0,0/pci-ide at 4/ide at 0/sd at 
> > 0,0","sd",0,"Attached","")]}
> > 
> > 
> > I also would like to discuss with you a issue during scan process. When
> > user kill GUI during scan process, some backround scripts will still be
> > running even GUI thread has been killed, these scripts was created when
> > performing scanning. Our solution was send a SIGUSR2 signal when GUI
> > want to kill its child processes. While if we wrapped our scripts into
> > ddu_devscan, how can this function send a signal to its child processes?
> > can we add a argument for this?
> > 
> > 
> > Thanks,
> > Zhongyuan
> > 
> > ?2009?12?15??06:43?Jack Schwartz???
> >   
> > > Hi Zhongyuan.
> > > 
> > > Thanks for reviewing the interface spec.  Moving to public forum.
> > > 
> > >  > I've some comments on DDU library API--ddu_devscan() function.
> > >  > You've expanded this function to involve all devices found, it's
> > >  > good! While for the Return value, currently it only includes
> > >  > "compatible name" and "device descriptor" strings, It's not
> > >  > sufficient especially for GUI part:
> > >  >
> > >  > *For non-mission items
> > >  > (1)If the driver works fine,we need a "driver name" field.
> > >  >
> > > OK
> > > 
> > >  > (2)If the driver dos not works fine, wee need the driver instance
> > >  > ID and attachment status for this driver.
> > >  >
> > >  > Instance ID is a number get from system when driver attached. If
> > >  > you have 2 e1000g nic cards and they all have been attached
> > >  > properly, then they will get instance 0 and 1, while if the driver
> > >  > have not been attached properly or device have been installed
> > >  > properly, the instance ID will be <0 and attachment status will be
> > >  > "detached".
> > >  >
> > >  > DDU GUI version used "instance ID" and attachment status to give
> > >  > user a notification "driver missconfigured".
> > > 
> > > OK
> > > 
> > >  >
> > >  > BTW, for both non-missing and missing device, I hope we can add
> > >  > "device category" argument to ddu_devscan function to indicate what
> > >  > type of category will be looked for(like "Audio"/"Network" etc). By
> > >  > default this argument can be set to "All" to look for all types of > 
> > > device.
> > > 
> > > OK.
> > > 
> > >  > For both missing and non-missing items, we also need these fields
> > >  > at least:
> > >  > (1)"Vendor id"/"device id"/"classcode" to identify which category
> > >  > this device belongs to.
> > > 
> > > OK.
> > > 
> > >  > (2)pci path to indicate this device's detail information. 
> > >  > Hopefully this can be involved into ddu_devscan function.
> > > 
> > > OK.
> > > 
> > > These are a lot of changes for ddu_devscan() for the GUI.  I propose 
> > > that ddu_devscan returns a list of dictionaries rather than a list of 
> > > tuples (as before).  Dictionaries because there are a lot of items 
> > > returned.  Also, not all fields will be used for all devices.  (For 
> > > example, the driver_name field won't be used when a device is missing).
> > > 
> > > So this would translate into adding a signature of ddu_devscan() as 
> > > follows:
> > > 
> > > Arguments:
> > > - return_missing_only: Boolean; default value is True
> > >   - When True, ddu_devscan returns only the devices which are missing
> > >     drivers.
> > >   - When False, all devices found are returned.
> > > - device_type: Type of devices to scan for.  "All" to check all.
> > > 
> > > ===> Please send the list of device types which are valid.  "Audio" and 
> > > "Network" were mentioned earlier.
> > > 
> > > Returns:
> > > A list of dictionaries, each dictionary representing a device.  List can 
> > > be empty (possible only when Return_missing_only is True) to represent a 
> > > system with no missing drivers.
> > > 
> > > Items in each dictionary are:
> > > 
> > > - compatible: device compatible name string, a space-separated string of 
> > > all compatible names for a device.  Compatible names in the string are 
> > > ordered from the most specific name to the most general name (i.e. the 
> > > "pciclass" definitions are listed last).
> > >     - It is OK if two list items have one or more compatible
> > >       names in common, but each list item should be unique.
> > > 
> > > - description: Device description.  can be used for error messages and 
> > > status reporting.
> > > 
> > > - device_type: Type of device (e.g. "Audio", "Network")
> > > 
> > > - driver_name: Name of the driver operating the device.  (Can be omitted 
> > > if driver is missing.)
> > > 
> > > - instance_ID: Instance ID assigned to the device.  (Always present.  
> > > Will be <0 if no driver is attached to the device.)
> > > 
> > > - attach_status: Status of whether or not a driver is attached to the 
> > > device.  (Always present.  Will be "detached" if driver is not attached, 
> > > "attached" if driver is attached.
> > > 
> > > ===> Any other statuses possible?
> > > 
> > > - vendor_id: Device's vendor ID.  (Always present.)
> > > 
> > > - device_id: Device's device ID  (Always present.)
> > > 
> > > - class_code: Device's class code  (Always present.)
> > > 
> > > - pci_path: Device path  (Always present.)
> > > 
> > > Please let me know by today COB (PRC time) the device types and if any 
> > > corrections are needed.
> > > 
> > >     Thanks,
> > >     Jack
> > > 
> > > On 12/04/09 09:20, Jack Schwartz wrote:
> > >     
> > > > Hi everyone.
> > > > 
> > > > FYI: Driver Update functional and programming interface specs have had 
> > > > a minor update.  The items addressed deal either with subtleties 
> > > > missed during the main review but which came up during development, or 
> > > > other things we discovered were needed during development.
> > > > 
> > > > Functional spec:
> > > > - Clarify that any repo can be specified, not only repos which a 
> > > > system already
> > > >  knows about.
> > > > - Clarify that it is an error if a publisher name is already mapped to 
> > > > a repo,
> > > >  and another repo with the same publisher name is requested.
> > > > - Add publisher to AI searchall capability
> > > > 
> > > > Interface spec:
> > > > - Add arg to ddu_devscan() so that the function can return either all 
> > > > devices
> > > >  on a system, or only devices which are missing their driver.
> > > > 
> > > > Links on the Driver Update page have been updated.  Previous spec 
> > > > versions have been retained on that page for comparison purposes.
> > > > 
> > > > Driver update page is at:
> > > > http://hub.opensolaris.org/bin/view/Project+caiman/Driver_Update
> > > > 
> > > > If there are any questions or comments please send them my way.
> > > > 
> > > >    Thanks,
> > > >    Jack
> > > > 
> > > > 
> > > >       
> >   
> 


Reply via email to