The algorithm for decreasing the size of the primary DMA buffer could be better. The size should be rounded up to the nearest page size, then decrease the request size by a single page each pass through the loop.
This is wrong concept! Static table has too strong limitations! 'device_name' and 'driver_name' should be calculated from 'device_id' 'device_description' should be read from device or moved to user space and handled by library!