summaryrefslogtreecommitdiffstats
path: root/sys/pci/if_fxpreg.h
diff options
context:
space:
mode:
authorgallatin <gallatin@FreeBSD.org>1999-09-30 19:03:12 +0000
committergallatin <gallatin@FreeBSD.org>1999-09-30 19:03:12 +0000
commit2be6fce1fa8c6a2f0969b67f4b4d4c5f8c96a172 (patch)
treefe521c61e966c1ad4f10877a35e9039e70e5cde0 /sys/pci/if_fxpreg.h
parentcb50d7f72c35cc4a3713dbc64619e390391e7848 (diff)
downloadFreeBSD-src-2be6fce1fa8c6a2f0969b67f4b4d4c5f8c96a172.zip
FreeBSD-src-2be6fce1fa8c6a2f0969b67f4b4d4c5f8c96a172.tar.gz
Make the fxp driver work on alpha, rather than panic the machine on boot
and/or when using the card. o Convert the driver to using bus_space. This allows alphas with fxp's to boot, rather than panic'ing because rman_get_virtual() doesn't really return a virtual address on alphas. o Fix an alpha unaligned access error caused by some misfeature of gcc/egcs: if link_addr & rbd_addr in the fxp_rfa struct are 32 bit quantities, egcs will assume they are naturally aligned. So it will do a ldl & some shifty/masky to twiddle 16 bit values in fxp_lwcopy(). However, if they are 16-bit aligned, the ldl will actually be done on a 16-bit aligned value & we will panic with an unaligned access error... Changing their definition to an array of chars seems to fix this. I obtained this from NetBSD. I've tested this on both i386 & alpha.
Diffstat (limited to 'sys/pci/if_fxpreg.h')
-rw-r--r--sys/pci/if_fxpreg.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/pci/if_fxpreg.h b/sys/pci/if_fxpreg.h
index c9fb405..5580813 100644
--- a/sys/pci/if_fxpreg.h
+++ b/sys/pci/if_fxpreg.h
@@ -245,8 +245,8 @@ struct fxp_cb_tx {
struct fxp_rfa {
volatile u_int16_t rfa_status;
volatile u_int16_t rfa_control;
- volatile u_int32_t link_addr;
- volatile u_int32_t rbd_addr;
+ volatile u_int8_t link_addr[4];
+ volatile u_int8_t rbd_addr[4];
volatile u_int16_t actual_size;
volatile u_int16_t size;
};
OpenPOWER on IntegriCloud