@@ -1508,6 +1508,165 @@ static void pci_update_irq_disabled(PCIDevice *d, int was_irq_disabled)
15081508 }
15091509}
15101510
1511+ /* PCI Bus Address and MMIO - We match stock xbox */
1512+ #define PCI_XBOX_SYSTEM_BUS 0
1513+ #define PCI_XBOX_GPU_BUS 1
1514+
1515+ // Bus 0, device 0, function 0.
1516+ #define PCI_HOSTBRIDGE_DEVICE_ID 0
1517+ #define PCI_HOSTBRIDGE_FUNCTION_ID 0
1518+
1519+ // Bus 0, device 1, function 0.
1520+ #define PCI_LPCBRIDGE_DEVICE_ID 1
1521+ #define PCI_LPCBRIDGE_FUNCTION_ID 0
1522+ #define PCI_LPCBRIDGE_IO_REGISTER_BASE_0 0x8000
1523+
1524+ // Bus 0, device 1, function 1.
1525+ #define PCI_SMBUS_DEVICE_ID 1
1526+ #define PCI_SMBUS_FUNCTION_ID 1
1527+ #define PCI_SMBUS_IO_REGISTER_BASE_1 0xC000
1528+ #define PCI_SMBUS_IO_REGISTER_BASE_2 0xC200
1529+
1530+ // Bus 0, device 2, function 0.
1531+ #define PCI_USB0_DEVICE_ID 2
1532+ #define PCI_USB0_FUNCTION_ID 0
1533+ #define PCI_USB0_IRQ 1
1534+ #define PCI_USB0_MEMORY_REGISTER_BASE_0 0xFED00000
1535+
1536+ // Bus 0, device 3, function 0.
1537+ #define PCI_USB1_DEVICE_ID 3
1538+ #define PCI_USB1_FUNCTION_ID 0
1539+ #define PCI_USB1_IRQ 9
1540+ #define PCI_USB1_MEMORY_REGISTER_BASE_0 0xFED08000
1541+
1542+ // Bus 0, device 4, function 0.
1543+ #define PCI_NIC_DEVICE_ID 4
1544+ #define PCI_NIC_FUNCTION_ID 0
1545+ #define PCI_NIC_IRQ 4
1546+ #define PCI_NIC_MEMORY_REGISTER_BASE_0 0xFEF00000
1547+ #define PCI_NIC_IO_REGISTER_BASE_1 0xE000
1548+
1549+ // Bus 0, device 5, function 0.
1550+ #define PCI_APU_DEVICE_ID 5
1551+ #define PCI_APU_FUNCTION_ID 0
1552+ #define PCI_APU_IRQ 5
1553+ #define PCI_APU_MEMORY_REGISTER_BASE_0 0xFE800000
1554+
1555+ // Bus 0, device 6, function 0.
1556+ #define PCI_ACI_DEVICE_ID 6
1557+ #define PCI_ACI_FUNCTION_ID 0
1558+ #define PCI_ACI_IRQ 6
1559+ #define PCI_ACI_IO_REGISTER_BASE_0 0xD000
1560+ #define PCI_ACI_IO_REGISTER_BASE_1 0xD200
1561+ // On retail, this is 0xFEC00000, but we use 0xFEC10000 to prevent overlaying
1562+ // with the IOAPIC as we use it for FreeRTOS
1563+ #define PCI_ACI_MEMORY_REGISTER_BASE_2 0xFEC20000 //0xFEC00000
1564+
1565+ // Bus 0, device 9, function 0.
1566+ #define PCI_IDE_DEVICE_ID 9
1567+ #define PCI_IDE_FUNCTION_ID 0
1568+ #define PCI_IDE_IRQ 14
1569+ #define PCI_IDE_IO_REGISTER_BASE_4 0xFF60
1570+
1571+ // Bus 0, device 30, function 0.
1572+ #define PCI_AGPBRIDGE_DEVICE_ID 30
1573+ #define PCI_AGPBRIDGE_FUNCTION_ID 0
1574+
1575+ // Bus 1, device 0, device 0.
1576+ #define PCI_GPU_DEVICE_ID 0
1577+ #define PCI_GPU_FUNCTION_ID 0
1578+ #define PCI_GPU_IRQ 3
1579+ #define PCI_GPU_MEMORY_REGISTER_BASE_0 0xFD000000
1580+
1581+ static void slot_to_string (uint8_t bus_n , uint32_t devfn , const char * * slot_name , const char * * function_name ){
1582+ uint8_t device = PCI_SLOT (devfn );
1583+ uint8_t function = PCI_FUNC (devfn );
1584+
1585+ if (bus_n == PCI_XBOX_SYSTEM_BUS && device == PCI_HOSTBRIDGE_DEVICE_ID && function == PCI_HOSTBRIDGE_FUNCTION_ID ) {
1586+ * function_name = "PCI_HOSTBRIDGE_FUNCTION_ID" ;
1587+ * slot_name = "PCI_HOSTBRIDGE_DEVICE_ID" ;
1588+ return ;
1589+ }
1590+
1591+ if (bus_n == PCI_XBOX_SYSTEM_BUS && device == PCI_LPCBRIDGE_DEVICE_ID && function == PCI_LPCBRIDGE_FUNCTION_ID ) {
1592+ * function_name = "PCI_LPCBRIDGE_FUNCTION_ID" ;
1593+ * slot_name = "PCI_LPCBRIDGE_DEVICE_ID" ;
1594+ return ;
1595+ }
1596+
1597+ if (bus_n == PCI_XBOX_SYSTEM_BUS && device == PCI_SMBUS_DEVICE_ID && function == PCI_SMBUS_FUNCTION_ID ) {
1598+ * function_name = "PCI_SMBUS_FUNCTION_ID" ;
1599+ * slot_name = "PCI_SMBUS_DEVICE_ID" ;
1600+ return ;
1601+ }
1602+
1603+ if (bus_n == PCI_XBOX_SYSTEM_BUS && device == PCI_SMBUS_DEVICE_ID && function == PCI_SMBUS_FUNCTION_ID ) {
1604+ * function_name = "PCI_SMBUS_FUNCTION_ID" ;
1605+ * slot_name = "PCI_SMBUS_DEVICE_ID" ;
1606+ return ;
1607+ }
1608+
1609+ if (bus_n == PCI_XBOX_SYSTEM_BUS && device == PCI_USB0_DEVICE_ID && function == PCI_USB0_FUNCTION_ID ) {
1610+ * function_name = "PCI_USB0_FUNCTION_ID" ;
1611+ * slot_name = "PCI_USB0_DEVICE_ID" ;
1612+ return ;
1613+ }
1614+
1615+ if (bus_n == PCI_XBOX_SYSTEM_BUS && device == PCI_USB1_DEVICE_ID && function == PCI_USB1_FUNCTION_ID ) {
1616+ * function_name = "PCI_USB1_FUNCTION_ID" ;
1617+ * slot_name = "PCI_USB1_DEVICE_ID" ;
1618+ return ;
1619+ }
1620+
1621+ if (bus_n == PCI_XBOX_SYSTEM_BUS && device == PCI_NIC_DEVICE_ID && function == PCI_NIC_FUNCTION_ID ) {
1622+ * function_name = "PCI_NIC_FUNCTION_ID" ;
1623+ * slot_name = "PCI_NIC_DEVICE_ID" ;
1624+ return ;
1625+ }
1626+
1627+ if (bus_n == PCI_XBOX_SYSTEM_BUS && device == PCI_APU_DEVICE_ID && function == PCI_APU_FUNCTION_ID ) {
1628+ * function_name = "PCI_APU_FUNCTION_ID" ;
1629+ * slot_name = "PCI_APU_DEVICE_ID" ;
1630+ return ;
1631+ }
1632+
1633+ if (bus_n == PCI_XBOX_SYSTEM_BUS && device == PCI_ACI_DEVICE_ID && function == PCI_ACI_FUNCTION_ID ) {
1634+ * function_name = "PCI_ACI_FUNCTION_ID" ;
1635+ * slot_name = "PCI_ACI_DEVICE_ID" ;
1636+ return ;
1637+ }
1638+
1639+ if (bus_n == PCI_XBOX_SYSTEM_BUS && device == PCI_IDE_DEVICE_ID && function == PCI_IDE_FUNCTION_ID ) {
1640+ * function_name = "PCI_IDE_FUNCTION_ID" ;
1641+ * slot_name = "PCI_IDE_DEVICE_ID" ;
1642+ return ;
1643+ }
1644+
1645+ if (bus_n == PCI_XBOX_SYSTEM_BUS && device == PCI_AGPBRIDGE_DEVICE_ID && function == PCI_AGPBRIDGE_FUNCTION_ID ) {
1646+ * function_name = "PCI_AGPBRIDGE_FUNCTION_ID" ;
1647+ * slot_name = "PCI_AGPBRIDGE_DEVICE_ID" ;
1648+ return ;
1649+ }
1650+
1651+ if (bus_n == PCI_XBOX_GPU_BUS && device == PCI_GPU_DEVICE_ID && function == PCI_GPU_FUNCTION_ID ) {
1652+ * function_name = "PCI_GPU_FUNCTION_ID" ;
1653+ * slot_name = "PCI_GPU_DEVICE_ID" ;
1654+ return ;
1655+ }
1656+
1657+ static char function_name_buffer [32 ];
1658+ static char slot_name_buffer [32 ];
1659+ snprintf (function_name_buffer , sizeof (function_name_buffer ), "UNKNOWN_FUNCTION_%02x" , function );
1660+ snprintf (slot_name_buffer , sizeof (slot_name_buffer ), "UNKNOWN_DEVICE_%02x" , device );
1661+
1662+
1663+ * function_name = function_name_buffer ;
1664+ * slot_name = slot_name_buffer ;
1665+
1666+ }
1667+
1668+
1669+
15111670uint32_t pci_default_read_config (PCIDevice * d ,
15121671 uint32_t address , int len )
15131672{
@@ -1520,6 +1679,21 @@ uint32_t pci_default_read_config(PCIDevice *d,
15201679 pcie_sync_bridge_lnk (d );
15211680 }
15221681 memcpy (& val , d -> config + address , len );
1682+
1683+ #if (1 )
1684+ const char * function_name = NULL ;
1685+ const char * slot_name = NULL ;
1686+ uint8_t bus = pci_dev_bus_num (d );
1687+ uint32_t devid = object_property_get_int (OBJECT (d ), "addr" , & error_abort );
1688+ slot_to_string (bus , devid , & slot_name , & function_name );
1689+ if (len == 4 ) {
1690+ printf ("pci_io_input_dword(%s, %s, %s, 0x%08x); //%08x\n" , (bus == 0 ) ? "PCI_XBOX_SYSTEM_BUS" : "PCI_XBOX_GPU_BUS" , slot_name , function_name , address , val );
1691+ } else if (len == 2 ){
1692+ printf ("pci_io_input_word(%s, %s, %s, 0x%08x); //%08x\n" , (bus == 0 ) ? "PCI_XBOX_SYSTEM_BUS" : "PCI_XBOX_GPU_BUS" , slot_name , function_name , address , val );
1693+ } else {
1694+ printf ("pci_io_input_byte(%s, %s, %s, 0x%08x); //%08x\n" , (bus == 0 ) ? "PCI_XBOX_SYSTEM_BUS" : "PCI_XBOX_GPU_BUS" , slot_name , function_name , address , val );
1695+ }
1696+ #endif
15231697 return le32_to_cpu (val );
15241698}
15251699
@@ -1528,6 +1702,24 @@ void pci_default_write_config(PCIDevice *d, uint32_t addr, uint32_t val_in, int
15281702 int i , was_irq_disabled = pci_irq_disabled (d );
15291703 uint32_t val = val_in ;
15301704
1705+ #if (1 )
1706+ const char * function_name = NULL ;
1707+ const char * slot_name = NULL ;
1708+ uint8_t bus = pci_dev_bus_num (d );
1709+ uint32_t devid = object_property_get_int (OBJECT (d ), "addr" , & error_abort );
1710+ slot_to_string (bus , devid , & slot_name , & function_name );
1711+
1712+ uint32_t address = addr ;
1713+ int len = l ;
1714+ if (len == 4 ) {
1715+ printf ("pci_io_output_dword(%s, %s, %s, 0x%08x, 0x%08x);\n" , (bus == 0 ) ? "PCI_XBOX_SYSTEM_BUS" : "PCI_XBOX_GPU_BUS" , slot_name , function_name , address , val );
1716+ } else if (len == 2 ){
1717+ printf ("pci_io_output_word(%s, %s, %s, 0x%08x, 0x%04x);\n" , (bus == 0 ) ? "PCI_XBOX_SYSTEM_BUS" : "PCI_XBOX_GPU_BUS" , slot_name , function_name , address , val );
1718+ } else {
1719+ printf ("pci_io_output_byte(%s, %s, %s, 0x%08x, 0x%02x);\n" , (bus == 0 ) ? "PCI_XBOX_SYSTEM_BUS" : "PCI_XBOX_GPU_BUS" , slot_name , function_name , address , val );
1720+ }
1721+ #endif
1722+
15311723 assert (addr + l <= pci_config_size (d ));
15321724
15331725 for (i = 0 ; i < l ; val >>= 8 , ++ i ) {
0 commit comments