summaryrefslogtreecommitdiffstats
path: root/private/mvdm/dpmi/smartdrv.inc
blob: 5c6dd8f74a69883950ea688033e3252441c5d96c (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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147

; Copyright (c) Microsoft Corporation 1989-1991. All Rights Reserved.

;******************************************************************************
;
;   Title:	smartdrv.inc - smartdrv equates & structures
;
;   Version:	1.00
;
;   Date:	15-Sep-1989
;
;   Author:	ARR
;
;------------------------------------------------------------------------------
;
;   Change log:
;
;      DATE	REV		    DESCRIPTION
;   ----------- --- -----------------------------------------------------------
;   15-Sep-1989 ARR Original
;
;==============================================================================

;
; Device name of SMARTDRV
;
SD_DEV_NAME	equ	"SMARTAAR",0

;
; SMARTDRV cache type (XMS or EMS) -- SD_IR_Driver_Type field
;

SD_CACHE_XMS	equ	1	    ; Cache is in XMS
SD_CACHE_EMS	equ	2	    ; Cache is in EMS

;
; Structure of the data returned on the SMARTDRV IOCTL read call
;
SD_IOCTL_Read	struc

    SD_IR_Write_Through   db	?   ; Write-through flag, currently always 1
    SD_IR_Write_Buff	  db	?   ; Buffer write flag, currently always 0
    SD_IR_Enable_Int13	  db	?   ; Cache enable flag, 1 = enabled
    SD_IR_Driver_Type	  db	?   ; Type 1 (XMS cache) or 2 (EMS cache)
    SD_IR_Tick_Setting	  dw	?   ; Ticks between flushes, currently unused
    SD_IR_Lock_Cache	  db	?   ; Non-zero if cache is locked
    SD_IR_Reboot_Flush	  db	?   ; Non-zero if cache should be flushed on reboot
    SD_IR_Cache_All	  db	?   ; Zero if full track writes are not cached
			  db	?   ; Unused
    SD_IR_Original_INT13  dd	?   ; INT 13 address SMARTDRV hooked
    SD_IR_Version	  dw	?   ; SMARTDrive version, packed BCD
			  dw	?   ; Unused
                    ; Next three values are used for computing
                    ; cache statistics.  They may be scaled rather
                    ; than absolute values
    SD_IR_Total_Sec_Read  dw	?   ; Count of sectors read
    SD_IR_Cache_Sec_Read  dw	?   ; Count of sectors read from cache
    SD_IR_Track_Sec_Read  dw	?   ; Count of sectors read from track buffer
                    ; Cache statistics
    SD_IR_Cache_Hit_Ratio db	?   ; = Cache_Sec_Read * 100 / Total_Sec_Read
    SD_IR_Track_Hit_Ratio db	?   ; = Track_Sec_Read * 100 / Total_Sec_Read

    SD_IR_Total_Tracks	  dw	?   ; Number of tracks in the cache
    SD_IR_Total_Used	  dw	?   ; Tracks currently in use
    SD_IR_Total_Locked	  dw	?   ; Tracks currently locked
    SD_IR_Total_Dirty	  dw	?   ; Tracks currently dirty
                    ; Information for resizing cache
                    ; All values are in terms of 16Kb pages.
    SD_IR_Current_Size	  dw	?   ; Current size of the cache, in 16Kb pages
    SD_IR_Dev_Size	  dw	?   ; Original size requested by user
    SD_IR_Min_Cache_Size  dw	?   ; Minimum allowable size

SD_IOCTL_Read	ends
;
; IOCTL Write functions
;   The function is encoded in the first byte of the IOCTL write data
;
SD_IOCTL_WR_Flush		equ	0	; Flush the cache
SD_IOCTL_WR_Flush_Invalidate	equ	1	; Flush the cache and discard it
SD_IOCTL_WR_Disable_Cache	equ	2	; Turn caching off
SD_IOCTL_WR_Enable_Cache	equ	3	; Turn caching on

SD_IOCTL_WR_Set_Tick		equ	5	; Set tick count for flush
SD_IOCTL_WR_Lock		equ	6	; Lock current cache contents
SD_IOCTL_WR_Unlock		equ	7	; Unlock current cache contents
SD_IOCTL_WR_Reboot_Flush	equ	8	; Set Reboot_Flush flag


SD_IOCTL_WR_Shrink_Cache	equ	11	; Reduce cache size
SD_IOCTL_WR_Grow_Cache		equ	12	; Increase cache size
SD_IOCTL_WR_Set_INT_13		equ	13	; Set the address SMARTDRV
						;   chains to on INT 13s
;
; Structures for the IOCTL write calls
;
;  These calls do not take any parameters so the correct write count is 1
;	(the function code byte)
;
;  WR_Flush
;  WR_Flush_Invalidate
;  WR_Disable_Cache
;  WR_Enable_Cache
;  WR_Set_Tick
;  WR_Lock
;  WR_Unlock
;
SD_IOCTL_WR_NoParm	struc

  SD_I_W_Func		db    ?

SD_IOCTL_WR_NoParm	ends
;
;  WR_Reboot_Flush
;
SD_IOCTL_WR_Reboot	struc

  SD_I_W_FuncR		db    SD_IOCTL_WR_Reboot_Flush
  SD_I_W_RebootFlg	db    ? 		; 0 to turn reboot flush off
						; 1 to turn reboot flush on
SD_IOCTL_WR_Reboot	ends
;
;  WR_Shrink_Cache
;  WR_Grow_Cache
;
SD_IOCTL_WR_GrwShrk	struc

  SD_I_W_FuncGS 	db    ? 		; Function, one of:
						;   SD_IOCTL_WR_Shrink_Cache
						;   SD_IOCTL_WR_Grow_Cache
  SD_I_W_GS_Size	dw    ? 		; Count of 16k "pages" to
						;   grow or shrink cache by
						;   THIS IS A SIZE DELTA
						;   not a total size.
SD_IOCTL_WR_GrwShrk	ends
;
;  WR_Set_INT_13
;
SD_IOCTL_WR_SetI13	struc

  SD_I_W_FuncS13	db    SD_IOCTL_WR_Set_INT_13

  SD_I_W_S13_Addr	dd    ? 		; Segment:Offset address
						;   to set Original_INT13 to.
						;   NO RECORD IS KEPT OF PREV
						;   VALUE, caller's responsible
						;   for save and restore.
SD_IOCTL_WR_SetI13	ends