Changeset 33400 in vbox
- Timestamp:
- Oct 25, 2010 3:16:48 AM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 66989
- Location:
- trunk/src/VBox/Devices
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Audio/DevCodec.cpp
r33328 r33400 140 140 pNode->node.au32F00_param[5] = RT_BIT(8)|RT_BIT(0); 141 141 pNode->node.au32F00_param[8] = RT_MAKE_U32_FROM_U8(0x0d, 0x0d, 0x01, 0x0); /* Capabilities */ 142 //pNode->node.au32F00_param[0xa] = RT_BIT(19)|RT_BIT(18)|RT_BIT(17)|RT_BIT(10)|RT_BIT(9)|RT_BIT(8)|RT_BIT(7)|RT_BIT(6)|RT_BIT(5);143 pNode->node.au32F00_param[0xA] = RT_BIT(17)|RT_BIT(5);144 142 pNode->node.au32F00_param[0xC] = (17 << 8)|RT_BIT(6)|RT_BIT(5)|RT_BIT(2)|RT_BIT(1)|RT_BIT(0); 145 143 pNode->node.au32F00_param[0xB] = RT_BIT(0); … … 194 192 pNode->spdifout.u32A_param = (1<<14)|(0x1<<4) | 0x1; 195 193 pNode->spdifout.node.au32F00_param[9] = (4 << 16) | RT_BIT(9)|RT_BIT(4)|0x1; 196 pNode->node.au32F00_param[0xa] = RT_BIT(17)|RT_BIT(5);194 pNode->node.au32F00_param[0xa] = pState->pNodes[1].node.au32F00_param[0xA]; 197 195 pNode->spdifout.node.au32F00_param[0xB] = RT_BIT(2)|RT_BIT(0); 198 196 pNode->spdifout.u32F06_param = 0; 199 197 pNode->spdifout.u32F0d_param = 0; 200 //pNode->spdifout.node.au32F00_param[0xA] = RT_BIT(19)|RT_BIT(18)|RT_BIT(17)|RT_BIT(10)|RT_BIT(9)|RT_BIT(8)|RT_BIT(7)|RT_BIT(6);201 198 break; 202 199 case 9: … … 204 201 pNode->spdifin.u32A_param = (0x1<<4) | 0x1; 205 202 pNode->spdifin.node.au32F00_param[9] = (0x1 << 20)|(4 << 16) | RT_BIT(9)| RT_BIT(8)|RT_BIT(4)|0x1; 206 pNode->node.au32F00_param[0xA] = RT_BIT(17)|RT_BIT(5);203 pNode->node.au32F00_param[0xA] = pState->pNodes[1].node.au32F00_param[0xA]; 207 204 pNode->node.au32F00_param[0xE] = RT_BIT(0); 208 205 pNode->node.au32F02_param[0] = 0x11; … … 258 255 pNode->node.au32F00_param[0xC] = 0x34; 259 256 pNode->port.u32F09_param = 0; 260 //pNode->node.au32F00_param[0xC] = RT_BIT(5)|RT_BIT(2);261 257 pNode->port.u32F07_param = RT_BIT(5); 262 //pNode->port.u32F09_param = RT_BIT(31);263 258 if (!pState->fInReset) 264 259 pNode->port.u32F1c_param = RT_MAKE_U32_FROM_U8(0x50, 0x90, 0xA1, 0x02); /* Microphone */ … … 436 431 pNode->node.au32F00_param[2] = RT_BIT(20); /* Realtek 889 (8.1.9)*/ 437 432 pNode->node.au32F00_param[4] = (1 << 16)|0x1; /* start node 1, total 1*/ 438 pNode->node.au32F00_param[0xA] = RT_BIT(17)|RT_BIT(5);433 pNode->node.au32F00_param[0xA] = pState->pNodes[1].node.au32F00_param[0xA]; 439 434 440 435 break; … … 442 437 pNode->node.au32F00_param[4] = (2 << 16)|0x25; /* start node 1, total 1*/ 443 438 pNode->node.au32F00_param[5] = RT_BIT(8) | 0x1; /* UnSol: enabled, function group type: AFG */ 444 pNode->node.au32F00_param[0xa] = 0xe0560;445 439 pNode->afg.u32F20_param = pState->u16VendorId << 16 | pState->u16DeviceId; 446 440 pNode->node.au32F00_param[0xB] = 0x1; … … 463 457 pNode->node.name = "DAC-4"; 464 458 dac_init: 465 pNode->node.au32F00_param[0xA] = RT_BIT(17)|RT_BIT(5);459 pNode->node.au32F00_param[0xA] = pState->pNodes[1].node.au32F00_param[0xA]; 466 460 pNode->node.au32F00_param[0x9] = 0x11; 467 461 pNode->node.au32F00_param[0xB] = 0x1; … … 473 467 pNode->node.au32F00_param[0x9] = 0x211; 474 468 pNode->node.au32F00_param[0xB] = 0x1; 475 pNode->node.au32F00_param[0xA] = RT_BIT(17)|RT_BIT(5);469 pNode->node.au32F00_param[0xA] = pState->pNodes[1].node.au32F00_param[0xA]; 476 470 pNode->spdifout.u32A_param = (1<<14)|(0x1<<4) | 0x1; 477 471 break; … … 479 473 pNode->node.name = "SPDIFIN-0"; 480 474 pNode->node.au32F00_param[0x9] = 0x100391; 481 pNode->node.au32F00_param[0xA] = 0x1e0560;475 pNode->node.au32F00_param[0xA] = pState->pNodes[1].node.au32F00_param[0xA]; 482 476 pNode->node.au32F00_param[0xB] = 0x1; 483 477 pNode->node.au32F02_param[0] = RT_MAKE_U32_FROM_U8(0x1F, 0, 0, 0); … … 485 479 pNode->node.au32F02_param[2] = RT_MAKE_U32_FROM_U8(0x1F, 0, 0, 0); 486 480 pNode->node.au32F02_param[3] = RT_MAKE_U32_FROM_U8(0x1F, 0, 0, 0); 487 pNode->node.au32F00_param[0xA] = RT_BIT(17)|RT_BIT(5);481 pNode->node.au32F00_param[0xA] = pState->pNodes[1].node.au32F00_param[0xA]; 488 482 pNode->spdifin.u32A_param = (1<<14)|(0x1<<4) | 0x1; 489 483 break; … … 557 551 pNode->node.au32F00_param[0xD] = 0x80032e10; 558 552 pNode->node.au32F00_param[0xE] = 0x1; 559 pNode->node.au32F00_param[0xA] = RT_BIT(17)|RT_BIT(5);553 pNode->node.au32F00_param[0xA] = pState->pNodes[1].node.au32F00_param[0xA]; 560 554 pNode->adc.u32A_param = (1<<14)|(0x1<<4) | 0x1; 561 555 break; … … 680 674 pNode->node.name = "AdcVol-5"; 681 675 pNode->node.au32F00_param[0x9] = 0x20010b; 682 //pNode->node.au32F00_param[0xA] = 0x80051f17;683 676 pNode->node.au32F00_param[0xD] = 0x80051f17; 684 677 /* N = 0~3 */ … … 1916 1909 AUD_register_card ("ICH0", &pState->card); 1917 1910 1918 codec_dac_to_aud(pState, &as); 1919 pState->voice_pi = AUD_open_in(&pState->card, pState->voice_pi, "hda.in", pState, pi_callback, &as); 1920 codec_dac_to_aud(pState, &as); 1921 pState->voice_po = AUD_open_out(&pState->card, pState->voice_po, "hda.out", pState, po_callback, &as); 1922 if (!pState->voice_pi) 1923 LogRel (("HDAcodec: WARNING: Unable to open PCM IN!\n")); 1924 if (!pState->voice_po) 1925 LogRel (("HDAcodec: WARNING: Unable to open PCM OUT!\n")); 1911 /* @todo: AFG:f00[0xA] -> quemu's voices */ 1912 1913 as.freq = 44100; 1914 as.nchannels = 2; 1915 as.fmt = AUD_FMT_S16; 1916 as.endianness = 0; 1917 #define SETUP_AUDIO_FORMAT(pState, base, mult, div, name, as, in_callback, out_callback) \ 1918 do{ \ 1919 AUDIO_FORMAT_SELECTOR((pState), Out, (base), (mult), div) = AUD_open_out(&(pState)->card, \ 1920 AUDIO_FORMAT_SELECTOR(pState, Out, (base), (mult), (div)), name ".out", (pState), (out_callback), &(as)); \ 1921 Assert(AUDIO_FORMAT_SELECTOR(pState, Out, (base), (mult), (div))); \ 1922 if (!AUDIO_FORMAT_SELECTOR(pState, Out, (base), (mult), (div))) \ 1923 LogRel (("HDAcodec: WARNING: Unable to open PCM OUT(%s)!\n", name ".out")); \ 1924 AUDIO_FORMAT_SELECTOR(pState, In, (base), (mult), (div)) = AUD_open_in(&(pState)->card, \ 1925 AUDIO_FORMAT_SELECTOR(pState, In, (base), (mult), (div)), name ".in", (pState), (in_callback), &(as)); \ 1926 Assert(AUDIO_FORMAT_SELECTOR((pState), In, (base), (mult), (div))); \ 1927 if (!AUDIO_FORMAT_SELECTOR(pState, In, (base), (mult), (div))) \ 1928 LogRel (("HDAcodec: WARNING: Unable to open PCM IN(%s)!\n", name ".in")); \ 1929 } while(0) 1930 1931 SETUP_AUDIO_FORMAT(pState, AFMT_HZ_44_1K, AFMT_MULT_X1, AFMT_DIV_X1, "hda44_1", as, pi_callback, po_callback); 1932 pState->pNodes[1].node.au32F00_param[0xA] = RT_BIT(17)|RT_BIT(5); 1933 1934 #ifdef VBOX_WITH_AUDIO_FLEXIBLE_FORMAT 1935 as.freq *= 2; /* 2 * 44.1kHz */ 1936 SETUP_AUDIO_FORMAT(pState, AFMT_HZ_44_1K, AFMT_MULT_X2, AFMT_DIV_X1, "hda44_1_2x", as, pi_callback, po_callback); 1937 pState->pNodes[1].node.au32F00_param[0xA] |= RT_BIT(7); 1938 1939 as.freq *= 2; /* 4 * 44.1kHz */ 1940 SETUP_AUDIO_FORMAT(pState, AFMT_HZ_44_1K, AFMT_MULT_X4, AFMT_DIV_X1, "hda44_1_4x", as, pi_callback, po_callback); 1941 pState->pNodes[1].node.au32F00_param[0xA] |= RT_BIT(9); 1942 1943 as.freq = 48000; 1944 SETUP_AUDIO_FORMAT(pState, AFMT_HZ_48K, AFMT_MULT_X1, AFMT_DIV_X1, "hda48", as, pi_callback, po_callback); 1945 pState->pNodes[1].node.au32F00_param[0xA] |= RT_BIT(6); 1946 1947 # if 0 1948 as.freq *= 2; /* 2 * 48kHz */ 1949 SETUP_AUDIO_FORMAT(pState, AFMT_HZ_48K, AFMT_MULT_X2, AFMT_DIV_X1, "hda48_2x", as, pi_callback, po_callback); 1950 pState->pNodes[1].node.au32F00_param[0xA] |= RT_BIT(8); 1951 1952 as.freq *= 2; /* 4 * 48kHz */ 1953 SETUP_AUDIO_FORMAT(pState, AFMT_HZ_48K, AFMT_MULT_X4, AFMT_DIV_X1, "hda48_4x", as, pi_callback, po_callback); 1954 pState->pNodes[1].node.au32F00_param[0xA] |= RT_BIT(10); 1955 # endif 1956 #endif 1957 #undef SETUP_AUDIO_FORMAT 1958 1926 1959 codecToAudVolume(&pState->pNodes[pState->u8DacLineOut].dac.B_params, AUD_MIXER_VOLUME); 1927 1960 codecToAudVolume(&pState->pNodes[pState->u8AdcVolsLineIn].adcvol.B_params, AUD_MIXER_LINE_IN); -
trunk/src/VBox/Devices/Audio/DevCodec.h
r33327 r33400 236 236 ALC885_CODEC 237 237 } ENMCODEC; 238 239 #define AFMT_IN In 240 #define AFMT_OUT Out 241 242 #ifdef VBOX_WITH_AUDIO_FLEXIBLE_FORMAT 243 # define MAX_AUDIO_FORMAT 64 244 typedef SWVoiceIn *CODECAUDIOINFORMAT[MAX_AUDIO_FORMAT]; 245 typedef SWVoiceOut *CODECAUDIOOUTFORMAT[MAX_AUDIO_FORMAT]; 246 # define AUDIO_FORMAT_SELECTOR(pState, dir, hz, mult, divizor) ((pState)->aSwVoice##dir[(hz)*24 + (mult)*8 + (divizor)]) 247 # define AFMT_HZ_48K 0 248 # define AFMT_HZ_44_1K 1 249 # define AFMT_MULT_X1 0 250 # define AFMT_MULT_X2 1 251 # define AFMT_MULT_X3 2 /* reserved for stac9220 */ 252 # define AFMT_MULT_X4 3 253 # define AFMT_DIV_X1 0 254 # define AFMT_DIV_X2 1 255 # define AFMT_DIV_X3 2 256 # define AFMT_DIV_X4 3 257 # define AFMT_DIV_X5 4 258 # define AFMT_DIV_X6 5 259 # define AFMT_DIV_X7 6 260 # define AFMT_DIV_X8 7 261 #else 262 # define AUDIO_FORMAT_SELECTOR(pState, dir, hz, mult, divizor) ((pState)->SwVoice##dir) 263 #endif 264 265 238 266 typedef struct CODECState 239 267 { … … 245 273 PCODECNODE pNodes; 246 274 QEMUSoundCard card; 275 #ifndef VBOX_WITH_AUDIO_FLEXIBLE_FORMAT 247 276 /** PCM in */ 248 SWVoiceIn * voice_pi;277 SWVoiceIn *SwVoiceIn; 249 278 /** PCM out */ 250 SWVoiceOut * voice_po;279 SWVoiceOut *SwVoiceOut; 251 280 /** Mic in */ 252 281 SWVoiceIn *voice_mc; 282 #else 283 CODECAUDIOOUTFORMAT aSwVoiceOut; 284 CODECAUDIOINFORMAT aSwVoiceIn; 285 #endif 253 286 ENMCODEC enmCodec; 254 287 void *pHDAState; -
trunk/src/VBox/Devices/Audio/DevIchIntelHDA.cpp
r33327 r33400 320 320 #define ICH6_HDA_REG_SD6FMT (HDA_STREAM_REG_DEF(FMT, 0) + 60) /* 0x152 */ 321 321 #define ICH6_HDA_REG_SD7FMT (HDA_STREAM_REG_DEF(FMT, 0) + 70) /* 0x172 */ 322 323 #define SDFMT(pState, num) (HDA_REG((pState), SD(FMT, num))) 324 #define ICH6_HDA_SDFMT_BASE_RATE_SHIFT (14) 325 #define ICH6_HDA_SDFMT_MULT_SHIFT (11) 326 #define ICH6_HDA_SDFMT_MULT_MASK (0x7) 327 #define ICH6_HDA_SDFMT_DIV_SHIFT (8) 328 #define ICH6_HDA_SDFMT_DIV_MASK (0x7) 329 #define SDFMT_BASE_RATE(pState, num) ((SDFMT(pState, num) & HDA_REG_FIELD_FLAG_MASK(SDFMT, BASE_RATE)) >> HDA_REG_FIELD_SHIFT(SDFMT, BASE_RATE)) 330 #define SDFMT_MULT(pState, num) ((SDFMT((pState), num) & HDA_REG_FIELD_MASK(SDFMT,MULT)) >> HDA_REG_FIELD_SHIFT(SDFMT, MULT)) 331 #define SDFMT_DIV(pState, num) ((SDFMT((pState), num) & HDA_REG_FIELD_MASK(SDFMT,DIV)) >> HDA_REG_FIELD_SHIFT(SDFMT, DIV)) 322 332 323 333 #define ICH6_HDA_REG_SD0BDPL 40 /* 0x98 */ … … 392 402 #define ICH6_HDASTATE_2_DEVINS(pINTELHD) ((pINTELHD)->pDevIns) 393 403 #define PCIDEV_2_ICH6_HDASTATE(pPciDev) ((PCIINTELHDLinkState *)(pPciDev)) 404 405 #define ISD0FMT_TO_AUDIO_SELECTOR(pState) (AUDIO_FORMAT_SELECTOR(&(pState)->Codec, In, \ 406 SDFMT_BASE_RATE(pState, 0), SDFMT_MULT(pState, 0), SDFMT_DIV(pState, 0))) 407 #define OSD0FMT_TO_AUDIO_SELECTOR(pState) (AUDIO_FORMAT_SELECTOR(&(pState)->Codec, Out, \ 408 SDFMT_BASE_RATE(pState, 4), SDFMT_MULT(pState, 4), SDFMT_DIV(pState, 4))) 394 409 395 410 … … 972 987 Log(("hda: DMA(%x) switched on\n", offset)); 973 988 if (offset == 0x80) 974 { 975 AUD_set_active_in(pState->Codec.voice_pi, 1); 976 //AUD_set_active_in(pState->Codec.voice_mc, 1); 977 } 989 AUD_set_active_in(ISD0FMT_TO_AUDIO_SELECTOR(pState), 1); 978 990 if (offset == 0x100) 979 991 { … … 981 993 u64BaseDMA |= (((uint64_t)SDBDPU(pState, 4)) << 32); 982 994 if (u64BaseDMA) 983 { 984 //fetch_bd(pState, u64BaseDMA); 985 AUD_set_active_out(pState->Codec.voice_po, 1); 986 } 987 //SDSTS(pState, 4) |= (1<<5); 995 AUD_set_active_out(OSD0FMT_TO_AUDIO_SELECTOR(pState), 1); 988 996 } 989 997 } … … 993 1001 if (offset == 0x80) 994 1002 { 995 AUD_set_active_in(pState->Codec.voice_pi, 0); 996 //AUD_set_active_in(pState->Codec.voice_mc, 0); 1003 AUD_set_active_in(ISD0FMT_TO_AUDIO_SELECTOR(pState), 0); 997 1004 } 998 1005 if (offset == 0x100) 999 1006 { 1000 1007 SDSTS(pState, 4) &= ~(1<<5); 1001 AUD_set_active_out( pState->Codec.voice_po, 0);1008 AUD_set_active_out(OSD0FMT_TO_AUDIO_SELECTOR(pState), 0); 1002 1009 } 1003 //SSYNC(pState) &= ~(1<< (offset - 0x80));1004 1010 } 1005 1011 int rc = hdaRegWriteU24(pState, offset, index, u32Value); … … 1184 1190 /* todo: add input line detection */ 1185 1191 PHDABDLEDESC pBdle = &pState->stInBdle; 1186 SWVoiceIn *voice = pState->Codec.voice_pi;1192 SWVoiceIn *voice = ISD0FMT_TO_AUDIO_SELECTOR(pState); 1187 1193 u32Rest = pBdle->u32BdleCviLen - pBdle->u32BdleCviPos; 1188 1194 temp = audio_MIN(u32Rest, (uint32_t)avail); … … 1231 1237 to_copy = audio_MIN(temp, 4096U); 1232 1238 PDMDevHlpPhysRead(ICH6_HDASTATE_2_DEVINS(pState), pBdle->u64BdleCviAddr + pBdle->u32BdleCviPos, tmpbuf, to_copy); 1233 copied = AUD_write ( pState->Codec.voice_po, tmpbuf, to_copy);1239 copied = AUD_write (OSD0FMT_TO_AUDIO_SELECTOR(pState), tmpbuf, to_copy); 1234 1240 Log (("hda: write_audio max=%x to_copy=%x copied=%x\n", 1235 1241 avail, to_copy, copied)); … … 1497 1503 SSMR3PutMem (pSSMHandle, &pThis->hda.stMicBdle, sizeof (HDABDLEDESC)); 1498 1504 SSMR3PutMem (pSSMHandle, &pThis->hda.stInBdle, sizeof (HDABDLEDESC)); 1499 uint8_t voices = AUD_is_active_in( pThis->hda.Codec.voice_pi)? RT_BIT(0):0;1500 voices |= AUD_is_active_in(pThis->hda.Codec.voice_mc)? RT_BIT(1):0;1501 voices |= AUD_is_active_out( pThis->hda.Codec.voice_po)? RT_BIT(2):0;1505 uint8_t voices = AUD_is_active_in(ISD0FMT_TO_AUDIO_SELECTOR(&pThis->hda))? RT_BIT(0):0; 1506 //voices |= AUD_is_active_in(pThis->hda.Codec.voice_mc)? RT_BIT(1):0; 1507 voices |= AUD_is_active_out(OSD0FMT_TO_AUDIO_SELECTOR(&pThis->hda))? RT_BIT(2):0; 1502 1508 SSMR3PutU8(pSSMHandle, voices); 1503 1509 return VINF_SUCCESS; … … 1530 1536 uint8_t voices; 1531 1537 SSMR3GetU8(pSSMHandle, &voices); 1532 AUD_set_active_in( pThis->hda.Codec.voice_pi, voices & RT_BIT(0));1533 AUD_set_active_in(pThis->hda.Codec.voice_mc, voices & RT_BIT(1));1534 AUD_set_active_out( pThis->hda.Codec.voice_po, voices & RT_BIT(2));1538 AUD_set_active_in(ISD0FMT_TO_AUDIO_SELECTOR(&pThis->hda), voices & RT_BIT(0)); 1539 //AUD_set_active_in(pThis->hda.Codec.voice_mc, voices & RT_BIT(1)); 1540 AUD_set_active_out(OSD0FMT_TO_AUDIO_SELECTOR(&pThis->hda), voices & RT_BIT(2)); 1535 1541 pThis->hda.u64CORBBase = CORBLBASE(&pThis->hda); 1536 1542 pThis->hda.u64CORBBase |= ((uint64_t)CORBUBASE(&pThis->hda)) << 32; -
trunk/src/VBox/Devices/Audio/audio.c
r32673 r33400 122 122 } conf = { 123 123 { /* DAC fixed settings */ 124 #ifndef VBOX_WITH_AUDIO_FLEXIBLE_FORMAT 124 125 1, /* enabled */ 126 #else 127 0, 128 #endif 125 129 1, /* nb_voices */ 126 130 1, /* greedy */ … … 133 137 134 138 { /* ADC fixed settings */ 139 #ifndef VBOX_WITH_AUDIO_FLEXIBLE_FORMAT 135 140 1, /* enabled */ 141 #else 142 0, 143 #endif 136 144 1, /* nb_voices */ 137 145 1, /* greedy */ -
trunk/src/VBox/Devices/Makefile.kmk
r33364 r33400 301 301 Audio/DevIchAc97.cpp \ 302 302 Audio/DevSB16.cpp \ 303 Audio/DevIchIntelHDA.cpp \304 Audio/DevCodec.cpp \305 303 PC/DevDMA.cpp \ 306 304 PC/DevHPET.cpp \ … … 310 308 Serial/DevSerial.cpp \ 311 309 Parallel/DevParallel.cpp 310 311 VBOX_DEV_HDA_SOURCES= \ 312 Audio/DevIchIntelHDA.cpp \ 313 Audio/DevCodec.cpp 314 315 define def_vbox_audio_flags 316 $(1)_DEFS += \ 317 $(if $(VBOX_WITH_AUDIO_FLEXIBLE_FORMAT),VBOX_WITH_AUDIO_FLEXIBLE_FORMAT,) 318 endef 319 320 DevicesR3_SOURCES += $(VBOX_DEV_HDA_SOURCES) 321 322 $(foreach file,$(VBOX_DEV_HDA_SOURCES),$(eval $(call def_vbox_audio_flags, $(file)))) 323 312 324 313 325 ifdef VBOX_DYNAMIC_NET_ATTACH … … 852 864 Network/slirp 853 865 Drivers_SOURCES = \ 854 Audio/audio.c \855 Audio/audiosniffer.c \856 Audio/mixeng.c \857 Audio/noaudio.c \858 866 Input/DrvKeyboardQueue.cpp \ 859 867 Input/DrvMouseQueue.cpp \ … … 876 884 Network/Pcap.cpp 877 885 886 VBOX_AUDIO_SOURCES = \ 887 Audio/audio.c \ 888 Audio/audiosniffer.c \ 889 Audio/mixeng.c \ 890 Audio/noaudio.c 891 892 Drivers_SOURCES += $(VBOX_AUDIO_SOURCES) 893 $(foreach file,$(VBOX_AUDIO_SOURCES),$(eval $(call def_vbox_audio_flags, $(file)))) 894 878 895 VBOX_SLIRP_SOURCES = \ 879 896 Network/DrvNAT.cpp \
Note:
See TracChangeset
for help on using the changeset viewer.