Changeset 108533 in vbox for trunk/src/VBox/VMM/VMMAll/GICAll.cpp
- Timestamp:
- Mar 12, 2025 10:28:14 AM (6 weeks ago)
- svn:sync-xref-src-repo-rev:
- 167923
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/GICAll.cpp
r108529 r108533 1813 1813 { 1814 1814 VMCPU_ASSERT_EMT(pVCpu); RT_NOREF(pVCpu); 1815 PGICDEV pGicDev = PDMDEVINS_2_DATA(pDevIns, PGICDEV); 1816 uint16_t const cbReg = sizeof(uint32_t); 1815 PGICDEV pGicDev = PDMDEVINS_2_DATA(pDevIns, PGICDEV); 1817 1816 1818 1817 /* 1819 * GICD_IGROUPR<n> and GICD_IGROUPR<n>E.1818 * 64-bit registers. 1820 1819 */ 1821 1820 { 1821 /* 1822 * GICD_IROUTER<n> and GICD_IROUTER<n>E. 1823 */ 1824 uint16_t const cbReg = sizeof(uint64_t); 1825 if (offReg - GIC_DIST_REG_IROUTERn_OFF_START < GIC_DIST_REG_IROUTERn_RANGE_SIZE) 1826 { 1827 /* Hardware does not map the first 32 registers (corresponding to SGIs and PPIs). */ 1828 uint16_t const idxExt = GIC_INTID_RANGE_SPI_START; 1829 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_IROUTERn_OFF_START) / cbReg; 1830 return gicDistReadIntrRoutingReg(pGicDev, idxReg, puValue); 1831 } 1832 if (offReg - GIC_DIST_REG_IROUTERnE_OFF_START < GIC_DIST_REG_IROUTERnE_RANGE_SIZE) 1833 { 1834 uint16_t const idxExt = RT_ELEMENTS(pGicDev->au32IntrRouting) / 2; 1835 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_IROUTERnE_OFF_START) / cbReg; 1836 return gicDistReadIntrRoutingReg(pGicDev, idxReg, puValue); 1837 } 1838 } 1839 1840 /* 1841 * 32-bit registers. 1842 */ 1843 { 1844 /* 1845 * GICD_IGROUPR<n> and GICD_IGROUPR<n>E. 1846 */ 1847 uint16_t const cbReg = sizeof(uint32_t); 1822 1848 if (offReg - GIC_DIST_REG_IGROUPRn_OFF_START < GIC_DIST_REG_IGROUPRn_RANGE_SIZE) 1823 1849 { … … 1831 1857 return gicDistReadIntrGroupReg(pGicDev, idxReg, puValue); 1832 1858 } 1833 } 1834 1835 /* 1836 * GICD_IROUTER<n> and GICD_IROUTER<n>E. 1837 */ 1838 { 1839 if (offReg - GIC_DIST_REG_IROUTERn_OFF_START < GIC_DIST_REG_IROUTERn_RANGE_SIZE) 1840 { 1841 /* Hardware does not map the first 32 registers (corresponding to SGIs and PPIs). */ 1842 uint16_t const idxExt = GIC_INTID_RANGE_SPI_START; 1843 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_IROUTERn_OFF_START) / sizeof(uint64_t); 1844 return gicDistReadIntrRoutingReg(pGicDev, idxReg, puValue); 1845 } 1846 if (offReg - GIC_DIST_REG_IROUTERnE_OFF_START < GIC_DIST_REG_IROUTERnE_RANGE_SIZE) 1847 { 1848 uint16_t const idxExt = RT_ELEMENTS(pGicDev->au32IntrRouting) / 2; 1849 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_IROUTERnE_OFF_START) / sizeof(uint64_t); 1850 return gicDistReadIntrRoutingReg(pGicDev, idxReg, puValue); 1851 } 1852 } 1853 1854 /* 1855 * GICD_ISENABLER<n> and GICD_ISENABLER<n>E. 1856 * GICD_ICENABLER<n> and GICD_ICENABLER<n>E. 1857 */ 1858 { 1859 1860 /* 1861 * GICD_ISENABLER<n> and GICD_ISENABLER<n>E. 1862 * GICD_ICENABLER<n> and GICD_ICENABLER<n>E. 1863 */ 1859 1864 if (offReg - GIC_DIST_REG_ISENABLERn_OFF_START < GIC_DIST_REG_ISENABLERn_RANGE_SIZE) 1860 1865 { … … 1868 1873 return gicDistReadIntrEnableReg(pGicDev, idxReg, puValue); 1869 1874 } 1870 1871 1875 if (offReg - GIC_DIST_REG_ICENABLERn_OFF_START < GIC_DIST_REG_ICENABLERn_RANGE_SIZE) 1872 1876 { … … 1880 1884 return gicDistReadIntrEnableReg(pGicDev, idxReg, puValue); 1881 1885 } 1882 } 1883 1884 /* 1885 * GICD_ISACTIVER<n> and GICD_ISACTIVER<n>E. 1886 * GICD_ICACTIVER<n> and GICD_ICACTIVER<n>E. 1887 */ 1888 { 1886 1887 /* 1888 * GICD_ISACTIVER<n> and GICD_ISACTIVER<n>E. 1889 * GICD_ICACTIVER<n> and GICD_ICACTIVER<n>E. 1890 */ 1889 1891 if (offReg - GIC_DIST_REG_ISACTIVERn_OFF_START < GIC_DIST_REG_ISACTIVERn_RANGE_SIZE) 1890 1892 { … … 1898 1900 return gicDistReadIntrActiveReg(pGicDev, idxReg, puValue); 1899 1901 } 1900 1901 1902 if (offReg - GIC_DIST_REG_ICACTIVERn_OFF_START < GIC_DIST_REG_ICACTIVERn_RANGE_SIZE) 1902 1903 { … … 1910 1911 return gicDistReadIntrActiveReg(pGicDev, idxReg, puValue); 1911 1912 } 1912 } 1913 1914 /* 1915 * GICD_IPRIORITYR<n> and GICD_IPRIORITYR<n>E. 1916 */ 1917 { 1913 1914 /* 1915 * GICD_IPRIORITYR<n> and GICD_IPRIORITYR<n>E. 1916 */ 1918 1917 if (offReg - GIC_DIST_REG_IPRIORITYRn_OFF_START < GIC_DIST_REG_IPRIORITYRn_RANGE_SIZE) 1919 1918 { … … 1927 1926 return gicDistReadIntrPriorityReg(pGicDev, idxReg, puValue); 1928 1927 } 1929 } 1930 1931 /* 1932 * GICD_ISPENDR<n> and GICD_ISPENDR<n>E. 1933 * GICD_ICPENDR<n> and GICD_ICPENDR<n>E. 1934 */ 1935 { 1928 1929 /* 1930 * GICD_ISPENDR<n> and GICD_ISPENDR<n>E. 1931 * GICD_ICPENDR<n> and GICD_ICPENDR<n>E. 1932 */ 1936 1933 if (offReg - GIC_DIST_REG_ISPENDRn_OFF_START < GIC_DIST_REG_ISPENDRn_RANGE_SIZE) 1937 1934 { … … 1945 1942 return gicDistReadIntrPendingReg(pGicDev, idxReg, puValue); 1946 1943 } 1947 1948 1944 if (offReg - GIC_DIST_REG_ICPENDRn_OFF_START < GIC_DIST_REG_ICPENDRn_RANGE_SIZE) 1949 1945 { … … 1957 1953 return gicDistReadIntrPendingReg(pGicDev, idxReg, puValue); 1958 1954 } 1959 } 1960 1961 /* 1962 * GICD_ICFGR<n> and GICD_ICFGR<n>E. 1963 */ 1964 { 1955 1956 /* 1957 * GICD_ICFGR<n> and GICD_ICFGR<n>E. 1958 */ 1965 1959 if (offReg - GIC_DIST_REG_ICFGRn_OFF_START < GIC_DIST_REG_ICFGRn_RANGE_SIZE) 1966 1960 { … … 2056 2050 { 2057 2051 VMCPU_ASSERT_EMT(pVCpu); RT_NOREF(pVCpu); 2058 PGICDEV pGicDev = PDMDEVINS_2_DATA(pDevIns, PGICDEV); 2059 PVMCC pVM = PDMDevHlpGetVM(pDevIns); 2060 uint16_t const cbReg = sizeof(uint32_t); 2052 PGICDEV pGicDev = PDMDEVINS_2_DATA(pDevIns, PGICDEV); 2053 PVMCC pVM = PDMDevHlpGetVM(pDevIns); 2061 2054 2062 2055 /* 2063 * GICD_IGROUPR<n> and GICD_IGROUPR<n>E.2056 * 64-bit registers. 2064 2057 */ 2065 if (offReg - GIC_DIST_REG_IGROUPRn_OFF_START < GIC_DIST_REG_IGROUPRn_RANGE_SIZE) 2066 { 2067 uint16_t const idxReg = (offReg - GIC_DIST_REG_IGROUPRn_OFF_START) / cbReg; 2068 return gicDistWriteIntrGroupReg(pVM, pGicDev, idxReg, uValue); 2069 } 2070 if (offReg - GIC_DIST_REG_IGROUPRnE_OFF_START < GIC_DIST_REG_IGROUPRnE_RANGE_SIZE) 2071 { 2072 uint16_t const idxExt = RT_ELEMENTS(pGicDev->bmIntrGroup) / 2; 2073 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_IGROUPRnE_OFF_START) / cbReg; 2074 return gicDistWriteIntrGroupReg(pVM, pGicDev, idxReg, uValue); 2058 { 2059 /* 2060 * GICD_IROUTER<n> and GICD_IROUTER<n>E. 2061 */ 2062 uint16_t const cbReg = sizeof(uint64_t); 2063 if (offReg - GIC_DIST_REG_IROUTERn_OFF_START < GIC_DIST_REG_IROUTERn_RANGE_SIZE) 2064 { 2065 /* Hardware does not map the first 32 registers (corresponding to SGIs and PPIs). */ 2066 uint16_t const idxExt = GIC_INTID_RANGE_SPI_START; 2067 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_IROUTERn_OFF_START) / cbReg; 2068 return gicDistWriteIntrRoutingReg(pGicDev, idxReg, uValue); 2069 } 2070 if (offReg - GIC_DIST_REG_IROUTERnE_OFF_START < GIC_DIST_REG_IROUTERnE_RANGE_SIZE) 2071 { 2072 uint16_t const idxExt = RT_ELEMENTS(pGicDev->au32IntrRouting) / 2; 2073 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_IROUTERnE_OFF_START) / cbReg; 2074 return gicDistWriteIntrRoutingReg(pGicDev, idxReg, uValue); 2075 } 2076 2075 2077 } 2076 2078 2077 2079 /* 2078 * GICD_IROUTER<n> and GICD_IROUTER<n>E.2080 * 32-bit registers. 2079 2081 */ 2080 if (offReg - GIC_DIST_REG_IROUTERn_OFF_START < GIC_DIST_REG_IROUTERn_RANGE_SIZE) 2081 { 2082 /* Hardware does not map the first 32 registers (corresponding to SGIs and PPIs). */ 2083 uint16_t const idxExt = GIC_INTID_RANGE_SPI_START; 2084 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_IROUTERn_OFF_START) / sizeof(uint64_t); 2085 return gicDistWriteIntrRoutingReg(pGicDev, idxReg, uValue); 2086 } 2087 if (offReg - GIC_DIST_REG_IROUTERnE_OFF_START < GIC_DIST_REG_IROUTERnE_RANGE_SIZE) 2088 { 2089 uint16_t const idxExt = RT_ELEMENTS(pGicDev->au32IntrRouting) / 2; 2090 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_IROUTERnE_OFF_START) / sizeof(uint64_t); 2091 return gicDistWriteIntrRoutingReg(pGicDev, idxReg, uValue); 2092 } 2093 2094 /* 2095 * GICD_ISENABLER<n> and GICD_ISENABLER<n>E. 2096 * GICD_ICENABLER<n> and GICD_ICENABLER<n>E. 2097 */ 2098 if (offReg - GIC_DIST_REG_ISENABLERn_OFF_START < GIC_DIST_REG_ISENABLERn_RANGE_SIZE) 2099 { 2100 uint16_t const idxReg = (offReg - GIC_DIST_REG_ISENABLERn_OFF_START) / cbReg; 2101 return gicDistWriteIntrSetEnableReg(pVM, pGicDev, idxReg, uValue); 2102 } 2103 if (offReg - GIC_DIST_REG_ISENABLERnE_OFF_START < GIC_DIST_REG_ISENABLERnE_RANGE_SIZE) 2104 { 2105 uint16_t const idxExt = RT_ELEMENTS(pGicDev->bmIntrEnabled) / 2; 2106 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_ISENABLERnE_OFF_START) / cbReg; 2107 return gicDistWriteIntrSetEnableReg(pVM, pGicDev, idxReg, uValue); 2108 } 2109 2110 if (offReg - GIC_DIST_REG_ICENABLERn_OFF_START < GIC_DIST_REG_ICENABLERn_RANGE_SIZE) 2111 { 2112 uint16_t const idxReg = (offReg - GIC_DIST_REG_ICENABLERn_OFF_START) / cbReg; 2113 return gicDistWriteIntrClearEnableReg(pVM, pGicDev, idxReg, uValue); 2114 } 2115 if (offReg - GIC_DIST_REG_ICENABLERnE_OFF_START < GIC_DIST_REG_ICENABLERnE_RANGE_SIZE) 2116 { 2117 uint16_t const idxExt = RT_ELEMENTS(pGicDev->bmIntrEnabled) / 2; 2118 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_ICENABLERnE_OFF_START) / cbReg; 2119 return gicDistWriteIntrClearEnableReg(pVM, pGicDev, idxReg, uValue); 2120 } 2121 2122 /* 2123 * GICD_ISACTIVER<n> and GICD_ISACTIVER<n>E. 2124 * GICD_ICACTIVER<n> and GICD_ICACTIVER<n>E. 2125 */ 2126 if (offReg - GIC_DIST_REG_ISACTIVERn_OFF_START < GIC_DIST_REG_ISACTIVERn_RANGE_SIZE) 2127 { 2128 uint16_t const idxReg = (offReg - GIC_DIST_REG_ISACTIVERn_OFF_START) / cbReg; 2129 return gicDistWriteIntrSetActiveReg(pVM, pGicDev, idxReg, uValue); 2130 } 2131 if (offReg - GIC_DIST_REG_ISACTIVERnE_OFF_START < GIC_DIST_REG_ISACTIVERnE_RANGE_SIZE) 2132 { 2133 uint16_t const idxExt = RT_ELEMENTS(pGicDev->bmIntrActive) / 2; 2134 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_ISACTIVERnE_OFF_START) / cbReg; 2135 return gicDistWriteIntrSetActiveReg(pVM, pGicDev, idxReg, uValue); 2136 } 2137 2138 if (offReg - GIC_DIST_REG_ICACTIVERn_OFF_START < GIC_DIST_REG_ICACTIVERn_RANGE_SIZE) 2139 { 2140 uint16_t const idxReg = (offReg - GIC_DIST_REG_ICACTIVERn_OFF_START) / cbReg; 2141 return gicDistWriteIntrClearActiveReg(pVM, pGicDev, idxReg, uValue); 2142 } 2143 if (offReg - GIC_DIST_REG_ICACTIVERnE_OFF_START < GIC_DIST_REG_ICACTIVERnE_RANGE_SIZE) 2144 { 2145 uint16_t const idxExt = RT_ELEMENTS(pGicDev->bmIntrActive) / 2; 2146 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_ICACTIVERnE_OFF_START) / cbReg; 2147 return gicDistWriteIntrClearActiveReg(pVM, pGicDev, idxReg, uValue); 2148 } 2149 2150 /* 2151 * GICD_IPRIORITYR<n> and GICD_IPRIORITYR<n>E. 2152 */ 2153 if (offReg - GIC_DIST_REG_IPRIORITYRn_OFF_START < GIC_DIST_REG_IPRIORITYRn_RANGE_SIZE) 2154 { 2155 uint16_t const idxReg = (offReg - GIC_DIST_REG_IPRIORITYRn_OFF_START) / cbReg; 2156 return gicDistWriteIntrPriorityReg(pGicDev, idxReg, uValue); 2157 } 2158 if (offReg - GIC_DIST_REG_IPRIORITYRnE_OFF_START < GIC_DIST_REG_IPRIORITYRnE_RANGE_SIZE) 2159 { 2160 uint16_t const idxExt = RT_ELEMENTS(pGicDev->abIntrPriority) / (2 * sizeof(uint32_t)); 2161 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_IPRIORITYRnE_OFF_START) / cbReg; 2162 return gicDistWriteIntrPriorityReg(pGicDev, idxReg, uValue); 2163 } 2164 2165 /* 2166 * GICD_ISPENDR<n> and GICD_ISPENDR<n>E. 2167 * GICD_ICPENDR<n> and GICD_ICPENDR<n>E. 2168 */ 2169 if (offReg - GIC_DIST_REG_ISPENDRn_OFF_START < GIC_DIST_REG_ISPENDRn_RANGE_SIZE) 2170 { 2171 uint16_t const idxReg = (offReg - GIC_DIST_REG_ISPENDRn_OFF_START) / cbReg; 2172 return gicDistWriteIntrSetPendingReg(pVM, pGicDev, idxReg, uValue); 2173 } 2174 if (offReg - GIC_DIST_REG_ISPENDRnE_OFF_START < GIC_DIST_REG_ISPENDRnE_RANGE_SIZE) 2175 { 2176 uint16_t const idxExt = RT_ELEMENTS(pGicDev->bmIntrPending) / 2; 2177 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_ISPENDRnE_OFF_START) / cbReg; 2178 return gicDistWriteIntrSetPendingReg(pVM, pGicDev, idxReg, uValue); 2179 } 2180 2181 if (offReg - GIC_DIST_REG_ICPENDRn_OFF_START < GIC_DIST_REG_ICPENDRn_RANGE_SIZE) 2182 { 2183 uint16_t const idxReg = (offReg - GIC_DIST_REG_ICPENDRn_OFF_START) / cbReg; 2184 return gicDistWriteIntrClearPendingReg(pVM, pGicDev, idxReg, uValue); 2185 } 2186 if (offReg - GIC_DIST_REG_ICPENDRnE_OFF_START < GIC_DIST_REG_ICPENDRnE_RANGE_SIZE) 2187 { 2188 uint16_t const idxExt = RT_ELEMENTS(pGicDev->bmIntrPending) / 2; 2189 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_ICPENDRnE_OFF_START) / cbReg; 2190 return gicDistWriteIntrClearPendingReg(pVM, pGicDev, idxReg, uValue); 2191 } 2192 2193 /* 2194 * GICD_ICFGR<n> and GICD_ICFGR<n>E. 2195 */ 2196 if (offReg - GIC_DIST_REG_ICFGRn_OFF_START < GIC_DIST_REG_ICFGRn_RANGE_SIZE) 2197 { 2198 uint16_t const idxReg = (offReg - GIC_DIST_REG_ICFGRn_OFF_START) / cbReg; 2199 return gicDistWriteIntrConfigReg(pGicDev, idxReg, uValue); 2200 } 2201 if (offReg - GIC_DIST_REG_ICFGRnE_OFF_START < GIC_DIST_REG_ICFGRnE_RANGE_SIZE) 2202 { 2203 uint16_t const idxExt = RT_ELEMENTS(pGicDev->bmIntrConfig) / 2; 2204 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_ICFGRnE_OFF_START) / cbReg; 2205 return gicDistWriteIntrConfigReg(pGicDev, idxReg, uValue); 2082 { 2083 /* 2084 * GICD_IGROUPR<n> and GICD_IGROUPR<n>E. 2085 */ 2086 uint16_t const cbReg = sizeof(uint32_t); 2087 if (offReg - GIC_DIST_REG_IGROUPRn_OFF_START < GIC_DIST_REG_IGROUPRn_RANGE_SIZE) 2088 { 2089 uint16_t const idxReg = (offReg - GIC_DIST_REG_IGROUPRn_OFF_START) / cbReg; 2090 return gicDistWriteIntrGroupReg(pVM, pGicDev, idxReg, uValue); 2091 } 2092 if (offReg - GIC_DIST_REG_IGROUPRnE_OFF_START < GIC_DIST_REG_IGROUPRnE_RANGE_SIZE) 2093 { 2094 uint16_t const idxExt = RT_ELEMENTS(pGicDev->bmIntrGroup) / 2; 2095 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_IGROUPRnE_OFF_START) / cbReg; 2096 return gicDistWriteIntrGroupReg(pVM, pGicDev, idxReg, uValue); 2097 } 2098 2099 /* 2100 * GICD_ISENABLER<n> and GICD_ISENABLER<n>E. 2101 * GICD_ICENABLER<n> and GICD_ICENABLER<n>E. 2102 */ 2103 if (offReg - GIC_DIST_REG_ISENABLERn_OFF_START < GIC_DIST_REG_ISENABLERn_RANGE_SIZE) 2104 { 2105 uint16_t const idxReg = (offReg - GIC_DIST_REG_ISENABLERn_OFF_START) / cbReg; 2106 return gicDistWriteIntrSetEnableReg(pVM, pGicDev, idxReg, uValue); 2107 } 2108 if (offReg - GIC_DIST_REG_ISENABLERnE_OFF_START < GIC_DIST_REG_ISENABLERnE_RANGE_SIZE) 2109 { 2110 uint16_t const idxExt = RT_ELEMENTS(pGicDev->bmIntrEnabled) / 2; 2111 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_ISENABLERnE_OFF_START) / cbReg; 2112 return gicDistWriteIntrSetEnableReg(pVM, pGicDev, idxReg, uValue); 2113 } 2114 if (offReg - GIC_DIST_REG_ICENABLERn_OFF_START < GIC_DIST_REG_ICENABLERn_RANGE_SIZE) 2115 { 2116 uint16_t const idxReg = (offReg - GIC_DIST_REG_ICENABLERn_OFF_START) / cbReg; 2117 return gicDistWriteIntrClearEnableReg(pVM, pGicDev, idxReg, uValue); 2118 } 2119 if (offReg - GIC_DIST_REG_ICENABLERnE_OFF_START < GIC_DIST_REG_ICENABLERnE_RANGE_SIZE) 2120 { 2121 uint16_t const idxExt = RT_ELEMENTS(pGicDev->bmIntrEnabled) / 2; 2122 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_ICENABLERnE_OFF_START) / cbReg; 2123 return gicDistWriteIntrClearEnableReg(pVM, pGicDev, idxReg, uValue); 2124 } 2125 2126 /* 2127 * GICD_ISACTIVER<n> and GICD_ISACTIVER<n>E. 2128 * GICD_ICACTIVER<n> and GICD_ICACTIVER<n>E. 2129 */ 2130 if (offReg - GIC_DIST_REG_ISACTIVERn_OFF_START < GIC_DIST_REG_ISACTIVERn_RANGE_SIZE) 2131 { 2132 uint16_t const idxReg = (offReg - GIC_DIST_REG_ISACTIVERn_OFF_START) / cbReg; 2133 return gicDistWriteIntrSetActiveReg(pVM, pGicDev, idxReg, uValue); 2134 } 2135 if (offReg - GIC_DIST_REG_ISACTIVERnE_OFF_START < GIC_DIST_REG_ISACTIVERnE_RANGE_SIZE) 2136 { 2137 uint16_t const idxExt = RT_ELEMENTS(pGicDev->bmIntrActive) / 2; 2138 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_ISACTIVERnE_OFF_START) / cbReg; 2139 return gicDistWriteIntrSetActiveReg(pVM, pGicDev, idxReg, uValue); 2140 } 2141 if (offReg - GIC_DIST_REG_ICACTIVERn_OFF_START < GIC_DIST_REG_ICACTIVERn_RANGE_SIZE) 2142 { 2143 uint16_t const idxReg = (offReg - GIC_DIST_REG_ICACTIVERn_OFF_START) / cbReg; 2144 return gicDistWriteIntrClearActiveReg(pVM, pGicDev, idxReg, uValue); 2145 } 2146 if (offReg - GIC_DIST_REG_ICACTIVERnE_OFF_START < GIC_DIST_REG_ICACTIVERnE_RANGE_SIZE) 2147 { 2148 uint16_t const idxExt = RT_ELEMENTS(pGicDev->bmIntrActive) / 2; 2149 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_ICACTIVERnE_OFF_START) / cbReg; 2150 return gicDistWriteIntrClearActiveReg(pVM, pGicDev, idxReg, uValue); 2151 } 2152 2153 /* 2154 * GICD_IPRIORITYR<n> and GICD_IPRIORITYR<n>E. 2155 */ 2156 if (offReg - GIC_DIST_REG_IPRIORITYRn_OFF_START < GIC_DIST_REG_IPRIORITYRn_RANGE_SIZE) 2157 { 2158 uint16_t const idxReg = (offReg - GIC_DIST_REG_IPRIORITYRn_OFF_START) / cbReg; 2159 return gicDistWriteIntrPriorityReg(pGicDev, idxReg, uValue); 2160 } 2161 if (offReg - GIC_DIST_REG_IPRIORITYRnE_OFF_START < GIC_DIST_REG_IPRIORITYRnE_RANGE_SIZE) 2162 { 2163 uint16_t const idxExt = RT_ELEMENTS(pGicDev->abIntrPriority) / (2 * sizeof(uint32_t)); 2164 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_IPRIORITYRnE_OFF_START) / cbReg; 2165 return gicDistWriteIntrPriorityReg(pGicDev, idxReg, uValue); 2166 } 2167 2168 /* 2169 * GICD_ISPENDR<n> and GICD_ISPENDR<n>E. 2170 * GICD_ICPENDR<n> and GICD_ICPENDR<n>E. 2171 */ 2172 if (offReg - GIC_DIST_REG_ISPENDRn_OFF_START < GIC_DIST_REG_ISPENDRn_RANGE_SIZE) 2173 { 2174 uint16_t const idxReg = (offReg - GIC_DIST_REG_ISPENDRn_OFF_START) / cbReg; 2175 return gicDistWriteIntrSetPendingReg(pVM, pGicDev, idxReg, uValue); 2176 } 2177 if (offReg - GIC_DIST_REG_ISPENDRnE_OFF_START < GIC_DIST_REG_ISPENDRnE_RANGE_SIZE) 2178 { 2179 uint16_t const idxExt = RT_ELEMENTS(pGicDev->bmIntrPending) / 2; 2180 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_ISPENDRnE_OFF_START) / cbReg; 2181 return gicDistWriteIntrSetPendingReg(pVM, pGicDev, idxReg, uValue); 2182 } 2183 if (offReg - GIC_DIST_REG_ICPENDRn_OFF_START < GIC_DIST_REG_ICPENDRn_RANGE_SIZE) 2184 { 2185 uint16_t const idxReg = (offReg - GIC_DIST_REG_ICPENDRn_OFF_START) / cbReg; 2186 return gicDistWriteIntrClearPendingReg(pVM, pGicDev, idxReg, uValue); 2187 } 2188 if (offReg - GIC_DIST_REG_ICPENDRnE_OFF_START < GIC_DIST_REG_ICPENDRnE_RANGE_SIZE) 2189 { 2190 uint16_t const idxExt = RT_ELEMENTS(pGicDev->bmIntrPending) / 2; 2191 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_ICPENDRnE_OFF_START) / cbReg; 2192 return gicDistWriteIntrClearPendingReg(pVM, pGicDev, idxReg, uValue); 2193 } 2194 2195 /* 2196 * GICD_ICFGR<n> and GICD_ICFGR<n>E. 2197 */ 2198 if (offReg - GIC_DIST_REG_ICFGRn_OFF_START < GIC_DIST_REG_ICFGRn_RANGE_SIZE) 2199 { 2200 uint16_t const idxReg = (offReg - GIC_DIST_REG_ICFGRn_OFF_START) / cbReg; 2201 return gicDistWriteIntrConfigReg(pGicDev, idxReg, uValue); 2202 } 2203 if (offReg - GIC_DIST_REG_ICFGRnE_OFF_START < GIC_DIST_REG_ICFGRnE_RANGE_SIZE) 2204 { 2205 uint16_t const idxExt = RT_ELEMENTS(pGicDev->bmIntrConfig) / 2; 2206 uint16_t const idxReg = idxExt + (offReg - GIC_DIST_REG_ICFGRnE_OFF_START) / cbReg; 2207 return gicDistWriteIntrConfigReg(pGicDev, idxReg, uValue); 2208 } 2206 2209 } 2207 2210
Note:
See TracChangeset
for help on using the changeset viewer.