Manage RESIDENT page entry

This commit is contained in:
Laurent Vivier 2005-06-06 19:38:07 +00:00
parent dac89b097e
commit 8da276934d

View File

@ -1,6 +1,6 @@
/*
*
* (c) 2004 Laurent Vivier <LaurentVivier@wanadoo.fr>
* (c) 2004,2005 Laurent Vivier <LaurentVivier@wanadoo.fr>
*
* a lot of parts from penguin booter
*/
@ -17,8 +17,10 @@
#define GET_TC_PAGE_SIZE(TC) (IS_8K_PAGE(TC) ? 8192 : 4096)
#define UDT_IS_INVALID(PDT) (!(PDT & 2))
#define UDT_IS_RESIDENT(PDT) (PDT & 2)
#define GET_PDT(PDT) (PDT&3)
#define UDT_IS_INVALID(PDT) (GET_PDT(PDT) == 0)
#define UDT_IS_RESIDENT(PDT) ((GET_PDT(PDT) == 1) || (GET_PDT(PDT) == 3))
#define UDT_IS_INDIRECT(PDT) (GET_PDT(PDT) == 2)
#define GET_RP_UDT(RP) (RP & 0x00000003)
#define GET_RP_W(RP) (RP & 0x00000004)
@ -116,9 +118,10 @@ int MMU040_logical2physicalAttr(unsigned long logicalAddr, unsigned long *physic
rootEntry = MMU040_read_phys(rootTable + 4 * rootIndex);
TRACE("Root Entry: %08lx\n", rootEntry);
if (UDT_IS_INVALID(rootEntry))
if ( UDT_IS_INVALID(rootEntry) || UDT_IS_RESIDENT(rootEntry) )
{
return -1;
*physicalAddr = logicalAddr;
return 0;
}
ptrTable = GET_RP_ADDR(rootEntry);
@ -126,13 +129,12 @@ int MMU040_logical2physicalAttr(unsigned long logicalAddr, unsigned long *physic
tableEntry = MMU040_read_phys(ptrTable + 4 * ptrIndex);
TRACE("table Entry: %08lx\n", tableEntry);
if (UDT_IS_INVALID(tableEntry))
if ( UDT_IS_INVALID(tableEntry) || UDT_IS_RESIDENT(tableEntry) )
{
return -1;
*physicalAddr = logicalAddr;
return 0;
}
if (IS_8K_PAGE(TC))
{
pageTable = GET_TD_8K_ADDR(tableEntry);