Commit 1d8cde5beb2ec5178ea08b131a97ed948d291a78

Authored by aurel32
1 parent 6ae20372

IDE: Improve DMA transfers by increasing the buffer size

(Ian Jackson)


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4132 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 13 additions and 7 deletions
hw/ide.c
@@ -202,6 +202,12 @@ @@ -202,6 +202,12 @@
202 /* set to 1 set disable mult support */ 202 /* set to 1 set disable mult support */
203 #define MAX_MULT_SECTORS 16 203 #define MAX_MULT_SECTORS 16
204 204
  205 +#define IDE_DMA_BUF_SECTORS 256
  206 +
  207 +#if (IDE_DMA_BUF_SECTORS < MAX_MULT_SECTORS)
  208 +#error "IDE_DMA_BUF_SECTORS must be bigger or equal to MAX_MULT_SECTORS"
  209 +#endif
  210 +
205 /* ATAPI defines */ 211 /* ATAPI defines */
206 212
207 #define ATAPI_PACKET_SIZE 12 213 #define ATAPI_PACKET_SIZE 12
@@ -899,8 +905,8 @@ static void ide_read_dma_cb(void *opaque, int ret) @@ -899,8 +905,8 @@ static void ide_read_dma_cb(void *opaque, int ret)
899 905
900 /* launch next transfer */ 906 /* launch next transfer */
901 n = s->nsector; 907 n = s->nsector;
902 - if (n > MAX_MULT_SECTORS)  
903 - n = MAX_MULT_SECTORS; 908 + if (n > IDE_DMA_BUF_SECTORS)
  909 + n = IDE_DMA_BUF_SECTORS;
904 s->io_buffer_index = 0; 910 s->io_buffer_index = 0;
905 s->io_buffer_size = n * 512; 911 s->io_buffer_size = n * 512;
906 #ifdef DEBUG_AIO 912 #ifdef DEBUG_AIO
@@ -998,8 +1004,8 @@ static void ide_write_dma_cb(void *opaque, int ret) @@ -998,8 +1004,8 @@ static void ide_write_dma_cb(void *opaque, int ret)
998 1004
999 /* launch next transfer */ 1005 /* launch next transfer */
1000 n = s->nsector; 1006 n = s->nsector;
1001 - if (n > MAX_MULT_SECTORS)  
1002 - n = MAX_MULT_SECTORS; 1007 + if (n > IDE_DMA_BUF_SECTORS)
  1008 + n = IDE_DMA_BUF_SECTORS;
1003 s->io_buffer_index = 0; 1009 s->io_buffer_index = 0;
1004 s->io_buffer_size = n * 512; 1010 s->io_buffer_size = n * 512;
1005 1011
@@ -1293,8 +1299,8 @@ static void ide_atapi_cmd_read_dma_cb(void *opaque, int ret) @@ -1293,8 +1299,8 @@ static void ide_atapi_cmd_read_dma_cb(void *opaque, int ret)
1293 data_offset = 16; 1299 data_offset = 16;
1294 } else { 1300 } else {
1295 n = s->packet_transfer_size >> 11; 1301 n = s->packet_transfer_size >> 11;
1296 - if (n > (MAX_MULT_SECTORS / 4))  
1297 - n = (MAX_MULT_SECTORS / 4); 1302 + if (n > (IDE_DMA_BUF_SECTORS / 4))
  1303 + n = (IDE_DMA_BUF_SECTORS / 4);
1298 s->io_buffer_size = n * 2048; 1304 s->io_buffer_size = n * 2048;
1299 data_offset = 0; 1305 data_offset = 0;
1300 } 1306 }
@@ -2524,7 +2530,7 @@ static void ide_init2(IDEState *ide_state, @@ -2524,7 +2530,7 @@ static void ide_init2(IDEState *ide_state,
2524 2530
2525 for(i = 0; i < 2; i++) { 2531 for(i = 0; i < 2; i++) {
2526 s = ide_state + i; 2532 s = ide_state + i;
2527 - s->io_buffer = qemu_memalign(512, MAX_MULT_SECTORS*512 + 4); 2533 + s->io_buffer = qemu_memalign(512, IDE_DMA_BUF_SECTORS*512 + 4);
2528 if (i == 0) 2534 if (i == 0)
2529 s->bs = hd0; 2535 s->bs = hd0;
2530 else 2536 else