Porting the Digi driver

Ronnie Sanford (ronnie@dgii.com)
Thu, 6 Feb 1997 12:51:30 -0600 (CST)

Hi All,

I am trying to port the latest Digi Serial driver to the 2.1.x series kernels
(In this case 2.1.24). The driver works find under 2.0.28 but running under
the new kernel it fails. In particular it fails the first time it actually
attempts to access the board.

Here is the line it fails on :
ch->txptr = memaddr + (((bc->tseg) << 4) & 0x1fffff);

The above pertinent parts are defined as such:

unsigned char *memaddr;
volatile ushort tseg;

bc->tseg is actually referencing our board and is initialized as such:

bc = (volatile struct board_chan *) ((ulong)memaddr + CHANSTRUCT);

Above CHANSTRUCT = 0x1000, and memaddr = 0xd0000
The offset of tseg in the bc structure is 0x8.
So the address below 000d1008 looks correct to me. We are trying to address
the physical location on our board address 0x0d1008.
My question :
Has the mapping changed here ? Do we need to do something similar to the way
PCI address are handeled with an ioremap command ? If this is not correct
how do you go about referencing physical memory.

I looked at some of the other serial type drivers, but gained no clues. Any
help would be seriously appreciated !!!!!


Ronnie Sanford
Digi International
PS - Dump follows

A copy of the dump follows :
Unable to handle kernel paging request at virtual address 000d1008
current->tss.cr3 = 00d67000, %cr3 = 00d67000
*pde = 00000000
Oops: 0000
CPU: 0
EIP: 0010:[<c019b26e>]
EFLAGS: 00013296
eax: 0007f2fb ebx: c021a7e8 ecx: 4000000d edx: 00015f90
esi: 00000002 edi: 000d0d10 ebp: 000d1000 esp: c0c4aed4
ds: 0018 es: 0018 ss: 0018
Process digiDload (pid: 230, process nr: 44, stackpage=c0c4a000)
Stack: c01d30fb c01d30fb c01d30fb 00000000 00000000 c09de400 00006569 00000002
00000019 00003246 c019db00 00000124 00000002 00000020 00000000 c0219a28
000d0d10 000d0000 00000000 c019c1ce 00000000 c0c75000 00000000 c09de400
Call Trace: [<c019db00>] [<c019c1ce>] [<c0184674>] [<c0184674>] [<c01786f9>] [<c018a451>] [<c012e417>]
Code: 66 8b 45 08 c1 e0 04 25 f0 7f 00 00 03 44 24 44 89 43 60 66