Subversion Repositories freemyipod

Rev

Rev 814 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 814 Rev 835
Line 556... Line 556...
556
            dbgsendbuf[0] = 1;
556
            dbgsendbuf[0] = 1;
557
            dbgsendbuf[1] = (uint32_t)thread_create(NULL, (const char*)(dbgsendbuf[1]),
557
            dbgsendbuf[1] = (uint32_t)thread_create(NULL, (const char*)(dbgsendbuf[1]),
558
                                                    (const void*)(dbgsendbuf[2]),
558
                                                    (const void*)(dbgsendbuf[2]),
559
                                                    (char*)(dbgsendbuf[3]),
559
                                                    (char*)(dbgsendbuf[3]),
560
                                                    dbgsendbuf[4], (enum thread_type)dbgsendbuf[5],
560
                                                    dbgsendbuf[4], (enum thread_type)dbgsendbuf[5],
561
                                                    dbgsendbuf[6], dbgsendbuf[7]);
561
                                                    dbgsendbuf[6], dbgsendbuf[7],
-
 
562
                                                    (void*)dbgsendbuf[8], (void*)dbgsendbuf[9],
-
 
563
                                                    (void*)dbgsendbuf[10], (void*)dbgsendbuf[11]);
562
            size = 16;
564
            size = 16;
563
            break;
565
            break;
564
        case 20:  // FLUSH CACHE
566
        case 20:  // FLUSH CACHE
565
            clean_dcache();
567
            clean_dcache();
566
            invalidate_icache();
568
            invalidate_icache();
Line 569... Line 571...
569
            break;
571
            break;
570
        case 21:  // EXECIMAGE
572
        case 21:  // EXECIMAGE
571
            if (set_dbgaction(DBGACTION_EXECIMAGE, 0)) break;
573
            if (set_dbgaction(DBGACTION_EXECIMAGE, 0)) break;
572
            dbgactionaddr = dbgrecvbuf[1];
574
            dbgactionaddr = dbgrecvbuf[1];
573
            dbgactiontype = dbgrecvbuf[2];
575
            dbgactiontype = dbgrecvbuf[2];
-
 
576
            dbgactionlength = dbgrecvbuf[3];
-
 
577
            memcpy(dbgasyncsendbuf, &dbgrecvbuf[4], 0x1f0);
574
            break;
578
            break;
575
#ifdef HAVE_BOOTFLASH
579
#ifdef HAVE_BOOTFLASH
576
        case 22:  // READ BOOT FLASH
580
        case 22:  // READ BOOT FLASH
577
            if (set_dbgaction(DBGACTION_READBOOTFLASH, 0)) break;
581
            if (set_dbgaction(DBGACTION_READBOOTFLASH, 0)) break;
578
            dbgactionaddr = dbgrecvbuf[1];
582
            dbgactionaddr = dbgrecvbuf[1];
Line 698... Line 702...
698
    config_bundle.endpoint3_descriptor.bEndpointAddress = dbgendpoints[2];
702
    config_bundle.endpoint3_descriptor.bEndpointAddress = dbgendpoints[2];
699
    config_bundle.endpoint4_descriptor.bEndpointAddress = dbgendpoints[3];
703
    config_bundle.endpoint4_descriptor.bEndpointAddress = dbgendpoints[3];
700
    usb_setup_dbg_listener();
704
    usb_setup_dbg_listener();
701
}
705
}
702
 
706
 
703
void dbgthread(void)
707
void dbgthread(void* arg0, void* arg1, void* arg2, void* arg3)
704
{
708
{
705
    struct scheduler_thread* t;
709
    struct scheduler_thread* t;
706
    while (1)
710
    while (1)
707
    {
711
    {
708
        wakeup_wait(&dbgwakeup, TIMEOUT_BLOCK);
712
        wakeup_wait(&dbgwakeup, TIMEOUT_BLOCK);
Line 757... Line 761...
757
                cflush(dbgactionconsoles);
761
                cflush(dbgactionconsoles);
758
                dbgasyncsendbuf[0] = 1;
762
                dbgasyncsendbuf[0] = 1;
759
                usb_drv_send_nonblocking(dbgendpoints[1], dbgasyncsendbuf, 16);
763
                usb_drv_send_nonblocking(dbgendpoints[1], dbgasyncsendbuf, 16);
760
                break;
764
                break;
761
            case DBGACTION_EXECIMAGE:
765
            case DBGACTION_EXECIMAGE:
-
 
766
                if (dbgactionlength & 0x80000000)
-
 
767
                {
-
 
768
                    dbgactionlength &= ~0x80000000;
-
 
769
                    int i;
-
 
770
                    for (i = 0; i < dbgactionlength; i++)
-
 
771
                        dbgasyncsendbuf[i] += (uint32_t)dbgasyncsendbuf;
-
 
772
                }
-
 
773
                dbgasyncsendbuf[1] = (uint32_t)execimage((void*)dbgactionaddr, dbgactiontype,
-
 
774
                                                         (int)dbgactionlength,
-
 
775
                                                         (const char**)dbgasyncsendbuf);
762
                dbgasyncsendbuf[0] = 1;
776
                dbgasyncsendbuf[0] = 1;
763
                dbgasyncsendbuf[1] = (uint32_t)execimage((void*)dbgactionaddr, dbgactiontype);
-
 
764
                usb_drv_send_nonblocking(dbgendpoints[1], dbgasyncsendbuf, 16);
777
                usb_drv_send_nonblocking(dbgendpoints[1], dbgasyncsendbuf, 16);
765
                break;
778
                break;
766
            case DBGACTION_EXECFIRMWARE:
779
            case DBGACTION_EXECFIRMWARE:
767
                dbgasyncsendbuf[0] = 1;
780
                dbgasyncsendbuf[0] = 1;
768
                usb_drv_send_nonblocking(dbgendpoints[1], dbgasyncsendbuf, 16);
781
                usb_drv_send_nonblocking(dbgendpoints[1], dbgasyncsendbuf, 16);
Line 1048... Line 1061...
1048
    dbgconrecvwriteidx = 0;
1061
    dbgconrecvwriteidx = 0;
1049
    wakeup_init(&dbgconsendwakeup);
1062
    wakeup_init(&dbgconsendwakeup);
1050
    wakeup_init(&dbgconrecvwakeup);
1063
    wakeup_init(&dbgconrecvwakeup);
1051
    dbgconsoleattached = false;
1064
    dbgconsoleattached = false;
1052
    thread_create(&dbgthread_handle, "monitor worker", dbgthread, dbgstack,
1065
    thread_create(&dbgthread_handle, "monitor worker", dbgthread, dbgstack,
1053
                  sizeof(dbgstack), CORE_THREAD, 255, true);
1066
                  sizeof(dbgstack), CORE_THREAD, 255, true, NULL, NULL, NULL, NULL);
1054
    usb_drv_init();
1067
    usb_drv_init();
1055
}
1068
}
1056
 
1069
 
1057
int dbgconsole_getfree() ICODE_ATTR;
1070
int dbgconsole_getfree() ICODE_ATTR;
1058
int dbgconsole_getfree()
1071
int dbgconsole_getfree()