From: <he...@us...> - 2005-05-31 18:33:53
|
Update of /cvsroot/gc-linux/linux/drivers/block/gcn-di In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24530 Modified Files: drive_20010608.h drive_20020402.h drive_20020823.h drive_all.S gcn-di.c Log Message: Made the driver a lot more user friendly. - Now we need a single drive spin up on open, thanks to cheqmate's findings. - And normal media is accepted quickly. - Failed drive commands are retried up to 10 times before aborting them. Index: drive_20010608.h =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/block/gcn-di/drive_20010608.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- drive_20010608.h 17 May 2005 20:59:19 -0000 1.1 +++ drive_20010608.h 31 May 2005 18:33:42 -0000 1.2 @@ -4,21 +4,27 @@ "\xe1\x1a\x5f\xc7\xdc\x6e\x80\xa0\xf8\xac\x01\xf4\xe1\x30\x5f\xc7" "\xf4\x74\x47\xd0\x40\xf7\x20\x4c\x80\xf4\x74\xf0\xaa\x08\xf7\x20" "\xd6\xfc\xf4\x74\x45\xb1\x08\xf7\x20\xd2\xfc\x80\x0c\xc4\xda\xfc" - "\xf4\x74\x1e\xd4\x08\xf0\x00\xc8\xda\xfc\xf5\x00\x01\xe9\x22\xc8" - "\xda\xfc\xf5\x00\x02\xe8\x03\xfc\x8e\x00\xf4\x74\x02\xed\x40\x80" - "\x02\xf0\x20\xc8\x78\x80\xc0\x90\x81\xf4\xd0\x18\xd1\x40\xf0\x01" - "\xfe\xcc\xda\xfc\xf7\x00\xfe\xff\xc4\xda\xfc\xcc\x44\xfc\xf7\x00" - "\xfe\xff\xc4\x44\xfc\xf2\x7c\xd0\x04\xcc\x5b\x80\xd8\x01\xe9\x02" - "\x7c\x04\xf4\x75\xb5\xd0\x40\x51\x20\x71\x34\xf4\x7d\xb9\x85\x08" - "\xe9\x12\xf4\x75\x1c\xd1\x40\x80\x01\x14\xcc\xda\xfc\xf7\x00\xf7" - "\xff\xc4\xda\xfc\xfe\xf7\x10\xff\xf7\x21\xf4\x79\x00\xf0\x00\xe9" - "\x0e\x80\x00\xf4\xc9\x1c\xd1\x40\xd9\x00\xe9\x03\xf5\x10\x09\x21" - "\xd9\x06\xe9\x0f\x61\x06\xf4\xc8\x1c\xd1\x40\xd8\x00\xe9\x02\xd5" - "\x06\x41\x06\xf4\xe0\x68\xe0\xc7\xcc\xda\xfc\xf7\x00\xfd\xff\xc4" - "\xda\xfc\xcc\x44\xfc\xf7\x00\xfe\xff\xc4\x44\xfc\xf2\x7c\xd0\x04" - "\xcc\x5b\x80\xd8\x01\xe9\x02\x7c\x04\xf4\x75\x11\xd1\x40\x51\x20" - "\xfe\xa0\xf4\xe0\x8b\xda\xc7\x00\x74\x0a\x08\x00\x00\x00\x00\x00" + "\xf4\x74\x1e\xd4\x08\xf0\x00\xc8\xda\xfc\xf5\x00\x01\xe9\x73\xc8" + "\xda\xfc\xf5\x00\x02\xe8\x03\xfc\xec\x00\xf4\x74\x02\xed\x40\x80" + "\x02\xf0\x20\xc8\x78\x80\xc0\x90\x81\xdc\xa8\x80\xf5\x30\x00\xf4" + "\x44\x7d\xd1\x40\xf8\xaa\x00\x10\xf4\xd0\x78\xd1\x40\xf0\x01\xdc" + "\xa8\x80\xf5\x30\x00\xf7\x48\xaa\x00\xe9\x07\xf4\xc4\x7d\xd1\x40" + "\x10\xfe\xf7\x48\xee\x00\xe8\x0c\xd8\x55\xe9\x25\xcc\xa9\x80\xfd" + "\x53\x00\xea\x0c\xcc\xa9\x80\xc4\xa4\x81\xcc\xaa\x80\xc4\x88\x81" + "\xdc\xa8\x80\xf8\xe0\x00\x10\xa0\xf5\x10\x01\xf5\x10\x02\xf5\x10" + "\x03\xfe\xcc\xda\xfc\xf7\x00\xfe\xff\xc4\xda\xfc\xcc\x44\xfc\xf7" + "\x00\xfe\xff\xc4\x44\xfc\xf2\x7c\xd0\x04\xcc\x5b\x80\xd8\x01\xe9" + "\x02\x7c\x04\xf4\x75\x13\xd1\x40\x51\x20\x71\x34\xf4\x7d\xb9\x85" + "\x08\xe9\x1b\x80\x00\xcd\xda\xfc\xd8\x00\xe9\x06\xf7\x01\xf7\xff" + "\xea\x03\xf5\x09\x08\xc5\xda\xfc\xf4\x75\x7c\xd1\x40\x14\xfe\x80" + "\x01\xea\xe2\xf7\x10\xff\xf7\x21\xf4\x79\x00\xf0\x00\xe9\x0e\x80" + "\x00\xf4\xc9\x7c\xd1\x40\xd9\x00\xe8\x03\xf5\x10\x09\x21\xd9\x06" + "\xe9\x0f\x61\x06\xf4\xc8\x7c\xd1\x40\xd8\x00\xe8\x02\xd5\x06\x41" + "\x06\xf4\xe0\x0a\xe0\xc7\xcc\xda\xfc\xf7\x00\xfd\xff\xc4\xda\xfc" + "\xcc\x44\xfc\xf7\x00\xfe\xff\xc4\x44\xfc\xf2\x7c\xd0\x04\xcc\x5b" + "\x80\xd8\x01\xe9\x02\x7c\x04\xf4\x75\x6f\xd1\x40\x51\x20\xfe\xa0" + "\xf4\xe0\x2d\xda\xc7\x00\x00\x00\x74\x0a\x08\x00\x01\x00\x00\x00" "" ; -const int drive_20010608_firmware_size = 288; +const int drive_20010608_firmware_size = 384; Index: drive_20020402.h =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/block/gcn-di/drive_20020402.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- drive_20020402.h 17 May 2005 20:59:19 -0000 1.2 +++ drive_20020402.h 31 May 2005 18:33:42 -0000 1.3 @@ -4,21 +4,27 @@ "\xe1\x13\x5f\xc7\xdc\x6e\x80\xa0\xf8\xb8\x01\xf4\xe1\x29\x5f\xc7" "\xf4\x74\x47\xd0\x40\xf7\x20\x4c\x80\xf4\x74\xdb\xa7\x08\xf7\x20" "\xd6\xfc\xf4\x74\x28\xae\x08\xf7\x20\xd2\xfc\x80\x0c\xc4\xda\xfc" - "\xf4\x74\x7e\xd4\x08\xf0\x00\xc8\xda\xfc\xf5\x00\x01\xe9\x22\xc8" - "\xda\xfc\xf5\x00\x02\xe8\x03\xfc\x8e\x00\xf4\x74\xf9\xec\x40\x80" - "\x02\xf0\x20\xc8\x84\x80\xc0\x9c\x81\xf4\xd0\x18\xd1\x40\xf0\x01" - "\xfe\xcc\xda\xfc\xf7\x00\xfe\xff\xc4\xda\xfc\xcc\x44\xfc\xf7\x00" - "\xfe\xff\xc4\x44\xfc\xf2\x7c\xd0\x04\xcc\x5b\x80\xd8\x01\xe9\x02" - "\x7c\x04\xf4\x75\xb5\xd0\x40\x51\x20\x71\x34\xf4\x7d\xc1\x85\x08" - "\xe9\x12\xf4\x75\x1c\xd1\x40\x80\x01\x14\xcc\xda\xfc\xf7\x00\xf7" - "\xff\xc4\xda\xfc\xfe\xf7\x10\xff\xf7\x21\xf4\x79\x00\xf0\x00\xe9" - "\x0e\x80\x00\xf4\xc9\x1c\xd1\x40\xd9\x00\xe9\x03\xf5\x10\x09\x21" - "\xd9\x06\xe9\x0f\x61\x06\xf4\xc8\x1c\xd1\x40\xd8\x00\xe9\x02\xd5" - "\x06\x41\x06\xf4\xe0\x4b\xdd\xc7\xcc\xda\xfc\xf7\x00\xfd\xff\xc4" - "\xda\xfc\xcc\x44\xfc\xf7\x00\xfe\xff\xc4\x44\xfc\xf2\x7c\xd0\x04" - "\xcc\x5b\x80\xd8\x01\xe9\x02\x7c\x04\xf4\x75\x11\xd1\x40\x51\x20" - "\xfe\xa0\xf4\xe0\x76\xd7\xc7\x00\x74\x0a\x08\x00\x00\x00\x00\x00" + "\xf4\x74\x7e\xd4\x08\xf0\x00\xc8\xda\xfc\xf5\x00\x01\xe9\x73\xc8" + "\xda\xfc\xf5\x00\x02\xe8\x03\xfc\xec\x00\xf4\x74\xf9\xec\x40\x80" + "\x02\xf0\x20\xc8\x84\x80\xc0\x9c\x81\xdc\xb4\x80\xf5\x30\x00\xf4" + "\x44\x7d\xd1\x40\xf8\xaa\x00\x10\xf4\xd0\x78\xd1\x40\xf0\x01\xdc" + "\xb4\x80\xf5\x30\x00\xf7\x48\xaa\x00\xe9\x07\xf4\xc4\x7d\xd1\x40" + "\x10\xfe\xf7\x48\xee\x00\xe8\x0c\xd8\x55\xe9\x25\xcc\xb5\x80\xfd" + "\x53\x00\xea\x0c\xcc\xb5\x80\xc4\xb0\x81\xcc\xb6\x80\xc4\x94\x81" + "\xdc\xb4\x80\xf8\xe0\x00\x10\xa0\xf5\x10\x01\xf5\x10\x02\xf5\x10" + "\x03\xfe\xcc\xda\xfc\xf7\x00\xfe\xff\xc4\xda\xfc\xcc\x44\xfc\xf7" + "\x00\xfe\xff\xc4\x44\xfc\xf2\x7c\xd0\x04\xcc\x5b\x80\xd8\x01\xe9" + "\x02\x7c\x04\xf4\x75\x13\xd1\x40\x51\x20\x71\x34\xf4\x7d\xc1\x85" + "\x08\xe9\x1b\x80\x00\xcd\xda\xfc\xd8\x00\xe9\x06\xf7\x01\xf7\xff" + "\xea\x03\xf5\x09\x08\xc5\xda\xfc\xf4\x75\x7c\xd1\x40\x14\xfe\x80" + "\x01\xea\xe2\xf7\x10\xff\xf7\x21\xf4\x79\x00\xf0\x00\xe9\x0e\x80" + "\x00\xf4\xc9\x7c\xd1\x40\xd9\x00\xe8\x03\xf5\x10\x09\x21\xd9\x06" + "\xe9\x0f\x61\x06\xf4\xc8\x7c\xd1\x40\xd8\x00\xe8\x02\xd5\x06\x41" + "\x06\xf4\xe0\xed\xdc\xc7\xcc\xda\xfc\xf7\x00\xfd\xff\xc4\xda\xfc" + "\xcc\x44\xfc\xf7\x00\xfe\xff\xc4\x44\xfc\xf2\x7c\xd0\x04\xcc\x5b" + "\x80\xd8\x01\xe9\x02\x7c\x04\xf4\x75\x6f\xd1\x40\x51\x20\xfe\xa0" + "\xf4\xe0\x18\xd7\xc7\x00\x00\x00\x74\x0a\x08\x00\x01\x00\x00\x00" "" ; -const int drive_20020402_firmware_size = 288; +const int drive_20020402_firmware_size = 384; Index: drive_20020823.h =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/block/gcn-di/drive_20020823.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- drive_20020823.h 17 May 2005 20:59:19 -0000 1.1 +++ drive_20020823.h 31 May 2005 18:33:42 -0000 1.2 @@ -4,21 +4,27 @@ "\xe1\x13\x5f\xc7\xdc\x6e\x80\xa0\xf8\xb6\x01\xf4\xe1\x29\x5f\xc7" "\xf4\x74\x47\xd0\x40\xf7\x20\x4c\x80\xf4\x74\x28\xa8\x08\xf7\x20" "\xd6\xfc\xf4\x74\x75\xae\x08\xf7\x20\xd2\xfc\x80\x0c\xc4\xda\xfc" - "\xf4\x74\xd9\xd4\x08\xf0\x00\xc8\xda\xfc\xf5\x00\x01\xe9\x22\xc8" - "\xda\xfc\xf5\x00\x02\xe8\x03\xfc\x8e\x00\xf4\x74\xf5\xec\x40\x80" - "\x02\xf0\x20\xc8\x80\x80\xc0\x98\x81\xf4\xd0\x18\xd1\x40\xf0\x01" - "\xfe\xcc\xda\xfc\xf7\x00\xfe\xff\xc4\xda\xfc\xcc\x44\xfc\xf7\x00" - "\xfe\xff\xc4\x44\xfc\xf2\x7c\xd0\x04\xcc\x5b\x80\xd8\x01\xe9\x02" - "\x7c\x04\xf4\x75\xb5\xd0\x40\x51\x20\x71\x34\xf4\x7d\xc1\x85\x08" - "\xe9\x12\xf4\x75\x1c\xd1\x40\x80\x01\x14\xcc\xda\xfc\xf7\x00\xf7" - "\xff\xc4\xda\xfc\xfe\xf7\x10\xff\xf7\x21\xf4\x79\x00\xf0\x00\xe9" - "\x0e\x80\x00\xf4\xc9\x1c\xd1\x40\xd9\x00\xe9\x03\xf5\x10\x09\x21" - "\xd9\x06\xe9\x0f\x61\x06\xf4\xc8\x1c\xd1\x40\xd8\x00\xe9\x02\xd5" - "\x06\x41\x06\xf4\xe0\x98\xdd\xc7\xcc\xda\xfc\xf7\x00\xfd\xff\xc4" - "\xda\xfc\xcc\x44\xfc\xf7\x00\xfe\xff\xc4\x44\xfc\xf2\x7c\xd0\x04" - "\xcc\x5b\x80\xd8\x01\xe9\x02\x7c\x04\xf4\x75\x11\xd1\x40\x51\x20" - "\xfe\xa0\xf4\xe0\xc3\xd7\xc7\x00\x74\x0a\x08\x00\x00\x00\x00\x00" + "\xf4\x74\xd9\xd4\x08\xf0\x00\xc8\xda\xfc\xf5\x00\x01\xe9\x73\xc8" + "\xda\xfc\xf5\x00\x02\xe8\x03\xfc\xec\x00\xf4\x74\xf5\xec\x40\x80" + "\x02\xf0\x20\xc8\x80\x80\xc0\x98\x81\xdc\xb0\x80\xf5\x30\x00\xf4" + "\x44\x7d\xd1\x40\xf8\xaa\x00\x10\xf4\xd0\x78\xd1\x40\xf0\x01\xdc" + "\xb0\x80\xf5\x30\x00\xf7\x48\xaa\x00\xe9\x07\xf4\xc4\x7d\xd1\x40" + "\x10\xfe\xf7\x48\xee\x00\xe8\x0c\xd8\x55\xe9\x25\xcc\xb1\x80\xfd" + "\x53\x00\xea\x0c\xcc\xb1\x80\xc4\xac\x81\xcc\xb2\x80\xc4\x90\x81" + "\xdc\xb0\x80\xf8\xe0\x00\x10\xa0\xf5\x10\x01\xf5\x10\x02\xf5\x10" + "\x03\xfe\xcc\xda\xfc\xf7\x00\xfe\xff\xc4\xda\xfc\xcc\x44\xfc\xf7" + "\x00\xfe\xff\xc4\x44\xfc\xf2\x7c\xd0\x04\xcc\x5b\x80\xd8\x01\xe9" + "\x02\x7c\x04\xf4\x75\x13\xd1\x40\x51\x20\x71\x34\xf4\x7d\xc1\x85" + "\x08\xe9\x1b\x80\x00\xcd\xda\xfc\xd8\x00\xe9\x06\xf7\x01\xf7\xff" + "\xea\x03\xf5\x09\x08\xc5\xda\xfc\xf4\x75\x7c\xd1\x40\x14\xfe\x80" + "\x01\xea\xe2\xf7\x10\xff\xf7\x21\xf4\x79\x00\xf0\x00\xe9\x0e\x80" + "\x00\xf4\xc9\x7c\xd1\x40\xd9\x00\xe8\x03\xf5\x10\x09\x21\xd9\x06" + "\xe9\x0f\x61\x06\xf4\xc8\x7c\xd1\x40\xd8\x00\xe8\x02\xd5\x06\x41" + "\x06\xf4\xe0\x3a\xdd\xc7\xcc\xda\xfc\xf7\x00\xfd\xff\xc4\xda\xfc" + "\xcc\x44\xfc\xf7\x00\xfe\xff\xc4\x44\xfc\xf2\x7c\xd0\x04\xcc\x5b" + "\x80\xd8\x01\xe9\x02\x7c\x04\xf4\x75\x6f\xd1\x40\x51\x20\xfe\xa0" + "\xf4\xe0\x65\xd7\xc7\x00\x00\x00\x74\x0a\x08\x00\x01\x00\x00\x00" "" ; -const int drive_20020823_firmware_size = 288; +const int drive_20020823_firmware_size = 384; Index: drive_all.S =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/block/gcn-di/drive_all.S,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- drive_all.S 17 May 2005 20:08:38 -0000 1.1 +++ drive_all.S 31 May 2005 18:33:42 -0000 1.2 @@ -33,11 +33,22 @@ .equ irq_handler_vector, 0x804c /* 04, 06, 08 */ .equ irq_depth, 0x805b /* 04, 06, 08 */ +.equ fake_command, 0xaa +.equ set_drive_status_command, 0xee /* same as in gcn-di.c */ +.equ enable_extensions_command, 0x55 /* same as in gcn-di.c */ + +.equ get_drive_status_command, 0xe0 + #if DRIVE_MODEL == 0x20020402 /* 04 */ + .equ cmdbuf0, 0x80b4 + .equ drive_status, 0x81b0 + .equ drive_status2, 0x8194 - .equ dicmdbuf0, 0x80b4 + .equ bert, 0x8084 + .equ ernie, 0x819c + .equ cactus, 0x40ecf9 .equ entry_return_address, 0x08d47e @@ -48,11 +59,6 @@ .equ bss, 0x00806e .equ bss_size, 0x1b8 - .equ cactus, 0x40ecf9 - - .equ bert, 0x8084 - .equ ernie, 0x819c - .section absolute .org 0x0808aa /* 04, 06, 08 */ @@ -77,8 +83,13 @@ #elif DRIVE_MODEL == 0x20010608 /* 06 */ + .equ cmdbuf0, 0x80a8 + .equ drive_status, 0x81a4 + .equ drive_status2, 0x8188 - .equ dicmdbuf0, 0x80a8 + .equ bert, 0x8078 + .equ ernie, 0x8190 + .equ cactus, 0x40ed02 .equ entry_return_address, 0x08d41e @@ -89,11 +100,6 @@ .equ bss, 0x00806e .equ bss_size, 0x1ac - .equ cactus, 0x40ed02 - - .equ bert, 0x8078 - .equ ernie, 0x8190 - .section absolute .org 0x0808aa /* 04, 06, 08 */ @@ -118,8 +124,13 @@ #elif DRIVE_MODEL == 0x20020823 /* 08 */ + .equ cmdbuf0, 0x80b0 + .equ drive_status, 0x81ac + .equ drive_status2, 0x8190 - .equ dicmdbuf0, 0x80b0 + .equ bert, 0x8080 + .equ ernie, 0x8198 + .equ cactus, 0x40ecf5 .equ entry_return_address, 0x08d4d9 @@ -130,11 +141,6 @@ .equ bss, 0x00806e .equ bss_size, 0x1b6 - .equ cactus, 0x40ecf5 - - .equ bert, 0x8080 - .equ ernie, 0x8198 - .section absolute .org 0x0808aa /* 04, 06, 08 */ @@ -193,16 +199,15 @@ mov our_irq_handler, a0 mov a0, (irq_handler_vector) - /* setup our extending functions ... */ + /* setup our extending functions */ mov adb1_break_address, a0 mov a0, (ADB1) mov adb0_break_address, a0 mov a0, (ADB0) - - /* ... and enable them */ mov ADB1ON|ADB0ON, d0 movb d0, (ADBCTL) + /* return to the original firmware */ mov entry_return_address, a0 jmp (a0) @@ -226,12 +231,74 @@ mov (bert), d0 mov d0, (ernie) + /* save current command ... */ + mov cmdbuf0, a0 + movbu (0, a0), d0 + movb d0, (saved_cmdbuf0) + + /* ... and place a temporary fake command, to detect new commands */ + mov fake_command, d0 + movb d0, (a0) + /* call the original handler */ mov (saved_irq_handler), a0 jsr (a0) + /* if our fake command changed, we assume a new command has arrived */ + mov cmdbuf0, a0 + movbu (0, a0), d0 + cmp fake_command, d0 + bne extra_command_parser + + /* if there is no new command, restore the previously saved command */ + movb (saved_cmdbuf0), d0 + movb d0, (a0) + + rts + +extra_command_parser: + /* "set drive status" command */ + cmp set_drive_status_command, d0 + beq set_drive_status + + /* "enable extensions" command */ + cmp enable_extensions_command, d0 + bne done + +enable_or_disable_extensions: + /* 0x55, enable, 0x00, 0x00 */ + /* 1=enable, otherwise=disable */ + movbu (cmdbuf0+1), d0 + jsr di_enable_or_disable_extensions + jmp get_drive_status + +set_drive_status: + /* 0xee, drive_status, drive_status2, 0x00 */ + movbu (cmdbuf0+1), d0 + movb d0, (drive_status) + movbu (cmdbuf0+2), d0 + movb d0, (drive_status2) + +get_drive_status: + /* + * This saves us an invalid command error and updates the status + * accordingly. In fact, our extended command becomes a "get status" + * command. + */ + mov cmdbuf0, a0 + mov get_drive_status_command, d0 + movb d0, (a0) + sub d0, d0 + movb d0, (1,a0) + movb d0, (2,a0) + movb d0, (3,a0) + +done: rts + + + /* * This is how the stacks look like when our interrupt handler is called. * @@ -301,19 +368,32 @@ /* 0x20 + 0x10 + 0x04 = 0x34 */ mov (0x34, a0), a1 cmp disable_extensions_when_called_from, a1 - bne 1f + bne 3f /* else, do nothing */ di_disable_extensions: - mov disable_extensions, a1 - mov 1, d0 - movb d0, (a1) - movbu (ADBCTL), d0 - and ~ADB1ON, d0 - movb d0, (ADBCTL) + mov 0, d0 +di_enable_or_disable_extensions: + movbu (ADBCTL), d1 + cmp 0, d0 + bne 1f + and ~ADB1ON, d1 + jmp 2f 1: + or ADB1ON, d1 +2: + movb d1, (ADBCTL) + + mov enable_extensions, a1 + movb d0, (a1) + +3: rts +di_enable_extensions: + mov 1, d0 + jmp di_enable_or_disable_extensions + adb0_fixup: /* disable interrupts */ @@ -324,9 +404,9 @@ cmp 0x00f000, d1 bne 1f mov 0x00, d0 - movbu (disable_extensions), d1 + movbu (enable_extensions), d1 cmp 0, d1 - bne 1f + beq 1f movb d0, (0x09, a0) 1: /* skip the extra field */ @@ -334,9 +414,9 @@ cmp 0x06, d1 bne 1f mov (0x06, a0), d1 - movbu (disable_extensions), d0 + movbu (enable_extensions), d0 cmp 0, d0 - bne 2f + beq 2f add 6, d1 2: mov d1, (0x06, a0) @@ -381,7 +461,9 @@ .align 2 saved_irq_handler: .long 0x00080A74 /* 04, 06, 08 */ -disable_extensions: +enable_extensions: + .byte 0x01 +saved_cmdbuf0: .byte 0x00 _exit: Index: gcn-di.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/block/gcn-di/gcn-di.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- gcn-di.c 17 May 2005 20:08:38 -0000 1.2 +++ gcn-di.c 31 May 2005 18:33:42 -0000 1.3 @@ -19,6 +19,7 @@ #include <linux/init.h> #include <linux/interrupt.h> #include <linux/dma-mapping.h> +#include <linux/timer.h> #include <linux/delay.h> #include <linux/proc_fs.h> #include <linux/seq_file.h> @@ -29,13 +30,13 @@ #include <asm/io.h> [...1384 lines suppressed...] out: return retval; } /* - * Relinquishes control of the haardware. + * Relinquishes control of the hardware. */ static void di_exit_irq(struct di_device *ddev) { - struct di_command cmd; - /* stop DVD motor */ - di_op_stopmotor(&cmd, ddev); - di_run_command_and_wait(&cmd); + di_cancel_motor_off(ddev); + di_spin_down_drive(ddev); di_quiesce(ddev); |