2 Copyright © 1995-2017, The AROS Development Team. All rights reserved.
6 #include <aros/libcall.h>
7 #include <proto/exec.h>
9 #include "partition_intern.h"
10 #include "partition_support.h"
12 /*****************************************************************************
15 AROS_LH3QUAD1(LONG
, WritePartitionDataQ
,
18 AROS_LHA(struct PartitionHandle
*, Partition
, A0
),
19 AROS_LHA(APTR
, Buffer
, A1
),
20 AROS_LHA(ULONG
, DataSize
, D0
),
21 AROS_LHAQUAD(UQUAD
, StartBlock
, D1
, D2
),
24 struct Library
*, PartitionBase
, 26, Partition
)
27 Write raw data to the partition.
30 Partition - a handle to a partition to read from
31 Buffer - a pointer to a data buffer
32 DataSize - Size of data to read in bytes. This size must be a
33 multiple of block size in order to ensure correct
35 StartBlock - Number of the first block to start writing from.
38 Return code of DoIO() function which was used to write the data.
50 *****************************************************************************/
54 UQUAD offset
= (getStartBlock(Partition
) + StartBlock
) * (Partition
->de
.de_SizeBlock
<< 2);
55 struct IOExtTD
*ioreq
= Partition
->bd
->ioreq
;
57 ioreq
->iotd_Req
.io_Command
= Partition
->bd
->cmdwrite
;
58 ioreq
->iotd_Req
.io_Length
= DataSize
;
59 ioreq
->iotd_Req
.io_Data
= Buffer
;
60 ioreq
->iotd_Req
.io_Offset
= offset
;
61 ioreq
->iotd_Req
.io_Actual
= offset
>> 32;
63 return DoIO((struct IORequest
*)ioreq
);