summaryrefslogtreecommitdiffstats
path: root/private/ntos/nthals/halr98mp/mips/r98hal.h
blob: 63bfa51df1bba27824b28f49dafb67d83bac9f82 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#ident	"@(#) NEC r98hal.h 1.4 94/09/22 16:56:52"
/*++

Copyright (c) 1990  Microsoft Corporation

Module Name:

    r98hal.h


Abstract:

    This module is the header that dma structure and etc.

Author:


Revision History:

--*/

/*
 ***********************************************************************
 *
 *	S001	7/12		T.Samezima
 *
 *	Chg	define chenge
 *
 *	K001	94/09/22	N.Kugimoto
 *	Chg	DMA logcal addres sapce 4M--->16M
 */

#ifndef _R98HAL_
#define _R98HAL_

// Start S001
//
// Map buffer prameters.  These are initialized in HalInitSystem
//

extern PHYSICAL_ADDRESS HalpMapBufferPhysicalAddress;
extern ULONG HalpMapBufferSize;
// End S001

//
// define structure of adapter object
//
typedef struct _ADAPTER_OBJECT { // (= ntos/hal/i386/ixisa.h)
    CSHORT Type;
    CSHORT Size;
    struct _ADAPTER_OBJECT *MasterAdapter;
    ULONG MapRegistersPerChannel;
    PVOID AdapterBaseVa;
    PVOID MapRegisterBase;
    ULONG NumberOfMapRegisters;
    ULONG CommittedMapRegisters;       // new add
    struct _WAIT_CONTEXT_BLOCK *CurrentWcb;
    KDEVICE_QUEUE ChannelWaitQueue;
    PKDEVICE_QUEUE RegisterWaitQueue;
    LIST_ENTRY AdapterQueue;
    KSPIN_LOCK SpinLock;
    PRTL_BITMAP MapRegisters;
    PUCHAR PagePort;
    UCHAR ChannelNumber;
    UCHAR AdapterNumber;
    UCHAR AdapterMode;
} ADAPTER_OBJECT; // del duo's SingleMaskPort

//
// Define map register translation entry structure For Internal.
//

typedef struct _INTERNAL_TRANSLATION_ENTRY {
    PVOID VirtualAddress;
    ULONG PhysicalAddress;
    ULONG Index;
} INTERNAL_TRANSLATION_ENTRY, *PINTERNAL_TRANSLATION_ENTRY;

// Start S001
typedef struct _TRANSLATION_ENTRY {
    ULONG PageFrame;
} TRANSLATION_ENTRY, *PTRANSLATION_ENTRY;
// End S001

//
// define dma 
//

#define MACHINE_TYPE_ISA  0
#define MACHINE_TYPE_EISA 1

#define MAXIMUM_MAP_BUFFER_SIZE  0x40000     // 64 page

#define INITIAL_MAP_BUFFER_SMALL_SIZE MAXIMUM_MAP_BUFFER_SIZE
#define INITIAL_MAP_BUFFER_LARGE_SIZE MAXIMUM_MAP_BUFFER_SIZE

#define INCREMENT_MAP_BUFFER_SIZE 0x10000    // 16 page
#define MAXIMUM_ISA_MAP_REGISTER  (MAXIMUM_MAP_BUFFER_SIZE/(PAGE_SIZE*2))
                                             // 32 page

#define MAXIMUM_PHYSICAL_ADDRESS 0x60000000  // max : 16MB	// S001

#define COPY_BUFFER 0xFFFFFFFF
#define NO_SCATTER_GATHER 0x00000001
#define DMA_TRANSLATION_LIMIT 0x4000    	// TLB alloc size K001

//
// Define pointer to DMA control registers.
//
// Start S001
#define DMA_CONTROL(x)  ((volatile PDMA_CHANNEL)((ULONG)(KSEG1_BASE | LR_CHANNEL_BASE |(x))))
// End S001

//
// Define MRC register structure.
//
typedef struct _MRC_REGISTERS {     // offset(H)
    UCHAR Reserved1[48];            // 0-2f
    UCHAR SwReset;                  // 30
    UCHAR Reserved2[19];            // 31-43
    UCHAR LedData0;                 // 44
    UCHAR LedData1;                 // 45
    UCHAR LedData2;                 // 46
    UCHAR LedData3;                 // 47
} MRC_REGISTERS, *PMRC_REGISTERS;

//
// Define pointer to MRC registers.
//
#define MRC_CONTROL ((volatile PMRC_REGISTERS)(KSEG1_BASE | MRC_PHYSICAL_BASE))

#endif _R98HAL_