In Linux a FIQ handler can not be registered with request_irq.
FIQs have highest priority and a lot of dedicated registers to guarantee low latency. Furthermore the ARM ARM says
The FIQ vector is deliberately the last vector to allow the FIQ exception-handler software to be placed directly at address 0x0000001C or 0xFFFF001C, without requiring a branch instruction from the vector.
FIQ handlers should therefore be very short. If you want to write the handler in C, you need to make sure the handler can be run from that address and has the correct prolog/epilog (see GCC documentation on attribute interrupt).
There are functions in linux/arm/kernel/fiq.c that allow to claim the FIQ interrupt, copy a handler to the correct address, and get/set the dedicated registers for parameter exchange. You need to tell the copy function how long your function is. I don’t think there is a non-ugly way to determine this for a C function. Either use these functions or copy their behavior.
For an example on how to use the functions take a look at the Linux floppy driver for RiscPC machines. They call the FIQ handler for every byte to/from the floppy.