Создать ответ 
 
Рейтинг темы:
  • Голосов: 1 - Средняя оценка: 5
  • 1
  • 2
  • 3
  • 4
  • 5
VMU Hack
Автор Сообщение
SWAT Не на форуме
Администратор
*******

Сообщений: 7236
Зарегистрирован: 04.01.2005
Рейтинг: 30
Сказал спасибо: 149
Поблагодарили 1214 раз(а) в 762 сообщ.
Сообщение: #20
RE: VMU Hack
MetalliC, возможно мы оба правы, ты описываешь одну реализацию, а я другую, или ты путаешь хардварную с софтварной. Я приводил пример на основе KOS. Я и не думал что кому-то в голову придет дергать DMA для 1 Кб, это грубая ошибка, в которую я до сих пор не могу поверить, так как все дримовские DMA работают оптимальней с пакетом из 16 Кб данных как не странно. И эта особенность используется там повсеместно.
Я читал все доступные доки, смотрел код, схемы шины и говорили о ней немного в другой теме, и в этом сообщении я более развернуто описал процесс обмена по DMA, я даже немного ошибся здесь пока писал, там правильней написано.
И чтобы не быть голословным, привожу выдержку из кода:
PHP код:
/** \brief  Maple DMA buffer size.

    Increase if you do a _LOT_ of maple stuff on every periodic interrupt.
*/
#define MAPLE_DMA_SIZE 16384

/* Global state info */
maple_state_t   maple_state;

//...

/* Allocate the DMA send buffer */
maple_state.dma_buffer memalign(32MAPLE_DMA_SIZE);

//...

/* Send all queued frames */
void maple_queue_flush() {
    
int     cntamt;
    
uint32      *out, *last;
    
maple_frame_t   *i;

    
cnt amt 0;
    
out = (uint32 *)maple_state.dma_buffer;
    
last NULL;

    
/* Go through and process each frame... */
    
TAILQ_FOREACH(i, &maple_state.frame_queueframeq) {
        
/* Are we running out of space? */
        
if((i->length amt) > MAPLE_DMA_SIZE)
            break;

        
/* Is this frame stale? */
        
if(i->state != MAPLE_FRAME_UNSENT)
            continue;

        
i->state MAPLE_FRAME_SENT;

        
/* Save the last descriptor head for the "last" flag */
        
last out;

        
/* First word: message length and destination port */
        
*out++ = i->length | (i->dst_port << 16);

        
/* Second word: receive buffer physical address */
        
*out++ = ((uint32)i->recv_buf) & 0x1fffffff;

        
/* Third word: command, addressing, packet length */
        
*out++ = (i->cmd 0xff) | (maple_addr(i->dst_porti->dst_unit) << 8)
                 | ((
i->dst_port << 6) << 16)
                 | ((
i->length 0xff) << 24);

        
/* Finally, parameter words, if any */
        
if(i->length 0) {
            
assert(i->send_buf != NULL);
            
memcpy(outi->send_bufi->length 4);
            
out += i->length;
        }

        
cnt++;
        
amt += i->length 4;
    }

    
/* Did we actually do anything...? */
    
if(cnt 0) {
        
/* Tack on the "last" bit to the last one */
        
assert(last != NULL);
        *
last |= 0x80000000;

        
/* Start a DMA transfer */
        
maple_dma_addr(maple_state.dma_buffer);
        
maple_dma_start();
        
maple_state.dma_in_progress 1;
    }


Кстати с какой целью ел корейскую кухню изучал Maple и по каким исходникам/докам?

[Изображение: barbers.png]
(Последний раз сообщение было отредактировано 16.08.2013 в 08:40, отредактировал пользователь SWAT.)
16.08.2013 07:55
Вебсайт Найти все сообщения Цитировать это сообщение
Создать ответ 


Сообщения в этой теме
VMU Hack - SWAT - 05.08.2013, 15:59
RE: VMU Hack - cybdyn - 05.08.2013, 17:20
RE: VMU Hack - SWAT - 06.08.2013, 08:04
RE: VMU Hack - cybdyn - 06.08.2013, 11:23
RE: VMU Hack - SWAT - 06.08.2013, 12:13
RE: VMU Hack - alex - 12.08.2013, 18:10
RE: VMU Hack - SWAT - 13.08.2013, 15:25
RE: VMU Hack - MetalliC - 13.08.2013, 19:37
RE: VMU Hack - SI{AY - 13.08.2013, 17:55
RE: VMU Hack - SWAT - 14.08.2013, 07:11
RE: VMU Hack - SI{AY - 14.08.2013, 14:19
RE: VMU Hack - SWAT - 14.08.2013, 14:52
RE: VMU Hack - SI{AY - 14.08.2013, 15:17
RE: VMU Hack - MetalliC - 14.08.2013, 19:25
RE: VMU Hack - SWAT - 15.08.2013, 07:51
RE: VMU Hack - MetalliC - 15.08.2013, 12:04
RE: VMU Hack - SWAT - 15.08.2013, 14:04
RE: VMU Hack - MetalliC - 15.08.2013, 20:19
RE: VMU Hack - alex - 15.08.2013, 19:26
RE: VMU Hack - SWAT - 16.08.2013 07:55
RE: VMU Hack - MetalliC - 16.08.2013, 20:45
RE: VMU Hack - SWAT - 16.08.2013, 08:36
RE: VMU Hack - shadow - 16.08.2013, 09:26
RE: VMU Hack - LEUMAS - 16.08.2013, 10:55
RE: VMU Hack - SWAT - 16.08.2013, 12:20
RE: VMU Hack - LEUMAS - 16.08.2013, 12:34
RE: VMU Hack - SWAT - 16.08.2013, 13:30
RE: VMU Hack - LEUMAS - 16.08.2013, 13:56
RE: VMU Hack - MetalliC - 16.08.2013, 22:49
RE: VMU Hack - SWAT - 19.08.2013, 07:36
RE: VMU Hack - MetalliC - 19.08.2013, 23:26
RE: VMU Hack - SWAT - 20.08.2013, 13:04
RE: VMU Hack - MetalliC - 20.08.2013, 20:56
RE: VMU Hack - SWAT - 21.08.2013, 10:48
RE: VMU Hack - Rio - 03.09.2013, 16:51
RE: VMU Hack - SWAT - 04.09.2013, 12:44
RE: VMU Hack - MetalliC - 07.09.2013, 15:04
RE: VMU Hack - Rio - 07.09.2013, 16:16

Переход:


Пользователи просматривают эту тему: 2 Гость(ей)