• Emmanuel Grumbach's avatar
    iwlagn: introduce struct iwl-shared - known by all layers · cac988a6
    Emmanuel Grumbach authored
    This struct will hold pointers to all the layers, so that every layer will find
    the pointers it needs when calling another layer.
    
    Note that the drv_data set to struct device is now a pointer to
    struct iwl_shared.
    This solves of bug that I introduced in
    
    	iwlagn: simplify the bus architecture
    
    Bug description:
    
    sysfs gets the the driver data from struct device. Till the aforementioned
    patch, dev_get_drvdata would return iwl_priv. After the patch, dev_get_drvdata
    return iwl_bus which is buggy since the sysfs handlers rely on this value, and
    sysfs handlers need iwl_priv.
    
    Now, dev_get_drvdata return iwl-shared. Since we have pointers to all the
    layers in iwl_shared, every layer will be able to get the pointer it needs:
    bus layer will gets iwl_bus from the PCI suspend callbacks, and the sysfs
    handlers will get the iwl_priv they need.
    
    In order to keep good encapsulation, we need to avoid to dereference iwl_priv
    from a different layer. This is why instead of including iwl-dev.h from
    iwl-shared.h, I added a forward declaration to iwl_priv. Moreover we keep type
    safety while providing encapsulation.
    Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
    Signed-off-by: default avatarWey-Yi Guy <wey-yi.w.guy@intel.com>
    Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
    cac988a6
iwl-agn.c 107 KB