/* Common IRQ routing practice: nibbles in config space, offset by some magic constant.  */
static unsigned int read_config_nybble(struct pci_dev *router, unsigned offset, unsigned nr)
/* Common IRQ routing practice: nibbles in config space, offset by some magic constant.  */
static unsigned int read_config_nybble(struct pci_dev *router, unsigned offset, unsigned nr)
{
	u8 x;
	unsigned reg = offset + (nr >> 1);
	pci_read_config_byte(router, reg, &x);
	return (nr & 1) ? (x >> 4) : (x & 0xf);
}