📄 ddma.lst
字号:
205:/mnt/hgfs/boot/booter/source/ddma.c **** * try to find that one. If it is not available return NULL 206:/mnt/hgfs/boot/booter/source/ddma.c **** */ 207:/mnt/hgfs/boot/booter/source/ddma.c **** if ( -1 != config->channel ) 325 .loc 1 207 0 326 0214 0800838C lw $3,8($4) 327 0218 FFFF0224 li $2,-1 # 0xffffffffffffffff 328 .loc 1 198 0 329 021c 21588000 move $11,$4 330 .loc 1 199 0 331 .loc 1 207 0 332 0220 2C006210 beq $3,$2,$L27 333 0224 21500000 move $10,$0 334 208:/mnt/hgfs/boot/booter/source/ddma.c **** { 209:/mnt/hgfs/boot/booter/source/ddma.c **** if ( TRUE == channels[config->channel].avail ) 335 .loc 1 209 0 336 0228 40100300 sll $2,$3,1 337 022c 21104300 addu $2,$2,$3 338 0230 80100200 sll $2,$2,2 339 0234 23104300 subu $2,$2,$3 340 0238 0000033C lui $3,%hi(channels) 341 023c 80100200 sll $2,$2,2 342 0240 04006324 addiu $3,$3,%lo(channels) 343 0244 21284300 addu $5,$2,$3 344 0248 0400A48C lw $4,4($5) 345 024c 01000224 li $2,1 # 0x1 210:/mnt/hgfs/boot/booter/source/ddma.c **** { 211:/mnt/hgfs/boot/booter/source/ddma.c **** chan = &channels[config->channel]; 212:/mnt/hgfs/boot/booter/source/ddma.c **** chan->avail = FALSE; 213:/mnt/hgfs/boot/booter/source/ddma.c **** } 214:/mnt/hgfs/boot/booter/source/ddma.c **** else 215:/mnt/hgfs/boot/booter/source/ddma.c **** return NULL; 346 .loc 1 215 0 347 0250 21180000 move $3,$0 348 .loc 1 211 0 349 .loc 1 209 0 350 0254 1D008214 bne $4,$2,$L26 351 0258 2150A000 move $10,$5GAS LISTING /tmp/ccEQxguf.s page 11 352 353 $L38: 216:/mnt/hgfs/boot/booter/source/ddma.c **** } 217:/mnt/hgfs/boot/booter/source/ddma.c **** else 218:/mnt/hgfs/boot/booter/source/ddma.c **** { 219:/mnt/hgfs/boot/booter/source/ddma.c **** /* Find an available channel for use */ 220:/mnt/hgfs/boot/booter/source/ddma.c **** for( i=DDMA_NUM_CHANNELS-1; i>=0; i--) 221:/mnt/hgfs/boot/booter/source/ddma.c **** if ( TRUE == channels[i].avail ) 222:/mnt/hgfs/boot/booter/source/ddma.c **** { 223:/mnt/hgfs/boot/booter/source/ddma.c **** chan = &channels[i]; 224:/mnt/hgfs/boot/booter/source/ddma.c **** chan->avail = FALSE; 354 .loc 1 224 0 355 025c 040040AD sw $0,4($10) 356 $L30: 225:/mnt/hgfs/boot/booter/source/ddma.c **** break; 226:/mnt/hgfs/boot/booter/source/ddma.c **** } 227:/mnt/hgfs/boot/booter/source/ddma.c **** } 228:/mnt/hgfs/boot/booter/source/ddma.c **** 229:/mnt/hgfs/boot/booter/source/ddma.c **** chan->ring = chan->dt = chan->dh = config->descriptors; 357 .loc 1 229 0 358 0260 0C00668D lw $6,12($11) 230:/mnt/hgfs/boot/booter/source/ddma.c **** 231:/mnt/hgfs/boot/booter/source/ddma.c **** /* Setup the channels intial descriptor pointer. */ 232:/mnt/hgfs/boot/booter/source/ddma.c **** chan->ptr->des_ptr = ~0xA0000000 & (uint32)chan->dh; 359 .loc 1 232 0 360 0264 0000458D lw $5,0($10) 361 0268 FF5F033C li $3,1610547200 # 0x5fff0000 362 026c FFFF6334 ori $3,$3,0xffff 363 0270 2410C300 and $2,$6,$3 364 0274 0400A2AC sw $2,4($5) 233:/mnt/hgfs/boot/booter/source/ddma.c **** 234:/mnt/hgfs/boot/booter/source/ddma.c **** /* Install the user's specified parameters */ 235:/mnt/hgfs/boot/booter/source/ddma.c **** chan->ptr->cfg = config->chan_cfg; 365 .loc 1 235 0 366 0278 1400648D lw $4,20($11) 236:/mnt/hgfs/boot/booter/source/ddma.c **** chan->ptr->stat_ptr = config->chan_stat; 237:/mnt/hgfs/boot/booter/source/ddma.c **** 238:/mnt/hgfs/boot/booter/source/ddma.c **** /* Copy the user's callback to the local channel structure */ 239:/mnt/hgfs/boot/booter/source/ddma.c **** chan->callback = config->callback; 240:/mnt/hgfs/boot/booter/source/ddma.c **** chan->arg = config->arg; 241:/mnt/hgfs/boot/booter/source/ddma.c **** 242:/mnt/hgfs/boot/booter/source/ddma.c **** /* Enable interrupts for this channel */ 243:/mnt/hgfs/boot/booter/source/ddma.c **** i= (1<<((uint32) ((~0xA0000000 & (uint32)chan->ptr)-DDMA_PHYS_ADDR)/sizeof(DDMA_CHANNEL))); 244:/mnt/hgfs/boot/booter/source/ddma.c **** ddma->inten = ddma->inten | i; 367 .loc 1 244 0 368 027c 0000023C lui $2,%hi(ddma) 369 0280 0000478C lw $7,%lo(ddma)($2) 370 .loc 1 235 0 371 0284 0000A4AC sw $4,0($5) 372 .loc 1 236 0 373 0288 1C00628D lw $2,28($11) 374 .loc 1 243 0 375 028c 2418A300 and $3,$5,$3 376 0290 021A0300 srl $3,$3,8 377 .loc 1 236 0 378 0294 0800A2AC sw $2,8($5) 379 .loc 1 244 0GAS LISTING /tmp/ccEQxguf.s page 12 380 0298 0C10E48C lw $4,4108($7) 381 .loc 1 240 0 382 029c 0400688D lw $8,4($11) 383 .loc 1 239 0 384 02a0 0000658D lw $5,0($11) 385 .loc 1 243 0 386 02a4 01000224 li $2,1 # 0x1 387 02a8 04486200 sll $9,$2,$3 388 .loc 1 244 0 389 02ac 25208900 or $4,$4,$9 390 02b0 0C10E4AC sw $4,4108($7) 391 .loc 1 239 0 392 02b4 240045AD sw $5,36($10) 393 .loc 1 240 0 394 02b8 280048AD sw $8,40($10) 395 .loc 1 229 0 396 02bc 1C0046AD sw $6,28($10) 397 02c0 200046AD sw $6,32($10) 398 02c4 180046AD sw $6,24($10) 245:/mnt/hgfs/boot/booter/source/ddma.c **** 246:/mnt/hgfs/boot/booter/source/ddma.c **** return chan; 399 .loc 1 246 0 400 02c8 21184001 move $3,$10 401 $L26: 247:/mnt/hgfs/boot/booter/source/ddma.c **** } 402 .loc 1 247 0 403 02cc 0800E003 j $31 404 02d0 21106000 move $2,$3 405 406 $L27: 407 02d4 0000023C lui $2,%hi(channels) 408 02d8 04004224 addiu $2,$2,%lo(channels) 409 02dc 94024424 addiu $4,$2,660 410 .loc 1 220 0 411 02e0 0F000924 li $9,15 # 0xf 412 02e4 01000524 li $5,1 # 0x1 413 02e8 BE000008 j $L35 414 02ec 98024324 addiu $3,$2,664 415 416 $L39: 417 02f0 DBFF2005 bltz $9,$L30 418 02f4 D4FF8424 addiu $4,$4,-44 419 420 $L35: 421 .loc 1 221 0 422 02f8 0000628C lw $2,0($3) 423 .loc 1 220 0 424 02fc FFFF2925 addiu $9,$9,-1 425 .loc 1 221 0 426 0300 FBFF4514 bne $2,$5,$L39 427 0304 D4FF6324 addiu $3,$3,-44 428 429 .loc 1 223 0 430 0308 97000008 j $L38 431 030c 21508000 move $10,$4 432 433 .set macroGAS LISTING /tmp/ccEQxguf.s page 13 434 .set reorder 435 $LFE7: 436 .end ddma_get_channel 437 .align 2 438 .globl ddma_free_channel 439 .ent ddma_free_channel 440 .type ddma_free_channel, @function 441 ddma_free_channel: 442 $LFB8: 248:/mnt/hgfs/boot/booter/source/ddma.c **** 249:/mnt/hgfs/boot/booter/source/ddma.c **** /* 250:/mnt/hgfs/boot/booter/source/ddma.c **** * Function : ddma_free_channel 251:/mnt/hgfs/boot/booter/source/ddma.c **** * 252:/mnt/hgfs/boot/booter/source/ddma.c **** * This function will free all resources with a specified channel. 253:/mnt/hgfs/boot/booter/source/ddma.c **** * 254:/mnt/hgfs/boot/booter/source/ddma.c **** * Parameters : 255:/mnt/hgfs/boot/booter/source/ddma.c **** * channel Pointer 256:/mnt/hgfs/boot/booter/source/ddma.c **** * 257:/mnt/hgfs/boot/booter/source/ddma.c **** * Returns : 258:/mnt/hgfs/boot/booter/source/ddma.c **** * TRUE On Success 259:/mnt/hgfs/boot/booter/source/ddma.c **** * FALSE On Failure 260:/mnt/hgfs/boot/booter/source/ddma.c **** * 261:/mnt/hgfs/boot/booter/source/ddma.c **** */ 262:/mnt/hgfs/boot/booter/source/ddma.c **** int ddma_free_channel( void *channel ) 263:/mnt/hgfs/boot/booter/source/ddma.c **** { 443 .loc 1 263 0 444 .frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0 445 .mask 0x80010000,-4 446 .fmask 0x00000000,0 447 .set noreorder 448 .set nomacro 449 450 0310 E8FFBD27 addiu $sp,$sp,-24 451 $LCFI11: 452 0314 1400BFAF sw $31,20($sp) 453 $LCFI12: 454 0318 1000B0AF sw $16,16($sp) 455 $LCFI13: 264:/mnt/hgfs/boot/booter/source/ddma.c **** int i; 265:/mnt/hgfs/boot/booter/source/ddma.c **** CHANNEL *chan = (CHANNEL*)channel; 266:/mnt/hgfs/boot/booter/source/ddma.c **** 267:/mnt/hgfs/boot/booter/source/ddma.c **** /* Disable interrupts for this channel */ 268:/mnt/hgfs/boot/booter/source/ddma.c **** i= (1<<((uint32) ((~0xA0000000 & (uint32)chan->ptr)-DDMA_PHYS_ADDR)/sizeof(DDMA_CHANNEL))); 456 .loc 1 268 0 457 031c 0000858C lw $5,0($4) 269:/mnt/hgfs/boot/booter/source/ddma.c **** ddma->inten = ddma->inten & ~i; 458 .loc 1 269 0 459 0320 0000033C lui $3,%hi(ddma) 460 0324 0000668C lw $6,%lo(ddma)($3) 461 .loc 1 268 0 462 0328 FF5F023C li $2,1610547200 # 0x5fff0000 463 032c FFFF4234 ori $2,$2,0xffff 464 0330 2428A200 and $5,$5,$2 465 .loc 1 269 0 466 0334 0C10C38C lw $3,4108($6) 467 .loc 1 268 0 468 0338 022A0500 srl $5,$5,8GAS LISTING /tmp/ccEQxguf.s page 14 469 033c 01000224 li $2,1 # 0x1 470 0340 0410A200 sll $2,$2,$5 471 .loc 1 269 0 472 0344 27100200 nor $2,$0,$2 473 0348 24186200 and $3,$3,$2 474 .loc 1 263 0 475 034c 21808000 move $16,$4 476 .loc 1 269 0 477 0350 0C10C3AC sw $3,4108($6) 270:/mnt/hgfs/boot/booter/source/ddma.c **** 271:/mnt/hgfs/boot/booter/source/ddma.c **** ddma_channel_stop( (CHANNEL*)channel ); 478 .loc 1 271 0 479 0354 0000000C jal ddma_channel_stop 480 0358 00000000 nop 481 272:/mnt/hgfs/boot/booter/source/ddma.c **** 273:/mnt/hgfs/boot/booter/source/ddma.c **** memset(channel,0,sizeof(CHANNEL)); 482 .loc 1 273 0 483 035c 21200002 move $4,$16 484 0360 21280000 move $5,$0 485 0364 0000000C jal memset 486 0368 2C000624 li $6,44 # 0x2c 487 274:/mnt/hgfs/boot/booter/source/ddma.c **** return TRUE; 275:/mnt/hgfs/boot/booter/source/ddma.c **** } 488 .loc 1 275 0 489 036c 1400BF8F lw $31,20($sp) 490 0370 1000B08F lw $16,16($sp) 491 0374 01000224 li $2,1 # 0x1 492 0378 0800E003 j $31 493 037c 1800BD27 addiu $sp,$sp,24 494 495 .set macro 496 .set reorder 497 $LFE8: 498 .end ddma_free_channel 499 .align 2 500 .globl ddma_init_descriptors 501 .ent ddma_init_descriptors 502 .type ddma_init_descriptors, @function 503 ddma_init_descriptors: 504 $LFB9: 276:/mnt/hgfs/boot/booter/source/ddma.c **** 277:/mnt/hgfs/boot/booter/source/ddma.c **** /* 278:/mnt/hgfs/boot/booter/source/ddma.c **** * Function : ddma_init_descriptors 279:/mnt/hgfs/boot/booter/source/ddma.c **** * 280:/mnt/hgfs/boot/booter/source/ddma.c **** * This function will take a descriptor list with the first entry modfied by 281:/mnt/hgfs/boot/booter/source/ddma.c **** * the user and duplicate it throughout the list. 282:/mnt/hgfs/boot/booter/source/ddma.c **** * It is up to the user to assign new src,dst and cnt values when the descriptors 283:/mnt/hgfs/boot/booter/source/ddma.c **** * are to be used. 284:/mnt/hgfs/boot/booter/source/ddma.c **** * 285:/mnt/hgfs/boot/booter/source/ddma.c **** * Mainly used for duplicating SIDs, DIDs, SAM etc. it also sets up the 286:/mnt/hgfs/boot/booter/source/ddma.c **** * nxt_ptrs for ring effect. 287:/mnt/hgfs/boot/booter/source/ddma.c **** * 288:/mnt/hgfs/boot/booter/source/ddma.c **** * Parameters : 289:/mnt/hgfs/boot/booter/source/ddma.c **** * list Pointer to the list of ddma descriptors 290:/mnt/hgfs/boot/booter/source/ddma.c **** * count number of descriptors in the listGAS LISTING /tmp/ccEQxguf.s page 15
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -