All of lore.kernel.org
 help / color / mirror / Atom feed
From: Philipp Rumpf <prumpf@inwestnet.de>
To: Grant Grundler <grundler@cup.hp.com>
Cc: willy@thepuffingroup.com, parisc-linux@thepuffingroup.com
Subject: Re: sba_io_pdir_entry()
Date: Wed, 1 Mar 2000 21:07:45 +0100	[thread overview]
Message-ID: <20000301210745.W812@abacus.local> (raw)
In-Reply-To: <200003011924.LAA09530@milano.cup.hp.com>; from grundler@cup.hp.com on Wed, Mar 01, 2000 at 11:24:44AM -0800

> /*
> * SBA Mapping Routine
> *
> * Given a virtual address (vba, arg2) and space id, (sid, arg1)
> * init_io_pdir_entry() loads the I/O PDIR entry pointed to by
> * pdir_ptr (arg0). Each IO Pdir entry consists of 8 bytes as
> * shown below (MSB == bit 0):
> *
> *  0                    19                                 51   55       63
> * +-+---------------------+----------------------------------+----+--------+
> * |V|        U            |            PPN[43:12]            | U  |   VI   |
> * +-+---------------------+----------------------------------+----+--------+
> *
> *  V  == Valid Bit
> *  U  == Unused
> * PPN == Physical Page Number
> * VI  == Virtual Index
> *
> * The physical address fields are filled with the results of the LPA
> * instruction.  The virtual index field is filled with the results of
> * of the LCI (Load Coherence Index) instruction.  The 8 bits used for
> * the virtual index are bits 12:19 of the value returned by LCI.
> *
> * We need to pre-swap the bytes since PCX-W is Big Endian.
> */
> 
> void __inline__ sba_io_pdir_entry(u64_t *pdir_ptr, space_t sid, void *vba)
> {
>         register u64_t tmp;
		  ^^^^^^
u64, not u64_t, please

>         mtsp(sid,1);

>         __asm__("lpa (%sr1,%1),%0"      /* Load the physical address */
>                 : "=r" (tmp) : "r" (vba));
> 
>         tmp &= ~0xfffUL;                /* clear page offset bits */
> 
>         __asm__( "depdi 0x1,0,1,%0"             /* Set enable bit */
>                 "lci (%sr1, %1),%r29\n\t"       /* Load coherent index */
>                 "extru %r29,19,8,%r29\n\t"      /* right shift coherent index */
>                 "depd %r29,63,8,%0"             /* insert coherent index */
> 
>                 : "=&r" (tmp)   /* output */
>                 : "r" (vba) /* input */
>                 : "r29" /* side effects? */
>                 )

asm("lpa (%sr1, %1), %0", "=r" (pa), "r" (vba));
asm("lci (%sr1, %1), %0", "=r" (ci), "r" (vba));

pa &= ~4095;
ci = (ci >> 10) & 255;

tmp = (ci<<foo) | (pa<<bar);

sounds better to me.

> Side note: should "space_t" be "unsigned long" or does parisc-linux
> define something already for space ID's?

unsigned long should be fine.

> I would prefer not to assume space ID is always zero or something else
> hard coded.

We want to map IO space to userspace, so the version above is all right
(it's a bit careful, but it shouldn't waste any performance).

	Philipp

      reply	other threads:[~2000-03-02  1:07 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2000-03-01 14:07 [parisc-linux] __asm__ willy
2000-03-01 15:50 ` Philipp Rumpf
2000-03-01 19:24   ` [parisc-linux] sba_io_pdir_entry() Grant Grundler
2000-03-01 20:07     ` Philipp Rumpf [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20000301210745.W812@abacus.local \
    --to=prumpf@inwestnet.de \
    --cc=grundler@cup.hp.com \
    --cc=parisc-linux@thepuffingroup.com \
    --cc=willy@thepuffingroup.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.