Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 25 Sep 1998 06:09:46 -0700 (PDT)
From:      Brian Jenkins <b_jenkins@yahoo.com>
To:        freebsd-mobile@FreeBSD.ORG, freebsd-hackers@FreeBSD.ORG
Cc:        sshetty@andrew.cmu.edu
Subject:   PCMCIA Controller Not Found
Message-ID:  <19980925130946.7967.rocketmail@send1d.yahoomail.com>

next in thread | raw e-mail | index | archive | help
I have installed FreeBSD 2.2.6 and PAO-980430 on a single board
computer with a PCMCIA add-on board. The PCMCIA controller chip is a
Cirrus Logic CL-PD6730, but the PCI code is not finding it.  I just
received the information below from the manufacturer.  What is the
best way to modify the kernel source code in order to get this working?

Brian Jenkins
b_jenkins@yahoo.com
----------------------------------------------------
The PCI configuration registers are accessed at I/O ports 0CF8h & 0CFCh.

0CF8h is the index register and 0CFCh is the data register.  All
accesses must be long word accesses.  The high word of the index will
be 8000h, and the low word has the target device in the high 5 bits of
the high byte, (sub fucntions, if present would be in the low 3 bits)
and the byte address of the data in the low byte.  Our PCMCIA adaptor
(if the first slice on the stack, which is the case for you) is device
4, so the indeces for the PCI configuration registers are 80002000,
80002004, 80002008 etc.

Register 1 needs to have 43h ORed in, to enable parity checking, and
enabling PCI memory and I/O accesses, and 03E0h must be ORed into
register 4 to set that as the standard base for operations that I
would expect your drivers to expect to find the controller at.  Here
is a block of code that should acomplish this:

mov	dx,CF8h		; pointer to index
mov	eax,80002004h		; index of register 1
out	dx,eax			; set it
mov	dx,CFCh		; pointer to data
in	eax,dx			; get the current data
or	ax,43h			; set the required bits (which are in the low word)
out	dx,eax			; shove the altered data back out
mov	dx,CF8h		; pointer to index (again)
mov	eax,80002010h		; index of register 4
out	dx,eax			; set it
mov	dx,CFCh		; pointer to data
in	eax,dx			; get the current data
or	ax,3E0h		; set the required bits (which are in the low word)
out	dx,eax			; shove this altered data back out

This must all happen before your PCMCIA driver(s) start to install.
_________________________________________________________
DO YOU YAHOO!?
Get your free @yahoo.com address at http://mail.yahoo.com


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-mobile" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19980925130946.7967.rocketmail>