added one more type2 scriptcmd (still untested)
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9021 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -10,9 +10,12 @@
|
|||||||
|
|
||||||
/* pins V5.16 and up ROM infoblock stuff */
|
/* pins V5.16 and up ROM infoblock stuff */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint16 InitScriptTablePtr; /* ptr to list of ptrs to scripts to exec */
|
uint16 InitScriptTablePtr; /* ptr to list of ptrs to scripts to exec */
|
||||||
uint16 ConditionTablePtr; /* ptr to list of PCI regs and bits to tst for exec mode */
|
uint16 MacroIndexTablePtr; /* ptr to list with indexes and sizes of items in MacroTable */
|
||||||
uint16 IOConditionTablePtr;/* ptr to list of ISA regs and bits to tst for exec mode */
|
uint16 MacroTablePtr; /* ptr to list with items containing multiple 32bit reg writes */
|
||||||
|
uint16 ConditionTablePtr; /* ptr to list of PCI regs and bits to tst for exec mode */
|
||||||
|
uint16 IOConditionTablePtr; /* ptr to list of ISA regs and bits to tst for exec mode */
|
||||||
|
uint16 InitFunctionTablePtr; /* ptr to list of startadresses of fixed ROM init routines */
|
||||||
} PinsTables;
|
} PinsTables;
|
||||||
|
|
||||||
static void detect_panels(void);
|
static void detect_panels(void);
|
||||||
@@ -177,8 +180,11 @@ static status_t pins3_6_read(uint8 *rom, uint32 offset)
|
|||||||
//fixme: how about pins 6???
|
//fixme: how about pins 6???
|
||||||
PinsTables tabs;
|
PinsTables tabs;
|
||||||
tabs.InitScriptTablePtr = rom[offset + 75] + (rom[offset + 76] * 256);
|
tabs.InitScriptTablePtr = rom[offset + 75] + (rom[offset + 76] * 256);
|
||||||
|
tabs.MacroIndexTablePtr = rom[offset + 77] + (rom[offset + 78] * 256);
|
||||||
|
tabs.MacroTablePtr = rom[offset + 79] + (rom[offset + 80] * 256);
|
||||||
tabs.ConditionTablePtr = rom[offset + 81] + (rom[offset + 82] * 256);
|
tabs.ConditionTablePtr = rom[offset + 81] + (rom[offset + 82] * 256);
|
||||||
tabs.IOConditionTablePtr = rom[offset + 83] + (rom[offset + 84] * 256);
|
tabs.IOConditionTablePtr = rom[offset + 83] + (rom[offset + 84] * 256);
|
||||||
|
tabs.InitFunctionTablePtr = rom[offset + 87] + (rom[offset + 88] * 256);
|
||||||
|
|
||||||
LOG(8,("INFO: PINS 5.16 and later cmdlist pointer: $%04x\n", tabs.InitScriptTablePtr));
|
LOG(8,("INFO: PINS 5.16 and later cmdlist pointer: $%04x\n", tabs.InitScriptTablePtr));
|
||||||
|
|
||||||
@@ -1121,6 +1127,47 @@ static status_t exec_type2_script(uint8* rom, uint16 adress, int16* size, PinsTa
|
|||||||
NV_REG32(reg) = data;
|
NV_REG32(reg) = data;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 0x6f: /* new */
|
||||||
|
*size -= 2;
|
||||||
|
if (*size < 0)
|
||||||
|
{
|
||||||
|
LOG(8,("script size error, aborting!\n\n"));
|
||||||
|
end = true;
|
||||||
|
result = B_ERROR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* execute */
|
||||||
|
adress += 1;
|
||||||
|
data = (*((uint8*)(&(rom[adress]))) << 1);
|
||||||
|
adress += 1;
|
||||||
|
data += tabs.MacroIndexTablePtr;
|
||||||
|
offset32 = (*((uint8*)(&(rom[data]))) << 3);
|
||||||
|
size32 = *((uint8*)(&(rom[(data + 1)])));
|
||||||
|
offset32 += tabs.MacroTablePtr;
|
||||||
|
/* note: min 1, max 255 commands can be requested */
|
||||||
|
LOG(8,("cmd 'do $%02x time(s) a 32bit reg WR with 32bit data':\n", size32));
|
||||||
|
safe32 = 0;
|
||||||
|
while (safe32 < size32)
|
||||||
|
{
|
||||||
|
reg2 = *((uint32*)(&(rom[(offset32 + (safe32 << 3))])));
|
||||||
|
data2 = *((uint32*)(&(rom[(offset32 + (safe32 << 3) + 4)])));
|
||||||
|
LOG(8,("INFO: (cont.) (#$%02x) cmd 'WR 32bit reg' $%08x = $%08x\n",
|
||||||
|
safe32, reg2, data2));
|
||||||
|
safe32++;
|
||||||
|
}
|
||||||
|
if (exec)
|
||||||
|
{
|
||||||
|
safe32 = 0;
|
||||||
|
while (safe32 < size32)
|
||||||
|
{
|
||||||
|
reg2 = *((uint32*)(&(rom[(offset32 + (safe32 << 3))])));
|
||||||
|
data2 = *((uint32*)(&(rom[(offset32 + (safe32 << 3) + 4)])));
|
||||||
|
NV_REG32(reg2) = data2;
|
||||||
|
safe32++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
//fixme? this is correct on NV11, but how about newer cards???
|
//fixme? this is correct on NV11, but how about newer cards???
|
||||||
case 0x36: /* new */
|
case 0x36: /* new */
|
||||||
case 0x66: /* new */
|
case 0x66: /* new */
|
||||||
|
|||||||
Reference in New Issue
Block a user