Executing downloaded micorcode of fxp panics sparc64
Pyun YongHyeon
yongari at kt-is.co.kr
Mon Nov 8 00:44:41 PST 2004
Hi,
It seems that fxp driver panics sparc64 system when executing
downloaded microcode. The following patch fixes the panic.
It would be appriciated if interested users could apply
the patch, download microcode and try to pass packets on fxp.
Thanks.
--
Regards,
Pyun YongHyeon
http://www.kr.freebsd.org/~yongari | yongari at freebsd.org
-------------- next part --------------
--- if_fxp.c.orig Mon Sep 20 11:22:43 2004
+++ if_fxp.c Mon Nov 8 17:35:53 2004
@@ -2624,7 +2624,7 @@
static u_int32_t fxp_ucode_d102[] = D102_B_RCVBUNDLE_UCODE;
static u_int32_t fxp_ucode_d102c[] = D102_C_RCVBUNDLE_UCODE;
-#define UCODE(x) x, sizeof(x)
+#define UCODE(x) x, sizeof(x)/sizeof(u_int32_t)
struct ucode {
u_int32_t revision;
@@ -2651,6 +2651,7 @@
{
struct ucode *uc;
struct fxp_cb_ucode *cbp;
+ int i;
for (uc = ucode_table; uc->ucode != NULL; uc++)
if (sc->revision == uc->revision)
@@ -2661,7 +2662,8 @@
cbp->cb_status = 0;
cbp->cb_command = htole16(FXP_CB_COMMAND_UCODE | FXP_CB_COMMAND_EL);
cbp->link_addr = 0xffffffff; /* (no) next command */
- memcpy(cbp->ucode, uc->ucode, uc->length);
+ for (i = 0; i < uc->length; i++)
+ cbp->ucode[i] = htole32(uc->ucode[i]);
if (uc->int_delay_offset)
*(u_int16_t *)&cbp->ucode[uc->int_delay_offset] =
htole16(sc->tunable_int_delay + sc->tunable_int_delay / 2);
More information about the freebsd-sparc64
mailing list