Subversion Repositories freemyipod

Rev

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

Rev 212 Rev 226
Line 44... Line 44...
44
#include "hwkeyaes.h"
44
#include "hwkeyaes.h"
45
#endif
45
#endif
46
#ifdef HAVE_HMACSHA1
46
#ifdef HAVE_HMACSHA1
47
#include "hmacsha1.h"
47
#include "hmacsha1.h"
48
#endif
48
#endif
-
 
49
#ifdef USB_HAVE_TARGET_SPECIFIC_REQUESTS
-
 
50
#include "usbtarget.h"
-
 
51
#endif
49
 
52
 
50
 
53
 
51
static uint8_t ctrlresp[2] CACHEALIGN_ATTR;
54
static uint8_t ctrlresp[2] CACHEALIGN_ATTR;
52
static uint32_t dbgrecvbuf[0x80] CACHEALIGN_ATTR;
55
static uint32_t dbgrecvbuf[0x80] CACHEALIGN_ATTR;
53
static uint32_t dbgsendbuf[0x80] CACHEALIGN_ATTR;
56
static uint32_t dbgsendbuf[0x80] CACHEALIGN_ATTR;
Line 67... Line 70...
67
    DBGACTION_EXECIMAGE,
70
    DBGACTION_EXECIMAGE,
68
    DBGACTION_EXECFIRMWARE,
71
    DBGACTION_EXECFIRMWARE,
69
    DBGACTION_READBOOTFLASH,
72
    DBGACTION_READBOOTFLASH,
70
    DBGACTION_WRITEBOOTFLASH,
73
    DBGACTION_WRITEBOOTFLASH,
71
    DBGACTION_HWKEYAES,
74
    DBGACTION_HWKEYAES,
72
    DBGACTION_HMACSHA1
75
    DBGACTION_HMACSHA1,
-
 
76
    DBGACTION_TARGETSPECIFIC
73
};
77
};
74
 
78
 
75
static uint32_t dbgstack[0x100] STACK_ATTR;
79
static uint32_t dbgstack[0x100] STACK_ATTR;
76
struct wakeup dbgwakeup IBSS_ATTR;
80
struct wakeup dbgwakeup IBSS_ATTR;
77
extern struct scheduler_thread* scheduler_threads;
81
extern struct scheduler_thread* scheduler_threads;
Line 330... Line 334...
330
{
334
{
331
    void* addr = dbgsendbuf;
335
    void* addr = dbgsendbuf;
332
    int size = 0;
336
    int size = 0;
333
    if (endpoint == dbgendpoints[0])
337
    if (endpoint == dbgendpoints[0])
334
    {
338
    {
-
 
339
#ifdef USB_HAVE_TARGET_SPECIFIC_REQUESTS
-
 
340
        if (dbgrecvbuf[0] >= 0xffff0000)
-
 
341
        {
-
 
342
            if (!set_dbgaction(DBGACTION_TARGETSPECIFIC, 0))
-
 
343
                memcpy(dbgasyncsendbuf, dbgrecvbuf, sizeof(dbgasyncsendbuf));
-
 
344
            usb_setup_dbg_listener();
-
 
345
            return;
-
 
346
        }
-
 
347
#endif
335
        switch (dbgrecvbuf[0])
348
        switch (dbgrecvbuf[0])
336
        {
349
        {
337
        case 1:  // GET INFO
350
        case 1:  // GET INFO
338
            dbgsendbuf[0] = 1;
351
            dbgsendbuf[0] = 1;
339
            size = 16;
352
            size = 16;
Line 639... Line 652...
639
                break;
652
                break;
640
            case DBGACTION_CREAD:
653
            case DBGACTION_CREAD:
641
                dbgasyncsendbuf[0] = 1;
654
                dbgasyncsendbuf[0] = 1;
642
                dbgasyncsendbuf[1] = cread(dbgactionconsoles, (char*)&dbgasyncsendbuf[4],
655
                dbgasyncsendbuf[1] = cread(dbgactionconsoles, (char*)&dbgasyncsendbuf[4],
643
                                           dbgactionlength, 0);
656
                                           dbgactionlength, 0);
644
                usb_drv_send_nonblocking(dbgendpoints[1], dbgasyncsendbuf, 16);
657
                usb_drv_send_nonblocking(dbgendpoints[1], dbgasyncsendbuf, 16 + dbgactionlength);
645
                break;
658
                break;
646
            case DBGACTION_CFLUSH:
659
            case DBGACTION_CFLUSH:
647
                cflush(dbgactionconsoles);
660
                cflush(dbgactionconsoles);
648
                dbgasyncsendbuf[0] = 1;
661
                dbgasyncsendbuf[0] = 1;
649
                usb_drv_send_nonblocking(dbgendpoints[1], dbgasyncsendbuf, 16);
662
                usb_drv_send_nonblocking(dbgendpoints[1], dbgasyncsendbuf, 16);
Line 683... Line 696...
683
                hmacsha1((void*)dbgactionaddr, dbgactionlength, (void*)dbgactionoffset);
696
                hmacsha1((void*)dbgactionaddr, dbgactionlength, (void*)dbgactionoffset);
684
                dbgasyncsendbuf[0] = 1;
697
                dbgasyncsendbuf[0] = 1;
685
                usb_drv_send_nonblocking(dbgendpoints[1], dbgasyncsendbuf, 16);
698
                usb_drv_send_nonblocking(dbgendpoints[1], dbgasyncsendbuf, 16);
686
                break;
699
                break;
687
#endif
700
#endif
-
 
701
#ifdef USB_HAVE_TARGET_SPECIFIC_REQUESTS
-
 
702
            case DBGACTION_TARGETSPECIFIC:
-
 
703
            {
-
 
704
                int size = usb_target_handle_request(dbgasyncsendbuf, sizeof(dbgasyncsendbuf));
-
 
705
                if (size) usb_drv_send_nonblocking(dbgendpoints[1], dbgasyncsendbuf, size);
-
 
706
                break;
-
 
707
            }
-
 
708
#endif
688
            }
709
            }
689
            dbgaction = DBGACTION_IDLE;
710
            dbgaction = DBGACTION_IDLE;
690
        }
711
        }
691
    }
712
    }
692
}
713
}