nv_local.h revision fc5a983d
1fc5a983dSmrg/*
2fc5a983dSmrg * Copyright (c) 1993-2003 NVIDIA, Corporation
3fc5a983dSmrg *
4fc5a983dSmrg * Permission is hereby granted, free of charge, to any person obtaining a
5fc5a983dSmrg * copy of this software and associated documentation files (the
6fc5a983dSmrg * "Software"), to deal in the Software without restriction, including
7fc5a983dSmrg * without limitation the rights to use, copy, modify, merge, publish,
8fc5a983dSmrg * distribute, sublicense, and/or sell copies of the Software, and to
9fc5a983dSmrg * permit persons to whom the Software is furnished to do so, subject to
10fc5a983dSmrg * the following conditions:
11fc5a983dSmrg *
12fc5a983dSmrg * The above copyright notice and this permission notice shall be included
13fc5a983dSmrg * in all copies or substantial portions of the Software.
14fc5a983dSmrg *
15fc5a983dSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16fc5a983dSmrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17fc5a983dSmrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18fc5a983dSmrg * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19fc5a983dSmrg * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20fc5a983dSmrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21fc5a983dSmrg * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22fc5a983dSmrg */
23fc5a983dSmrg
24fc5a983dSmrg#ifndef __NV_LOCAL_H__
25fc5a983dSmrg#define __NV_LOCAL_H__
26fc5a983dSmrg
27fc5a983dSmrg/*
28fc5a983dSmrg * This file includes any environment or machine specific values to access the
29fc5a983dSmrg * HW.  Put all affected includes, typdefs, etc. here so the riva_hw.* files
30fc5a983dSmrg * can stay generic in nature.
31fc5a983dSmrg */
32fc5a983dSmrg#include "compiler.h"
33fc5a983dSmrg#include "xf86_OSproc.h"
34fc5a983dSmrg
35fc5a983dSmrg/*
36fc5a983dSmrg * Typedefs to force certain sized values.
37fc5a983dSmrg */
38fc5a983dSmrgtypedef unsigned char  U008;
39fc5a983dSmrgtypedef unsigned short U016;
40fc5a983dSmrgtypedef unsigned int   U032;
41fc5a983dSmrg
42fc5a983dSmrg/*
43fc5a983dSmrg * HW access macros.  These assume memory-mapped I/O, and not normal I/O space.
44fc5a983dSmrg */
45fc5a983dSmrg#define NV_WR08(p,i,d)  MMIO_OUT8((pointer)(p), (i), (d))
46fc5a983dSmrg#define NV_RD08(p,i)    MMIO_IN8((pointer)(p), (i))
47fc5a983dSmrg#define NV_WR16(p,i,d)  MMIO_OUT16((pointer)(p), (i), (d))
48fc5a983dSmrg#define NV_RD16(p,i)    MMIO_IN16((pointer)(p), (i))
49fc5a983dSmrg#define NV_WR32(p,i,d)  MMIO_OUT32((pointer)(p), (i), (d))
50fc5a983dSmrg#define NV_RD32(p,i)    MMIO_IN32((pointer)(p), (i))
51fc5a983dSmrg
52fc5a983dSmrg/* VGA I/O is now always done through MMIO */
53fc5a983dSmrg#define VGA_WR08(p,i,d) NV_WR08(p,i,d)
54fc5a983dSmrg#define VGA_RD08(p,i)   NV_RD08(p,i)
55fc5a983dSmrg
56fc5a983dSmrg#define NVDmaNext(pNv, data) \
57fc5a983dSmrg     (pNv)->dmaBase[(pNv)->dmaCurrent++] = (data)
58fc5a983dSmrg
59fc5a983dSmrg#define NVDmaStart(pNv, tag, size) {          \
60fc5a983dSmrg     if((pNv)->dmaFree <= (size))             \
61fc5a983dSmrg        NVDmaWait(pNv, size);                 \
62fc5a983dSmrg     NVDmaNext(pNv, ((size) << 18) | (tag));  \
63fc5a983dSmrg     (pNv)->dmaFree -= ((size) + 1);          \
64fc5a983dSmrg}
65fc5a983dSmrg
66fc5a983dSmrg#if defined(__i386__)
67fc5a983dSmrg#define _NV_FENCE() outb(0x3D0, 0);
68fc5a983dSmrg#else
69fc5a983dSmrg#define _NV_FENCE() mem_barrier();
70fc5a983dSmrg#endif
71fc5a983dSmrg
72fc5a983dSmrg#define WRITE_PUT(pNv, data) {       \
73fc5a983dSmrg  volatile CARD8 scratch;            \
74fc5a983dSmrg  _NV_FENCE()                        \
75fc5a983dSmrg  scratch = (pNv)->FbStart[0];       \
76fc5a983dSmrg  (pNv)->FIFO[0x0010] = (data) << 2; \
77fc5a983dSmrg  mem_barrier();                     \
78fc5a983dSmrg}
79fc5a983dSmrg
80fc5a983dSmrg#define READ_GET(pNv) ((pNv)->FIFO[0x0011] >> 2)
81fc5a983dSmrg
82fc5a983dSmrg
83fc5a983dSmrg#endif /* __NV_LOCAL_H__ */
84