Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
ccec108f
Commit
ccec108f
authored
Nov 23, 2007
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Import 1.1.9
parent
eaca2b6e
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
413 additions
and
162 deletions
+413
-162
CREDITS
CREDITS
+2
-1
Makefile
Makefile
+1
-1
drivers/block/sbpcd.c
drivers/block/sbpcd.c
+121
-54
drivers/net/slhc.c
drivers/net/slhc.c
+3
-3
fs/buffer.c
fs/buffer.c
+5
-6
fs/isofs/inode.c
fs/isofs/inode.c
+9
-0
include/linux/sbpcd.h
include/linux/sbpcd.h
+3
-1
include/linux/sched.h
include/linux/sched.h
+3
-1
include/linux/vm86.h
include/linux/vm86.h
+43
-5
kernel/vm86.c
kernel/vm86.c
+223
-90
No files found.
CREDITS
View file @
ccec108f
...
...
@@ -614,9 +614,10 @@ S: New York, New York 10025
S: USA
N: Eric Youngdale
E: ericy@cais.com
E: eric@tantalus.nrl.navy.mil
D: General kernel hacker
D: SCSI
iso9660 and ELF
D: SCSI
, iso9660, ELF, ibcs2, clustering in buffer cache, generalized mmap.
S: 17 Canterbury Square #101
S: Alexandria, Virginia 22304
S: USA
...
...
Makefile
View file @
ccec108f
VERSION
=
1
PATCHLEVEL
=
1
SUBLEVEL
=
8
SUBLEVEL
=
9
all
:
Version zImage
...
...
drivers/block/sbpcd.c
View file @
ccec108f
...
...
@@ -5,7 +5,7 @@
* and for "no-sound" interfaces like Lasermate and the
* Panasonic CI-101P.
*
* NOTE: This is release 1.
4
.
* NOTE: This is release 1.
5
.
* It works with my SbPro & drive CR-521 V2.11 from 2/92
* and with the new CR-562-B V0.75 on a "naked" Panasonic
* CI-101P interface. And vice versa.
...
...
@@ -72,6 +72,10 @@
* Added some debugging printout for the UPC/EAN code - but my drives
* return only zeroes. Is there no UPC/EAN code written?
*
* 1.5 Laborate with UPC/EAN code (not better yet).
* Adapt to kernel 1.1.8 change (have to explicitely include
* <linux/string.h> now).
*
* special thanks to Kai Makisara (kai.makisara@vtt.fi) for his fine
* elaborated speed-up experiments (and the fabulous results!), for
* the "push" towards load-free wait loops, and for the extensive mail
...
...
@@ -113,6 +117,7 @@
#include <linux/cdrom.h>
#include <linux/ioport.h>
#include <linux/sbpcd.h>
#include <linux/string.h>
#if SBPCD_USE_IRQ
#include <linux/signal.h>
...
...
@@ -129,7 +134,7 @@
#define MAJOR_NR MATSUSHITA_CDROM_MAJOR
#include "blk.h"
#define VERSION "1.
4
Eberhard Moenkeberg <emoenke@gwdg.de>"
#define VERSION "1.
5
Eberhard Moenkeberg <emoenke@gwdg.de>"
#define SBPCD_DEBUG
...
...
@@ -149,6 +154,8 @@
#undef XA_TEST1
#define XA_TEST2
#define TEST_UPC 0
/*==========================================================================*/
/*==========================================================================*/
...
...
@@ -238,6 +245,7 @@ static int sbp_data(void);
* (1<<DBG_UPC) show UPC info
* (1<<DBG_XA) XA mode debugging
* (1<<DBG_LCK) door (un)lock info
* (1<<DBG_SQ) dump SubQ frame
* (1<<DBG_000) unnecessary information
*/
#if 1
...
...
@@ -249,6 +257,7 @@ static int sbpcd_debug = (1<<DBG_INF) |
(
1
<<
DBG_IOC
)
|
(
1
<<
DBG_XA
)
|
(
1
<<
DBG_LCK
)
|
(
1
<<
DBG_SQ
)
|
(
1
<<
DBG_IOX
);
#endif
static
int
sbpcd_ioaddr
=
CDROM_PORT
;
/* default I/O base address */
...
...
@@ -287,7 +296,8 @@ static u_int flags_cmd_out;
static
u_char
cmd_type
=
0
;
static
u_char
drvcmd
[
7
];
static
u_char
infobuf
[
20
];
static
u_char
scratch_buf
[
CD_XA_TAIL
];
static
u_char
xa_head_buf
[
CD_XA_HEAD
];
static
u_char
xa_tail_buf
[
CD_XA_TAIL
];
static
u_char
timed_out
=
0
;
static
u_int
datarate
=
1000000
;
...
...
@@ -354,7 +364,6 @@ static struct {
u_char vol_ctrl3;
#endif 000
u_char
SubQ_audio
;
u_char
SubQ_ctl_adr
;
u_char
SubQ_trk
;
u_char
SubQ_pnt_idx
;
...
...
@@ -1153,33 +1162,38 @@ static int xx_ReadSubQ(void)
int
i
,
j
;
DS
[
d
].
diskstate_flags
&=
~
subq_bit
;
clr_cmdbuf
();
if
(
new_drive
)
{
drvcmd
[
0
]
=
0x87
;
flags_cmd_out
=
f_putcmd
|
f_ResponseStatus
|
f_obey_p_check
;
response_count
=
11
;
}
else
{
drvcmd
[
0
]
=
0x89
;
drvcmd
[
1
]
=
0x02
;
flags_cmd_out
=
f_putcmd
|
f_getsta
|
f_ResponseStatus
|
f_obey_p_check
;
response_count
=
13
;
}
for
(
j
=
0
;
j
<
255
;
j
++
)
for
(
j
=
255
;
j
>
0
;
j
--
)
{
clr_cmdbuf
();
if
(
new_drive
)
{
drvcmd
[
0
]
=
0x87
;
flags_cmd_out
=
f_putcmd
|
f_ResponseStatus
|
f_obey_p_check
;
response_count
=
11
;
}
else
{
drvcmd
[
0
]
=
0x89
;
drvcmd
[
1
]
=
0x02
;
flags_cmd_out
=
f_putcmd
|
f_getsta
|
f_ResponseStatus
|
f_obey_p_check
;
response_count
=
13
;
}
i
=
cmd_out
();
if
(
i
<
0
)
return
(
i
);
DPRINTF
((
DBG_SQ
,
"SBPCD: xx_ReadSubQ:"
));
for
(
i
=
0
;
i
<
(
new_drive
?
11
:
13
);
i
++
)
{
DPRINTF
((
DBG_SQ
,
" %02X"
,
infobuf
[
i
]));
}
DPRINTF
((
DBG_SQ
,
"
\n
"
));
if
(
infobuf
[
0
]
!=
0
)
break
;
if
(
!
st_spinning
)
if
(
(
!
st_spinning
)
||
(
j
==
1
)
)
{
DS
[
d
].
SubQ_ctl_adr
=
DS
[
d
].
SubQ_trk
=
DS
[
d
].
SubQ_pnt_idx
=
DS
[
d
].
SubQ_whatisthis
=
0
;
DS
[
d
].
SubQ_run_tot
=
DS
[
d
].
SubQ_run_trk
=
0
;
return
(
0
);
}
}
DS
[
d
].
SubQ_audio
=
infobuf
[
0
];
DS
[
d
].
SubQ_ctl_adr
=
swap_nibbles
(
infobuf
[
1
]);
DS
[
d
].
SubQ_trk
=
byt2bcd
(
infobuf
[
2
]);
DS
[
d
].
SubQ_pnt_idx
=
byt2bcd
(
infobuf
[
3
]);
...
...
@@ -1479,37 +1493,62 @@ static int convert_UPC(u_char *p)
static
int
xx_ReadUPC
(
void
)
{
int
i
;
#if TEST_UPC
int
block
,
checksum
;
#endif TEST_UPC
DS
[
d
].
diskstate_flags
&=
~
upc_bit
;
clr_cmdbuf
();
if
(
new_drive
)
#if TEST_UPC
for
(
block
=
CD_BLOCK_OFFSET
+
1
;
block
<
CD_BLOCK_OFFSET
+
200
;
block
++
)
{
drvcmd
[
0
]
=
0x88
;
response_count
=
8
;
flags_cmd_out
=
f_putcmd
|
f_ResponseStatus
|
f_obey_p_check
;
}
else
{
drvcmd
[
0
]
=
0x08
;
response_count
=
0
;
flags_cmd_out
=
f_putcmd
|
f_lopsta
|
f_getsta
|
f_ResponseStatus
|
f_obey_p_check
|
f_bit1
;
}
i
=
cmd_out
();
if
(
i
<
0
)
return
(
i
);
if
(
!
new_drive
)
{
response_count
=
16
;
i
=
xx_ReadPacket
();
#endif TEST_UPC
clr_cmdbuf
();
if
(
new_drive
)
{
drvcmd
[
0
]
=
0x88
;
#if TEST_UPC
drvcmd
[
1
]
=
(
block
>>
16
)
&
0xFF
;
drvcmd
[
2
]
=
(
block
>>
8
)
&
0xFF
;
drvcmd
[
3
]
=
block
&
0xFF
;
#endif TEST_UPC
response_count
=
8
;
flags_cmd_out
=
f_putcmd
|
f_ResponseStatus
|
f_obey_p_check
;
}
else
{
drvcmd
[
0
]
=
0x08
;
#if TEST_UPC
drvcmd
[
2
]
=
(
block
>>
16
)
&
0xFF
;
drvcmd
[
3
]
=
(
block
>>
8
)
&
0xFF
;
drvcmd
[
4
]
=
block
&
0xFF
;
#endif TEST_UPC
response_count
=
0
;
flags_cmd_out
=
f_putcmd
|
f_lopsta
|
f_getsta
|
f_ResponseStatus
|
f_obey_p_check
|
f_bit1
;
}
i
=
cmd_out
();
if
(
i
<
0
)
return
(
i
);
if
(
!
new_drive
)
{
response_count
=
16
;
i
=
xx_ReadPacket
();
if
(
i
<
0
)
return
(
i
);
}
#if TEST_UPC
checksum
=
0
;
#endif TEST_UPC
DPRINTF
((
DBG_UPC
,
"SBPCD: UPC info: "
));
for
(
i
=
0
;
i
<
(
new_drive
?
8
:
16
);
i
++
)
{
#if TEST_UPC
checksum
|=
infobuf
[
i
];
#endif TEST_UPC
DPRINTF
((
DBG_UPC
,
"%02X "
,
infobuf
[
i
]));
}
DPRINTF
((
DBG_UPC
,
"
\n
"
));
#if TEST_UPC
if
((
checksum
&
0x7F
)
!=
0
)
break
;
}
DPRINTF
((
DBG_UPC
,
"SBPCD: UPC info: "
));
for
(
i
=
0
;
i
<
(
new_drive
?
8
:
16
);
i
++
)
{
DPRINTF
((
DBG_UPC
,
"%02X "
,
infobuf
[
i
]));
}
DPRINTF
((
DBG_UPC
,
"
\n
"
));
#endif TEST_UPC
DS
[
d
].
UPC_ctl_adr
=
0
;
if
(
new_drive
)
i
=
0
;
else
i
=
2
;
...
...
@@ -1559,6 +1598,31 @@ static int yy_CheckMultiSession(void)
return
(
0
);
}
/*==========================================================================*/
#if FUTURE
static
int
yy_SubChanInfo
(
int
frame
,
int
count
,
u_char
*
buffer
)
/* "frame" is a RED BOOK address */
{
int
i
;
if
(
!
new_drive
)
return
(
-
3
);
#if 0
if (DS[d].audio_state!=audio_playing) return (-2);
#endif
clr_cmdbuf
();
drvcmd
[
0
]
=
0x11
;
drvcmd
[
1
]
=
(
frame
>>
16
)
&
0xFF
;
drvcmd
[
2
]
=
(
frame
>>
8
)
&
0xFF
;
drvcmd
[
3
]
=
frame
&
0xFF
;
drvcmd
[
5
]
=
(
count
>>
8
)
&
0xFF
;
drvcmd
[
6
]
=
count
&
0xFF
;
flags_cmd_out
=
f_putcmd
|
f_respo2
|
f_ResponseStatus
|
f_obey_p_check
;
cmd_type
=
READ_SC
;
DS
[
d
].
frame_size
=
CD_FRAMESIZE_SUB
;
i
=
cmd_out
();
/* read directly into user's buffer */
return
(
i
);
}
#endif FUTURE
/*==========================================================================*/
static
void
check_datarate
(
void
)
{
#ifdef CDMKE
...
...
@@ -2290,9 +2354,6 @@ static int sbpcd_ioctl(struct inode *inode,struct file *file,
st
=
verify_area
(
VERIFY_WRITE
,
(
void
*
)
arg
,
sizeof
(
struct
cdrom_subchnl
));
if
(
st
)
return
(
st
);
memcpy_fromfs
(
&
SC
,
(
void
*
)
arg
,
sizeof
(
struct
cdrom_subchnl
));
#if 0
if (DS[d].SubQ_audio==0x80) DS[d].SubQ_audio=CDROM_AUDIO_NO_STATUS;
#endif
switch
(
DS
[
d
].
audio_state
)
{
case
audio_playing
:
...
...
@@ -2634,7 +2695,7 @@ static int sbp_data(void)
u_int
data_waits
=
0
;
u_int
data_retrying
=
0
;
int
error_flag
;
int
xa_count
;
error_flag
=
0
;
for
(
frame
=
DS
[
d
].
sbp_current
;
frame
<
DS
[
d
].
sbp_read_frames
&&!
error_flag
;
frame
++
)
...
...
@@ -2687,12 +2748,18 @@ static int sbp_data(void)
p
=
DS
[
d
].
sbp_buf
+
frame
*
CD_FRAMESIZE
;
if
(
sbpro_type
)
OUT
(
CDo_sel_d_i
,
0x01
);
if
(
cmd_type
==
READ_M2
)
READ_DATA
(
CDi_data
,
scratch
_buf
,
CD_XA_HEAD
);
if
(
cmd_type
==
READ_M2
)
READ_DATA
(
CDi_data
,
xa_head
_buf
,
CD_XA_HEAD
);
READ_DATA
(
CDi_data
,
p
,
CD_FRAMESIZE
);
if
(
cmd_type
==
READ_M2
)
READ_DATA
(
CDi_data
,
scratch
_buf
,
CD_XA_TAIL
);
if
(
cmd_type
==
READ_M2
)
READ_DATA
(
CDi_data
,
xa_tail
_buf
,
CD_XA_TAIL
);
if
(
sbpro_type
)
OUT
(
CDo_sel_d_i
,
0x00
);
DS
[
d
].
sbp_current
++
;
if
(
cmd_type
==
READ_M2
)
{
DPRINTF
((
DBG_XA
,
"SBPCD: xa_head:"
));
for
(
xa_count
=
0
;
xa_count
<
CD_XA_HEAD
;
xa_count
++
)
DPRINTF
((
DBG_XA
,
" %02X"
,
xa_head_buf
[
xa_count
]));
DPRINTF
((
DBG_XA
,
"
\n
"
));
}
data_tries
++
;
data_retrying
=
0
;
if
(
data_tries
>=
1000
)
...
...
drivers/net/slhc.c
View file @
ccec108f
...
...
@@ -73,7 +73,7 @@
int
last_retran
;
static
unsigned
char
*
encode
(
unsigned
char
*
cp
,
in
t
n
);
static
unsigned
char
*
encode
(
unsigned
char
*
cp
,
unsigned
shor
t
n
);
static
long
decode
(
unsigned
char
**
cpp
);
static
unsigned
char
*
put16
(
unsigned
char
*
cp
,
unsigned
short
x
);
static
unsigned
short
pull16
(
unsigned
char
**
cpp
);
...
...
@@ -160,7 +160,7 @@ slhc_free(struct slcompress *comp)
/* Put a short in host order into a char array in network order */
static
unsigned
char
*
static
inline
unsigned
char
*
put16
(
unsigned
char
*
cp
,
unsigned
short
x
)
{
*
cp
++
=
x
>>
8
;
...
...
@@ -172,7 +172,7 @@ put16(unsigned char *cp, unsigned short x)
/* Encode a number */
unsigned
char
*
encode
(
unsigned
char
*
cp
,
in
t
n
)
encode
(
unsigned
char
*
cp
,
unsigned
shor
t
n
)
{
if
(
n
>=
256
||
n
==
0
){
*
cp
++
=
0
;
...
...
fs/buffer.c
View file @
ccec108f
...
...
@@ -15,11 +15,8 @@
* disk change. This is where it fits best, I think, as it should
* invalidate changed floppy-disk-caches.
*/
#include <stdarg.h>
#include <linux/config.h>
#include <linux/errno.h>
#include <linux/sched.h>
#include <linux/kernel.h>
#include <linux/major.h>
...
...
@@ -195,7 +192,7 @@ static int sync_buffers(dev_t dev, int wait)
if
(
wait
&&
bh
->
b_req
&&
!
bh
->
b_lock
&&
!
bh
->
b_dirt
&&
!
bh
->
b_uptodate
)
{
err
=
1
;
printk
(
"Weird - unlocked, clean and not uptodate buffer on list %d
\n
"
,
nlist
);
printk
(
"Weird - unlocked, clean and not uptodate buffer on list %d
%x %lu
\n
"
,
nlist
,
bh
->
b_dev
,
bh
->
b_blocknr
);
continue
;
}
/* Don't write clean buffers. Don't write ANY buffers
...
...
@@ -1867,7 +1864,7 @@ asmlinkage int sys_bdflush(int func, int data)
repeat:
bh
=
lru_list
[
nlist
];
if
(
bh
)
for
(
i
=
nr_buffers_type
[
nlist
];
--
i
>
0
&&
ndirty
<
bdf_prm
.
b_un
.
ndirty
;
for
(
i
=
nr_buffers_type
[
nlist
];
i
--
>
0
&&
ndirty
<
bdf_prm
.
b_un
.
ndirty
;
bh
=
next
)
{
/* We may have stalled while waiting for I/O to complete. */
if
(
bh
->
b_list
!=
nlist
)
goto
repeat
;
...
...
@@ -1909,8 +1906,10 @@ asmlinkage int sys_bdflush(int func, int data)
if
(
nr_buffers_type
[
BUF_DIRTY
]
<
(
nr_buffers
-
nr_buffers_type
[
BUF_SHARED
])
*
bdf_prm
.
b_un
.
nfract
/
100
)
{
if
(
current
->
signal
&
(
1
<<
(
SIGKILL
-
1
)))
if
(
current
->
signal
&
(
1
<<
(
SIGKILL
-
1
)))
{
bdflush_running
--
;
return
0
;
}
current
->
signal
=
0
;
interruptible_sleep_on
(
&
bdflush_wait
);
}
...
...
fs/isofs/inode.c
View file @
ccec108f
...
...
@@ -477,6 +477,15 @@ void isofs_read_inode(struct inode * inode)
brelse
(
bh
);
inode
->
i_op
=
NULL
;
/* A volume number of 0 is nonsense. Disable checking if we see
this */
if
(
inode
->
i_sb
->
u
.
isofs_sb
.
s_cruft
==
'n'
&&
isonum_723
(
raw_inode
->
volume_sequence_number
)
==
0
)
{
printk
(
"Warning: defective cdrom. Enabling
\"
cruft
\"
mount option.
\n
"
);
inode
->
i_sb
->
u
.
isofs_sb
.
s_cruft
=
'y'
;
}
if
(
inode
->
i_sb
->
u
.
isofs_sb
.
s_cruft
!=
'y'
&&
isonum_723
(
raw_inode
->
volume_sequence_number
)
!=
1
)
{
printk
(
"Multi volume CD somehow got mounted.
\n
"
);
...
...
include/linux/sbpcd.h
View file @
ccec108f
...
...
@@ -74,7 +74,8 @@
#define DBG_UPC 21
/* show UPC information */
#define DBG_XA 22
/* XA mode debugging */
#define DBG_LCK 23
/* door (un)lock info */
#define DBG_000 24
/* unnecessary information */
#define DBG_SQ 24
/* dump SubQ frame */
#define DBG_000 25
/* unnecessary information */
/*==========================================================================*/
/*==========================================================================*/
...
...
@@ -215,6 +216,7 @@
#define CD_FRAMESIZE 2048
/* bytes per frame, data mode */
#define CD_FRAMESIZE_XA 2340
/* bytes per frame, "xa" mode */
#define CD_FRAMESIZE_RAW 2352
/* bytes per frame, "raw" mode */
#define CD_FRAMESIZE_SUB 96
/* subchannel data size */
#define CD_BLOCK_OFFSET 150
/* offset of first logical frame */
#define CD_XA_HEAD 12
/* header size of XA frame */
#define CD_XA_TAIL 280
/* tail size of XA frame */
...
...
include/linux/sched.h
View file @
ccec108f
...
...
@@ -219,8 +219,10 @@ struct task_struct {
unsigned
short
used_math
;
unsigned
short
rss
;
/* number of resident pages */
char
comm
[
16
];
/* virtual 86 mode stuff */
struct
vm86_struct
*
vm86_info
;
unsigned
long
screen_bitmap
;
unsigned
long
v86flags
,
v86mask
,
v86mode
;
/* file system info */
int
link_count
;
int
tty
;
/* -1 if no tty, so it must be signed */
...
...
@@ -286,7 +288,7 @@ struct task_struct {
/* math */
0, \
/* rss */
2, \
/* comm */
"swapper", \
/* vm86_info */
NULL, 0, \
/* vm86_info */
NULL, 0,
0, 0, 0,
\
/* fs info */
0,-1,0022,NULL,NULL,NULL,NULL, \
/* ipc */
NULL, NULL, \
/* filp */
{NULL,}, \
...
...
include/linux/vm86.h
View file @
ccec108f
#ifndef _LINUX_VM86_H
#define _LINUX_VM86_H
/*
* I'm guessing at the VIF/VIP flag usage, but hope that this is how
* the Pentium uses them. Linux will return from vm86 mode when both
* VIF and VIP is set.
*
* On a Pentium, we could probably optimize the virtual flags directly
* in the eflags register instead of doing it "by hand" in vflags...
*
* Linus
*/
#define TF_MASK 0x00000100
#define IF_MASK 0x00000200
#define IOPL_MASK 0x00003000
#define NT_MASK 0x00004000
#define VM_MASK 0x00020000
#define AC_MASK 0x00040000
#define VIF_MASK 0x00080000
/* virtual interrupt flag */
#define VIP_MASK 0x00100000
/* virtual interrupt pending */
#define ID_MASK 0x00200000
#define BIOSSEG 0x0f000
#define CPU_086 0
#define CPU_186 1
#define CPU_286 2
#define CPU_386 3
#define CPU_486 4
#define CPU_586 5
/*
* Return values for the 'vm86()' system call
*/
#define VM86_TYPE(retval) ((retval) & 0xff)
#define VM86_ARG(retval) ((retval) >> 8)
#define VM86_SIGNAL 0
/* return due to signal */
#define VM86_UNKNOWN 1
/* unhandled GP fault - IO-instruction or similar */
#define VM86_INTx 2
/* int3/int x instruction (ARG = x) */
#define VM86_STI 3
/* sti/popfl instruction enabled virtual interrupts */
/*
* This is the stack-layout when we have done a "SAVE_ALL" from vm86
...
...
@@ -53,26 +81,36 @@ struct vm86_regs {
unsigned
short
gs
,
__gsh
;
};
struct
revectored_struct
{
unsigned
long
__map
[
8
];
/* 256 bits */
};
struct
vm86_struct
{
struct
vm86_regs
regs
;
unsigned
long
flags
;
unsigned
long
screen_bitmap
;
unsigned
long
v_eflags
;
unsigned
long
cpu_type
;
unsigned
long
return_if_iflag
;
unsigned
char
int_revectored
[
0x100
];
unsigned
char
int21_revectored
[
0x100
];
struct
revectored_struct
int_revectored
;
struct
revectored_struct
int21_revectored
;
};
/*
* flags masks
*/
#define VM86_SCREEN_BITMAP
1
#define VM86_SCREEN_BITMAP
0x000
1
#ifdef __KERNEL__
void
handle_vm86_fault
(
struct
vm86_regs
*
,
long
);
extern
inline
int
is_revectored
(
int
nr
,
struct
revectored_struct
*
bitmap
)
{
__asm__
__volatile__
(
"btl %2,%%fs:%1
\n\t
sbbl %0,%0"
:
"=r"
(
nr
)
:
"m"
(
*
bitmap
),
"r"
(
nr
));
return
nr
;
}
#endif
#endif
kernel/vm86.c
View file @
ccec108f
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment