3.8.4 Унифицированная драйверная платформа для управления питанием

Предыдущая  Содержание  Следующая V*D*V

Драйверы устройств являются центральным элементом в программном обеспечении управления питанием; важно обеспечить их  совместную работу, особенно, если потребляемая мощность устройств, которыми они управляют, составляет значительную часть потребляемой мощности. Подобно методу, используемому механизмом управления частотой, ядро отделяет драйверы устройств от фактического программного обеспечения управления питанием в ядре, позволяя драйверам устройств зарегистрировать себя прежде, чем они примут участие в управлении питанием. Это делается с помощью вызова pm_register(); одним из аргументов этой функции является функция обратного вызова. Ядро хранит список всех драйверов, зарегистрированных в системе управления питанием; когда происходит событие, связанное с управлением питанием, выполняются обратные вызовы драйверов.

Если драйвер устройства участвует в управлении питанием, необходимо, чтобы с устройством не совершалось никаких операций, пока устройство находится в нерабочем состоянии. Для этого Linux предлагает интерфейс pmaccess; драйвер устройства должен вызвать этот интерфейс, прежде чем он начнёт работать с оборудованием. Для выявления простаивающих устройств предоставляется дополнительный интерфейс pm_dev_idle, так что они могут быть помещены в сон.

Важным вопросом в реализации управления питанием для включения драйверов является вопрос о порядке. Когда одно устройство зависит от другого устройства, они должны быть включены или выключены в правильном порядке. Классическим примером этого является подсистема PCI. Если все устройства PCI на шине PCI выключены, может быть отключена сама шина PCI. Но если шина отключена в то время, когда устройства всё ещё работают, или если какое-то устройство пробуждается перед самой шиной, это может оказаться катастрофическим. То же самое верно, когда шины PCI связаны. Подсистема PCI заботится об этом обходя шины PCI снизу вверх и убеждаясь, что устройства выключены, прежде чем каждая из встреченных шин будет отключена. После выхода из сна шина обходится сверху вниз, чтобы убедиться, что шина восстановлена до того, как будут пробуждены устройства на этой шине.

 

Предыдущая  Содержание  Следующая