o
    •Û_Ý  ã                   @   s@   d dl mZ ddlmZ ddlZej ¡ ZG dd„ dej	ƒZ	dS )é   )Úbaseé    Nc                       sl   e Zd ZdZ‡ fdd„Z‡ fdd„Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Z‡  ZS )ÚPluginz:
	Base class for plugins with device hotpluging support.
	c                    s   t t| ƒj|i |¤Ž d S ©N)Úsuperr   Ú__init__)ÚselfÚargsÚkwargs©Ú	__class__© ú7/usr/lib/python3/dist-packages/tuned/plugins/hotplug.pyr      s   zPlugin.__init__c                    s   t t| ƒ ¡  |  ¡  d S r   )r   r   ÚcleanupÚ_hardware_events_cleanup©r   r   r   r   r      s   zPlugin.cleanupc                 C   ó   t ƒ ‚r   ©ÚNotImplementedErrorr   r   r   r   Ú_hardware_events_init   ó   zPlugin._hardware_events_initc                 C   r   r   r   r   r   r   r   r      r   zPlugin._hardware_events_cleanupc                 C   s   |   ¡  d S r   )r   r   r   r   r   Ú_init_devices   s   zPlugin._init_devicesc                 C   sP   |dkrt  d|j ¡ |  |¡ d S |dkr&t  d|j ¡ |  |¡ d S d S )NÚaddzdevice '%s' addedÚremovezdevice '%s' removed)ÚlogÚinfoÚsys_nameÚ_add_deviceÚ_remove_device)r   ÚeventÚdevicer   r   r   Ú_hardware_events_callback   s   þz Plugin._hardware_events_callbackc                 C   sÊ   |j }|| j| jB v rd S t| j ¡ ƒD ]A\}}t|  ||g¡ƒdkrUt 	d||f ¡ | j 
|¡ |  ||jd|g¡ |  ||¡ |  ||jd|g¡ |j 
|¡  d S qt d| ¡ | j 
|¡ d S )Nr   z!instance %s: adding new device %sÚapplyzno instance wants %s)r   Ú_assigned_devicesÚ_free_devicesÚlistÚ
_instancesÚitemsÚlenÚ_get_matching_devicesr   r   r   Ú_call_device_scriptÚ
script_preÚ_added_device_apply_tuningÚscript_postÚprocessed_devicesÚdebug)r   r    Údevice_nameÚinstance_nameÚinstancer   r   r   r   $   s   ù	zPlugin._add_devicec                 C   s´   |j }|| j| jB vrd S t| j ¡ ƒD ]=}||jv rQ|  ||jd|g¡ |  	||¡ |  ||j
d|g¡ |j |¡ t|jƒt|jƒ dk|_| j |¡  d S q| j |¡ d S )NÚunapplyr   )r   r#   r$   r%   r&   Úvaluesr.   r*   r-   Ú_removed_device_unapply_tuningr+   r   r(   Úassigned_devicesÚactive)r   r    r0   r2   r   r   r   r   6   s$   
ÿÿözPlugin._remove_devicec                 C   s>   |   ||g¡ |jr| j tjtj¡r|  ||¡ d S d S d S r   )Ú_execute_all_device_commandsÚhas_dynamic_tuningÚ_global_cfgÚgetÚconstsÚCFG_DYNAMIC_TUNINGÚCFG_DEF_DYNAMIC_TUNINGÚ_instance_apply_dynamic©r   r2   r0   r   r   r   r,   J   s   ÿz!Plugin._added_device_apply_tuningc                 C   s6   |j r| j tjtj¡r|  ||¡ |  ||g¡ d S r   )r9   r:   r;   r<   r=   r>   Ú_instance_unapply_dynamicÚ_cleanup_all_device_commandsr@   r   r   r   r5   O   s   z%Plugin._removed_device_unapply_tuning)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r!   r   r   r,   r5   Ú__classcell__r   r   r   r   r      s    r   )
Ú r   Útuned.constsr<   Ú
tuned.logsÚtunedÚlogsr;   r   r   r   r   r   r   Ú<module>   s
    
