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