* include/grub/ata.h (grub_ata): Add a new element maxbuffer.
* grub-core/disk/ata.c (grub_ata_readwrite): Limit to ata->maxbuffer. * grub-core/disk/pata.c (grub_pata_open): Set ata->maxbuffer. * grub-core/disk/ahci.c (grub_ahci_open): Likewise.
This commit is contained in:
parent
74310bd8a7
commit
2b5336a24a
5 changed files with 16 additions and 2 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2012-01-29 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* include/grub/ata.h (grub_ata): Add a new element maxbuffer.
|
||||||
|
* grub-core/disk/ata.c (grub_ata_readwrite): Limit to ata->maxbuffer.
|
||||||
|
* grub-core/disk/pata.c (grub_pata_open): Set ata->maxbuffer.
|
||||||
|
* grub-core/disk/ahci.c (grub_ahci_open): Likewise.
|
||||||
|
|
||||||
2012-01-29 Vladimir Serbinenko <phcoder@gmail.com>
|
2012-01-29 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
* include/grub/zfs/dnode.h (DN_MIN_INDBLKSHIFT): Removed.
|
* include/grub/zfs/dnode.h (DN_MIN_INDBLKSHIFT): Removed.
|
||||||
|
|
|
@ -693,6 +693,7 @@ grub_ahci_open (int id, int devnum, struct grub_ata *ata)
|
||||||
|
|
||||||
ata->data = dev;
|
ata->data = dev;
|
||||||
ata->dma = 1;
|
ata->dma = 1;
|
||||||
|
ata->maxbuffer = GRUB_AHCI_PRDT_MAX_CHUNK_LENGTH;
|
||||||
ata->present = &dev->present;
|
ata->present = &dev->present;
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
|
|
|
@ -278,6 +278,7 @@ grub_ata_readwrite (grub_disk_t disk, grub_disk_addr_t sector,
|
||||||
grub_ata_addressing_t addressing = ata->addr;
|
grub_ata_addressing_t addressing = ata->addr;
|
||||||
grub_size_t batch;
|
grub_size_t batch;
|
||||||
int cmd, cmd_write;
|
int cmd, cmd_write;
|
||||||
|
grub_size_t nsectors = 0;
|
||||||
|
|
||||||
grub_dprintf("ata", "grub_ata_readwrite (size=%llu, rw=%d)\n",
|
grub_dprintf("ata", "grub_ata_readwrite (size=%llu, rw=%d)\n",
|
||||||
(unsigned long long) size, rw);
|
(unsigned long long) size, rw);
|
||||||
|
@ -314,9 +315,11 @@ grub_ata_readwrite (grub_disk_t disk, grub_disk_addr_t sector,
|
||||||
cmd = GRUB_ATA_CMD_READ_SECTORS;
|
cmd = GRUB_ATA_CMD_READ_SECTORS;
|
||||||
cmd_write = GRUB_ATA_CMD_WRITE_SECTORS;
|
cmd_write = GRUB_ATA_CMD_WRITE_SECTORS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (batch > (ata->maxbuffer >> ata->log_sector_size))
|
||||||
|
batch = (ata->maxbuffer >> ata->log_sector_size);
|
||||||
|
|
||||||
grub_size_t nsectors = 0;
|
|
||||||
while (nsectors < size)
|
while (nsectors < size)
|
||||||
{
|
{
|
||||||
struct grub_disk_ata_pass_through_parms parms;
|
struct grub_disk_ata_pass_through_parms parms;
|
||||||
|
|
|
@ -484,6 +484,7 @@ grub_pata_open (int id, int devnum, struct grub_ata *ata)
|
||||||
|
|
||||||
ata->data = devfnd;
|
ata->data = devfnd;
|
||||||
ata->dma = 0;
|
ata->dma = 0;
|
||||||
|
ata->maxbuffer = 256 * 512;
|
||||||
ata->present = &devfnd->present;
|
ata->present = &devfnd->present;
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
|
|
|
@ -182,6 +182,8 @@ struct grub_ata
|
||||||
|
|
||||||
int dma;
|
int dma;
|
||||||
|
|
||||||
|
grub_size_t maxbuffer;
|
||||||
|
|
||||||
int *present;
|
int *present;
|
||||||
|
|
||||||
void *data;
|
void *data;
|
||||||
|
|
Loading…
Reference in a new issue