> Если сделать все в драйвере и открыть его, то любой гоблин сможет поднять мощность передатчика.
> Такое устройство не пройдет FCC сертификацию по определению.Если нужно жёстко ограничить мощность передатчика, то ограничитель встраивают в виде транзистора. Если впаяный транзистор можно заменить, то транзистор можно встроить в микросхему. Микросхему тоже можно заменить, и вообще, можно выпустить свою PCI-плату. Интересно, насколько жёсткой должна быть защита от оверклокинга, чтобы пройти FCC?
> Поэтому приходится извращаться и часть кода убирать в проприетарный фирмварь, а к нему доделывать костыль в виде открытого драйвера.
Часть кода необходимо делать в виде фирмвари хотя бы потому, что центральный процессор не может обрабатывать каждый чих контроллера; или может, но тратит на это слишком много ресурсов. Типичный пример - дешёвые сетевухи от Realtek, которые грузят процессор по самые помидоры, тогда как более дорогие карты этого не делают. Многопроцессорные системы, у которых каждый контроллер имеет свой процессор, имеют лучшее отношение цены к производительности, чем однопроцессорные системы - это было понято уже на IBM-360 (советский аналог - ЕС).
Объяснение:
- центральный процессор очень много времени тратит на обработку аппаратных прерываний и переключение в режим драйвера, поэтому уменьшение кол-ва аппаратных прерываний сильно разгружает его;
- процессор на контроллере избавлен от необходимости поддерживать многозадачность и защиту памяти от доступа программ, поэтому имеет ту же производительность при меньшей цене;
- процессор на контроллере имеет собственную память, обращения в которую не затрагивают основную память.