nv_local.h revision 6257f37d
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
356257f37dSmrg#include "shadow.h"
36fc5a983dSmrg/*
37fc5a983dSmrg * Typedefs to force certain sized values.
38fc5a983dSmrg */
39fc5a983dSmrgtypedef unsigned char  U008;
40fc5a983dSmrgtypedef unsigned short U016;
41fc5a983dSmrgtypedef unsigned int   U032;
42fc5a983dSmrg
43fc5a983dSmrg/*
44fc5a983dSmrg * HW access macros.  These assume memory-mapped I/O, and not normal I/O space.
45fc5a983dSmrg */
46fc5a983dSmrg#define NV_WR08(p,i,d)  MMIO_OUT8((pointer)(p), (i), (d))
47fc5a983dSmrg#define NV_RD08(p,i)    MMIO_IN8((pointer)(p), (i))
48fc5a983dSmrg#define NV_WR16(p,i,d)  MMIO_OUT16((pointer)(p), (i), (d))
49fc5a983dSmrg#define NV_RD16(p,i)    MMIO_IN16((pointer)(p), (i))
50fc5a983dSmrg#define NV_WR32(p,i,d)  MMIO_OUT32((pointer)(p), (i), (d))
51fc5a983dSmrg#define NV_RD32(p,i)    MMIO_IN32((pointer)(p), (i))
52fc5a983dSmrg
53fc5a983dSmrg/* VGA I/O is now always done through MMIO */
54fc5a983dSmrg#define VGA_WR08(p,i,d) NV_WR08(p,i,d)
55fc5a983dSmrg#define VGA_RD08(p,i)   NV_RD08(p,i)
56fc5a983dSmrg
57fc5a983dSmrg#define NVDmaNext(pNv, data) \
58fc5a983dSmrg     (pNv)->dmaBase[(pNv)->dmaCurrent++] = (data)
59fc5a983dSmrg
60fc5a983dSmrg#define NVDmaStart(pNv, tag, size) {          \
61fc5a983dSmrg     if((pNv)->dmaFree <= (size))             \
62fc5a983dSmrg        NVDmaWait(pNv, size);                 \
63fc5a983dSmrg     NVDmaNext(pNv, ((size) << 18) | (tag));  \
64fc5a983dSmrg     (pNv)->dmaFree -= ((size) + 1);          \
65fc5a983dSmrg}
66fc5a983dSmrg
67fc5a983dSmrg#if defined(__i386__)
68fc5a983dSmrg#define _NV_FENCE() outb(0x3D0, 0);
69fc5a983dSmrg#else
70fc5a983dSmrg#define _NV_FENCE() mem_barrier();
71fc5a983dSmrg#endif
72fc5a983dSmrg
73fc5a983dSmrg#define WRITE_PUT(pNv, data) {       \
74fc5a983dSmrg  volatile CARD8 scratch;            \
75fc5a983dSmrg  _NV_FENCE()                        \
76fc5a983dSmrg  scratch = (pNv)->FbStart[0];       \
77fc5a983dSmrg  (pNv)->FIFO[0x0010] = (data) << 2; \
78fc5a983dSmrg  mem_barrier();                     \
79fc5a983dSmrg}
80fc5a983dSmrg
81fc5a983dSmrg#define READ_GET(pNv) ((pNv)->FIFO[0x0011] >> 2)
82fc5a983dSmrg
83fc5a983dSmrg
84fc5a983dSmrg#endif /* __NV_LOCAL_H__ */
85