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
prev parent 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox