[openib-general] ip over ib throughtput
Grant Grundler
iod00d at hp.com
Tue Jan 4 17:00:18 PST 2005
On Tue, Jan 04, 2005 at 04:38:45PM -0800, Roland Dreier wrote:
> No, mthca is blissfully unaware of the details of assigning MSI
> vectors.
Ok
> I'm talking about drivers/pci/msi.[ch], which currently have
> a very simple msi_address_init() function that assumes Intel-style
> addresses, and similarly encode Intel-style message contents.
I don't think those are Intel specific:
#define MSI_ADDRESS_HEADER 0xfee
#define MSI_ADDRESS_HEADER_SHIFT 12
#define MSI_ADDRESS_HEADER_MASK 0xfff000
#define MSI_ADDRESS_DEST_ID_MASK 0xfff0000f
PA-RISC platforms since 1999 (about) use the same address range:
| 2.5.1 PCI Interrupt transactions
| When a PCI device does a Memory Write transaction to the 1MB address
| range starting at 0xFEE0_0000. The PSC claims the transaction and puts
| the address and data into the WPF, identifying them as interrupt address
| and interrupt data. The transaction makes its way to the Ibus. The MBIB
| subsequently does an interrupt transaction on the Merced bus with the
| same address and data, but using the Merced bus encoding for an interrupt
| transaction.
(N-class PA-RISC boxes had a Merced Bus)
Page 12 of 57 of the ZX1 Mem/IO Controller Doc has the system
address map and also places the interrupt block at 0xfee00000.
I wondered if the MSI_ADDRESS_HEADER_SHIFT needed to be 20 instead
of 12 (and it doesn't):
static void msi_address_init(struct msg_address *msi_address)
{
...
dest_id = (MSI_ADDRESS_HEADER << MSI_ADDRESS_HEADER_SHIFT);
...
msi_address->lo_address.u.dest_id = dest_id;
...
}
but "struct msg_address" uses bit fields to put dest_id in the right
location of the "vector". At least I expect it's the right location
since MSI-X seems to work for other little endian arches.
I'll keep looking.
thanks,
grant
More information about the general
mailing list