small rom infostruct decode update
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8629 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -18,8 +18,8 @@ static void pinsnv20_arch_fake(void);
|
|||||||
static void pinsnv30_arch_fake(void);
|
static void pinsnv30_arch_fake(void);
|
||||||
static void getstrap_arch_nv4(void);
|
static void getstrap_arch_nv4(void);
|
||||||
static void getstrap_arch_nv10_20_30(void);
|
static void getstrap_arch_nv10_20_30(void);
|
||||||
static status_t pins2_read(uint8 *rom, uint32 offset);
|
static status_t pins2_read(uint8 *rom, uint32 offset, uint8 ram_cfg);
|
||||||
static status_t pins5_read(uint8 *rom, uint32 offset);
|
static status_t pins3_6_read(uint8 *rom, uint32 offset, uint8 ram_cfg);
|
||||||
|
|
||||||
/* Parse the BIOS PINS structure if there */
|
/* Parse the BIOS PINS structure if there */
|
||||||
status_t parse_pins ()
|
status_t parse_pins ()
|
||||||
@@ -28,6 +28,7 @@ status_t parse_pins ()
|
|||||||
uint8 chksum = 0;
|
uint8 chksum = 0;
|
||||||
int i;
|
int i;
|
||||||
uint32 offset;
|
uint32 offset;
|
||||||
|
uint8 ram_cfg;
|
||||||
status_t result = B_ERROR;
|
status_t result = B_ERROR;
|
||||||
|
|
||||||
/* preset PINS read status to failed */
|
/* preset PINS read status to failed */
|
||||||
@@ -79,25 +80,18 @@ status_t parse_pins ()
|
|||||||
rom[offset + 5], rom[offset + 6]));
|
rom[offset + 5], rom[offset + 6]));
|
||||||
|
|
||||||
/* fill out the si->ps struct if possible */
|
/* fill out the si->ps struct if possible */
|
||||||
|
ram_cfg = ((NV_REG32(NV32_NVSTRAPINFO2) >> 2) & 0x0000000f);
|
||||||
|
|
||||||
switch (rom[offset + 5])
|
switch (rom[offset + 5])
|
||||||
{
|
{
|
||||||
case 2:
|
case 2:
|
||||||
pins2_read(rom, offset);
|
pins2_read(rom, offset, ram_cfg);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
//fixme:
|
|
||||||
pins5_read(rom, offset);
|
|
||||||
break;
|
|
||||||
case 4:
|
case 4:
|
||||||
//fixme:
|
|
||||||
pins5_read(rom, offset);
|
|
||||||
break;
|
|
||||||
case 5:
|
case 5:
|
||||||
pins5_read(rom, offset);
|
|
||||||
break;
|
|
||||||
case 6:
|
case 6:
|
||||||
//fixme:
|
pins3_6_read(rom, offset, ram_cfg);
|
||||||
pins5_read(rom, offset);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
LOG(8,("INFO: unknown PINS version\n"));
|
LOG(8,("INFO: unknown PINS version\n"));
|
||||||
@@ -117,16 +111,18 @@ status_t parse_pins ()
|
|||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static status_t pins2_read(uint8 *rom, uint32 offset)
|
static status_t pins2_read(uint8 *rom, uint32 offset, uint8 ram_cfg)
|
||||||
{
|
{
|
||||||
uint16 init1 = rom[offset + 18] + (rom[offset + 19] * 256);
|
uint16 init1 = rom[offset + 18] + (rom[offset + 19] * 256);
|
||||||
uint16 init2 = rom[offset + 20] + (rom[offset + 21] * 256);
|
uint16 init2 = rom[offset + 20] + (rom[offset + 21] * 256);
|
||||||
uint16 init_size = rom[offset + 22] + (rom[offset + 23] * 256) + 1;
|
uint16 init_size = rom[offset + 22] + (rom[offset + 23] * 256) + 1;
|
||||||
|
char* signon_msg = &(rom[(rom[offset + 24] + (rom[offset + 25] * 256))]);
|
||||||
char* vendor_name = &(rom[(rom[offset + 40] + (rom[offset + 41] * 256))]);
|
char* vendor_name = &(rom[(rom[offset + 40] + (rom[offset + 41] * 256))]);
|
||||||
char* product_name = &(rom[(rom[offset + 42] + (rom[offset + 43] * 256))]);
|
char* product_name = &(rom[(rom[offset + 42] + (rom[offset + 43] * 256))]);
|
||||||
char* product_rev = &(rom[(rom[offset + 44] + (rom[offset + 45] * 256))]);
|
char* product_rev = &(rom[(rom[offset + 44] + (rom[offset + 45] * 256))]);
|
||||||
|
|
||||||
LOG(8,("INFO: init_1 $%04x, init_2 $%04x, size $%04x\n", init1, init2, init_size));
|
LOG(8,("INFO: init_1 $%04x, init_2 $%04x, size $%04x\n", init1, init2, init_size));
|
||||||
|
LOG(8,("INFO: signon msg:\n%s\n", signon_msg));
|
||||||
LOG(8,("INFO: vendor name: %s\n", vendor_name));
|
LOG(8,("INFO: vendor name: %s\n", vendor_name));
|
||||||
LOG(8,("INFO: product name: %s\n", product_name));
|
LOG(8,("INFO: product name: %s\n", product_name));
|
||||||
LOG(8,("INFO: product rev: %s\n", product_rev));
|
LOG(8,("INFO: product rev: %s\n", product_rev));
|
||||||
@@ -134,20 +130,39 @@ static status_t pins2_read(uint8 *rom, uint32 offset)
|
|||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
static status_t pins5_read(uint8 *rom, uint32 offset)
|
static status_t pins3_6_read(uint8 *rom, uint32 offset, uint8 ram_cfg)
|
||||||
{
|
{
|
||||||
uint16 init1 = rom[offset + 18] + (rom[offset + 19] * 256);
|
uint16 init1 = rom[offset + 18] + (rom[offset + 19] * 256);
|
||||||
uint16 init2 = rom[offset + 20] + (rom[offset + 21] * 256);
|
uint16 init2 = rom[offset + 20] + (rom[offset + 21] * 256);
|
||||||
uint16 init_size = rom[offset + 22] + (rom[offset + 23] * 256) + 1;
|
uint16 init_size = rom[offset + 22] + (rom[offset + 23] * 256) + 1;
|
||||||
|
char* signon_msg = &(rom[(rom[offset + 30] + (rom[offset + 31] * 256))]);
|
||||||
char* vendor_name = &(rom[(rom[offset + 46] + (rom[offset + 47] * 256))]);
|
char* vendor_name = &(rom[(rom[offset + 46] + (rom[offset + 47] * 256))]);
|
||||||
char* product_name = &(rom[(rom[offset + 48] + (rom[offset + 49] * 256))]);
|
char* product_name = &(rom[(rom[offset + 48] + (rom[offset + 49] * 256))]);
|
||||||
char* product_rev = &(rom[(rom[offset + 50] + (rom[offset + 51] * 256))]);
|
char* product_rev = &(rom[(rom[offset + 50] + (rom[offset + 51] * 256))]);
|
||||||
|
|
||||||
LOG(8,("INFO: init_1 $%04x, init_2 $%04x, size $%04x\n", init1, init2, init_size));
|
LOG(8,("INFO: init_1 $%04x, init_2 $%04x, size $%04x\n", init1, init2, init_size));
|
||||||
|
LOG(8,("INFO: signon msg:\n%s\n", signon_msg));
|
||||||
LOG(8,("INFO: vendor name: %s\n", vendor_name));
|
LOG(8,("INFO: vendor name: %s\n", vendor_name));
|
||||||
LOG(8,("INFO: product name: %s\n", product_name));
|
LOG(8,("INFO: product name: %s\n", product_name));
|
||||||
LOG(8,("INFO: product rev: %s\n", product_rev));
|
LOG(8,("INFO: product rev: %s\n", product_rev));
|
||||||
|
|
||||||
|
/* pins 5.16 and higher only contain PLL VCO range info */
|
||||||
|
if (((rom[offset + 5]) >= 5) && ((rom[offset + 6]) >= 0x10))
|
||||||
|
{
|
||||||
|
uint32 fvco_max = *((uint32*)(&(rom[offset + 67])));
|
||||||
|
uint32 fvco_min = *((uint32*)(&(rom[offset + 71])));
|
||||||
|
|
||||||
|
LOG(8,("INFO: PLL VCO range is %dkHz - %dkHz\n", fvco_min, fvco_max));
|
||||||
|
|
||||||
|
/* only pins 5 contains this info */
|
||||||
|
//fixme: not finished..
|
||||||
|
/* if ((rom[offset + 5]) == 5)
|
||||||
|
{
|
||||||
|
uint16 IOFlagConditionTablePointer =
|
||||||
|
rom[offset + 85] + (rom[offset + 86] * 256);
|
||||||
|
}
|
||||||
|
*/ }
|
||||||
|
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user