git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed a bug in the heap manager where if an exact match of the block is found, garbag...
[tpg/acess2.git]
/
Modules
/
Display
/
BochsGA
/
bochsvbe.c
diff --git
a/Modules/Display/BochsGA/bochsvbe.c
b/Modules/Display/BochsGA/bochsvbe.c
index
1ed46cc
..
8f73ccb
100644
(file)
--- a/
Modules/Display/BochsGA/bochsvbe.c
+++ b/
Modules/Display/BochsGA/bochsvbe.c
@@
-15,18
+15,14
@@
#define INT
\r
\r
// === TYPES ===
\r
#define INT
\r
\r
// === TYPES ===
\r
-typedef struct {
\r
+typedef struct
sBGA_Mode
{
\r
Uint16 width;
\r
Uint16 height;
\r
Uint16 bpp;
\r
Uint16 width;
\r
Uint16 height;
\r
Uint16 bpp;
\r
- Uint16 flags;
\r
Uint32 fbSize;
\r
Uint32 fbSize;
\r
-}
t_bga_m
ode;
\r
+}
tBGA_M
ode;
\r
\r
// === CONSTANTS ===
\r
\r
// === CONSTANTS ===
\r
-enum eMode_Flags {
\r
- MODEFLAG_TEXT = 1
\r
-};
\r
#define BGA_LFB_MAXSIZE (1024*768*4)
\r
#define VBE_DISPI_BANK_ADDRESS 0xA0000
\r
#define VBE_DISPI_LFB_PHYSICAL_ADDRESS 0xE0000000
\r
#define BGA_LFB_MAXSIZE (1024*768*4)
\r
#define VBE_DISPI_BANK_ADDRESS 0xA0000
\r
#define VBE_DISPI_LFB_PHYSICAL_ADDRESS 0xE0000000
\r
@@
-79,17
+75,15
@@
tDevFS_Driver gBGA_DriverStruct = {
}
\r
};
\r
int giBGA_CurrentMode = -1;
\r
}
\r
};
\r
int giBGA_CurrentMode = -1;
\r
+ int giBGA_BufferFormat = 0;
\r
tVideo_IOCtl_Pos gBGA_CursorPos = {-1,-1};
\r
tVideo_IOCtl_Pos gBGA_CursorPos = {-1,-1};
\r
- int giBGA_DriverId = -1;
\r
Uint *gBGA_Framebuffer;
\r
Uint *gBGA_Framebuffer;
\r
-t_bga_mode gBGA_Modes[] = {
\r
+tBGA_Mode gpBGA_CurrentMode;
\r
+const tBGA_Mode gBGA_Modes[] = {
\r
{},
\r
{},
\r
- { 80,25, 12, MODEFLAG_TEXT, 80*25*8}, // 640 x 480
\r
- {100,37, 12, MODEFLAG_TEXT, 100*37*8}, // 800 x 600
\r
- {640,480,8, 0, 640*480},
\r
{640,480,32, 0, 640*480*4},
\r
{640,480,32, 0, 640*480*4},
\r
- {800,600,8, 0, 800*600},
\r
{800,600,32, 0, 800*600*4},
\r
{800,600,32, 0, 800*600*4},
\r
+ {1024,768,32, 0, 1024*768*4}
\r
};
\r
#define BGA_MODE_COUNT (sizeof(gBGA_Modes)/sizeof(gBGA_Modes[0]))
\r
\r
};
\r
#define BGA_MODE_COUNT (sizeof(gBGA_Modes)/sizeof(gBGA_Modes[0]))
\r
\r
@@
-99,20
+93,20
@@
t_bga_mode gBGA_Modes[] = {
*/
\r
int BGA_Install(char **Arguments)
\r
{
\r
*/
\r
int BGA_Install(char **Arguments)
\r
{
\r
- int
bga_
version = 0;
\r
+ int version = 0;
\r
\r
// Check BGA Version
\r
\r
// Check BGA Version
\r
- bga_version = BGA_int_ReadRegister(VBE_DISPI_INDEX_ID);
\r
+ version = BGA_int_ReadRegister(VBE_DISPI_INDEX_ID);
\r
+
\r
// NOTE: This driver was written for 0xB0C4, but they seem to be backwards compatable
\r
// NOTE: This driver was written for 0xB0C4, but they seem to be backwards compatable
\r
- if(
bga_version < 0xB0C4 || bga_
version > 0xB0C5) {
\r
-
Warning("[BGA ] Bochs Adapter Version is not 0xB0C4 or 0xB0C5, instead 0x%x", bga_
version);
\r
+ if(
version < 0xB0C4 ||
version > 0xB0C5) {
\r
+
Log_Warning("BGA", "Bochs Adapter Version is not 0xB0C4 or 0xB0C5, instead 0x%x",
version);
\r
return MODULE_ERR_NOTNEEDED;
\r
}
\r
\r
// Install Device
\r
return MODULE_ERR_NOTNEEDED;
\r
}
\r
\r
// Install Device
\r
- giBGA_DriverId = DevFS_AddDevice( &gBGA_DriverStruct );
\r
- if(giBGA_DriverId == -1) {
\r
- Warning("[BGA ] Unable to register with DevFS, maybe already loaded?");
\r
+ if(DevFS_AddDevice( &gBGA_DriverStruct ) == -1) {
\r
+ Log_Warning("BGA", "Unable to register with DevFS, maybe already loaded?");
\r
return MODULE_ERR_MISC;
\r
}
\r
\r
return MODULE_ERR_MISC;
\r
}
\r
\r
@@
-127,7
+121,7
@@
int BGA_Install(char **Arguments)
*/
\r
void BGA_Uninstall()
\r
{
\r
*/
\r
void BGA_Uninstall()
\r
{
\r
-
//DevFS_DelDevice( giBGA_DriverId
);
\r
+
DevFS_DelDevice( &gBGA_DriverStruct
);
\r
MM_UnmapHWPage( VBE_DISPI_LFB_PHYSICAL_ADDRESS, 768 );
\r
}
\r
\r
MM_UnmapHWPage( VBE_DISPI_LFB_PHYSICAL_ADDRESS, 768 );
\r
}
\r
\r
@@
-141,7
+135,7
@@
Uint64 BGA_Read(tVFS_Node *node, Uint64 off, Uint64 len, void *buffer)
if(giBGA_CurrentMode == -1) return -1;
\r
\r
// Check Offset and Length against Framebuffer Size
\r
if(giBGA_CurrentMode == -1) return -1;
\r
\r
// Check Offset and Length against Framebuffer Size
\r
- if(off+len > g
BGA_Modes[giBGA_CurrentMode].
fbSize)
\r
+ if(off+len > g
pBGA_CurrentMode->
fbSize)
\r
return -1;
\r
\r
// Copy from Framebuffer
\r
return -1;
\r
\r
// Copy from Framebuffer
\r
@@
-163,24
+157,27
@@
Uint64 BGA_Write(tVFS_Node *node, Uint64 off, Uint64 len, void *Buffer)
return -1;
\r
}
\r
\r
return -1;
\r
}
\r
\r
- // Check Input against Frambuffer Size
\r
- if(off + len > gBGA_Modes[giBGA_CurrentMode].fbSize) {
\r
- LEAVE('i', -1);
\r
- return -1;
\r
- }
\r
-
\r
// Text Mode
\r
// Text Mode
\r
-
if( gBGA_Modes[giBGA_CurrentMode].flags & MODEFLAG_TEXT
)
\r
+
switch( giBGA_BufferFormat
)
\r
{
\r
{
\r
+ case VIDEO_BUFFMT_TEXT:
\r
+ {
\r
tVT_Char *chars = Buffer;
\r
tVT_Char *chars = Buffer;
\r
- int pitch = g
BGA_Modes[giBGA_CurrentMode].
width * giVT_CharWidth;
\r
+ int pitch = g
pBGA_CurrentMode->
width * giVT_CharWidth;
\r
int x, y;
\r
Uint32 *dest;
\r
\r
off /= sizeof(tVT_Char);
\r
dest = (void*)gBGA_Framebuffer;
\r
int x, y;
\r
Uint32 *dest;
\r
\r
off /= sizeof(tVT_Char);
\r
dest = (void*)gBGA_Framebuffer;
\r
- x = (off % gBGA_Modes[giBGA_CurrentMode].width) * giVT_CharWidth;
\r
- y = (off / gBGA_Modes[giBGA_CurrentMode].width) * giVT_CharHeight;
\r
+ x = (off % gpBGA_CurrentMode->width) * giVT_CharWidth;
\r
+ y = (off / gpBGA_CurrentMode->width) * giVT_CharHeight;
\r
+
\r
+ // Sanity Check
\r
+ if(y > gpBGA_CurrentMode->height) {
\r
+ LEAVE('i', 0);
\r
+ return 0;
\r
+ }
\r
+
\r
dest += y * pitch;
\r
dest += x * giVT_CharWidth;
\r
len /= sizeof(tVT_Char);
\r
dest += y * pitch;
\r
dest += x * giVT_CharWidth;
\r
len /= sizeof(tVT_Char);
\r
@@
-203,20
+200,31
@@
Uint64 BGA_Write(tVFS_Node *node, Uint64 off, Uint64 len, void *Buffer)
dest += pitch*(giVT_CharHeight-1);
\r
}
\r
}
\r
dest += pitch*(giVT_CharHeight-1);
\r
}
\r
}
\r
- }
\r
- else
\r
- {
\r
+ }
\r
+ break;
\r
+
\r
+ case VIDEO_BUFFMT_FRAMEBUFFER:
\r
+ {
\r
Uint8 *destBuf = (Uint8*) ((Uint)gBGA_Framebuffer + (Uint)off);
\r
\r
Uint8 *destBuf = (Uint8*) ((Uint)gBGA_Framebuffer + (Uint)off);
\r
\r
- Log("buffer = %p", Buffer);
\r
- Log("Updating Framebuffer (%p to %p)",
\r
- destBuf, destBuf + (Uint)len);
\r
+ if( off + len > gpBGA_CurrentMode->fbSize ) {
\r
+ LEAVE('i', 0);
\r
+ return 0;
\r
+ }
\r
+
\r
+ LOG("buffer = %p", Buffer);
\r
+ LOG("Updating Framebuffer (%p to %p)", destBuf, destBuf + (Uint)len);
\r
\r
\r
// Copy to Frambuffer
\r
memcpy(destBuf, Buffer, len);
\r
\r
\r
\r
// Copy to Frambuffer
\r
memcpy(destBuf, Buffer, len);
\r
\r
- Log("BGA Framebuffer updated");
\r
+ LOG("BGA Framebuffer updated");
\r
+ }
\r
+ break;
\r
+ default:
\r
+ LEAVE('i', -1);
\r
+ return -1;
\r
}
\r
\r
LEAVE('i', len);
\r
}
\r
\r
LEAVE('i', len);
\r
@@
-224,13
+232,13
@@
Uint64 BGA_Write(tVFS_Node *node, Uint64 off, Uint64 len, void *Buffer)
}
\r
\r
/**
\r
}
\r
\r
/**
\r
- * \fn
INT int BGA_Ioctl(tVFS_Node *n
ode, int ID, void *Data)
\r
+ * \fn
int BGA_Ioctl(tVFS_Node *N
ode, int ID, void *Data)
\r
* \brief Handle messages to the device
\r
*/
\r
* \brief Handle messages to the device
\r
*/
\r
-
INT int BGA_Ioctl(tVFS_Node *n
ode, int ID, void *Data)
\r
+
int BGA_Ioctl(tVFS_Node *N
ode, int ID, void *Data)
\r
{
\r
int ret = -2;
\r
{
\r
int ret = -2;
\r
- ENTER("pNode iId pData",
n
ode, ID, Data);
\r
+ ENTER("pNode iId pData",
N
ode, ID, Data);
\r
\r
switch(ID)
\r
{
\r
\r
switch(ID)
\r
{
\r
@@
-263,9
+271,10
@@
INT int BGA_Ioctl(tVFS_Node *node, int ID, void *Data)
ret = BGA_int_ModeInfo((tVideo_IOCtl_Mode*)Data);
\r
break;
\r
\r
ret = BGA_int_ModeInfo((tVideo_IOCtl_Mode*)Data);
\r
break;
\r
\r
- // Request Access to LFB
\r
- case VIDEO_IOCTL_REQLFB:
\r
- ret = BGA_int_MapFB( *(void**)Data );
\r
+ case VIDEO_IOCTL_SETBUFFORMAT:
\r
+ ret = giBGA_BufferFormat;
\r
+ if(Data)
\r
+ giBGA_BufferFormat = *(int*)Data;
\r
break;
\r
\r
case VIDEO_IOCTL_SETCURSOR:
\r
break;
\r
\r
case VIDEO_IOCTL_SETCURSOR:
\r
@@
-273,6
+282,11
@@
INT int BGA_Ioctl(tVFS_Node *node, int ID, void *Data)
gBGA_CursorPos.y = ((tVideo_IOCtl_Pos*)Data)->y;
\r
break;
\r
\r
gBGA_CursorPos.y = ((tVideo_IOCtl_Pos*)Data)->y;
\r
break;
\r
\r
+ // Request Access to LFB
\r
+ case VIDEO_IOCTL_REQLFB:
\r
+ ret = BGA_int_MapFB( *(void**)Data );
\r
+ break;
\r
+
\r
default:
\r
LEAVE('i', -2);
\r
return -2;
\r
default:
\r
LEAVE('i', -2);
\r
return -2;
\r
@@
-293,14
+307,14
@@
void BGA_int_WriteRegister(Uint16 reg, Uint16 value)
outw(VBE_DISPI_IOPORT_DATA, value);
\r
}
\r
\r
outw(VBE_DISPI_IOPORT_DATA, value);
\r
}
\r
\r
-
INT
Uint16 BGA_int_ReadRegister(Uint16 reg)
\r
+Uint16 BGA_int_ReadRegister(Uint16 reg)
\r
{
\r
outw(VBE_DISPI_IOPORT_INDEX, reg);
\r
return inw(VBE_DISPI_IOPORT_DATA);
\r
}
\r
\r
#if 0
\r
{
\r
outw(VBE_DISPI_IOPORT_INDEX, reg);
\r
return inw(VBE_DISPI_IOPORT_DATA);
\r
}
\r
\r
#if 0
\r
-
INT
void BGA_int_SetBank(Uint16 bank)
\r
+void BGA_int_SetBank(Uint16 bank)
\r
{
\r
BGA_int_WriteRegister(VBE_DISPI_INDEX_BANK, bank);
\r
}
\r
{
\r
BGA_int_WriteRegister(VBE_DISPI_INDEX_BANK, bank);
\r
}
\r
@@
-310,15
+324,14
@@
INT void BGA_int_SetBank(Uint16 bank)
* \fn void BGA_int_SetMode(Uint16 width, Uint16 height, Uint16 bpp)
\r
* \brief Sets the video mode from the dimensions and bpp given
\r
*/
\r
* \fn void BGA_int_SetMode(Uint16 width, Uint16 height, Uint16 bpp)
\r
* \brief Sets the video mode from the dimensions and bpp given
\r
*/
\r
-void BGA_int_SetMode(Uint16
width, Uint16 h
eight)
\r
+void BGA_int_SetMode(Uint16
Width, Uint16 H
eight)
\r
{
\r
{
\r
- ENTER("i
width iheight ibpp", width, h
eight, bpp);
\r
+ ENTER("i
Width iheight ibpp", Width, H
eight, bpp);
\r
BGA_int_WriteRegister(VBE_DISPI_INDEX_ENABLE, VBE_DISPI_DISABLED);
\r
BGA_int_WriteRegister(VBE_DISPI_INDEX_ENABLE, VBE_DISPI_DISABLED);
\r
- BGA_int_WriteRegister(VBE_DISPI_INDEX_XRES,
w
idth);
\r
- BGA_int_WriteRegister(VBE_DISPI_INDEX_YRES,
h
eight);
\r
+ BGA_int_WriteRegister(VBE_DISPI_INDEX_XRES,
W
idth);
\r
+ BGA_int_WriteRegister(VBE_DISPI_INDEX_YRES,
H
eight);
\r
BGA_int_WriteRegister(VBE_DISPI_INDEX_BPP, 32);
\r
BGA_int_WriteRegister(VBE_DISPI_INDEX_ENABLE, VBE_DISPI_ENABLED | VBE_DISPI_NOCLEARMEM | VBE_DISPI_LFB_ENABLED);
\r
BGA_int_WriteRegister(VBE_DISPI_INDEX_BPP, 32);
\r
BGA_int_WriteRegister(VBE_DISPI_INDEX_ENABLE, VBE_DISPI_ENABLED | VBE_DISPI_NOCLEARMEM | VBE_DISPI_LFB_ENABLED);
\r
- //BGA_int_WriteRegister(VBE_DISPI_INDEX_ENABLE, VBE_DISPI_ENABLED | VBE_DISPI_NOCLEARMEM);
\r
LEAVE('-');
\r
}
\r
\r
LEAVE('-');
\r
}
\r
\r
@@
-342,6
+355,7
@@
int BGA_int_UpdateMode(int id)
gBGA_Modes[id].height);
\r
\r
giBGA_CurrentMode = id;
\r
gBGA_Modes[id].height);
\r
\r
giBGA_CurrentMode = id;
\r
+ gpBGA_CurrentMode = &gBGA_Modes[id];
\r
return id;
\r
}
\r
\r
return id;
\r
}
\r
\r
@@
-446,10
+460,10
@@
int BGA_int_MapFB(void *Dest)
\r
// Sanity Check
\r
if((Uint)Dest > 0xC0000000) return 0;
\r
\r
// Sanity Check
\r
if((Uint)Dest > 0xC0000000) return 0;
\r
- if(g
BGA_Modes[giBGA_CurrentMode].bpp < 15)
return 0; // Only non-pallete modes are supported
\r
+ if(g
pBGA_CurrentMode->bpp < 15)
return 0; // Only non-pallete modes are supported
\r
\r
// Count required pages
\r
\r
// Count required pages
\r
- pages = (g
BGA_Modes[giBGA_CurrentMode].
fbSize + 0xFFF) >> 12;
\r
+ pages = (g
pBGA_CurrentMode->
fbSize + 0xFFF) >> 12;
\r
\r
// Check if there is space
\r
for( i = 0; i < pages; i++ )
\r
\r
// Check if there is space
\r
for( i = 0; i < pages; i++ )
\r
UCC
git Repository :: git.ucc.asn.au