Yep, I totally agree that with the usbhid.h thing I really had a bad day,
it was braindamage without excuse, sorry.
I still think that creating a separate header file solely for purpose of
having the large hid blacklist and all related defines separate from the
actual implementation is needed. The pages and pages of blacklist just
pollute the hid-core.c needlessly.
Of course hid-core.c must be the only user of this header. But seems like
this solution oposes your taste ("The point of a header file is to
*declare* things, not to have big data structures in"), so I would
probably not go this way.