Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
87f163a2
Commit
87f163a2
authored
Jul 25, 2009
by
Thomas Gleixner
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
video: Convert vga console lock to atomic_spinlock
Signed-off-by:
Thomas Gleixner
<
tglx@linutronix.de
>
parent
b68d8890
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
21 additions
and
21 deletions
+21
-21
drivers/video/console/vgacon.c
drivers/video/console/vgacon.c
+21
-21
No files found.
drivers/video/console/vgacon.c
View file @
87f163a2
...
@@ -51,7 +51,7 @@
...
@@ -51,7 +51,7 @@
#include <video/vga.h>
#include <video/vga.h>
#include <asm/io.h>
#include <asm/io.h>
static
DEFINE_SPINLOCK
(
vga_lock
);
static
DEFINE_
ATOMIC_
SPINLOCK
(
vga_lock
);
static
int
cursor_size_lastfrom
;
static
int
cursor_size_lastfrom
;
static
int
cursor_size_lastto
;
static
int
cursor_size_lastto
;
static
u32
vgacon_xres
;
static
u32
vgacon_xres
;
...
@@ -158,7 +158,7 @@ static inline void write_vga(unsigned char reg, unsigned int val)
...
@@ -158,7 +158,7 @@ static inline void write_vga(unsigned char reg, unsigned int val)
* ddprintk might set the console position from interrupt
* ddprintk might set the console position from interrupt
* handlers, thus the write has to be IRQ-atomic.
* handlers, thus the write has to be IRQ-atomic.
*/
*/
spin_lock_irqsave
(
&
vga_lock
,
flags
);
atomic_
spin_lock_irqsave
(
&
vga_lock
,
flags
);
#ifndef SLOW_VGA
#ifndef SLOW_VGA
v1
=
reg
+
(
val
&
0xff00
);
v1
=
reg
+
(
val
&
0xff00
);
...
@@ -171,7 +171,7 @@ static inline void write_vga(unsigned char reg, unsigned int val)
...
@@ -171,7 +171,7 @@ static inline void write_vga(unsigned char reg, unsigned int val)
outb_p
(
reg
+
1
,
vga_video_port_reg
);
outb_p
(
reg
+
1
,
vga_video_port_reg
);
outb_p
(
val
&
0xff
,
vga_video_port_val
);
outb_p
(
val
&
0xff
,
vga_video_port_val
);
#endif
#endif
spin_unlock_irqrestore
(
&
vga_lock
,
flags
);
atomic_
spin_unlock_irqrestore
(
&
vga_lock
,
flags
);
}
}
static
inline
void
vga_set_mem_top
(
struct
vc_data
*
c
)
static
inline
void
vga_set_mem_top
(
struct
vc_data
*
c
)
...
@@ -662,7 +662,7 @@ static void vgacon_set_cursor_size(int xpos, int from, int to)
...
@@ -662,7 +662,7 @@ static void vgacon_set_cursor_size(int xpos, int from, int to)
cursor_size_lastfrom
=
from
;
cursor_size_lastfrom
=
from
;
cursor_size_lastto
=
to
;
cursor_size_lastto
=
to
;
spin_lock_irqsave
(
&
vga_lock
,
flags
);
atomic_
spin_lock_irqsave
(
&
vga_lock
,
flags
);
if
(
vga_video_type
>=
VIDEO_TYPE_VGAC
)
{
if
(
vga_video_type
>=
VIDEO_TYPE_VGAC
)
{
outb_p
(
VGA_CRTC_CURSOR_START
,
vga_video_port_reg
);
outb_p
(
VGA_CRTC_CURSOR_START
,
vga_video_port_reg
);
curs
=
inb_p
(
vga_video_port_val
);
curs
=
inb_p
(
vga_video_port_val
);
...
@@ -680,7 +680,7 @@ static void vgacon_set_cursor_size(int xpos, int from, int to)
...
@@ -680,7 +680,7 @@ static void vgacon_set_cursor_size(int xpos, int from, int to)
outb_p
(
curs
,
vga_video_port_val
);
outb_p
(
curs
,
vga_video_port_val
);
outb_p
(
VGA_CRTC_CURSOR_END
,
vga_video_port_reg
);
outb_p
(
VGA_CRTC_CURSOR_END
,
vga_video_port_reg
);
outb_p
(
cure
,
vga_video_port_val
);
outb_p
(
cure
,
vga_video_port_val
);
spin_unlock_irqrestore
(
&
vga_lock
,
flags
);
atomic_
spin_unlock_irqrestore
(
&
vga_lock
,
flags
);
}
}
static
void
vgacon_cursor
(
struct
vc_data
*
c
,
int
mode
)
static
void
vgacon_cursor
(
struct
vc_data
*
c
,
int
mode
)
...
@@ -755,7 +755,7 @@ static int vgacon_doresize(struct vc_data *c,
...
@@ -755,7 +755,7 @@ static int vgacon_doresize(struct vc_data *c,
unsigned
int
scanlines
=
height
*
c
->
vc_font
.
height
;
unsigned
int
scanlines
=
height
*
c
->
vc_font
.
height
;
u8
scanlines_lo
=
0
,
r7
=
0
,
vsync_end
=
0
,
mode
,
max_scan
;
u8
scanlines_lo
=
0
,
r7
=
0
,
vsync_end
=
0
,
mode
,
max_scan
;
spin_lock_irqsave
(
&
vga_lock
,
flags
);
atomic_
spin_lock_irqsave
(
&
vga_lock
,
flags
);
vgacon_xres
=
width
*
VGA_FONTWIDTH
;
vgacon_xres
=
width
*
VGA_FONTWIDTH
;
vgacon_yres
=
height
*
c
->
vc_font
.
height
;
vgacon_yres
=
height
*
c
->
vc_font
.
height
;
...
@@ -806,7 +806,7 @@ static int vgacon_doresize(struct vc_data *c,
...
@@ -806,7 +806,7 @@ static int vgacon_doresize(struct vc_data *c,
outb_p
(
vsync_end
,
vga_video_port_val
);
outb_p
(
vsync_end
,
vga_video_port_val
);
}
}
spin_unlock_irqrestore
(
&
vga_lock
,
flags
);
atomic_
spin_unlock_irqrestore
(
&
vga_lock
,
flags
);
return
0
;
return
0
;
}
}
...
@@ -889,11 +889,11 @@ static void vga_vesa_blank(struct vgastate *state, int mode)
...
@@ -889,11 +889,11 @@ static void vga_vesa_blank(struct vgastate *state, int mode)
{
{
/* save original values of VGA controller registers */
/* save original values of VGA controller registers */
if
(
!
vga_vesa_blanked
)
{
if
(
!
vga_vesa_blanked
)
{
spin_lock_irq
(
&
vga_lock
);
atomic_
spin_lock_irq
(
&
vga_lock
);
vga_state
.
SeqCtrlIndex
=
vga_r
(
state
->
vgabase
,
VGA_SEQ_I
);
vga_state
.
SeqCtrlIndex
=
vga_r
(
state
->
vgabase
,
VGA_SEQ_I
);
vga_state
.
CrtCtrlIndex
=
inb_p
(
vga_video_port_reg
);
vga_state
.
CrtCtrlIndex
=
inb_p
(
vga_video_port_reg
);
vga_state
.
CrtMiscIO
=
vga_r
(
state
->
vgabase
,
VGA_MIS_R
);
vga_state
.
CrtMiscIO
=
vga_r
(
state
->
vgabase
,
VGA_MIS_R
);
spin_unlock_irq
(
&
vga_lock
);
atomic_
spin_unlock_irq
(
&
vga_lock
);
outb_p
(
0x00
,
vga_video_port_reg
);
/* HorizontalTotal */
outb_p
(
0x00
,
vga_video_port_reg
);
/* HorizontalTotal */
vga_state
.
HorizontalTotal
=
inb_p
(
vga_video_port_val
);
vga_state
.
HorizontalTotal
=
inb_p
(
vga_video_port_val
);
...
@@ -916,7 +916,7 @@ static void vga_vesa_blank(struct vgastate *state, int mode)
...
@@ -916,7 +916,7 @@ static void vga_vesa_blank(struct vgastate *state, int mode)
/* assure that video is enabled */
/* assure that video is enabled */
/* "0x20" is VIDEO_ENABLE_bit in register 01 of sequencer */
/* "0x20" is VIDEO_ENABLE_bit in register 01 of sequencer */
spin_lock_irq
(
&
vga_lock
);
atomic_
spin_lock_irq
(
&
vga_lock
);
vga_wseq
(
state
->
vgabase
,
VGA_SEQ_CLOCK_MODE
,
vga_state
.
ClockingMode
|
0x20
);
vga_wseq
(
state
->
vgabase
,
VGA_SEQ_CLOCK_MODE
,
vga_state
.
ClockingMode
|
0x20
);
/* test for vertical retrace in process.... */
/* test for vertical retrace in process.... */
...
@@ -952,13 +952,13 @@ static void vga_vesa_blank(struct vgastate *state, int mode)
...
@@ -952,13 +952,13 @@ static void vga_vesa_blank(struct vgastate *state, int mode)
/* restore both index registers */
/* restore both index registers */
vga_w
(
state
->
vgabase
,
VGA_SEQ_I
,
vga_state
.
SeqCtrlIndex
);
vga_w
(
state
->
vgabase
,
VGA_SEQ_I
,
vga_state
.
SeqCtrlIndex
);
outb_p
(
vga_state
.
CrtCtrlIndex
,
vga_video_port_reg
);
outb_p
(
vga_state
.
CrtCtrlIndex
,
vga_video_port_reg
);
spin_unlock_irq
(
&
vga_lock
);
atomic_
spin_unlock_irq
(
&
vga_lock
);
}
}
static
void
vga_vesa_unblank
(
struct
vgastate
*
state
)
static
void
vga_vesa_unblank
(
struct
vgastate
*
state
)
{
{
/* restore original values of VGA controller registers */
/* restore original values of VGA controller registers */
spin_lock_irq
(
&
vga_lock
);
atomic_
spin_lock_irq
(
&
vga_lock
);
vga_w
(
state
->
vgabase
,
VGA_MIS_W
,
vga_state
.
CrtMiscIO
);
vga_w
(
state
->
vgabase
,
VGA_MIS_W
,
vga_state
.
CrtMiscIO
);
outb_p
(
0x00
,
vga_video_port_reg
);
/* HorizontalTotal */
outb_p
(
0x00
,
vga_video_port_reg
);
/* HorizontalTotal */
...
@@ -983,7 +983,7 @@ static void vga_vesa_unblank(struct vgastate *state)
...
@@ -983,7 +983,7 @@ static void vga_vesa_unblank(struct vgastate *state)
/* restore index/control registers */
/* restore index/control registers */
vga_w
(
state
->
vgabase
,
VGA_SEQ_I
,
vga_state
.
SeqCtrlIndex
);
vga_w
(
state
->
vgabase
,
VGA_SEQ_I
,
vga_state
.
SeqCtrlIndex
);
outb_p
(
vga_state
.
CrtCtrlIndex
,
vga_video_port_reg
);
outb_p
(
vga_state
.
CrtCtrlIndex
,
vga_video_port_reg
);
spin_unlock_irq
(
&
vga_lock
);
atomic_
spin_unlock_irq
(
&
vga_lock
);
}
}
static
void
vga_pal_blank
(
struct
vgastate
*
state
)
static
void
vga_pal_blank
(
struct
vgastate
*
state
)
...
@@ -1103,7 +1103,7 @@ static int vgacon_do_font_op(struct vgastate *state,char *arg,int set,int ch512)
...
@@ -1103,7 +1103,7 @@ static int vgacon_do_font_op(struct vgastate *state,char *arg,int set,int ch512)
#endif
#endif
unlock_kernel
();
unlock_kernel
();
spin_lock_irq
(
&
vga_lock
);
atomic_
spin_lock_irq
(
&
vga_lock
);
/* First, the Sequencer */
/* First, the Sequencer */
vga_wseq
(
state
->
vgabase
,
VGA_SEQ_RESET
,
0x1
);
vga_wseq
(
state
->
vgabase
,
VGA_SEQ_RESET
,
0x1
);
/* CPU writes only to map 2 */
/* CPU writes only to map 2 */
...
@@ -1119,7 +1119,7 @@ static int vgacon_do_font_op(struct vgastate *state,char *arg,int set,int ch512)
...
@@ -1119,7 +1119,7 @@ static int vgacon_do_font_op(struct vgastate *state,char *arg,int set,int ch512)
vga_wgfx
(
state
->
vgabase
,
VGA_GFX_MODE
,
0x00
);
vga_wgfx
(
state
->
vgabase
,
VGA_GFX_MODE
,
0x00
);
/* map start at A000:0000 */
/* map start at A000:0000 */
vga_wgfx
(
state
->
vgabase
,
VGA_GFX_MISC
,
0x00
);
vga_wgfx
(
state
->
vgabase
,
VGA_GFX_MISC
,
0x00
);
spin_unlock_irq
(
&
vga_lock
);
atomic_
spin_unlock_irq
(
&
vga_lock
);
if
(
arg
)
{
if
(
arg
)
{
if
(
set
)
if
(
set
)
...
@@ -1146,7 +1146,7 @@ static int vgacon_do_font_op(struct vgastate *state,char *arg,int set,int ch512)
...
@@ -1146,7 +1146,7 @@ static int vgacon_do_font_op(struct vgastate *state,char *arg,int set,int ch512)
}
}
}
}
spin_lock_irq
(
&
vga_lock
);
atomic_
spin_lock_irq
(
&
vga_lock
);
/* First, the sequencer, Synchronous reset */
/* First, the sequencer, Synchronous reset */
vga_wseq
(
state
->
vgabase
,
VGA_SEQ_RESET
,
0x01
);
vga_wseq
(
state
->
vgabase
,
VGA_SEQ_RESET
,
0x01
);
/* CPU writes to maps 0 and 1 */
/* CPU writes to maps 0 and 1 */
...
@@ -1185,7 +1185,7 @@ static int vgacon_do_font_op(struct vgastate *state,char *arg,int set,int ch512)
...
@@ -1185,7 +1185,7 @@ static int vgacon_do_font_op(struct vgastate *state,char *arg,int set,int ch512)
inb_p
(
video_port_status
);
inb_p
(
video_port_status
);
vga_wattr
(
state
->
vgabase
,
VGA_AR_ENABLE_DISPLAY
,
0
);
vga_wattr
(
state
->
vgabase
,
VGA_AR_ENABLE_DISPLAY
,
0
);
}
}
spin_unlock_irq
(
&
vga_lock
);
atomic_
spin_unlock_irq
(
&
vga_lock
);
lock_kernel
();
lock_kernel
();
return
0
;
return
0
;
}
}
...
@@ -1211,26 +1211,26 @@ static int vgacon_adjust_height(struct vc_data *vc, unsigned fontheight)
...
@@ -1211,26 +1211,26 @@ static int vgacon_adjust_height(struct vc_data *vc, unsigned fontheight)
registers; they are write-only on EGA, but it appears that they
registers; they are write-only on EGA, but it appears that they
are all don't care bits on EGA, so I guess it doesn't matter. */
are all don't care bits on EGA, so I guess it doesn't matter. */
spin_lock_irq
(
&
vga_lock
);
atomic_
spin_lock_irq
(
&
vga_lock
);
outb_p
(
0x07
,
vga_video_port_reg
);
/* CRTC overflow register */
outb_p
(
0x07
,
vga_video_port_reg
);
/* CRTC overflow register */
ovr
=
inb_p
(
vga_video_port_val
);
ovr
=
inb_p
(
vga_video_port_val
);
outb_p
(
0x09
,
vga_video_port_reg
);
/* Font size register */
outb_p
(
0x09
,
vga_video_port_reg
);
/* Font size register */
fsr
=
inb_p
(
vga_video_port_val
);
fsr
=
inb_p
(
vga_video_port_val
);
spin_unlock_irq
(
&
vga_lock
);
atomic_
spin_unlock_irq
(
&
vga_lock
);
vde
=
maxscan
&
0xff
;
/* Vertical display end reg */
vde
=
maxscan
&
0xff
;
/* Vertical display end reg */
ovr
=
(
ovr
&
0xbd
)
+
/* Overflow register */
ovr
=
(
ovr
&
0xbd
)
+
/* Overflow register */
((
maxscan
&
0x100
)
>>
7
)
+
((
maxscan
&
0x200
)
>>
3
);
((
maxscan
&
0x100
)
>>
7
)
+
((
maxscan
&
0x200
)
>>
3
);
fsr
=
(
fsr
&
0xe0
)
+
(
fontheight
-
1
);
/* Font size register */
fsr
=
(
fsr
&
0xe0
)
+
(
fontheight
-
1
);
/* Font size register */
spin_lock_irq
(
&
vga_lock
);
atomic_
spin_lock_irq
(
&
vga_lock
);
outb_p
(
0x07
,
vga_video_port_reg
);
/* CRTC overflow register */
outb_p
(
0x07
,
vga_video_port_reg
);
/* CRTC overflow register */
outb_p
(
ovr
,
vga_video_port_val
);
outb_p
(
ovr
,
vga_video_port_val
);
outb_p
(
0x09
,
vga_video_port_reg
);
/* Font size */
outb_p
(
0x09
,
vga_video_port_reg
);
/* Font size */
outb_p
(
fsr
,
vga_video_port_val
);
outb_p
(
fsr
,
vga_video_port_val
);
outb_p
(
0x12
,
vga_video_port_reg
);
/* Vertical display limit */
outb_p
(
0x12
,
vga_video_port_reg
);
/* Vertical display limit */
outb_p
(
vde
,
vga_video_port_val
);
outb_p
(
vde
,
vga_video_port_val
);
spin_unlock_irq
(
&
vga_lock
);
atomic_
spin_unlock_irq
(
&
vga_lock
);
vga_video_font_height
=
fontheight
;
vga_video_font_height
=
fontheight
;
for
(
i
=
0
;
i
<
MAX_NR_CONSOLES
;
i
++
)
{
for
(
i
=
0
;
i
<
MAX_NR_CONSOLES
;
i
++
)
{
...
...
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