2 Copyright © 1995-2013, The AROS Development Team. All rights reserved.
7 #include <proto/exec.h>
8 #include <exec/memory.h>
10 #include "partition_intern.h"
11 #include "partition_support.h"
14 /*****************************************************************************
17 AROS_LH2(struct PartitionHandle
*, OpenRootPartition
,
20 AROS_LHA(CONST_STRPTR
, Device
, A1
),
21 AROS_LHA(LONG
, Unit
, D1
),
24 struct Library
*, PartitionBase
, 5, Partition
)
27 Create a root handle by opening a trackdisk-compatible device.
30 Device - name of the block device
31 Unit - unit of the block device
46 *****************************************************************************/
50 struct PartitionHandle
*ph
;
55 ph
= AllocMem(sizeof(struct PartitionHandle
), MEMF_PUBLIC
| MEMF_CLEAR
);
58 ph
->bd
= AllocMem(sizeof(struct PartitionBlockDevice
), MEMF_PUBLIC
);
61 ph
->bd
->cmdread
= CMD_READ
;
62 ph
->bd
->cmdwrite
= CMD_WRITE
;
63 ph
->bd
->port
= CreateMsgPort();
66 ph
->bd
->ioreq
= (struct IOExtTD
*)CreateIORequest(ph
->bd
->port
, sizeof(struct IOExtTD
));
69 if (OpenDevice(Device
, Unit
, (struct IORequest
*)ph
->bd
->ioreq
, 0)==0)
71 if (getGeometry(PartitionBase
, ph
->bd
->ioreq
, &ph
->dg
)==0)
73 if (ph
->dg
.dg_DeviceType
!= DG_CDROM
)
75 ph
->de
.de_SizeBlock
= ph
->dg
.dg_SectorSize
>>2;
76 ph
->de
.de_Surfaces
= ph
->dg
.dg_Heads
;
77 ph
->de
.de_BlocksPerTrack
= ph
->dg
.dg_TrackSectors
;
78 ph
->de
.de_HighCyl
= ph
->dg
.dg_Cylinders
-1;
79 ph
->de
.de_BufMemType
= ph
->dg
.dg_BufMemType
;
81 /* The following are common defaults */
82 ph
->de
.de_TableSize
= DE_BUFMEMTYPE
;
83 ph
->de
.de_SectorPerBlock
= 1;
84 ph
->de
.de_NumBuffers
= 20;
86 PartitionNsdCheck(PartitionBase
, ph
);
90 CloseDevice((struct IORequest
*)ph
->bd
->ioreq
);
92 DeleteIORequest((struct IORequest
*)ph
->bd
->ioreq
);
94 DeleteMsgPort(ph
->bd
->port
);
96 FreeMem(ph
->bd
, sizeof(struct PartitionBlockDevice
));
98 FreeMem(ph
, sizeof(struct PartitionHandle
));