kern/69127: [patch] EtherLink III LAN PC Card 3C589D not detected

Andrew Belashov bel at orel.ru
Thu Jul 15 13:30:45 PDT 2004


>Number:         69127
>Category:       kern
>Synopsis:       [patch] EtherLink III LAN PC Card 3C589D not detected
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Jul 15 20:30:33 GMT 2004
>Closed-Date:
>Last-Modified:
>Originator:     Andrew Belashov
>Release:        FreeBSD 5.2-CURRENT i386
>Organization:
ORIS
>Environment:
System: FreeBSD belnb.localdomain 5.2-CURRENT FreeBSD 5.2-CURRENT #12: Thu Jul 15 22:54:29 MSD 2004 bel at belnb.localdomain:/usr/obj/usr/src/sys/BELNBO i386


	Machine: Fujitsu FMV-BIBLIO NU13 Notebook (Pentium I @133MHz),
	TI1131 CardBus controller.
>Description:
	Some PCMCIA (PC Card) does not detected in NEWCARD code.
>How-To-Repeat:
	Insert card. Card does not detected. Messages on console:

----------------------------------------------------
pccard0: read_cis
exca_mem_map window 0 bus 88010000+1000 card addr 0
common memory
exca_do_mem_map window 0: 0010 8010 0000 88 (88010000+00001000.00001000*00000000
)
attribtue memory
exca_do_mem_map window 0: 0010 8010 4000 88 (88010000+00001000.00001000*00000000
)
[...]
pccard0: CIS tuple chain:
unhandled CISTPL 40
 40 00
CISTPL_NONE
 00
CISTPL_NONE
 00
[...]
pccard0: Card has no functions!
cbb0: PC Card card activation failed
----------------------------------------------------

>Fix:

	This patch correct?

--- exca.c.diff begins here ---
--- sys/dev/exca/exca.c.orig	Tue Oct  7 08:29:04 2003
+++ sys/dev/exca/exca.c	Thu Jul 15 22:51:02 2004
@@ -180,9 +180,12 @@
 {
 	struct mem_map_index_st *map;
 	struct pccard_mem_handle *mem;
+	uint32_t offset;
 	
 	map = &mem_map_index[win];
 	mem = &sc->mem[win];
+	offset = ((mem->cardaddr >> EXCA_CARDMEM_ADDRX_SHIFT) -
+	    (mem->addr >> EXCA_SYSMEM_ADDRX_SHIFT)) & 0x3fff;
 	exca_putb(sc, map->sysmem_start_lsb,
 	    (mem->addr >> EXCA_SYSMEM_ADDRX_SHIFT) & 0xff);
 	exca_putb(sc, map->sysmem_start_msb,
@@ -201,9 +204,9 @@
 	    (mem->addr >> EXCA_MEMREG_WIN_SHIFT) & 0xff);
 
 	exca_putb(sc, map->cardmem_lsb,
-	    (mem->cardaddr >> EXCA_CARDMEM_ADDRX_SHIFT) & 0xff);
+	    offset & 0xff);
 	exca_putb(sc, map->cardmem_msb,
-	    ((mem->cardaddr >> (EXCA_CARDMEM_ADDRX_SHIFT + 8)) &
+	    ((offset >> 8) &
 	    EXCA_CARDMEM_ADDRX_MSB_ADDR_MASK) |
 	    ((mem->kind == PCCARD_A_MEM_ATTR) ?
 	    EXCA_CARDMEM_ADDRX_MSB_REGACTIVE_ATTR : 0));
--- exca.c.diff ends here ---

With best regards,
 Andrew Belashov.
>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list